| name | lark-mcp |
| description | 集成飞书/Feishu 服务,操作多维表格、文档、消息、群组等。当用户提到飞书、Feishu、Lark 或需要操作飞书相关功能时使用。 |
Lark MCP (飞书集成)
⚠️ 必读:前5条关键规则 + 重要经验
重要经验:使用用户身份创建资源
# ⭐ 关键:使用 useUAT: true 创建用户可访问的资源
useUAT: true # ✅ 用户身份 - 创建者=当前用户,您可以直接访问
useUAT: false # ❌ 租户身份 - 创建者=飞书助手,您无法直接访问
经验总结(来自实际测试):
- Bitable 创建权限问题 - 使用 useUAT: false 创建的 Base,创建者是"飞书助手",当前用户无法访问
- 外部邮箱权限限制 - 通过 API 添加外部邮箱权限会失败(错误码 1063001)
- 解决方案 - 使用 useUAT: true 创建资源,创建者自动获得 full_access 权限
- 文档权限 - 同样适用,使用用户身份创建文档
1. 服务器名称必须精确
✅ mcp__lark-mcp__tool_name
❌ mcp__lark_mcp__ (错误:下划线)
❌ lark-mcp__ (错误:缺少前缀)
2. 嵌套参数结构
path: # URL路径参数(必需)
app_token: ...
table_id: ...
params: # URL查询参数(可选)
user_id_type: "open_id"
data: # 请求体(可选)
fields: {...}
useUAT: false # 默认使用租户token
3. 消息 content 必须是字符串
❌ content: {"text": "hello"}
✅ content: '{"text": "hello"}'
4. 过滤条件 value 必须是数组
❌ value: "已完成"
✅ value: ["已完成"]
5. ID 类型不能混淆
open_id - 用户ID(推荐)
chat_id - 群聊ID
app_token - 表格应用ID
table_id - 表格ID
record_id - 记录ID
快速开始
示例1:查询多维表格记录
工具: mcp__lark-mcp__bitable_v1_appTableRecord_search
path:
app_token: "your_app_token" # 需要替换为实际的 Base 应用 ID(从 URL 获取)
table_id: "your_table_id" # 需要替换为实际的表格 ID(从 URL 获取)
params:
page_size: 20
data:
filter:
conjunction: "and"
conditions:
- field_name: "状态"
operator: "is"
value: ["已完成"]
示例2:发送文本消息到群组
工具: mcp__lark-mcp__im_v1_message_create
data:
receive_id: "oc_xxxxx" # 需要替换为实际的群组 chat_id
msg_type: "text"
content: '{"text": "消息内容"}'
params:
receive_id_type: "chat_id"
示例3:搜索文档
工具: mcp__lark-mcp__docx_builtin_search
data:
search_key: "关键词"
count: 10
useUAT: true
工具分类
多维表格 (Bitable)
bitable_v1_app_create- 创建 Base 应用bitable_v1_appTable_list- 列出所有表格bitable_v1_appTable_create- 创建新表格bitable_v1_appTableField_list- 获取字段列表bitable_v1_appTableRecord_search- 查询记录bitable_v1_appTableRecord_create- 创建记录bitable_v1_appTableRecord_update- 更新记录
详细指南:reference/bitable.md
消息 (Messages)
im_v1_message_create- 发送消息im_v1_message_list- 获取聊天历史im_v1_chat_create- 创建群组im_v1_chat_list- 获取群组列表im_v1_chatMembers_get- 获取群成员
文档 (Documents)
docx_builtin_search- 搜索文档docx_builtin_import- 导入文档docx_v1_document_rawContent- 获取文档内容
群组 (Groups)
im_v1_chat_create- 创建群组im_v1_chatMembers_get- 获取成员列表im_v1_chat_list- 获取群组列表
详细指南:reference/groups.md
权限 (Permissions)
drive_v1_permissionMember_create- 添加协作者权限
联系人 (Contacts)
contact_v3_user_batchGetId- 通过邮箱/手机号获取用户ID
Wiki (知识库)
wiki_v1_node_search- 搜索 Wiki 节点wiki_v2_space_getNode- 获取节点信息
认证说明
Token 类型
- useUAT: true - 用户访问令牌(用户操作)
- useUAT: false - 租户访问令牌(后台操作,默认)
获取 ID
从 URL 获取:
https://xxx.feishu.cn/base/appxxxxx?table=tblxxxxx
↑app_token ↑table_id
获取用户 open_id:
工具: mcp__lark-mcp__contact_v3_user_batchGetId
data:
emails: ["user@example.com"] # 需要替换为实际的用户邮箱
params:
user_id_type: "open_id"
user_id_type 参数
始终使用 "open_id"(最通用,推荐)。
可选值:"open_id" | "union_id" | "user_id"
核心工作流
工作流1:创建多维表格并添加记录(用户可访问版本)
任务进度:
- [ ] 步骤1: 创建 Base 应用(⭐ useUAT: true)
- [ ] 步骤2: 创建表格和字段
- [ ] 步骤3: 插入记录
- [ ] 步骤4: 验证数据
步骤1: 创建 Base 应用
工具: mcp__lark-mcp__bitable_v1_app_create
data:
name: "项目管理" # 可以修改为您需要的名称
time_zone: "Asia/Shanghai"
useUAT: true # ⭐ 重要:使用用户身份,确保您可以直接访问
步骤2: 创建表格和字段
工具: mcp__lark-mcp__bitable_v1_appTable_create
path:
app_token: "bascnxxxxxx" # 需要替换为步骤1返回的实际 app_token
data:
table:
name: "表格名称"
default_view_name: "默认视图"
fields:
- field_name: "姓名"
ui_type: "Text"
- field_name: "年龄"
ui_type: "Number"
- field_name: "状态"
ui_type: "SingleSelect"
property:
options:
- name: "进行中"
- name: "已完成"
注意: 创建成功后,响应中会返回 table_id,保存它用于下一步。
步骤3: 插入记录
工具: mcp__lark-mcp__bitable_v1_appTableRecord_create
path:
app_token: "bascnxxxxxx" # 需要替换为步骤1返回的实际值
table_id: "tblxxxxxx" # 需要替换为步骤2返回的实际值
data:
fields:
姓名: "张三"
年龄: 25
状态: "进行中"
步骤4: 验证数据
工具: mcp__lark-mcp__bitable_v1_appTableRecord_search
path:
app_token: "bascnxxxxxx" # 需要替换为实际的 app_token
table_id: "tblxxxxxx" # 需要替换为实际的 table_id
params:
page_size: 10
工作流2:查询表格并发送消息
任务进度:
- [ ] 步骤1: 查询表格数据
- [ ] 步骤2: 处理查询结果
- [ ] 步骤3: 构造消息
- [ ] 步骤4: 发送到群组
步骤1: 查询数据
工具: mcp__lark-mcp__bitable_v1_appTableRecord_search
path:
app_token: "bascnxxxxxx" # 需要替换为实际的 app_token
table_id: "tblxxxxxx" # 需要替换为实际的 table_id
params:
page_size: 10
data:
filter:
conjunction: "and"
conditions:
- field_name: "状态"
operator: "is"
value: ["待处理"]
步骤2: 处理查询结果
查询成功后,响应中包含 data.items 数组,每项包含记录的 fields。
# 响应结构示例
data:
items:
- record_id: "recxxxx"
fields:
任务名称: "完成文档"
状态: "待处理"
步骤3: 构造消息
根据查询结果构造消息内容:
# 示例:构造文本消息
message = "找到 " + items.length + " 个待处理任务:\n"
for each item in items:
message += "- " + item.fields["任务名称"] + "\n"
步骤4: 发送消息
工具: mcp__lark-mcp__im_v1_message_create
data:
receive_id: "oc_xxxxx" # 需要替换为实际的群组 chat_id
msg_type: "text"
content: '{"text": "处理结果:..."}'
params:
receive_id_type: "chat_id"
工作流3:搜索文档并获取内容
任务进度:
- [ ] 步骤1: 搜索文档
- [ ] 步骤2: 获取 document_id
- [ ] 步骤3: 提取文档内容
- [ ] 步骤4: 处理文本
步骤1: 搜索
工具: mcp__lark-mcp__docx_builtin_search
data:
search_key: "项目报告"
count: 10
useUAT: true
步骤2: 获取 document_id
搜索成功后,从响应中提取第一个文档的 document_id:
# 响应结构示例
data:
items:
- document_id: "doxcnxxxxxx" # ← 保存这个
title: "项目报告"
...
步骤3: 获取内容
工具: mcp__lark-mcp__docx_v1_document_rawContent
path:
document_id: "doxcnxxxxxx" # 需要替换为步骤2获取的实际 document_id
params:
lang: 0
useUAT: true
常见错误排查
错误1: "tool not found"
原因: 服务器名称拼写错误
解决: 确保使用 mcp__lark-mcp__ 前缀(注意连字符)
错误2: "invalid request"
原因: 参数嵌套错误 解决: 检查 path/params/data 层级,path 参数通常必需
错误3: "field not found"
原因: 字段名错误或 ID 类型错误 解决:
- 确认
field_name与表格字段名完全一致 - 确认使用正确的 ID 类型(app_token vs table_id)
错误4: "permission denied"
原因: 权限不足或 token 类型错误 解决:
- 检查应用是否有该资源的访问权限
- 用户操作使用
useUAT: true - 后台操作使用
useUAT: false
错误5: 消息发送失败
原因: content 格式错误或 receive_id_type 错误 解决:
- content 必须是 JSON 字符串,不是对象
- 发送到群组使用
receive_id_type: "chat_id" - 发送到用户使用
receive_id_type: "open_id"
参数校验清单
使用前检查:
- 服务器名称:
mcp__lark-mcp__tool_name - path 参数必需且正确(app_token, table_id, record_id 等)
- content 是 JSON 字符串(消息相关)
- value 是数组(过滤条件)
- 枚举值精确匹配(user_id_type, operator 等)
- ID 类型正确(open_id vs chat_id vs app_token)
- useUAT 设置正确(用户 true,后台 false)
实践中遇到的问题
问题1: 创建的 Base 无法访问
现象:
- 使用
useUAT: false创建 Base 应用 - 创建者显示为"飞书助手"
- 当前用户无法直接访问,权限受限
解决方案:
useUAT: true # ✅ 用户身份 - 创建者=当前用户,可直接访问
useUAT: false # ❌ 租户身份 - 需要额外设置权限
问题2: API 添加权限失败
现象:
- 通过
drive_v1_permissionMember_create添加邮箱权限 - 错误码:1063001 (Invalid parameter)
- 无法通过 API 授予外部用户访问权限
根本原因:
- 租户身份创建的资源,API 权限添加有限制
- 外部邮箱权限可能不支持通过 API 操作
最佳实践:
- 优先使用用户身份(
useUAT: true)创建资源 - 创建者自动获得
full_access权限 - 避免后续复杂的权限配置
问题3: 字段类型不匹配
现象:
- Bitable 查询时 "field not found"
- 使用了错误的字段 ID 类型
解决方案:
# 从 URL 获取正确的 ID(appxxxxx 和 tblxxxxx 是需要替换的占位符)
https://xxx.feishu.cn/base/appxxxxx?table=tblxxxxx
↑app_token ↑table_id
# 查询前先获取字段列表确认字段名
工具: mcp__lark-mcp__bitable_v1_appTableField_list
问题4: 群主身份问题
现象:
- 使用
useUAT: true创建群组 - 创建者仍显示为应用机器人(app_id)
- 消息发送者
sender_type为 "app",不是 "user"
根本原因:
useUAT: true只是使用用户权限/令牌操作- 系统记录的"创建者"始终是应用本身
- 这是飞书 API 的设计机制
解决方案:
# 必须明确指定 owner_id
工具: mcp__lark-mcp__im_v1_chat_create
data:
owner_id: "ou_xxxxx" # 指定用户为群主
user_id_list: ["ou_xxxxx"]
注意: 不指定 owner_id 时,群主默认为应用机器人。