Dingtalk File Send
自动将文件上传并发送至钉钉用户,基于当前会话账号绑定。
集成飞书多维表格、消息、日历等核心功能的自动化工具。
openclaw skills install @lucascheung/lark-mcp命令、参数、文件名以原文为准
前置条件:使用此技能前,必须先运行官方 Lark MCP 服务器。
安装命令:
npx -y @larksuiteoapi/lark-mcp mcp -a <APP_ID> -s <APP_SECRET>若需使用用户身份相关 API(useUAT),请先执行:
npx -y @larksuiteoapi/lark-mcp login -a <APP_ID> -s <APP_SECRET>启用视频会议 + 会议纪要功能,请添加参数:
-t preset.calendar.default,vc.v1.reserve.apply,vc.v1.meeting.get,vc.v1.meetingRecording.get,minutes.v1.minute.get,minutes.v1.minuteTranscript.get,minutes.v1.minuteStatistic.get完整文档:https://open.larkoffice.com/document/home/index
所有 MCP 工具均以 mcp__lark-mcp__ 为前缀。例如:
mcp__lark-mcp__im.v1.message.create| 参数 | 值 | 含义 |
|---|---|---|
useUAT | true | 以登录用户身份操作 —— 资源归属于该用户,可直接访问 |
useUAT | false(默认) | 以应用/机器人身份操作 —— 资源归属于应用 |
建议大多数交互操作使用 useUAT: true。后台自动化任务可使用 false。
path: # URL 路径参数(ID、令牌)
params: # 查询字符串参数(分页、筛选、id_type)
data: # 请求体数据
useUAT: # true = 用户身份,false = 应用身份| ID | 格式 | 代表内容 |
|---|---|---|
app_token | appXXX | Bitable 应用 |
table_id | tblXXX | Bitable 表格 |
record_id | recXXX | Bitable 记录 |
open_id | ou_XXX | 用户(OpenID) |
union_id | on_XXX | 用户(UnionID,跨应用) |
chat_id | oc_XXX | 群组/私聊会话 |
message_id | om_XXX | 单条消息 |
document_id | doxcXXX | 文档文件 |
file_token | 变化 | 驱动文件 |
node_token | 变化 | Wiki 页面节点 |
event_uid | 变化 | 日历事件 |
task_guid | 变化 | 任务 |
approval_code | 变化 | 审批模板 |
工具:mcp__lark-mcp__im.v1.message.create
params:
receive_id_type: "chat_id" # 或:open_id, union_id, email, user_id
data:
receive_id: "oc_xxx"
msg_type: "text" # text | post | image | interactive | file | audio | media | sticker | share_chat | share_user
content: '{"text":"Hello!"}'
useUAT: true消息类型与内容格式说明:
text:{"text": "Hello @user"}post(富文本):{"zh_cn": {"title": "标题", "content": [[{"tag":"text","text":"正文"}]]}}interactive(卡片):JSON 卡片定义 —— 推荐使用 https://open.larkoffice.com/cardkit 的卡片构建器image:{"image_key": "img_xxx"}(需先通过驱动上传图片)share_chat:{"chat_id": "oc_xxx"}工具:mcp__lark-mcp__im.v1.message.reply
path:
message_id: "om_xxx"
data:
content: '{"text":"收到!"}'
msg_type: "text"
reply_in_thread: false # true = 创建或延续线程
useUAT: true工具:mcp__lark-mcp__im.v1.message.list
params:
container_id_type: "chat"
container_id: "oc_xxx"
page_size: 20
sort_type: "ByCreateTimeDesc"
start_time: "1700000000" # 可选,Unix 时间戳
end_time: "1700100000" # 可选,Unix 时间戳工具:mcp__lark-mcp__im.v1.message.get
path:
message_id: "om_xxx"工具:mcp__lark-mcp__im.v1.message.delete
path:
message_id: "om_xxx"
useUAT: true工具:mcp__lark-mcp__im.v1.message.update
path:
message_id: "om_xxx"
data:
msg_type: "interactive"
content: '{"config":{},"elements":[...]}'
useUAT: true工具:mcp__lark-mcp__im.v1.messageReaction.create
path:
message_id: "om_xxx"
data:
reaction_type:
emoji_type: "THUMBSUP" # THUMBSUP, OK, HEART 等
useUAT: true工具:mcp__lark-mcp__im.v1.messageReaction.list
path:
message_id: "om_xxx"
params:
reaction_type: "THUMBSUP" # 可选过滤条件工具:mcp__lark-mcp__im.v1.pin.create / mcp__lark-mcp__im.v1.pin.delete
data:
message_id: "om_xxx"
chat_id: "oc_xxx"
useUAT: true工具:mcp__lark-mcp__im.v1.message.readUsers
path:
message_id: "om_xxx"
params:
user_id_type: "open_id"
page_size: 50工具:mcp__lark-mcp__im.v1.chat.list
params:
user_id_type: "open_id"
page_size: 20工具:mcp__lark-mcp__im.v1.chat.list
params:
user_id_type: "open_id"
page_size: 20
useUAT: true工具:mcp__lark-mcp__im.v1.chat.get
path:
chat_id: "oc_xxx"
params:
user_id_type: "open_id"工具:mcp__lark-mcp__im.v1.chat.create
data:
name: "项目 Alpha"
description: "在此讨论项目 Alpha"
owner_id: "ou_xxx" # 可选,默认为应用或用户
user_id_list: ["ou_xxx", "ou_yyy"]
bot_id_list: []
chat_mode: "group"
chat_type: "private" # private | public
external: false
useUAT: true工具:mcp__lark-mcp__im.v1.chat.update
path:
chat_id: "oc_xxx"
data:
name: "新名称"
description: "更新描述"
owner_id: "ou_xxx" # 转移所有权
add_member_permission: "all_members"
at_all_permission: "all_members"
edit_permission: "all_members"
useUAT: true工具:mcp__lark-mcp__im.v1.chat.delete
path:
chat_id: "oc_xxx"
useUAT: true工具: mcp__lark-mcp__im.v1.chatMembers.get
path:
chat_id: "oc_xxx"
params:
member_id_type: "open_id"
page_size: 50工具: mcp__lark-mcp__im.v1.chatMembers.create
path:
chat_id: "oc_xxx"
params:
member_id_type: "open_id"
data:
id_list: ["ou_xxx", "ou_yyy"]
useUAT: true工具: mcp__lark-mcp__im.v1.chatMembers.delete
path:
chat_id: "oc_xxx"
params:
member_id_type: "open_id"
data:
id_list: ["ou_xxx"]
useUAT: true工具: mcp__lark-mcp__im.v1.chat.search
params:
query: "design team"
page_size: 20
useUAT: true工具: mcp__lark-mcp__im.v1.chatTab.listTabs
path:
chat_id: "oc_xxx"工具: mcp__lark-mcp__im.v1.chatAnnouncement.get
path:
chat_id: "oc_xxx"
params:
user_id_type: "open_id"工具: mcp__lark-mcp__im.v1.chatAnnouncement.patch
path:
chat_id: "oc_xxx"
data:
revision_id: 1
requests: ['{"requestType":"InsertBlocksAtDocumentTail","insertBlocksAtDocumentTailRequest":{"payload":{"blocks":[{"blockType":2,"text":{"elements":[{"textRun":{"content":"New announcement"}}],"style":{}}}]}}}']
useUAT: true工具: mcp__lark-mcp__bitable.v1.app.create
data:
name: "Project Tracker"
folder_token: "" # 可选:指定存放的驱动文件夹
useUAT: true工具: mcp__lark-mcp__bitable.v1.app.get
path:
app_token: "appXXX"工具: mcp__lark-mcp__bitable.v1.app.update
path:
app_token: "appXXX"
data:
name: "New Name"
is_advanced: true # 启用高级功能
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTable.list
path:
app_token: "appXXX"
params:
page_size: 20工具: mcp__lark-mcp__bitable.v1.appTable.create
path:
app_token: "appXXX"
data:
table:
name: "Tasks"
default_view_name: "Grid View"
fields:
- field_name: "Task Name"
type: 1 # 1=文本, 2=数字, 3=单选, 4=多选, 5=日期, 7=复选框, 11=人员, 15=链接, 99001=电话
- field_name: "Status"
type: 3
property:
options:
- name: "To Do"
color: 0
- name: "In Progress"
color: 1
- name: "Done"
color: 2
- field_name: "Assignee"
type: 11
- field_name: "Due Date"
type: 5
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTable.delete
path:
app_token: "appXXX"
table_id: "tblXXX"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableField.list
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
page_size: 50
view_id: "" # 可选:按视图过滤工具: mcp__lark-mcp__bitable.v1.appTableField.create
path:
app_token: "appXXX"
table_id: "tblXXX"
data:
field_name: "Priority"
type: 3 # 单选
property:
options:
- name: "High"
color: 0
- name: "Medium"
color: 1
- name: "Low"
color: 2
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableField.update
path:
app_token: "appXXX"
table_id: "tblXXX"
field_id: "fldXXX"
data:
field_name: "Renamed Field"
property:
options:
- name: "Critical"
color: 0
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableField.delete
path:
app_token: "appXXX"
table_id: "tblXXX"
field_id: "fldXXX"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.search
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
user_id_type: "open_id"
page_size: 100
page_token: "" # 用于分页
data:
view_id: "" # 可选:指定视图
field_names: ["Task Name", "Status", "Assignee"] # 可选:仅返回指定字段
sort:
- field_name: "Due Date"
desc: false
filter:
conjunction: "and" # and | or
conditions:
- field_name: "Status"
operator: "is" # is | isNot | contains | doesNotContain | isEmpty | isNotEmpty | isGreater | isLess
value: ["In Progress"]
automatic_fields: false
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.get
path:
app_token: "appXXX"
table_id: "tblXXX"
record_id: "recXXX"
params:
user_id_type: "open_id"工具: mcp__lark-mcp__bitable.v1.appTableRecord.create
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
user_id_type: "open_id"
data:
fields:
"Task Name": "Fix login bug"
"Status": "To Do"
"Assignee": [{"id": "ou_xxx"}]
"Due Date": 1700000000000 # 毫秒时间戳
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.batchCreate
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
user_id_type: "open_id"
data:
records:
- fields:
"Task Name": "Task 1"
"Status": "To Do"
- fields:
"Task Name": "Task 2"
"Status": "In Progress"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.update
path:
app_token: "appXXX"
table_id: "tblXXX"
record_id: "recXXX"
params:
user_id_type: "open_id"
data:
fields:
"Status": "Done"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.batchUpdate
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
user_id_type: "open_id"
data:
records:
- record_id: "recXXX"
fields:
"Status": "Done"
- record_id: "recYYY"
fields:
"Status": "In Progress"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.delete
path:
app_token: "appXXX"
table_id: "tblXXX"
record_id: "recXXX"
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableRecord.batchDelete
path:
app_token: "appXXX"
table_id: "tblXXX"
data:
records: ["recXXX", "recYYY"]
useUAT: true工具: mcp__lark-mcp__bitable.v1.appTableView.list
path:
app_token: "appXXX"
table_id: "tblXXX"
params:
page_size: 20工具: mcp__lark-mcp__bitable.v1.appTableView.create
path:
app_token: "appXXX"
table_id: "tblXXX"
data:
view_name: "看板"
view_type: "kanban" # grid | kanban | gallery | gantt | form
useUAT: true工具: mcp__lark-mcp__bitable.v1.appRoleMember.create
path:
app_token: "appXXX"
role_id: "roleXXX"
data:
member_id: "ou_xxx"
member_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__drive.v1.file.search(或 docx.builtin.search)
params:
query: "Q4 报告"
page_size: 20
useUAT: true工具: mcp__lark-mcp__docx.v1.document.rawContent
path:
document_id: "doxcXXX"
params:
lang: 0 # 0=默认
useUAT: true工具: mcp__lark-mcp__docx.v1.document.get
path:
document_id: "doxcXXX"
useUAT: true工具: mcp__lark-mcp__docx.v1.document.create
data:
folder_token: "" # 可选:驱动文件夹
title: "会议纪要 - 2026-03-06"
useUAT: true工具: mcp__lark-mcp__docx.v1.documentBlock.list
path:
document_id: "doxcXXX"
params:
page_size: 50
document_revision_id: -1 # -1 = 最新版本
useUAT: true工具: mcp__lark-mcp__docx.v1.documentBlockChildren.batchUpdate
path:
document_id: "doxcXXX"
block_id: "doxcXXX" # 父块(文档根节点 = document_id)
data:
requests:
- insertBlocksAfterBlockRequest:
targetBlockId: "blockXXX"
payload:
blocks:
- blockType: 2 # 2=文本, 3=标题1, 4=标题2, 12=项目符号, 22=代码
text:
elements:
- textRun:
content: "新段落内容"
revision_id: -1 # -1 = 最新版本
useUAT: true工具: mcp__lark-mcp__drive.v1.file.list
params:
folder_token: "" # 空值 = 根目录(“我的网盘”)
page_size: 20
order_by: "EditedTime" # EditedTime | CreatedTime | Name
direction: "DESC"
useUAT: true工具: mcp__lark-mcp__drive.v1.file.createFolder
data:
name: "Q1 报告"
folder_token: "" # 父文件夹,空值 = 根目录
useUAT: true工具: mcp__lark-mcp__drive.v1.file.move
path:
file_token: "xxx"
data:
type: "doc" # doc | sheet | bitable | mindnote | file | wiki | docx
folder_token: "targetFolderToken"
useUAT: true工具: mcp__lark-mcp__drive.v1.file.copy
path:
file_token: "xxx"
data:
name: "报告副本"
type: "docx"
folder_token: "targetFolderToken"
useUAT: true工具: mcp__lark-mcp__drive.v1.file.delete
path:
file_token: "xxx"
params:
type: "docx"
useUAT: true工具: mcp__lark-mcp__drive.v1.fileStatistics.get
path:
file_token: "xxx"
file_type: "docx" # docx | sheet | bitable | file工具: mcp__lark-mcp__drive.v1.permissionMember.create
path:
token: "xxx"
type: "docx"
data:
member_type: "openid" # openid | unionid | email | opendepartmentid | groupid
member_id: "ou_xxx"
perm: "view" # view | edit | full_access
useUAT: true工具: mcp__lark-mcp__drive.v1.permissionMember.list
path:
token: "xxx"
type: "docx"
useUAT: true工具: mcp__lark-mcp__drive.v1.fileComment.list
path:
file_token: "xxx"
file_type: "docx"
params:
is_solved: false
page_size: 20
useUAT: true工具: mcp__lark-mcp__drive.v1.fileComment.create
path:
file_token: "xxx"
file_type: "docx"
data:
reply_list:
replies:
- content:
elements:
- type: "text_run"
text_run:
text: "这部分做得很好!"
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendar.list
params:
page_size: 20
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendar.primary
params:
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendar.create
data:
summary: "团队日历"
description: "共享团队日程"
permissions: "public" # private | show_only_free_busy | public
color: -1
summary_alias: ""
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEvent.list
path:
calendar_id: "primary" # 或具体日历 ID
params:
start_time: "1700000000"
end_time: "1702600000"
page_size: 50
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEvent.get
path:
calendar_id: "primary"
event_id: "xxx"
params:
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEvent.create
path:
calendar_id: "primary"
data:
summary: "团队站会"
description: "每日同步"
start_time:
timestamp: "1700000000"
timezone: "Asia/Shanghai"
end_time:
timestamp: "1700003600"
timezone: "Asia/Shanghai"
attendees:
- type: "user"
user_id: "ou_xxx"
need_notification: true
visibility: "default" # default | public | private
free_busy_status: "busy" # busy | free
color: -1
reminders:
- minutes: 10
recurrence_rule: "" # 例如 "FREQ=DAILY;COUNT=5" 表示重复事件
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEvent.patch
path:
calendar_id: "primary"
event_id: "xxx"
data:
summary: "已更新会议标题"
description: "已更新描述"
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEvent.delete
path:
calendar_id: "primary"
event_id: "xxx"
params:
need_notification: true
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEventAttendee.list
path:
calendar_id: "primary"
event_id: "xxx"
params:
user_id_type: "open_id"
page_size: 50
useUAT: true工具: mcp__lark-mcp__calendar.v4.calendarEventAttendee.create
path:
calendar_id: "primary"
event_id: "xxx"
data:
attendees:
- type: "user"
user_id: "ou_xxx"
need_notification: true
useUAT: true工具: mcp__lark-mcp__calendar.v4.freebusy.list
data:
time_min: "2026-03-06T09:00:00+08:00"
time_max: "2026-03-06T18:00:00+08:00"
user_id_list: ["ou_xxx", "ou_yyy"]
useUAT: true工具: mcp__lark-mcp__task.v2.task.list
params:
completed: false
type: "my" # my | created | assigned
page_size: 50
useUAT: true工具: mcp__lark-mcp__task.v2.task.get
path:
task_guid: "xxx"
params:
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__task.v2.task.create
params:
user_id_type: "open_id"
data:
summary: "撰写第四季度报告"
description: "汇总所有指标并撰写第四季度总结报告"
due:
timestamp: "1700000000000" # 毫秒
is_all_day: false
origin:
platform_i18n_name: '{"zh_cn":"来自OpenClaw","en_us":"From OpenClaw"}'
members:
- id: "ou_xxx"
type: "user"
role: "assignee" # assignee | follower
task_list_configs:
- tasklist_guid: "tsklistXXX" # 可选:添加到任务列表
repeat_rule: "" # 例如 "FREQ=WEEKLY;BYDAY=MO" 表示每周重复
useUAT: true工具: mcp__lark-mcp__task.v2.task.patch
path:
task_guid: "xxx"
params:
user_id_type: "open_id"
data:
task:
summary: "已更新任务名称"
due:
timestamp: "1700100000000"
update_fields: ["summary", "due"] # 指定需要更新的字段
useUAT: true工具: mcp__lark-mcp__task.v2.task.complete
path:
task_guid: "xxx"
useUAT: true工具: mcp__lark-mcp__task.v2.task.uncomplete
path:
task_guid: "xxx"
useUAT: true工具: mcp__lark-mcp__task.v2.task.delete
path:
task_guid: "xxx"
useUAT: true工具: mcp__lark-mcp__task.v2.taskComment.create
path:
task_guid: "xxx"
data:
content: "进度更新:已完成80%"
reply_to_comment_id: "" # 可选
useUAT: true工具: mcp__lark-mcp__task.v2.taskComment.list
path:
task_guid: "xxx"
params:
page_size: 20
useUAT: true工具: mcp__lark-mcp__task.v2.tasklist.list
params:
user_id_type: "open_id"
page_size: 20
useUAT: true工具: mcp__lark-mcp__task.v2.tasklist.create
data:
name: "冲刺 12"
members:
- id: "ou_xxx"
type: "user"
role: "editor"
useUAT: true工具: mcp__lark-mcp__task.v2.task.addTasklist
path:
task_guid: "xxx"
data:
tasklist_guid: "tsklistXXX"
section_guid: "" # 可选:指定具体章节
useUAT: true工具: mcp__lark-mcp__contact.v3.user.get
path:
user_id: "ou_xxx"
params:
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__contact.v3.user.batchGetId
params:
user_id_type: "open_id"
data:
emails: ["user@company.com"]
mobiles: ["+8613800000000"]
useUAT: true工具: mcp__lark-mcp__contact.v3.user.findByDepartment
params:
user_id_type: "open_id"
department_id_type: "open_department_id"
department_id: "od_xxx"
page_size: 50
useUAT: true工具: mcp__lark-mcp__authen.v1.userInfo.get
useUAT: true工具: mcp__lark-mcp__contact.v3.department.children
params:
department_id_type: "open_department_id"
parent_department_id: "0" # "0" = 根部门
page_size: 50
fetch_child: false
useUAT: true工具: mcp__lark-mcp__contact.v3.department.get
path:
department_id: "od_xxx"
params:
department_id_type: "open_department_id"
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__wiki.v2.space.list
params:
page_size: 20
useUAT: true工具: mcp__lark-mcp__wiki.v2.space.get
path:
space_id: "xxx"
useUAT: true工具: mcp__lark-mcp__wiki.v2.spaceNode.list
path:
space_id: "xxx"
params:
parent_node_token: "" # 空值表示根级别
page_size: 50
useUAT: true工具: mcp__lark-mcp__wiki.v2.spaceNode.search
path:
space_id: "xxx"
params:
keyword: "onboarding guide"
page_size: 20
useUAT: true工具: mcp__lark-mcp__wiki.v2.spaceNode.get
params:
token: "wikcXXX"
useUAT: true工具: mcp__lark-mcp__wiki.v2.spaceNode.create
path:
space_id: "xxx"
data:
node_type: "origin" # origin = 新文档;copy = 复制现有内容
parent_node_token: "wikcXXX" # 父级页面令牌
title: "新页面标题"
useUAT: true工具: mcp__lark-mcp__wiki.v2.spaceNode.move
path:
space_id: "xxx"
node_token: "wikcXXX"
data:
target_parent_token: "wikcYYY"
target_space_id: "" # 空值表示同一空间内移动
useUAT: true工具: mcp__lark-mcp__approval.v4.approval.get
path:
approval_code: "xxx"
params:
locale: "zh-CN" # zh-CN | en-US | ja-JP工具: mcp__lark-mcp__approval.v4.instance.create
data:
approval_code: "xxx"
open_id: "ou_xxx" # 提交人
form: '[{"id":"widget1","type":"input","value":"费用报销 $500"}]'
node_approver_open_id_list: [] # 可选:为每个审批节点指定审批人
useUAT: true工具: mcp__lark-mcp__approval.v4.instance.get
path:
instance_id: "xxx"
params:
locale: "zh-CN"
user_id: "ou_xxx"
user_id_type: "open_id"
useUAT: true工具: mcp__lark-mcp__approval.v4.instance.list
params:
approval_code: "xxx"
start_time: "1700000000000"
end_time: "1702600000000"
page_size: 100工具: mcp__lark-mcp__approval.v4.instance.approve
data:
approval_code: "xxx"
instance_code: "xxx"
user_id: "ou_xxx"
task_id: "xxx"
comment: "看起来没问题,已批准!"
useUAT: true工具: mcp__lark-mcp__approval.v4.instance.reject
data:
approval_code: "xxx"
instance_code: "xxx"
user_id: "ou_xxx"
task_id: "xxx"
comment: "请修改预算数据"
useUAT: true工具: mcp__lark-mcp__approval.v4.instance.cancel
data:
approval_code: "xxx"
instance_code: "xxx"
user_id: "ou_xxx"
useUAT: true工具: mcp__lark-mcp__approval.v4.instanceComment.create
path:
instance_id: "xxx"
data:
content: "请检查附件中的凭证"
at_info_list:
- user_id: "ou_xxx"
name: "John"
offset: "14"
useUAT: true1. mcp__lark-mcp__contact.v3.user.batchGetId
→ emails: ["user@company.com"] → 获取 open_id
2. mcp__lark-mcp__im.v1.message.create
→ receive_id_type: "open_id"
→ receive_id: <步骤1获取的 open_id>
→ 发送消息1. mcp__lark-mcp__bitable.v1.app.create → 获取 app_token
2. mcp__lark-mcp__bitable.v1.appTable.create → 定义字段结构 → 获取 table_id
3. mcp__lark-mcp__bitable.v1.appTableRecord.batchCreate → 批量插入记录(每次最多500条)1. mcp__lark-mcp__bitable.v1.appTableRecord.search
→ 过滤条件:Status = "Done",Due Date 在最近7天内
→ 收集已完成事项
2. 格式化为富文本帖子或交互卡片
3. mcp__lark-mcp__im.v1.message.create
→ msg_type: "post" 或 "interactive"
→ 发送到项目群组 chat_id1. mcp__lark-mcp__calendar.v4.freebusy.list
→ 检查所有参会人目标时间段内的可用性
2. 选择一个空闲时段
3. mcp__lark-mcp__calendar.v4.calendarEvent.create
→ 添加所有参会人,设置提醒
4. mcp__lark-mcp__im.v1.message.create
→ 通知参会人会议详情1. mcp__lark-mcp__approval.v4.approval.get → 查看表单字段
2. mcp__lark-mcp__approval.v4.instance.create
→ 填写表单数据,提交
3. mcp__lark-mcp__approval.v4.instance.get
→ 轮询状态:PENDING | APPROVED | REJECTED | CANCELED1. mcp__lark-mcp__contact.v3.user.batchGetId → 通过邮箱解析 assignee → open_id
2. mcp__lark-mcp__task.v2.task.create
→ 设置摘要、描述、截止日期,成员角色为 "assignee"
3. 可选:mcp__lark-mcp__im.v1.message.create
→ 通过私信通知负责人| 错误代码 | 含义 | 解决方法 |
|---|---|---|
99991663 | Token 已过期 | 重新登录或刷新 Token |
99991664 | 无效 Token | 检查应用凭证配置 |
99991400 | 权限不足 | 在开发者控制台中授予所需权限范围 |
230001 | 机器人未加入聊天 | 先将机器人添加到群组 |
1254502 | 记录不存在 | 确认 record_id 是否正确 |
1254520 | 字段不存在 | 检查 field_name 拼写是否完全一致 |
1300006 | 事件不存在 | 确认 event_id 和 calendar_id 正确 |
1100003 | 会议不存在 | 会议可能已结束或 reserve_id 错误 |
1100007 | 会议未激活 | 先使用 reserve.get 检查状态 |
1100032 | 不是会议主持人 | 仅主持人可执行该操作 |
1700001 | 会议纪要不存在 | 检查 minute_token 格式(如 obcn...) |
1700002 | 会议纪要未就绪 | 转录仍在处理中,稍后重试 |
npx -y @larksuiteoapi/lark-mcp mcp -a <APP_ID> -s <APP_SECRET> 启动。useUAT: true —— 由机器人身份创建的资源可能对用户不可见。bitable:app、im:message、calendar:calendar、task:task:write)。im:message:send_as_bot 权限范围。npx -y @larksuiteoapi/lark-mcp login 刷新令牌(有效期 2 小时,可通过 offline_access 范围刷新)。注意:视频会议 API 需要
vc:meeting权限家族,并通常需要useUAT: true(用户身份)。可通过在 lark-mcp 中使用-t vc.v1.*或单独添加来启用。
工具:mcp__lark-mcp__vc.v1.reserve.apply
data:
end_time: "1700003600" # Unix 时间戳(秒)
meeting_settings:
topic: "Q4 规划会议"
action_permissions:
- permission: 1 # 1=邀请成员 2=共享屏幕 3=录制
permission_checker_type: 1 # 1=仅主持人 2=所有人
meeting_initial_type: 1 # 1=视频 2=音频
auto_record: false
enable_waiting_room: false
allow_screen_sharing: true
only_employee_join: false
join_meeting_permission: 1 # 1=任意飞书用户 2=仅受邀者 3=仅组织成员
push_question_to_vc: false
meeting_reminder: true
useUAT: true返回:reserve_id、reserve_token —— 请保存以用于后续管理。
工具:mcp__lark-mcp__vc.v1.reserve.update
path:
reserve_id: "xxx"
data:
end_time: "1700007200"
meeting_settings:
topic: "更新后的会议标题"
useUAT: true工具:mcp__lark-mcp__vc.v1.reserve.delete
path:
reserve_id: "xxx"
useUAT: true工具:mcp__lark-mcp__vc.v1.reserve.get
path:
reserve_id: "xxx"
params:
with_meeting_info: true # 同时返回当前会议信息
useUAT: true工具:mcp__lark-mcp__vc.v1.reserve.getActiveMeeting
path:
reserve_id: "xxx"
params:
with_participants: true
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.get
path:
meeting_id: "xxx"
params:
with_participants: true
with_meeting_ability: true
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.listByNo
params:
meeting_no: "123456789" # UI 中显示的 9 位会议号
start_time: "1700000000"
end_time: "1700100000"
page_size: 20
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.invite
path:
meeting_id: "xxx"
data:
invitees:
- id: "ou_xxx"
type: 1 # 1=飞书用户, 2=群组, 3=电话, 5=SIP/H323
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.kickout
path:
meeting_id: "xxx"
data:
kickout_users:
- id: "ou_xxx"
type: 1
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.setHost
path:
meeting_id: "xxx"
data:
host_user:
id: "ou_xxx"
type: 1
old_host_user:
id: "ou_yyy"
type: 1
useUAT: true工具:mcp__lark-mcp__vc.v1.meeting.end
path:
meeting_id: "xxx"
useUAT: true工具:mcp__lark-mcp__vc.v1.participant.list
params:
meeting_id: "xxx"
meeting_start_time: "1700000000"
meeting_end_time: "1700003600"
page_size: 100
useUAT: true工具:mcp__lark-mcp__vc.v1.meetingRecording.get
path:
meeting_id: "xxx"
useUAT: true返回:录制文件 URL、时长、大小。
工具:mcp__lark-mcp__vc.v1.meetingRecording.setPermission
path:
meeting_id: "xxx"
data:
permission_objects:
- id: "ou_xxx"
type: 1 # 1=用户, 2=部门
permission: 1 # 1=可查看
action_type: 1 # 1=设置 2=添加 3=移除
useUAT: true工具:mcp__lark-mcp__vc.v1.export.meetingList
data:
start_time: "1700000000"
end_time: "1700100000"
meeting_status: 3 # 1=未开始, 2=进行中, 3=已结束
page_size: 100
useUAT: true工具:mcp__lark-mcp__vc.v1.export.participantList
data:
meeting_start_time: "1700000000"
meeting_end_time: "1700003600"
meeting_no: "123456789"
page_size: 100
useUAT: true工具:mcp__lark-mcp__vc.v1.room.get
path:
room_id: "xxx"
params:
user_id_type: "open_id"工具:mcp__lark-mcp__vc.v1.room.list
params:
page_size: 20
room_level_id: "" # 可选:按楼栋/楼层筛选飞书妙记(Minutes)是基于 AI 的会议转录与笔记产品。
注意:会议纪要 API 需要
minutes:minute:readonly权限。目前仅支持通过 API 读取(无写入接口)。会议纪要由视频会议录制内容或上传的音视频文件自动生成。
工具:mcp__lark-mcp__minutes.v1.minute.get
path:
minute_token: "obcnXXXXXX" # 来自会议纪要链接中的 token:feishu.cn/minutes/obcnXXX
params:
user_id_type: "open_id"
useUAT: true返回:标题、时长、所有者、创建时间、视频状态、转录状态。
工具:mcp__lark-mcp__minutes.v1.minuteTranscript.get
path:
minute_token: "obcnXXXXXX"
params:
user_id_type: "open_id"
useUAT: true返回:转录段落数组,每个段落包含:
start_time / end_time(毫秒)paragraph — 口语内容speaker_id, speaker_name — 发言人工具:mcp__lark-mcp__minutes.v1.minuteStatistic.get
path:
minute_token: "obcnXXXXXX"
params:
user_id_type: "open_id"
useUAT: true返回:参与人员列表及其发言时长和字数统计。
工具:mcp__lark-mcp__minutes.v1.minuteMedia.get
path:
minute_token: "obcnXXXXXX"
params:
type: 1 # 1=视频文件 2=音频文件
useUAT: true返回:原始录音文件的下载链接。
⚠️ 飞书 MCP 不支持直接的文件下载或上传。请使用该链接在外部进行流媒体播放或访问。
会议纪要令牌可通过以下方式获取:
obcn 开头,后接字母数字字符(例如:obcn6qGKMiZy0eNFSKl6e8XXXXX)1. mcp__lark-mcp__minutes.v1.minuteTranscript.get
→ 获取全部转录段落
2. 使用大模型对转录内容进行摘要(由 OpenClaw 自动处理)
3. mcp__lark-mcp__minutes.v1.minuteStatistic.get
→ 获取参会人员列表及发言统计数据
4. mcp__lark-mcp__im.v1.message.create
→ 将摘要和参会人员统计数据以富文本卡片形式发送至会议群聊本节涵盖超越基础增删改查的高级群组聊天场景。
1. mcp__lark-mcp__im.v1.chat.list → 获取所有群组(需分页处理)
2. 客户端侧根据 name 字段过滤
或
mcp__lark-mcp__im.v1.chat.search → 参数:query: "群组名称"# 工具:mcp__lark-mcp__im.v1.message.create
data:
receive_id: "oc_xxx"
msg_type: "text"
content: '{"text":"<at user_id=\"ou_xxx\">John</at> 请审阅此内容"}'
# @所有人示例:
# content: '{"text":"<at user_id=\"all\">全体成员</at> 会议将在5分钟后开始"}'
useUAT: true# 工具:mcp__lark-mcp__im.v1.message.create
data:
receive_id: "oc_xxx"
msg_type: "interactive"
content: |
{
"config": {"wide_screen_mode": true},
"header": {
"title": {"tag": "plain_text", "content": "需要处理"},
"template": "red"
},
"elements": [
{
"tag": "div",
"text": {"tag": "lark_md", "content": "**任务**:请审批 Q4 预算\n**截止时间**:明天下午5点"}
},
{
"tag": "action",
"actions": [
{"tag": "button", "text": {"tag": "plain_text", "content": "批准"}, "type": "primary", "value": {"action": "approve"}},
{"tag": "button", "text": {"tag": "plain_text", "content": "拒绝"}, "type": "danger", "value": {"action": "reject"}}
]
}
]
}
useUAT: true1. mcp__lark-mcp__contact.v3.user.batchGetId
→ 将成员邮箱转换为 open_id
2. mcp__lark-mcp__im.v1.chat.create
→ 群组名称:"Project X - Team"
→ 成员列表:[所有 open_id]
→ 群组类型:private
3. mcp__lark-mcp__im.v1.message.create
→ 发送欢迎卡片消息,介绍项目背景1. mcp__lark-mcp__im.v1.chatAnnouncement.patch
→ 在文档末尾插入新的公告内容块
→ 所有成员可在聊天顶部看到置顶公告在飞书开放平台注册
im.message.receive_v1事件,可接收机器人所在群组的所有消息。OpenClaw 的飞书频道在配置后会自动处理,无需轮询。
事件负载包含:message_id, chat_id, sender.open_id, message.content, message.msg_type
1. 准备 chat_ids 列表(通过 mcp__lark-mcp__im.v1.chat.list 获取)
2. 循环调用 mcp__lark-mcp__im.v1.message.create
→ 建议控制频率:每秒约 5 次请求,避免触发限流# 工具:mcp__lark-mcp__im.v1.message.reply
path:
message_id: "om_xxx" # 要回复的具体消息 ID
data:
content: '{"text":"感谢更新!"}'
msg_type: "text"
reply_in_thread: true # 创建或延续消息线程
useUAT: true# 工具:mcp__lark-mcp__im.v1.message.forward
path:
message_id: "om_xxx"
params:
receive_id_type: "chat_id"
data:
receive_id: "oc_yyy"
useUAT: true# 工具:mcp__lark-mcp__im.v1.message.mergeForward
params:
receive_id_type: "chat_id"
data:
receive_id: "oc_yyy"
message_id_list: ["om_xxx", "om_yyy", "om_zzz"]
useUAT: true# 工具:mcp__lark-mcp__im.v1.message.list
params:
container_id_type: "chat"
container_id: "oc_xxx"
sort_type: "ByCreateTimeDesc"
page_size: 50
useUAT: true
# 然后客户端侧筛选出最后已读时间之后的消息# 工具:mcp__lark-mcp__im.v1.chat.update
path:
chat_id: "oc_xxx"
data:
owner_id: "ou_new_owner"
useUAT: true1. [会议结束] → 从日历事件或会议录制中获取 minute_token
2. mcp__lark-mcp__minutes.v1.minuteTranscript.get
→ 获取完整会议记录
3. 使用 AI 总结 → 提取关键决策、待办事项及负责人
4. mcp__lark-mcp__im.v1.message.create
→ msg_type: "interactive"
→ 向会议群组发送结构化卡片,包含:
- 会议摘要
- 待办事项(项目符号列表)
- 录制链接
- 参与人员
5. mcp__lark-mcp__task.v2.task.create (每个待办事项重复执行一次)
→ 分配给相关团队成员
→ 关联讨论中提到的截止日期| 功能 | 所需权限范围 |
|---|---|
| 发送消息 | im:message |
| 读取消息 | im:message:readonly |
| 群组管理 | im:chat, im:chat:write |
| 转发消息 | im:message |
| Bitable(读取) | bitable:app:readonly |
| Bitable(写入) | bitable:app |
| 文档(读取) | docs:doc:readonly |
| 文档(写入) | docs:doc |
| 云盘 | drive:drive |
| 日历(读取) | calendar:calendar:readonly |
| 日历(写入) | calendar:calendar |
| 任务 | task:task:write |
| 联系人 | contact:user.base:readonly |
| Wiki | wiki:wiki:readonly |
| 审批 | approval:approval:readonly, approval:instance |
| 视频会议(预约/管理) | vc:meeting |
| 视频会议(参与者) | vc:meeting:readonly |
| 视频会议(录制) | vc:record |
| 视频会议(会议室) | vc:room:readonly |
| 视频会议(导出报告) | vc:export |
| 会议纪要(读取转录内容) | minutes:minute:readonly |
已收录 1 个 Skill