feishu-mcp
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., "@feishu-mcp搜索我权限内包含“季度总结”的飞书文档"
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.
feishu-mcp
飞书(Lark)MCP 服务:通过 MCP 接口对飞书 文档 / 知识库文档 / 电子表格 / 多维表格 进行读取、写入与搜索。
本质是一个薄连接器:MCP 客户端(ZCode / Claude Code / Cursor 等)通过 MCP 协议发来指令,本服务调用 飞书官方 lark-cli 执行,并把结果整理为 AI 友好的结构化 JSON 返回。认证完全复用 lark-cli 的 OAuth 登录态,本服务自身不接触任何飞书凭证。
支持两种传输模式:
stdio(默认):本地使用,AI 工具直接拉起进程;
HTTP(S):云服务器部署,Streamable HTTP + Bearer Token 鉴权,路径
/mcp。
工具清单(9 个)
工具 | 说明 |
| 读文档(docx/wiki 链接或 token),全文 / 大纲 / 章节 / 关键词定位,Markdown 输出 |
| 写文档: |
| 读电子表格:不传子表返回子表清单;按区域读 CSV, |
| 写电子表格: |
| 读多维表格记录:结构化筛选、排序、字段投影、分页 |
| 写多维表格记录:批量新增 / 按 record_id 更新(单次 ≤200 条) |
| 列出多维表格的数据表与字段 schema(读写记录前先调用) |
| 搜索我有权限的云空间对象(关键词 ≤30 字符,支持 |
| 检查 lark-cli 安装与登录状态,未登录时返回修复指引 |
推荐工作流:search_feishu_docs 找到文档 → 读写;多维表格先 describe_feishu_base 拿 table_id 和字段名 → 再读写记录。
Related MCP server: lark-mcp
前置条件
Node.js ≥ 20
安装并登录 lark-cli(一次性,在运行本服务的机器上):
npx @larksuite/cli@latest install # 或 npm i -g @larksuite/cli
lark-cli config init # 配置应用凭证(交互式)
lark-cli auth login --recommend # 浏览器授权,按业务域授权也可:
# lark-cli auth login --domain docs,drive,base,sheets
lark-cli auth status # 确认登录态本地使用(stdio)
git clone <repo> feishu_mcp && cd feishu_mcp
npm install && npm run buildMCP 客户端配置(以 ZCode / Claude Code 为例):
{
"mcpServers": {
"feishu": {
"command": "node",
"args": ["D:/projects/feishu_mcp/dist/index.js"]
}
}
}Windows 提示:若提示找不到 lark-cli,把
LARK_CLI_PATH设为 lark-cli.exe 的完整路径(通常在npm config get prefix下的node_modules/@larksuite/cli/bin/lark-cli.exe)。
云服务器部署(HTTP(S) 模式)
node dist/index.js # 需要以下环境变量环境变量 | 默认 | 说明 |
|
|
|
| — | HTTP 模式必填,Bearer token,逗号分隔可配多个;未配置拒绝启动 |
|
| 反代场景绑 |
|
| 监听端口,端点为 |
| — | 同时配置则以 HTTPS 直启;不配则纯 HTTP(由前置反代终止 TLS) |
|
| lark-cli 可执行文件路径 |
|
| 调用身份 |
| — | 多应用 profile 时注入 |
|
| 单次 lark-cli 调用超时 |
|
| JSON 配置文件路径(环境变量优先于文件) |
HTTPS 的两条路径
nginx 反代终止 TLS(推荐):服务绑
127.0.0.1:3000,nginx 挂证书转发,见deploy/nginx-feishu-mcp.conf.sample;服务内置 HTTPS:配置
MCP_HTTP_TLS_CERT+MCP_HTTP_TLS_KEY后服务直接以https://启动。
客户端配置示例:
{
"mcpServers": {
"feishu": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer <MCP_HTTP_TOKEN 的值>" }
}
}
}不支持自定义请求头的客户端(如 ChatGPT 网页版"连接器"):把 token 放到 URL 查询参数里,认证方式选"无身份验证":
https://mcp.example.com/mcp?token=<MCP_HTTP_TOKEN 的值>注意:URL 方式的 token 可能出现在浏览器历史/代理日志中,仅在此类受限客户端下使用;如泄露可在服务器改
MCP_HTTP_TOKEN后重启服务轮换。服务同时实现了 RFC 9728/.well-known/oauth-protected-resource元数据端点,规范客户端在 401 时不会误走 OAuth 自动发现。
方式 A:Docker
# 1. 修改 docker-compose.yml 中的 MCP_HTTP_TOKEN
docker compose up -d --build
# 2. 首次登录(一次性):容器内无系统密钥链,lark-cli 回落为文件存储(挂载在 volume 中持久化)
docker exec -it feishu-mcp lark-cli config init
docker exec -it feishu-mcp lark-cli auth login --domain docs,drive,base,sheets
# 按提示在本地浏览器打开授权链接确认即可(无需在服务器开浏览器)
# 3. 重启后登录态仍在(凭证已持久化到 volume)
docker compose restart方式 B:systemd(裸机)
# 构建产物上传到 /opt/feishu-mcp(或服务器上 git clone 后 npm install && npm run build)
sudo cp deploy/feishu-mcp.service /etc/systemd/system/
sudo cp deploy/feishu-mcp.env /opt/feishu-mcp/deploy/ && sudo chmod 600 /opt/feishu-mcp/deploy/feishu-mcp.env
# 编辑 env 中的 MCP_HTTP_TOKEN 等配置
sudo systemctl daemon-reload && sudo systemctl enable --now feishu-mcp服务器上登录(一次性):
sudo -u <运行用户> lark-cli config init
sudo -u <运行用户> lark-cli auth login --domain docs,drive,base,sheets
# 无桌面环境时如连接中断,可用官方断点续登:
# lark-cli auth login --domain docs --no-wait # 记下 device code 与 URL
# lark-cli auth login --device-code <DEVICE_CODE>验证
# stdio 冒烟测试(工具清单 + 登录态 + 真实搜索)
node scripts/smoke-stdio.mjs all
# 写读全链路校准(会在云空间创建"【MCP校准-可删除】"测试文件)
node scripts/calibrate.mjs docs # 文档 create→read→append→replace_text→overwrite
node scripts/calibrate.mjs sheet # 电子表格读取
node scripts/calibrate.mjs base # 多维表格 describe + 读记录
BASE_TOKEN=<token> node scripts/calibrate.mjs basewrite # 多维表格写记录
SHEET_TOKEN=<token> node scripts/calibrate.mjs sheetwrite # 电子表格写注意事项
风险提示:授权后本服务以你的用户身份读写飞书,写入操作(尤其
replace整篇覆盖)不可自动回滚,请在可信网络与可信客户端环境下使用。授权自愈:飞书用户授权失效(长期闲置 token 过期、主动撤销授权)时,工具报错信息会自动附带一个设备码授权链接(10 分钟内有效),在浏览器打开确认后服务后台自动完成登录,无需登录服务器;
check_feishu_auth在授权失效时也会直接返回login_url字段。同一时间只保留一个授权流程,链接 9 分钟内复用。写入可见性:飞书写入后立即读取可能有毫秒级延迟(最终一致)。
电子表格 append:目标子表为空时自动从 A1 写入;非空时追加到数据末行。
多维表格 token:支持
/base/URL、知识库/wiki/URL(自动解析节点)或裸 token。lark-cli 升级:
lark-cli update(官方发布较频繁,schema 修正优先用新版)。
Available Tools
9 toolscheck_feishu_auth检查飞书登录状态A
检查 lark-cli 是否已安装、当前登录状态与可用身份(user/bot)。读写报权限错误时先调用本工具排查。未登录时按返回的指引让用户在部署机上执行登录命令。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool only checks installation/login/identity and does not perform the login itself (the user must execute the command), which is valuable. It stops short of explicitly stating the tool has no side effects or describing the exact response shape, but it covers the principal behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states what is checked, the second states when to invoke it, and the third states the follow-up action. Every sentence earns its place and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless diagnostic tool with no output schema, the description is complete: it specifies the checked state, the triggering error condition, and the guided next step. Nothing essential is missing for an agent to decide to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so there is nothing for the description to add about parameter meaning. The baseline of 4 applies because no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('检查'/check) and names exact resources: whether lark-cli is installed, current login status, and available identity (user/bot). This clearly distinguishes the tool from sibling read/write tools for docs, sheets, and bases, which perform data operations rather than auth diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit trigger condition: when read/write operations report permission errors, call this tool first to troubleshoot. It also tells the agent what to do if not logged in (follow returned guidance and have the user run login on the deployment machine), leaving no ambiguity about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_feishu_base查看多维表格结构A
列出飞书多维表格(bitable)的所有数据表及每张表的字段 schema(字段名/类型/可选值),用于读写记录前发现 table_id、准确字段名和字段类型约定(如单选字段的合法选项)。base_token 支持多维表格 URL、wiki 知识库 URL 或裸 token。
| Name | Required | Description | Default |
|---|---|---|---|
| base_token | Yes | 多维表格 token 或 URL(支持 /base/、/wiki/ 链接) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral disclosure burden. It characterizes the tool as a listing/inspection operation ('列出', '查看'), which implies read-only behavior, and it documents accepted input forms. However, it does not explicitly state that it makes no modifications, mention auth prerequisites, or describe rate limits, errors, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two purposeful sentences: the first states the action and output, the second states accepted input formats. Every sentence earns its place, with no filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter, full schema coverage, no output schema, and no annotations, the description gives a clear enough output picture (table_id, field names, types, options) and the supported input variants. It falls short of 5 only because it does not explicitly describe the return structure or state that the operation is read-only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's explanation of base_token formats ('多维表格 URL、wiki 知识库 URL 或裸 token') largely mirrors the schema's '/base/、/wiki/ 链接' wording and adds only marginal explicitness about bare tokens.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('列出'), the resource ('飞书多维表格(bitable)'), and the deliverable ('所有数据表及每张表的字段 schema'), far beyond a tautology. It also implicitly distinguishes itself from siblings like read_feishu_base_records by focusing on schema discovery rather than record read/write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this tool is for use '读写记录前' to discover table_id, field names, and field type conventions, which is a clear trigger condition. It does not explicitly rule out alternatives or name sibling tools, but the bitable-vs-doc/sheet distinction is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_feishu_base_records读取多维表格记录A
读取飞书多维表格(bitable)的数据表记录,返回对象数组(每条含 record_id 和字段值)。可按字段筛选(op 支持 ==/!=/>/>=/</<=/intersects/contains/is_empty/non_empty)、排序、字段投影、分页。先用 describe_feishu_base 获取 table_id 和字段名。base_token 支持多维表格 URL、wiki URL 或裸 token。
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 排序,按数组顺序为优先级 | |
| limit | No | 单次最多返回条数(1-200) | |
| logic | No | 多个筛选条件的组合逻辑 | and |
| fields | No | 只返回这些字段(字段投影) | |
| offset | No | 分页偏移 | |
| filters | No | 筛选条件(AND/OR 组合) | |
| view_id | No | 视图 ID 或名称(可选) | |
| table_id | Yes | 数据表 ID(tbl 开头)或表名 | |
| base_token | Yes | 多维表格 token 或 URL(支持 /base/、/wiki/ 链接) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses return shape (object array with record_id and field values), filtering operators, sorting, projection, pagination, and token formats. However, it doesn't mention rate limits, error behavior, or whether this is a read-only operation (though the name implies it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then lists capabilities and prerequisites in a logical order. It packs substantial information into two sentences without redundancy, though the operator list is long and could be considered dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with 9 parameters and no output schema, the description covers the return format, filtering, sorting, projection, pagination, and token handling. It lacks explicit mention of pagination limits beyond the schema's limit parameter, but the schema covers that. The prerequisite reference to describe_feishu_base completes the usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters. The description adds context about base_token URL formats and the prerequisite for table_id/field names, but most parameter semantics are already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads Feishu bitable records and returns an object array with record_id and field values. It distinguishes itself from siblings by naming describe_feishu_base as a prerequisite and by listing filtering/sorting/projection/pagination capabilities, which separates it from read_feishu_doc and read_feishu_sheet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to first use describe_feishu_base to obtain table_id and field names, and explains base_token accepts URL, wiki URL, or bare token. This gives clear when-to-use guidance and a prerequisite step, though it doesn't explicitly name alternatives for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_feishu_doc读取飞书文档A
读取飞书云文档内容(支持文档链接 /docx/ 或知识库链接 /wiki/,自动路由),返回 Markdown。可读全文、目录大纲(scope=outline,先看结构)、指定章节(需 block id)、关键词定位。返回 JSON 含 document_id / revision_id / content。
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | 文档 URL 或 token(支持 https://xxx.feishu.cn/docx/xxx、/wiki/xxx 或纯 token) | |
| scope | No | full=全文;outline=仅目录大纲(推荐先看结构);section=某标题整节(需 start_block_id);range=block 区间;keyword=关键词定位 | full |
| detail | No | simple=纯内容;with-ids=含 block id(后续局部更新时需要);full=含样式与编辑元数据 | simple |
| format | No | 输出格式,默认 markdown | markdown |
| keyword | No | scope=keyword 时的关键词,支持 'a|b' 或分支 | |
| max_depth | No | outline 的标题层级上限,其他 scope 为子树深度 | |
| end_block_id | No | range 的结束 block id,-1 表示读到文末 | |
| start_block_id | No | section/range 的起始 block id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses automatic routing between docx and wiki links, the return format (Markdown), and the JSON structure with document_id/revision_id/content. It also explains the effect of different scope values (outline, section, keyword) and detail levels. It doesn't mention rate limits, auth requirements, or error behavior, but for a read tool the disclosed behavior is quite thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then lists capabilities in a dense but organized way. It packs a lot of information into a few sentences without redundancy. Minor deduction because the parameter interaction details (e.g., keyword with 'a|b') could be seen as schema territory, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with 8 parameters and no output schema, the description covers the main usage patterns, return format, and routing behavior. It doesn't explain error cases, pagination, or auth prerequisites, but the sibling check_feishu_auth exists for auth. The description is complete enough for an agent to select and invoke the tool correctly for common scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters. The description adds value by explaining the workflow: scope=outline for structure first, section needs start_block_id, keyword supports 'a|b' branches, and detail=with-ids is needed for later partial updates. This goes beyond the schema's field-level descriptions and helps an agent understand how parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('读取' / read), a clear resource (飞书云文档), and explicitly distinguishes between document links (/docx/) and wiki links (/wiki/) with automatic routing. It also names the return format (Markdown) and the JSON structure, making it immediately clear what this tool does and how it differs from siblings like read_feishu_sheet or read_feishu_base_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it recommends using scope=outline first to see the structure, explains when to use section (needs block id), and mentions keyword positioning. It also implies when to use this tool vs alternatives by focusing on document content reading, while siblings handle sheets and base records. The routing note for /docx/ vs /wiki/ links is a clear when-to-use signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_feishu_sheet读取飞书电子表格A
读取飞书电子表格(电子表格 spreadsheet,不是多维表格)。不传 sheet_name/sheet_id 时返回工作簿的子表清单;传入子表后按区域读取,默认返回 CSV 文本(纯值),detail=cells 可读公式/样式/批注。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | 电子表格 URL(与 spreadsheet_token 二选一) | |
| range | No | A1 区域,如 A1:F30;不传读全表(大表会被截断) | |
| detail | No | values=CSV 纯值;cells=含公式/样式/批注 | values |
| sheet_id | No | 子表 ID(与 sheet_name 二选一) | |
| sheet_name | No | 子表名称(与 sheet_id 二选一;都不传时返回子表清单) | |
| spreadsheet_token | No | 电子表格 token(与 url 二选一) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses that it returns CSV text by default, that detail=cells exposes formulas/styles/comments, that omitting sheet params yields a sheet list, and that large tables may be truncated (the truncation note is in the schema but the description reinforces it). The read-only nature is implied by '读取'. This level of behavioral detail exceeds what a typical tool description provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core purpose and then quickly covers the key behavioral branches. There is no redundant wording; every clause adds information. The structure is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no output schema, and no annotations, the description is remarkably complete. It covers the main use cases, the two modes, the detail option, and the truncation caveat. It does not explicitly mention authentication or error handling, but those are typically implied for read tools and not essential for correct invocation. For a read tool, this description provides all the context an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the interplay between sheet_name/sheet_id and the list mode, and by stating the default behavior of range and detail. While some of this is also in the schema (e.g., '都不传时返回子表清单'), the description synthesizes the parameter logic into a coherent flow, which helps an agent understand how the parameters interact rather than just their individual meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a Feishu spreadsheet (电子表格), explicitly distinguishing it from multidimensional tables (不是多维表格). It also differentiates from sibling tools by specifying the two operational modes: returning a sheet list when no sheet is given, or reading a region when a sheet is provided. The verb '读取' (read) plus the resource '电子表格' makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditional guidance: '不传 sheet_name/sheet_id 时返回工作簿的子表清单;传入子表后按区域读取' (without sheet params, return the sheet list; with a sheet, read by region). It also clarifies the detail parameter options and the default CSV output. While it doesn't explicitly name alternative tools like read_feishu_base_records, it clearly delimits its scope by stating it is not for multidimensional tables, which effectively routes agents to the correct sibling. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_feishu_docs搜索飞书云文档A
按关键词搜索我有权限的飞书云空间对象(文档/电子表格/多维表格/知识库文档等),返回标题、类型、URL、更新时间。关键词最长 30 个字符。拿到 URL/token 后可用 read_feishu_doc 等工具进一步读写。
| Name | Required | Description | Default |
|---|---|---|---|
| mine | No | 只搜我担任所有者的对象 | |
| sort | No | 排序 | |
| query | Yes | 搜索关键词(≤30 字符),支持高级语法:intitle:标题 '精确短语' A OR B -排除词 | |
| doc_types | No | 按类型过滤(可多选) | |
| page_size | No | 每页条数(1-20) | |
| only_title | No | 只在标题中匹配 | |
| page_token | No | 上一页返回的翻页 token | |
| created_by_me | No | 只搜我创建的对象 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the return fields (title, type, URL, update time) and the permission scope. It does not explicitly state that it is read-only (though implied by being a search), nor does it describe pagination behavior or rate limits. It is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose, mentions the return fields, and provides a hint about follow-up tools. There is no fluff or redundancy, and every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, 1 required) and absence of an output schema, the description provides essential context: the scope of search, return fields, keyword length, and a pointer to related tools. It does not explain pagination or advanced syntax, but these are covered in the schema, so the description is sufficiently complete for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters have descriptions in the schema. The description adds minimal parameter-specific value beyond what the schema already provides (e.g., it mentions the 30-character limit, which is also in the schema). It does not clarify parameter semantics beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching Feishu cloud objects (documents, sheets, bitables, wiki pages, etc.) by keyword, returning title, type, URL, and update time. It explicitly names the sibling tool read_feishu_doc for further read/write operations, distinguishing itself as a discovery tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to find objects) versus siblings (to read/write them after obtaining URL/token). It mentions the keyword length limit and permission scope. However, it does not explicitly state when NOT to use it or provide alternative search methods, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_feishu_base_records写入多维表格记录A
向飞书多维表格(bitable)批量新增或更新记录,单次最多 200 条。mode=create 时 records 为字段对象数组;mode=update 时每项需含 record_id 和 fields。字段值约定:文本直接字符串,单选/多选用字符串数组,日期用 'YYYY-MM-DD HH:mm',勾选用 true/false,数字用数值。先用 describe_feishu_base 确认可写字段。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | create=批量新增;update=按 record_id 批量更新 | |
| records | Yes | 记录数组,单次最多 200 条 | |
| table_id | Yes | 数据表 ID(tbl 开头)或表名 | |
| base_token | Yes | 多维表格 token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It covers batch limit, mode-specific record structure, and field value type conventions, which are essential for correct invocation. However, it does not disclose partial-failure handling, idempotency, or overwrite semantics—traits an agent would need for a side-effectful write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, batch limit, mode semantics, value conventions, and prerequisite advice are delivered in three sentences. Every sentence contributes non-redundant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch write tool with four parameters and no output schema, the description covers all essential invocation details: mode, records shape, value types, and a prerequisite check. Missing error/response behavior is a gap, but it is not fatal for constructing a correct request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema has 100% coverage, the description adds a crucial mapping of Feishu field types (text, select, date, boolean, number) to JSON value conventions, which is absent from the schema. It also clarifies that update mode requires each item to contain both record_id and fields, a conditional requirement not enforced by the static schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool batch adds or updates records in Feishu bitable, naming both the operation and the resource. It distinguishes itself from siblings like read_feishu_base_records and describe_feishu_base by focusing on writing records, and the sibling list confirms write_feishu_doc/write_feishu_sheet target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises using describe_feishu_base to confirm writable fields, which is a clear prerequisite. It also implies usage scope by focusing on bitable records, but does not explicitly exclude other write tools. The mode guidance helps select between create/update parameters, but no alternative tools are named for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_feishu_doc写入飞书文档A
写入飞书云文档(docx / wiki),内容用 Markdown。模式:create=新建文档(需 title);append=在文末追加;replace=整篇覆盖已有文档(慎用,会丢弃原有内容);replace_text=把文档中的精确旧文本替换为新文本(适合小改动)。新建成功返回新文档的 url 和 document_id。
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | 目标文档 URL 或 token(append/replace/replace_text 必填) | |
| mode | Yes | 写入模式 | |
| title | No | 文档标题(create 必填) | |
| content | No | Markdown 内容(create 可选只建空文档;append/replace 必填) | |
| pattern | No | replace_text 必填:要被替换的旧文本(需与文档中的文本精确一致) | |
| parent_token | No | create 可选:父文件夹 token 或知识库节点 token,不传则建在个人空间 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the destructive nature of replace (discards original content) and clarifies that replace_text requires exact text matching. It also states the create return value. It doesn't cover auth, rate limits, or error cases, but the key side effects are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the core purpose and efficiently lists all modes with their constraints. Every sentence contributes useful behavioral or semantic information; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains create's return value but is silent about append/replace/replace_text return values or error behavior. With no output schema and no annotations, this leaves some ambiguity for an agent. However, the mode semantics and destructive warnings cover the most critical operational aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage, so the baseline is 3. The description adds substantial meaning beyond the schema by explaining the mode enum values in detail, noting that content is Markdown, and emphasizing that pattern must match exactly. This goes beyond the bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: writing Markdown content to Feishu cloud documents (docx/wiki). It enumerates four distinct modes (create, append, replace, replace_text), each with a specific verb and resource, and the modes naturally distinguish it from sibling read/search/sheet tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each mode, including a caution for replace ('慎用') and a recommendation for replace_text for small changes. It does not explicitly name alternative sibling tools or conditions to avoid this tool, but the mode-level guidance is strong enough to route correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_feishu_sheet写入飞书电子表格A
写入飞书电子表格。模式:overwrite=从锚点单元格(默认 A1)开始粘贴 CSV 文本;append=把 CSV(首行为表头)追加到子表末行;set_cell=向指定区域写值或公式(cells 为二维数组,如 [[{"value":"名称"},{"formula":"=SUM(A1:A2)"}]])。
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | overwrite/append 必填:RFC-4180 CSV 文本(append 时首行视为表头) | |
| url | No | 电子表格 URL(与 spreadsheet_token 二选一) | |
| mode | Yes | 写入模式 | |
| cells | No | set_cell 必填:单元格二维数组的 JSON 字符串 | |
| range | No | set_cell 必填:目标区域,如 A1:B2 | |
| sheet_id | No | 子表 ID(与 sheet_name 二选一,必填) | |
| sheet_name | No | 子表名称(与 sheet_id 二选一,必填) | |
| start_cell | No | overwrite 锚点单元格,默认 A1 | |
| allow_overwrite | No | 是否允许覆盖非空单元格,默认允许 | |
| spreadsheet_token | No | 电子表格 token(与 url 二选一) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains what each mode does (pastes CSV, appends with header, writes values/formulas) and gives a concrete cells example, which is helpful. However, it omits important side effects such as overwrite behavior (allow_overwrite parameter), what happens to existing data, authentication requirements (check_feishu_auth exists as a sibling), or rate limits. For a write operation, this level of disclosure is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence but packs in all essential mode information without fluff. It is front-loaded with the purpose and then enumerates modes. While a bulleted list might improve readability, the current structure is efficient and every clause earns its place. Slightly verbose but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, 3 modes, no output schema, no annotations), the description covers the core usage scenarios well: it explains all three modes, which parameters are required for each, and provides a concrete example. It lacks guidance on parameter conflicts (e.g., both url and spreadsheet_token provided) and the effect of allow_overwrite, but those are covered in schema descriptions. The description is adequate for an agent to invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds significant value by linking parameters to modes: csv for overwrite/append, cells and range for set_cell, start_cell for overwrite, and clarifying that append treats the first row as a header. It also provides a detailed example of the cells format. This goes beyond the schema's individual descriptions and aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb '写入' (write) and the resource '飞书电子表格' (Feishu spreadsheet), and further breaks down into three distinct modes with concrete behaviors. This distinguishes it from siblings like read_feishu_sheet (read) and write_feishu_doc (doc vs sheet), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit mode-specific instructions (overwrite, append, set_cell) that act as usage guidance within the tool, including what each mode expects (CSV, anchor cell, sheet last row, cells array). However, it does not mention when to choose this tool over alternatives like read_feishu_sheet or write_feishu_doc, relying on the name for that distinction. This is a minor gap given the tool's name is self-explanatory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
check_feishu_auth - First observed
describe_feishu_base - First observed
read_feishu_base_records - First observed
read_feishu_doc - First observed
read_feishu_sheet - First observed
search_feishu_docs - First observed
write_feishu_base_records - First observed
write_feishu_doc - First observed
write_feishu_sheet
TDQS
Scored across 9 tools
Tools are mostly distinct by resource type (doc vs sheet vs base) and action (read vs write vs describe vs search vs auth). The only potential confusion is read_feishu_doc vs search_feishu_docs (both involve docs) and read_feishu_sheet vs read_feishu_base_records (both read tabular data), but descriptions clarify the resource types clearly.
Most tools follow a consistent verb_noun pattern: read_feishu_doc, write_feishu_doc, read_feishu_sheet, write_feishu_sheet, read_feishu_base_records, write_feishu_base_records. Minor deviations: describe_feishu_base (uses describe instead of read), search_feishu_docs (plural docs), and check_feishu_auth (uses check instead of a resource noun).
9 tools is well-scoped for a Feishu/Lark workspace server covering docs, sheets, bitable, search, and auth. Each tool earns its place and the count is within the ideal 3-15 range.
The server covers read/write for docs, sheets, and bitable records, plus schema discovery, search, and auth check. Minor gaps: no delete/update for docs or sheets, no bitable table creation or schema modification, and no explicit tool for listing docs/sheets (though search covers discovery).
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA zero-configuration MCP server enabling AI assistants to interact with Feishu (Lark) workspace through OAuth authentication, supporting document operations, content creation, and advanced file management.21 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to search, read, create, and update Feishu/Lark documents and wiki pages. It facilitates seamless document management and wiki searches through OAuth-authenticated API access.21 npm-
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to access Feishu (Lark) knowledge base and cloud documents through the MCP protocol.21 npm1ISC
- 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