lark-hermes-mcp
lark-hermes-mcp
Легковесный MCP stdio-сервер, который предоставляет возможности Feishu (飞书) / Lark в качестве функциональных инструментов для Hermes, Claude Desktop или любого другого MCP-совместимого агента.
17 резервных инструментов (написанных вручную) для обмена сообщениями, работы с Bitable, календарем, документами и задачами.
36 инструментов, подключенных через
@larksuite/openclaw-larkс помощью адаптера-прослойки.4 инструмента OAuth (
lark_oauth_start/lark_oauth_complete/lark_oauth_status/lark_oauth_revoke), использующих Device Flow от OpenClaw для авторизации через user-access-token.
Транспорт: stdio (stdout предназначен только для JSON-RPC, логи pino выводятся в stderr) Авторизация: tenant_access_token + user-access-token (OAuth Device Flow) SDK:
@larksuiteoapi/node-sdk+@larksuite/openclaw-lark
Требования
Node.js ≥ 22
Собственное пользовательское приложение (自建应用) Feishu или Lark
MCP-совместимый клиент (например, Hermes, Claude Desktop или любой другой stdio MCP-хост)
Related MCP server: reasonix-feishu-mcp
Установка
Шаг 1 — Зарегистрируйте свое приложение Feishu / Lark
Этот проект не поставляется с предустановленными учетными данными приложения. Каждый пользователь должен создать свое собственное приложение на открытой платформе Feishu/Lark.
Перейдите на https://open.feishu.cn/app (внутри Китая, Feishu) или https://open.larksuite.com/app (за пределами Китая, Lark).
Нажмите "创建企业自建应用" / "Create Custom App". Дайте ему имя и выберите иконку.
После создания откройте панель управления приложением:
Страница 凭证与基础信息 / Credentials & Basic Info → скопируйте ваш
App ID(форматcli_xxxxxxxxxxxxxxxx) иApp Secret.Страница 权限管理 / Permissions & Scopes → включите области доступа (scopes), которые планируете использовать. Для инструментов, включенных здесь, базовый набор:
im:message,im:chat(сообщения)bitable:app(многомерные таблицы)docx:document,drive:drive(документы)calendar:calendar(календарь)Области доступа, связанные с задачами, если вы хотите использовать инструменты для задач.
Если вы планируете использовать инструменты OAuth (user-access-token), также включите Device Flow / OAuth в настройках приложения. Инструменты OAuth запрашивают гранулярные области доступа для каждого API во время выполнения —
lark_oauth_startвыведет точный список областей при первом вызове, чтобы вы знали, что нужно включить.
发布 / Publish версию приложения в панели управления, чтобы изменения областей доступа вступили в силу.
Шаг 2 — Клонирование и установка
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 buildШаг 3 — Настройка учетных данных
Автономно (любой MCP-хост):
cp .env.example .env
# then edit .env and paste the App ID / App Secret you got in Step 1Файл .env игнорируется git и никогда не будет закоммичен.
В Hermes: вам не нужен файл .env. Укажите переменные напрямую в profiles/<your-agent>/config.yaml в разделе 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: для Feishu в материковом Китае →Feishu; для международного Lark →Lark. Неверное значение будет отклонено сервисом OAuth (invalid_client).
LARK_ENABLED_TOOLSETSдолжен включатьother, если вы хотите, чтобы инструменты OAuth (lark_oauth_*) и инструменты для задач были доступны.
Шаг 4 — Запуск и проверка
node dist/server.js # starts the stdio MCP serverИли подключите его к вашему MCP-хосту и вызовите feishu_get_user или lark_oauth_status в качестве дымового теста.
Hermes предоставляет инструменты с префиксом mcp_lark_<name> (подчеркивания, согласно mcp_tool.py:sanitize_mcp_name_component).
Примеры путей в этом README (например,
/root/.hermes/mcp-servers/…в старых фрагментах) отражают структуру Hermes-on-WSL автора. Адаптируйте их под место, куда вы клонировали репозиторий.
Резервные инструменты (17)
Это спецификации, написанные вручную в src/adapter/fallback.ts:
Набор инструментов | Имя | Описание |
messaging |
| отправка IM в чат / пользователю / на email |
messaging |
| отправка интерактивной карточки |
messaging |
| ответ на message_id |
messaging |
| список последних сообщений в чате |
bitable |
| постраничный список записей с фильтром/сортировкой |
bitable |
| вставка записи |
bitable |
| обновление записи |
calendar |
| список календарей |
calendar |
| создание события |
calendar |
| список событий в диапазоне |
docs |
| получение необработанного текста docx |
docs |
| дерево блоков docx |
other |
| диагностика: учетные данные + получение токена |
other |
| получение информации о текущем пользователе |
other | task-related helpers | (см. |
Инструменты, подключенные через OpenClaw (36)
src/adapter/shim.ts вызывает registerXxxTools(api) для внутренних регистраций @larksuite/openclaw-lark, оборачивает каждый инструмент с помощью typebox → преобразование в JSON Schema (для совместимости с вызовом функций OpenAI) и внедряет контекст withTicket через AsyncLocalStorage.
Инструменты появляются с префиксом feishu_ / mcp_doc_, например, feishu_bitable_app, feishu_calendar_event, feishu_im_chat_messages.
Инструменты OAuth (4)
lark_oauth_start— начало Device Flow (выводит user_code + URL для верификации)lark_oauth_complete— опрос токена после того, как пользователь авторизуется в браузереlark_oauth_status— проверка статуса сохраненного токена пользователя (valid / needs_refresh / expired)lark_oauth_revoke— отзыв сохраненного токена пользователя
Токены шифруются (AES-256-GCM) и хранятся в ~/.local/share/openclaw-feishu-uat/.
Дымовой тест (автономно, без MCP-хоста)
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.outТакже существует дымовой тест количества регистраций для прослойки:
LARK_APP_ID=cli_xxx node scripts/shim-smoke.mjsUpstream и патчи
Этот проект построен на базе @larksuite/openclaw-lark (лицензия MIT) — 36 из представленных инструментов подключены напрямую из его собственных регистраций через src/adapter/shim.ts.
scripts/postinstall-patches.mjs запускается автоматически после npm install и применяет идемпотентные патчи внутри node_modules/@larksuite/openclaw-lark/, чтобы пакет корректно загружался в Node 22 CJS:
Удаление синтаксиса
import.meta.urlизversion.js(заменено на разрешение на основеcreateRequire).Аналогичная обработка для
token-store.js.Создание минимальной заглушки для
@openclaw/plugin-sdk(только те части, которые реально импортируются).Расширение карты
exportsпакета, чтобы глубокие импорты./src/*разрешались.
Эти патчи изменяют только файлы внутри вашего локального node_modules/. Исходный код upstream не изменяется, и патчи безопасно перезапускаются при каждой установке.
Устранение неполадок
Ничего нет в списке инструментов хоста — выполните grep лога хоста по запросу
MCP server 'lark'. Распространенные причины:LARK_APP_ID/LARK_APP_SECRETне переданы — переменные окружения оболочки не распространяются, если хост использует список разрешенных переменных. Объявите их в блоке конфигурации MCP.Отсутствует
dist/server.js— выполнитеnpm run build.Неверный бинарный файл
node— должна быть версия Node ≥ 22.
Инструменты OAuth отсутствуют в списке —
LARK_ENABLED_TOOLSETSдолжен включатьother.invalid_scopeвlark_oauth_start— одна из запрошенных областей доступа еще не предоставлена вашему приложению. Откройте страницу разрешений приложения, включите области, указанные в ошибке, и опубликуйте новую версию.invalid_clientв OAuth —LARK_DOMAINневерно указан для вашего региона (внутри Китая =Feishu, за пределами =Lark).Засорение stdout (MCP-клиент немедленно отключается) — какая-то сторонняя библиотека пишет в stdout. Проверьте логи stderr.
server.tsуже перехватываетconsole.*, а pino пишет в stderr.Ограничение скорости на стороне клиента — настройте
LARK_THROTTLE_BITABLE_RPSи т.д. через переменные окружения.
Структура проекта
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 testБлагодарности
@larksuite/openclaw-larkот OpenClaw — лицензия MIT. Этот проект является оберткой и зависит от него.Model Context Protocol SDK от Anthropic.
API открытой платформы Feishu / Lark.
Отказ от ответственности
Это личный хобби-проект, предоставляемый «как есть» без каких-либо гарантий. Он не является официальным продуктом Feishu, Lark, ByteDance или 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.33,351 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.33,351 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