lark-hermes-mcp
Provides integration with Feishu/Lark (ByteDance's collaboration platform), exposing tools for messaging, document management, calendar operations, task management, and Bitable (database) operations through the Feishu/Lark Open Platform APIs.
Exposes Feishu/Lark capabilities as function tools to Hermes or any other MCP-compatible agent, providing tools for messaging, document management, calendar operations, task management, and Bitable (database) operations through the Feishu/Lark Open Platform APIs.
Provides a Node.js-based MCP server that bridges Feishu/Lark Open Platform APIs, enabling programmatic access to messaging, document management, calendar operations, task management, and Bitable (database) functionality through the Feishu/Lark platform.
Integrates with npm packages including @larksuiteoapi/node-sdk and @larksuite/openclaw-lark to provide Feishu/Lark API access, exposing 36 bridged tools plus 17 hand-written fallback tools for messaging, documents, calendars, tasks, and database operations.
Provides JSON Schema flattening for OpenAI function-calling compatibility when accessing Feishu/Lark capabilities, enabling AI agents to use tools for messaging, document management, calendar operations, task management, and database operations through the Feishu/Lark platform.
Utilizes pino for structured logging to stderr while maintaining clean JSON-RPC communication to stdout, supporting the Feishu/Lark MCP server's operations for messaging, document management, calendar operations, task management, and database functionality.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lark-hermes-mcp send a message to the project team chat about the deadline update"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lark-hermes-mcp
Thin MCP stdio server that exposes Feishu (飞书) / Lark capabilities as function tools to Hermes, Claude Desktop, or any other MCP-compatible agent.
17 fallback tools (hand-written) for messaging, bitable, calendar, docs, and task operations
36 tools bridged from
@larksuite/openclaw-larkvia a shim adapter4 OAuth tools (
lark_oauth_start/lark_oauth_complete/lark_oauth_status/lark_oauth_revoke) driving OpenClaw's Device Flow for user-access-token authorization
Transport: stdio (stdout is JSON-RPC only, pino logs go to stderr) Auth: tenant_access_token + user-access-token (OAuth Device Flow) SDK:
@larksuiteoapi/node-sdk+@larksuite/openclaw-lark
Requirements
Node.js ≥ 22
A Feishu or Lark custom app (自建应用) that you own
An MCP-compatible client (e.g. Hermes, Claude Desktop, or any stdio MCP host)
Related MCP server: reasonix-feishu-mcp
Installation
Step 1 — Register your own Feishu / Lark app
This project does not ship with any pre-registered app credentials. Every user must create their own app on the Feishu/Lark open platform.
Go to https://open.feishu.cn/app (国内 Feishu) or https://open.larksuite.com/app (海外 Lark).
Click "创建企业自建应用" / "Create Custom App". Give it a name and icon.
After creation, open the app dashboard:
凭证与基础信息 / Credentials & Basic Info page → copy your
App ID(formatcli_xxxxxxxxxxxxxxxx) andApp Secret.权限管理 / Permissions & Scopes page → enable the scopes you plan to use. For the tools bundled here, the core set is:
im:message,im:chat(messaging)bitable:app(多维表格)docx:document,drive:drive(docs)calendar:calendar(日历)Task-related scopes if you want task tools
If you plan to use the OAuth (user-access-token) tools, also enable Device Flow / OAuth in your app settings. The OAuth tools request granular per-API scopes at runtime —
lark_oauth_startwill print the exact scope list on first call so you know what to enable.
发布 / Publish the app version in the app dashboard so your scopes take effect.
Step 2 — Clone and install
git clone https://github.com/WilliamMo101/lark-hermes-mcp.git
cd lark-hermes-mcp
npm install # triggers postinstall patches (see "Upstream & Patches" below)
npm run buildStep 3 — Configure your credentials
Standalone (any MCP host):
cp .env.example .env
# then edit .env and paste the App ID / App Secret you got in Step 1.env is git-ignored and will never be committed.
Under Hermes: you do not need a .env file. Put the variables directly in
profiles/<your-agent>/config.yaml under mcp_servers.lark.env:
mcp_servers:
lark:
command: /path/to/node
args:
- /path/to/lark-hermes-mcp/dist/server.js
env:
LARK_APP_ID: "cli_xxxxxxxxxxxxxxxx"
LARK_APP_SECRET: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
LARK_DOMAIN: "Feishu"
LARK_ENABLED_TOOLSETS: "messaging,docs,bitable,calendar,other"
LARK_LOG_LEVEL: "info"
timeout: 120
connect_timeout: 30
tools:
resources: false
prompts: false
LARK_DOMAIN: mainland Feishu →Feishu; overseas Lark →Lark. The wrong value will be rejected by the OAuth service (invalid_client).
LARK_ENABLED_TOOLSETSmust includeotherif you want the OAuth tools (lark_oauth_*) and task tools to be exposed.
Step 4 — Run and verify
node dist/server.js # starts the stdio MCP serverOr hook it up to your MCP host and invoke feishu_get_user or
lark_oauth_status as a smoke test.
Hermes exposes the tools as mcp_lark_<name> (underscores, per
mcp_tool.py:sanitize_mcp_name_component).
Example paths in this README (such as
/root/.hermes/mcp-servers/…in older snippets) reflect the author's own Hermes-on-WSL layout. Adapt them to wherever you check the repo out.
Fallback tools (17)
These are hand-written specs in src/adapter/fallback.ts:
toolset | name | what |
messaging |
| send IM to chat / user / email |
messaging |
| send interactive card |
messaging |
| reply to a message_id |
messaging |
| list recent messages in a chat |
bitable |
| paged record list with filter/sort |
bitable |
| insert record |
bitable |
| update record |
calendar |
| list calendars |
calendar |
| create event |
calendar |
| list events in range |
docs |
| raw-text fetch of a docx |
docs |
| block tree of a docx |
other |
| diagnostics: credentials + token acquisition |
other |
| get current user info |
other | task-related helpers | (see |
OpenClaw-bridged tools (36)
src/adapter/shim.ts calls registerXxxTools(api) against
@larksuite/openclaw-lark's internal registrations, wraps each tool with
typebox → JSON Schema flattening (for OpenAI function-calling compatibility),
and injects withTicket context via AsyncLocalStorage.
Tools appear with the feishu_ / mcp_doc_ prefix, e.g.
feishu_bitable_app, feishu_calendar_event, feishu_im_chat_messages.
OAuth tools (4)
lark_oauth_start— begin Device Flow (prints user_code + verification URL)lark_oauth_complete— poll for token after user authorizes in browserlark_oauth_status— check stored user token status (valid / needs_refresh / expired)lark_oauth_revoke— revoke stored user token
Tokens are encrypted (AES-256-GCM) and stored under
~/.local/share/openclaw-feishu-uat/.
Smoke test (standalone, without an MCP host)
export LARK_APP_ID=cli_xxx LARK_APP_SECRET=xxx LARK_DOMAIN=Feishu
(
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}'
echo '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}'
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"selfCheck","arguments":{}}}'
) | node dist/server.js 2>/tmp/lark-mcp.err > /tmp/lark-mcp.out
jq '.result.tools | length' < /tmp/lark-mcp.out
jq 'select(.id==3)' < /tmp/lark-mcp.outThere is also a registration-count smoke test for the shim:
LARK_APP_ID=cli_xxx node scripts/shim-smoke.mjsUpstream & Patches
This project builds on top of
@larksuite/openclaw-lark
(MIT License) — 36 of the exposed tools are bridged directly from its native
tool registrations via src/adapter/shim.ts.
scripts/postinstall-patches.mjs runs automatically after npm install and
applies idempotent patches inside node_modules/@larksuite/openclaw-lark/
so that the package loads cleanly under Node 22 CJS:
Strip
import.meta.urlsyntax fromversion.js(replaced withcreateRequire-based resolution).Same treatment for
token-store.js.Build a minimal stub for
@openclaw/plugin-sdk(only the pieces the registrations actually import).Widen the package's
exportsmap so deep./src/*imports resolve.
These patches only modify files inside your local node_modules/. The
upstream source is not modified, and the patches re-run safely on every
install.
Troubleshooting
Nothing in the host's tool list — grep the host's log for
MCP server 'lark'. Common causes:LARK_APP_ID/LARK_APP_SECRETnot passed through — shell exports don't propagate if the host uses an allow-list env. Declare them in the MCP config block instead.dist/server.jsmissing — runnpm run build.Wrong
nodebinary — must be Node ≥ 22.
OAuth tools missing from tool list —
LARK_ENABLED_TOOLSETSmust includeother.invalid_scopeonlark_oauth_start— one of the requested scopes isn't granted yet on your app. Open the app's Permissions page, enable the scopes listed in the error, publish a new version.invalid_clienton OAuth —LARK_DOMAINis wrong for your app region (国内 =Feishu, 海外 =Lark).stdout pollution (MCP client disconnects immediately) — some third-party lib wrote to stdout. Check stderr logs.
server.tsalready hijacksconsole.*and pino writes to stderr.Rate limited client-side — tune
LARK_THROTTLE_BITABLE_RPSetc. via env.
Project layout
src/
server.ts # MCP entry, console hijack, handlers
auth.ts # @larksuiteoapi/node-sdk Client factory
log.ts # pino → stderr
toolsets.ts # toolset enum + env filter
util/throttle.ts # per-toolset token bucket
adapter/
index.ts # tool loader + toolset filter
fallback.ts # 17 hand-written fallback tool specs
shim.ts # OpenClaw bridge + schema flattening
oauth-tools.ts # 4 OAuth tools (Device Flow)
scripts/
postinstall-patches.mjs # idempotent node_modules patches
shim-smoke.mjs # registration-count smoke testCredits
@larksuite/openclaw-larkby OpenClaw — MIT License. This project wraps and depends on it.Model Context Protocol SDK by Anthropic.
Feishu / Lark Open Platform APIs.
Disclaimer
This is a personal hobby project, provided as-is without any warranty. It is not an official product of Feishu, Lark, ByteDance, or OpenClaw.
这是一个个人兴趣项目,按"现状"提供,不附带任何担保。本项目与飞书/Lark、 字节跳动、OpenClaw 官方团队无隶属关系,出现问题请通过 GitHub Issues 反馈。
Available Tools
53 toolsbitableCreateRecordB
【飞书多维表格】在指定数据表中创建一条记录。fields 为字段名 → 值的 JSON 字符串。
Inputs: app_token (required), table_id (required), fields (required).
bitableListRecordsC
【飞书多维表格】按页列出某张数据表的记录。支持 filter (飞书 filter DSL 字符串)、field_names、sort。
Inputs: app_token (required), table_id (required), view_id, filter, +4 more.
bitableUpdateRecordC
【飞书多维表格】更新指定 record_id 的字段(部分更新)。fields 为要修改的字段 JSON。
Inputs: app_token (required), table_id (required), record_id (required), fields (required).
calendarCreateEventC
【飞书日历】在指定日历下创建日程。start_time / end_time 为 10 位 unix 秒字符串;timezone 如 Asia/Shanghai。
Inputs: calendar_id (required), summary (required), start_time (required), end_time (required), +3 more.
calendarListCalendarsC
【飞书日历】列出当前身份可见的日历(primary / exchange / google / resource)。
Inputs: page_size, page_token.
calendarListEventsC
【飞书日历】列出指定日历在时间区间内的日程。start_time / end_time 为 10 位 unix 秒字符串。
Inputs: calendar_id (required), start_time, end_time, page_size, +1 more.
docxGetRawContentC
【飞书文档 Docx】获取新版云文档的纯文本内容(去格式)。用于阅读/总结。
Inputs: document_id (required), lang.
docxListBlocksC
【飞书文档 Docx】列出文档根 block 或指定 block 的子结构(保留样式/层级)。
Inputs: document_id (required), page_size, page_token.
feishu_bitable_appB
【以用户身份】飞书多维表格应用管理工具。当用户要求创建/查询/管理多维表格时使用。Actions: create(创建多维表格), get(获取多维表格元数据), list(列出多维表格), patch(更新元数据), delete(删除多维表格), copy(复制多维表格)。
Inputs: action (required), name, folder_token, app_token, +3 more.
feishu_bitable_app_tableA
【以用户身份】飞书多维表格数据表管理工具。当用户要求创建/查询/管理数据表时使用。
Actions: create(创建数据表,可选择在创建时传入 fields 数组定义字段,或后续逐个添加), list(列出所有数据表), patch(更新数据表), batch_create(批量创建)。
【字段定义方式】支持两种模式:1) 明确需求时,在 create 中通过 table.fields 一次性定义所有字段(减少 API 调用);2) 探索式场景时,使用默认表 + feishu_bitable_app_table_field 逐步修改字段(更稳定,易调整)。
Inputs: action (required), app_token (required), table, page_size, +4 more.
feishu_bitable_app_table_fieldA
【以用户身份】飞书多维表格字段(列)管理工具。当用户要求创建/查询/更新/删除字段、调整表结构时使用。Actions: create(创建字段), list(列出所有字段), update(更新字段,支持只传 field_name 改名), delete(删除字段)。
Inputs: action (required), app_token (required), table_id (required), field_name, +6 more.
feishu_bitable_app_table_recordB
【以用户身份】飞书多维表格记录(行)管理工具。当用户要求创建/查询/更新/删除记录、搜索数据时使用。
Actions:
create(创建单条记录,使用 fields 参数)
batch_create(批量创建记录,使用 records 数组参数)
list(列出/搜索记录)
update(更新记录)
delete(删除记录)
batch_update(批量更新)
batch_delete(批量删除)
⚠️ 注意参数区别:
create 使用 'fields' 对象(单条)
batch_create 使用 'records' 数组(批量)
Inputs: action (required), app_token (required), table_id (required), fields, +10 more.
feishu_bitable_app_table_viewB
【以用户身份】飞书多维表格视图管理工具。当用户要求创建/查询/更新视图、切换展示方式时使用。Actions: create(创建视图), get(获取视图详情), list(列出所有视图), patch(更新视图)。
Inputs: action (required), app_token (required), table_id (required), view_name, +4 more.
feishu_calendar_calendarC
【以用户身份】飞书日历管理工具。用于查询日历列表、获取日历信息、查询主日历。Actions: list(查询日历列表), get(查询指定日历信息), primary(查询主日历信息)。
Inputs: action (required), page_size, page_token, calendar_id.
feishu_calendar_eventA
【以用户身份】飞书日程管理工具。当用户要求查看日程、创建会议、约会议、修改日程、删除日程、搜索日程、回复日程邀请时使用。Actions: create(创建日历事件), list(查询时间范围内的日程,自动展开重复日程), get(获取日程详情), patch(更新日程), delete(删除日程), search(搜索日程), reply(回复日程邀请), instances(获取重复日程的实例列表,仅对重复日程有效), instance_view(查看展开后的日程列表)。【重要】create 时必须传 user_open_id 参数,值为消息上下文中的 SenderId(格式 ou_xxx),否则日程只在应用日历上,用户完全看不到。list 操作使用 instance_view 接口,会自动展开重复日程为多个实例,时间区间不能超过40天,返回实例数量上限1000。时间参数使用ISO 8601 / RFC 3339 格式(包含时区),例如 '2024-01-01T00:00:00+08:00'。
Inputs: action (required), start_time, end_time, summary, +17 more.
feishu_calendar_event_attendeeB
飞书日程参会人管理工具。当用户要求邀请/添加参会人、查看参会人列表时使用。Actions: create(添加参会人), list(查询参会人列表)。
Inputs: action (required), calendar_id (required), event_id (required), attendees, +5 more.
feishu_calendar_freebusyA
【以用户身份】飞书日历忙闲查询工具。当用户要求查询某时间段内某人是否空闲、查看忙闲状态时使用。支持批量查询 1-10 个用户的主日历忙闲信息,用于安排会议时间。
Inputs: action (required), time_min (required), time_max (required), user_ids (required).
feishu_chatB
以用户身份调用飞书群聊管理工具。Actions: search(搜索群列表,支持关键词匹配群名称、群成员), get(获取指定群的详细信息,包括群名称、描述、头像、群主、权限配置等)。
Inputs: action (required), query, page_size, page_token, +2 more.
feishu_chat_membersA
以用户的身份获取指定群组的成员列表。返回成员信息,包含成员 ID、姓名等。注意:不会返回群组内的机器人成员。
Inputs: chat_id (required), member_id_type, page_size, page_token.
feishu_create_docC
从 Markdown 创建云文档(支持异步 task_id 查询)
Inputs: markdown, title, folder_token, wiki_node, +2 more.
feishu_doc_commentsA
【以用户身份】管理云文档评论。支持: (1) list - 获取评论列表(含完整回复); (2) list_replies - 获取指定评论的回复列表; (3) create - 添加全文评论(支持文本、@用户、超链接); (4) reply - 回复已有评论; (5) patch - 解决/恢复评论。支持 wiki token。
Inputs: action (required), file_token (required), file_type (required), is_whole, +7 more.
feishu_doc_mediaA
【以用户身份】文档媒体管理工具。支持两种操作:(1) insert - 在飞书文档末尾插入本地图片或文件(需要文档 ID + 本地文件路径);(2) download - 下载文档素材或画板缩略图到本地(需要资源 token + 输出路径)。
【重要】insert 仅支持本地文件路径。URL 图片请使用 create-doc/update-doc 的 语法。
Inputs: action (required), doc_id, file_path, type, +5 more.
feishu_drive_fileA
【以用户身份】飞书云空间文件管理工具。当用户要求查看云空间(云盘)中的文件列表、获取文件信息、复制/移动/删除文件、上传/下载文件时使用。消息中的文件读写禁止使用该工具!
Actions:
list(列出文件):列出文件夹下的文件。不提供 folder_token 时获取根目录清单
get_meta(批量获取元数据):批量查询文档元信息,使用 request_docs 数组参数,格式:[{doc_token: '...', doc_type: 'sheet'}]
copy(复制文件):复制文件到指定位置
move(移动文件):移动文件到指定文件夹
delete(删除文件):删除文件
upload(上传文件):上传本地文件到云空间。提供 file_path(本地文件路径)或 file_content_base64(Base64 编码)
download(下载文件):下载文件到本地。提供 output_path(本地保存路径)则保存到本地,否则返回 Base64 编码
【重要】copy/move/delete 操作需要 file_token 和 type 参数。get_meta 使用 request_docs 数组参数。 【重要】upload 优先使用 file_path(自动读取文件、提取文件名和大小),也支持 file_content_base64(需手动提供 file_name 和 size)。 【重要】download 提供 output_path 时保存到本地(可以是文件路径或文件夹路径+file_name),不提供则返回 Base64。
Inputs: action (required), folder_token, page_size, page_token, +12 more.
feishu_fetch_docB
获取飞书云文档内容,返回文档标题和 Markdown 格式内容。支持分页获取大文档。
Inputs: doc_id (required), offset, limit.
feishu_get_userA
获取用户信息。不传 user_id 时获取当前用户自己的信息;传 user_id 时获取指定用户的信息。返回用户姓名、头像、邮箱、手机号、部门等信息。
Inputs: user_id, user_id_type.
feishu_im_bot_imageA
【以机器人身份】下载飞书 IM 消息中的图片或文件资源到本地。
适用场景:用户直接发送给机器人的消息、用户引用的消息、机器人收到的群聊消息中的图片/文件。即当前对话上下文中出现的 message_id 和 image_key/file_key,应使用本工具下载。 引用消息的 message_id 可从上下文中的 [message_id=om_xxx] 提取,无需向用户询问。
文件自动保存到 /tmp/openclaw/ 下,返回值中的 saved_path 为实际保存路径。
Inputs: message_id (required), file_key (required), type (required).
feishu_im_user_fetch_resourceA
【以用户身份】下载飞书 IM 消息中的文件或图片资源到本地文件。需要用户 OAuth 授权。
适用场景:当你以用户身份调用了消息列表/搜索等 API 获取到 message_id 和 file_key 时,应使用本工具以同样的用户身份下载资源。 注意:如果 message_id 来自当前对话上下文(用户发给机器人的消息、引用的消息),请使用 feishu_im_bot_image 工具以机器人身份下载,无需用户授权。
参数说明:
message_id:消息 ID(om_xxx),从消息事件或消息列表中获取
file_key:资源 Key,从消息体中获取。图片用 image_key(img_xxx),文件用 file_key(file_xxx)
type:图片用 image,文件/音频/视频用 file
文件自动保存到 /tmp/openclaw/ 下,返回值中的 saved_path 为实际保存路径。 限制:文件大小不超过 100MB。不支持下载表情包、合并转发消息、卡片中的资源。
Inputs: message_id (required), file_key (required), type (required).
feishu_im_user_get_messagesA
【以用户身份】获取群聊或单聊的历史消息。
用法:
通过 chat_id 获取群聊/单聊消息
通过 open_id 获取与指定用户的单聊消息(自动解析 chat_id)
支持时间范围过滤:relative_time(如 today、last_3_days)或 start_time/end_time(ISO 8601 格式)
支持分页:page_size + page_token
【参数约束】
open_id 和 chat_id 必须二选一,不能同时提供
relative_time 和 start_time/end_time 不能同时使用
page_size 范围 1-50,默认 50
返回消息列表,每条消息包含 message_id、msg_type、content(AI 可读文本)、sender、create_time 等字段。
Inputs: open_id, chat_id, sort_rule, page_size, +4 more.
feishu_im_user_get_thread_messagesA
【以用户身份】获取话题(thread)内的消息列表。
用法:
通过 thread_id(omt_xxx)获取话题内的所有消息
支持分页:page_size + page_token
【注意】话题消息不支持时间范围过滤(飞书 API 限制)
返回消息列表,格式同 feishu_im_user_get_messages。
Inputs: thread_id (required), sort_rule, page_size, page_token.
feishu_im_user_messageA
飞书用户身份 IM 消息工具。有且仅当用户明确要求以自己身份发消息、回复消息时使用,当没有明确要求时优先使用message系统工具。
Actions:
send(发送消息):发送消息到私聊或群聊。私聊用 receive_id_type=open_id,群聊用 receive_id_type=chat_id
reply(回复消息):回复指定 message_id 的消息,支持话题回复(reply_in_thread=true)
【重要】content 必须是合法 JSON 字符串,格式取决于 msg_type。最常用:text 类型 content 为 '{"text":"消息内容"}'。
【安全约束】此工具以用户身份发送消息,发出后对方看到的发送者是用户本人。调用前必须先向用户确认:1) 发送对象(哪个人或哪个群)2) 消息内容。禁止在用户未明确同意的情况下自行发送消息。
Inputs: action (required), msg_type (required), content (required), receive_id_type, +4 more.
feishu_im_user_search_messagesA
【以用户身份】跨会话搜索飞书消息。
用法:
按关键词搜索消息内容
按发送者、被@用户、消息类型过滤
按时间范围过滤:relative_time 或 start_time/end_time
限定在某个会话内搜索(chat_id)
支持分页:page_size + page_token
【参数约束】
所有参数均可选,但至少应提供一个过滤条件
relative_time 和 start_time/end_time 不能同时使用
page_size 范围 1-50,默认 50
返回消息列表,每条消息包含 message_id、msg_type、content、sender、create_time 等字段。 每条消息还包含 chat_id、chat_type(p2p/group)、chat_name(群名或单聊对方名字)。 单聊消息额外包含 chat_partner(对方 open_id 和名字)。 搜索结果中的 chat_id 和 thread_id 可配合 feishu_im_user_get_messages / feishu_im_user_get_thread_messages 查看上下文。
Inputs: query, sender_ids, chat_id, mention_ids, +8 more.
feishu_oauthA
飞书用户撤销授权工具。仅在用户明确说"撤销授权"、"取消授权"、"退出登录"、"清除授权"时调用 revoke。【严禁调用场景】用户说"重新授权"、"发起授权"、"重新发起"、"授权失败"、"授权过期"时,绝对不要调用此工具,授权流程由系统自动处理,无需人工干预。不需要传入 user_open_id,系统自动从消息上下文获取当前用户。
Inputs: action (required).
feishu_oauth_batch_authA
飞书批量授权工具,一次性授权应用已开通的所有用户权限。仅在用户明确要求'授权所有权限'、'一次性授权'时使用。
Inputs: no named parameters.
feishu_search_doc_wikiA
【以用户身份】飞书文档与 Wiki 统一搜索工具。同时搜索云空间文档和知识库 Wiki。Actions: search。【重要】query 参数是搜索关键词(必填),filter 参数可选。【重要】filter 不传时,搜索所有文档和 Wiki;传了则同时对文档和 Wiki 应用相同的过滤条件。【重要】支持按文档类型、创建者、创建时间、打开时间等多维度筛选。【重要】返回结果包含标题和摘要高亮(标签包裹匹配关键词)。
Inputs: action (required), query, filter, page_token, +1 more.
feishu_search_userC
搜索员工信息(通过关键词搜索姓名、手机号、邮箱)。返回匹配的员工列表,包含姓名、部门、open_id 等信息。
Inputs: query (required), page_size, page_token.
feishu_sheetA
【以用户身份】飞书电子表格工具。支持创建、读写、查找、导出电子表格。
电子表格(Sheets)类似 Excel/Google Sheets,与多维表格(Bitable/Airtable)是不同产品。
所有 action(除 create 外)均支持传入 url 或 spreadsheet_token,工具会自动解析。支持知识库 wiki URL,自动解析为电子表格 token。
Actions:
info:获取表格信息 + 全部工作表列表(一次调用替代 get_info + list_sheets)
read:读取数据。不填 range 自动读取第一个工作表全部数据
write:覆盖写入,高危,请谨慎使用该操作。不填 range 自动写入第一个工作表(从 A1 开始)
append:在已有数据末尾追加行
find:在工作表中查找单元格
create:创建电子表格。支持带 headers + data 一步创建含数据的表格
export:导出为 xlsx 或 csv(csv 必须指定 sheet_id)
Inputs: action (required), url, spreadsheet_token, range, +14 more.
feishu_task_commentB
【以用户身份】飞书任务评论管理工具。当用户要求添加/查询任务评论、回复评论时使用。Actions: create(添加评论), list(列出任务的所有评论), get(获取单个评论详情)。
Inputs: action (required), task_guid, content, reply_to_comment_id, +5 more.
feishu_task_sectionC
【以用户身份】飞书任务自定义分组管理工具。用于创建、查询、更新自定义分组,以及列出分组内的任务。Actions: create(创建分组), get(获取分组详情), patch(更新分组), list(获取分组列表), tasks(获取分组任务列表)。
Inputs: action (required), name, resource_type, resource_id, +9 more.
feishu_task_subtaskB
【以用户身份】飞书任务的子任务管理工具。当用户要求创建子任务、查询任务的子任务列表时使用。Actions: create(创建子任务), list(列出任务的所有子任务)。
Inputs: action (required), task_guid (required), summary, description, +5 more.
feishu_task_taskB
【以用户身份】飞书任务管理工具。用于创建、查询、更新任务。Actions: create(创建任务), get(获取任务详情), list(查询任务列表,仅返回我负责的任务), patch(更新任务)。时间参数使用ISO 8601 / RFC 3339 格式(包含时区),例如 '2024-01-01T00:00:00+08:00'。
Inputs: action (required), summary, current_user_id, description, +11 more.
feishu_task_tasklistA
【以用户身份】飞书任务清单管理工具。当用户要求创建/查询/管理清单、查看清单内的任务时使用。Actions: create(创建清单), get(获取清单详情), list(列出所有可读取的清单,包括我创建的和他人共享给我的), tasks(列出清单内的任务), patch(更新清单), add_members(添加成员)。
Inputs: action (required), name, members, tasklist_guid, +3 more.
feishu_update_docC
更新云文档(overwrite/append/replace_range/replace_all/insert_before/insert_after/delete_range,支持异步 task_id 查询)
Inputs: mode (required), doc_id, markdown, selection_with_ellipsis, +3 more.
feishu_wiki_spaceB
飞书知识空间管理工具。当用户要求查看知识库列表、获取知识库信息、创建知识库时使用。Actions: list(列出知识空间), get(获取知识空间信息), create(创建知识空间)。【重要】space_id 可以从浏览器 URL 中获取,或通过 list 接口获取。【重要】知识空间(Space)是知识库的基本组成单位,包含多个具有层级关系的文档节点。
Inputs: action (required), page_size, page_token, space_id, +2 more.
feishu_wiki_space_nodeB
飞书知识库节点管理工具。操作:list(列表)、get(获取)、create(创建)、move(移动)、copy(复制)。节点是知识库中的文档,包括 doc、bitable(多维表表格)、sheet(电子表格) 等类型。node_token 是节点的唯一标识符,obj_token 是实际文档的 token。可通过 get 操作将 wiki 类型的 node_token 转换为实际文档的 obj_token。
Inputs: action (required), space_id, parent_node_token, page_size, +9 more.
lark_oauth_completeA
【OAuth】轮询 Device Flow 的 token 端点,直到用户在浏览器完成授权或超时。成功后自动持久化 user_access_token 并返回 open_id。device_code 来自 lark_oauth_start 的返回值。
Inputs: device_code (required), poll_timeout_sec.
lark_oauth_revokeA
【OAuth】删除指定用户的已存储 user_access_token。调用者必须传 confirm=true。之后该用户的 feishu_* 工具会再次要求授权。
Inputs: open_id (required), confirm (required).
lark_oauth_startA
【OAuth】启动飞书用户授权的 Device Flow,返回授权 URL 和用户码。使用后请让用户在浏览器打开 verification_uri 并输入 user_code,然后调用 lark_oauth_complete(device_code) 完成授权。授权成功后,所有 feishu_* 用户态工具(建多维表、改日历、创文档等)即可使用。
Inputs: scope.
lark_oauth_statusA
【OAuth】查询某个 Feishu 用户(默认为 app 所有者)是否已有可用的 user_access_token。返回 has_token / access_expired / refresh_expired / expires_in_sec。
Inputs: open_id.
listMessagesFeishuC
【飞书 IM】列出指定 container(通常是 chat_id)最近的消息。容器类型默认 chat。
Inputs: container_id (required), container_id_type, start_time, end_time, +2 more.
replyMessageFeishuB
【飞书 IM】回复指定 message_id 的消息。reply_in_thread=true 时在话题里回复。
Inputs: message_id (required), content (required), msg_type, reply_in_thread, +1 more.
selfCheckA
【诊断】检查 lark-hermes-mcp 当前的配置、凭证可用性、tenant_access_token 能否获取。不依赖具体权限。
Inputs: no named parameters.
sendCardFeishuC
【飞书 IM】发送一张交互式卡片(interactive)。card 必须是飞书卡片 JSON 字符串(含 header/elements 或 template_id + template_variable)。
Inputs: receive_id_type (required), receive_id (required), card (required).
sendMessageFeishuA
【飞书 IM】发送一条消息到指定聊天 / 用户 / 邮箱 / open_id / union_id。receive_id_type 决定 receive_id 的含义(chat_id / open_id / union_id / user_id / email),msg_type 支持 text / post / image / interactive / share_chat / share_user / audio / media / file / sticker。content 必须是 msg_type 对应的 JSON 字符串(例如 text 为 {"text":"hello"})。
Inputs: receive_id_type (required), receive_id (required), content (required), msg_type, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 53 tools
There is significant overlap and confusion between tools, especially in the IM and document domains. For example, sendMessageFeishu and feishu_im_user_message both send messages, while feishu_fetch_doc and docxGetRawContent both retrieve document content. The descriptions help somewhat, but the boundaries are unclear, leading to potential misselection.
Naming is highly inconsistent with mixed conventions. Some tools use snake_case (feishu_bitable_app), others use camelCase (bitableCreateRecord), and some are a mix (sendMessageFeishu). Verb styles vary (create vs. list vs. get), and there's no predictable pattern across the set.
With 53 tools, this is far too many for a coherent MCP server. The scope covers multiple domains (Bitable, Calendar, Docs, IM, Tasks, etc.), but the tool count feels bloated and heavy, making it difficult for agents to navigate effectively.
The server covers a wide range of Feishu/Lark functionalities with extensive CRUD operations across domains like Bitable, Calendar, Docs, and IM. While there are some minor gaps (e.g., no tool for deleting calendar events in the calendarCreateEvent set), the overall surface is quite comprehensive for the stated purpose.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA tool designed to help users connect AI Agents with the Feishu/Lark platform, encapsulating Feishu/Lark Open Platform API interfaces as MCP tools for document processing, conversation management, calendar scheduling and more.30,761 npm-
- AlicenseNot gradedqualityCmaintenanceMCP server for Feishu/Lark API integration, enabling AI agents to send messages, manage groups, create and edit documents and spreadsheets, and search knowledge bases.MIT
- AlicenseNot gradedqualityDmaintenanceOfficial MCP server for Feishu/Lark OpenAPI, enabling AI assistants to interact with Feishu/Lark platform for document processing, messaging, calendar scheduling, and more.30,761 npmMIT
- AlicenseBqualityDmaintenanceAn MCP server that exposes Feishu (Lark) APIs as standardized tools, enabling knowledge base, document, spreadsheet, and IM operations through any MCP client.3616 npmMIT