Feishu Wiki
БесплатноНе проверенAn MCP server that exposes Feishu (Lark) APIs as standardized tools, enabling knowledge base, document, spreadsheet, and IM operations through any MCP client.
Описание
An MCP server that exposes Feishu (Lark) APIs as standardized tools, enabling knowledge base, document, spreadsheet, and IM operations through any MCP client.
README
本项目是面向 MCP 客户端的飞书服务网关,运行时通过飞书开放平台 API 提供标准化工具调用。
- 运行时:Node.js >= 20 + stdio transport(
@modelcontextprotocol/sdk) - 入口:
build/index.js - 当前版本:
1.3.1 - 包名:
@akaknele/feishu-wiki-mcp - 当前可用 Tool:36 个
一、部署与启动方式
1. 开发构建与本地运行
npm install
npm run build
npm start -- --app-id <APP_ID> --app-secret <APP_SECRET>
2. OAuth 模式(用于用户授权)
适用于需要用户级权限(user token)的场景:
npm start -- --app-id <APP_ID> --app-secret <APP_SECRET> --oauth --port 3001
2b. 预置 Token 模式(无浏览器,适合第三方 MCP 客户端)
当第三方应用(Claude Desktop、Cursor 等)安装 MCP 无法弹出浏览器时,可提前获取 user token 后通过参数或环境变量传入,完全跳过 OAuth 授权流程:
# 命令行参数
feishu-wiki-mcp --app-id <APP_ID> --app-secret <APP_SECRET> \
--user-token <USER_ACCESS_TOKEN> \
--refresh-token <REFRESH_TOKEN>
# 或环境变量(推荐)
FEISHU_APP_ID=cli_xxx \
FEISHU_APP_SECRET=secret_xxx \
FEISHU_USER_TOKEN=u-xxx \
FEISHU_REFRESH_TOKEN=ur-xxx \
feishu-wiki-mcp
MCP 客户端配置示例:
{
"mcpServers": {
"feishu-wiki-mcp": {
"command": "feishu-wiki-mcp",
"args": ["--app-id", "<APP_ID>", "--app-secret", "<APP_SECRET>"],
"env": {
"FEISHU_USER_TOKEN": "<USER_ACCESS_TOKEN>",
"FEISHU_REFRESH_TOKEN": "<REFRESH_TOKEN>"
}
}
}
}
token 过期后会自动用
refresh_token刷新;refresh_token 也过期则报错,需重新获取。
2c. 如何获取 User Token
预置模式需要提前拿到 user_access_token 和 refresh_token,有以下三种方式:
方式一:运行一次 --oauth,从缓存文件提取(推荐)
在有浏览器的机器上完成一次授权:
feishu-wiki-mcp --app-id cli_xxx --app-secret xxx --oauth --port 3001
授权成功后读取缓存文件:
cat ~/.feishu-wiki-mcp-token.json
输出示例:
{
"access_token": "u-xxx...",
"refresh_token": "ur-xxx...",
"expires_at": 1234567890000,
"refresh_expires_at": 9876543210000
}
将 access_token 和 refresh_token 填入环境变量即可。refresh_token 有效期约 30 天,MCP 会自动续期 access_token,正常使用无感知。
方式二:飞书开放平台 API 调试台(无需写代码)
- 打开 open.feishu.cn → 进入你的应用
- 左侧菜单选择 "开发工具 → API 调试台"
- 右上角鉴权方式选择 "用户身份(user_access_token)",点击授权登录
- 授权完成后,调试台会自动填入 token,复制即可
方式三:手动 OAuth 换 token(Shell 脚本)
适合自动化脚本场景,需要一个可访问的回调地址(本地 localhost 即可):
# 替换为你的 App ID / Secret
APP_ID="cli_xxx"
APP_SECRET="xxx"
PORT=3001
# Step 1:用浏览器打开授权 URL,完成后从地址栏取 code 参数
SCOPES="wiki:wiki docx:document drive:drive bitable:bitable im:message contact:user.id:readonly"
echo "请用浏览器访问以下地址完成授权:"
echo "https://open.feishu.cn/open-apis/authen/v1/index?app_id=${APP_ID}&redirect_uri=http%3A%2F%2Flocalhost%3A${PORT}%2Fcallback&scope=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${SCOPES}'))")"
echo ""
read -p "粘贴回调 URL 中的 code 参数值: " CODE
# Step 2:获取 app_access_token
APP_TOKEN=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal" \
-H "Content-Type: application/json" \
-d "{\"app_id\":\"${APP_ID}\",\"app_secret\":\"${APP_SECRET}\"}" | jq -r .app_access_token)
# Step 3:用 code 换 user_access_token + refresh_token
curl -s -X POST "https://open.feishu.cn/open-apis/authen/v1/oidc/access_token" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${APP_TOKEN}" \
-d "{\"grant_type\":\"authorization_code\",\"code\":\"${CODE}\"}" | jq '{access_token: .data.access_token, refresh_token: .data.refresh_token}'
运行后输出的 access_token 和 refresh_token 即可填入环境变量。
Token 有效期说明
| Token | 有效期 | 过期行为 |
|---|---|---|
user_access_token |
~2 小时 | MCP 自动用 refresh_token 续期 |
refresh_token |
~30 天 | 需重新走上述任一方式获取 |
3. 安装后直接运行
npm install -g @akaknele/[email protected]
feishu-wiki-mcp --app-id <APP_ID> --app-secret <APP_SECRET>
或使用 npx:
npx @akaknele/[email protected] --app-id <APP_ID> --app-secret <APP_SECRET>
4. MCP 客户端接入(示例)
{
"mcpServers": {
"feishu-wiki-mcp": {
"command": "feishu-wiki-mcp",
"args": ["--app-id", "<APP_ID>", "--app-secret", "<APP_SECRET>"]
}
}
}
OAuth 模式示例:
{
"mcpServers": {
"feishu-wiki-mcp": {
"command": "feishu-wiki-mcp",
"args": ["--app-id", "<APP_ID>", "--app-secret", "<APP_SECRET>", "--oauth", "--port", "3001"]
}
}
}
二、外网网络(OAuth)要求
若在企业内网/防火墙下运行,需要放行:
https://open.feishu.cnhttps://openapi.*.feishu.cn(飞书 API 域名)
OAuth 回调地址默认为:
http://localhost:3001/callback
因此对应机器的 3001 端口需要可访问(对本机浏览器即可),并且回调 URL 能回传到该本机实例。
三、核心流程
- 启动服务并通过参数选择 tenant 模式或 OAuth 模式
- MCP 客户端请求对应 tool
- 服务器内部自动获取并刷新 token(
~/.feishu-wiki-mcp-token.json) - 使用 token 调用飞书接口并返回结构化 JSON
四、工具清单(36)
工具清单质量说明
每个工具都以 MCP tool schema 的实际参数定义为准,返回值默认为飞书 API 的 JSON 响应文本。
知识库(Wiki)
| 工具 | 用途 | 必填参数 | 可选参数 |
|---|---|---|---|
wiki_list_spaces |
列出当前用户可见知识库 | 无 | page_size(1-50), page_token |
wiki_get_space |
获取知识库详情 | space_id |
无 |
wiki_list_nodes |
列出知识库子节点(默认顶层) | space_id |
parent_node_token, page_size(1-50), page_token |
wiki_get_node |
通过 wiki token 或文档 token 获取节点 | token |
obj_type(doc/docx/sheet/mindnote/bitable/file/slides/wiki) |
wiki_create_node |
创建知识库节点(文档/表格等) | space_id, obj_type |
parent_node_token, node_type(origin/shortcut, 默认 origin), title |
wiki_move_node |
在知识库内移动节点 | space_id, node_token |
target_parent_token, target_space_id |
wiki_move_docs_to_wiki |
将云空间文档移动进知识库 | space_id, obj_type, obj_token |
parent_wiki_token |
wiki_update_title |
更新节点标题 | space_id, node_token, title |
无 |
wiki_copy_node |
复制节点(可跨库) | space_id, node_token |
target_parent_token, target_space_id, title |
wiki_search |
搜索知识库节点 | query |
space_id, page_size, page_token |
wiki_create_node_with_markdown |
🆕 一步创建带 Markdown 内容的 wiki 文档(上传→转换→移入知识库) | space_id, markdown |
title(<=27 字符), parent_node_token |
文档(Docx)
| 工具 | 用途 | 必填参数 | 可选参数 |
|---|---|---|---|
doc_get_raw_content |
获取文档纯文本内容 | document_id |
无 |
doc_search |
搜索云文档 | search_key |
count(0-50), offset, owner_ids, docs_types |
doc_import |
导入 Markdown 创建飞书文档(自动上传 → 转换 docx)。🆕 v1.3: 可选传入 space_id 直接写入知识库 |
markdown |
file_name(<=27 字符), folder_token, space_id(传入后自动移入知识库), parent_wiki_token |
doc_list_blocks |
列出文档所有块 | document_id |
page_size(1-500), page_token, document_revision_id |
doc_get_block |
获取指定块详情 | document_id, block_id |
document_revision_id |
doc_create_blocks |
在指定父块下插入子块。🆕 v1.3: 补全所有 block_type 文档 + 客户端参数校验 | document_id, block_id, children |
index(插入位置,默认追加) |
doc_update_block |
更新指定块内容(PATCH) | document_id, block_id, update |
无 |
doc_delete_blocks |
删除父块下指定区间的子块 | document_id, block_id, start_index, end_index |
无 |
多维表格(Bitable)
| 工具 | 用途 | 必填参数 | 可选参数 |
|---|---|---|---|
bitable_create_app |
创建多维表格应用 | 无 | name, folder_token |
bitable_list_tables |
列出应用内表 | app_token |
page_size, page_token |
bitable_create_table |
创建数据表 | app_token, name |
default_view_name, fields(字段列表) |
bitable_list_fields |
列出表字段 | app_token, table_id |
page_size, page_token |
bitable_search_records |
条件筛选记录 | app_token, table_id |
field_names, filter(conjunction+conditions), sort, page_size(<=500), page_token |
bitable_create_record |
新增记录 | app_token, table_id, fields |
无 |
bitable_update_record |
更新记录 | app_token, table_id, record_id, fields |
无 |
IM 与联系人
| 工具 | 用途 | 必填参数 | 可选参数 |
|---|---|---|---|
im_send_message |
发送消息(文本/卡片等) | receive_id, receive_id_type, msg_type, content |
无 |
im_list_messages |
获取聊天历史 | container_id |
container_id_type(chat/thread,默认 chat), start_time, end_time, sort_type, page_size, page_token |
im_list_chats |
获取用户/机器人群聊列表 | 无 | page_size, page_token, sort_type |
im_create_chat |
创建群聊 | 无 | name, description, chat_type(private/public), user_id_list, owner_id |
im_get_chat_members |
获取群成员 | chat_id |
page_size, page_token |
contact_batch_get_user_id |
批量通过邮箱/手机号查用户 ID | 无 | emails(每项 string, 最多 50), mobiles(每项 string, 最多 50) |
权限与删除
| 工具 | 用途 | 必填参数 | 可选参数 |
|---|---|---|---|
drive_add_permission |
为云文档添加协作者权限 | token, type, member_id, member_type, perm |
无 |
wiki_delete_node |
将 wiki 节点移出到云空间根目录(第一步);之后用 drive_delete_file 彻底删除(飞书无公开 wiki 删除 API) |
space_id, node_token(wiki node token,非 obj_token) |
无 |
drive_upload_file |
🆕 上传文件到云空间(base64),获取 file_token 用于插入图片等 |
file_name, base64 |
parent_type(默认 explorer), parent_node |
drive_delete_file |
删除云空间文件(移至回收站) | file_token, type |
无 |
说明
fields(Bitable 相关)通常使用字段名/系统键映射值;建议先用bitable_list_fields明确 schema 后再写入。im_send_message的content按对应msg_type要求传入 JSON 字符串。doc_import:先上传 md 文件获取file_token,再创建导入任务转换为 docx,轮询等待最多 30 秒。v1.3 新增space_id+parent_wiki_token参数,导入后可自动移入知识库。wiki_create_node_with_markdown:一步到位创建带内容的 wiki 文档。内部自动完成:上传 Markdown → 转换为 docx → 移入知识库。适合 AI Agent 快速创建结构化文档。doc_create_blocks:v1.3 新增客户端参数校验,block_type 与字段名不匹配时会返回明确错误提示(如block_type=4 需要字段 "heading2"),避免飞书 API 返回笼统的invalid param。支持的 block_type:2=text, 3-9=heading1-7, 11=bullet, 12=ordered, 14=code, 15=quote, 22=divider, 27=image, 31=table, 34=callout。drive_upload_file:上传 base64 编码的文件到云空间,返回file_token,可配合doc_create_blocks的 image block(block_type=27)在文档中插入图片。wiki_delete_node:飞书无公开 wiki 删除 API。本工具将节点移出 wiki 至云空间根目录(step1),之后需通过drive_delete_file删除底层文件(step2)。需要 wiki node token,可从wiki_list_nodes返回的node_token字段获取。
五、安全与生产部署
最小可运行参数清单
启动参数(必备)
--app-id:飞书应用 ID(必填,可用FEISHU_APP_ID环境变量代替)--app-secret:飞书应用 Secret(必填,可用FEISHU_APP_SECRET代替)--oauth:启动浏览器 OAuth 授权模式(可选)--port:OAuth 回调端口(可选,默认3001)--user-token:预置用户 access token,跳过浏览器授权(可选,可用FEISHU_USER_TOKEN代替)--refresh-token:预置 refresh token,token 过期时自动刷新(可选,可用FEISHU_REFRESH_TOKEN代替)
推荐环境变量
FEISHU_APP_IDFEISHU_APP_SECRETFEISHU_USER_TOKEN(预置模式,无需浏览器)FEISHU_REFRESH_TOKEN(配合 user token 自动续期)FEISHU_OAUTH=true/false(已废弃,建议改用 user token 模式)
示例 .env
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=secret_xxx
FEISHU_OAUTH=true
FEISHU_MCP_PORT=3001
示例启动脚本(避免在命令行直接暴露明文)
set -a
source .env
set +a
if [ "${FEISHU_OAUTH}" = "true" ]; then
feishu-wiki-mcp --app-id "$FEISHU_APP_ID" --app-secret "$FEISHU_APP_SECRET" --oauth --port "${FEISHU_MCP_PORT:-3001}"
else
feishu-wiki-mcp --app-id "$FEISHU_APP_ID" --app-secret "$FEISHU_APP_SECRET"
fi
版本与发布一致性
- 当前代码版本:
1.3.1(package.json中version) - MCP 运行主文件:
build/index.js - 发布示例(建议保持一致):
npm version patch # 或 npm version 1.0.7
npm run build # 确保生成 build/index.js
npm publish --access public
# 标签建议与版本一致
git tag v1.0.7
git push --tags
安全与生产环境建议
端口访问控制
- OAuth 回调默认地址固定为
http://localhost:${port}/callback(当前实现不支持自定义 callback host/path)。 - 生产部署中建议只对内网开放
3001,并通过反向代理对外暴露时加 IP 白名单/鉴权。 - 避免将该端口放到公开网段;如需公网访问,建议使用 VPN 或 SSH 隧道到内网服务端。
token 文件权限
- 用户 token 缓存在
~/.feishu-wiki-mcp-token.json。 - 建议设置严格权限:
chmod 600 ~/.feishu-wiki-mcp-token.json
chown "$USER" ~/.feishu-wiki-mcp-token.json
- 建议使用独立运行用户,避免多人共享 HOME 目录。
- 需要强制重新登录时,删除该文件可清除会话缓存。
日志脱敏
- 运行时禁止在 shell 中开启
set -x,避免把APP_SECRET打印到日志。 - 当前日志仅输出错误描述,不应泄露 token 明文;如你接入统一日志系统,请开启敏感字段脱敏(如
app_secret、token)。
回调地址与 HTTPS 要求
- 本地开发/单机场景:
http://localhost:<port>/callback是可用的。 - 生产场景若通过反向代理对外网开放,建议使用 HTTPS 并把代理层回调地址映射为该本机回调,同时在飞书应用配置中放行对应可访问域名。
- 若需自定义公网 callback(非 localhost),需修改
doOAuthFlow中redirectUri逻辑并重新构建发布。
六、发布(如需维护 npm)
npm version patch # 或指定版本号
npm login --registry https://registry.npmjs.org
npm publish --access public
git tag v1.0.7
git push --tags
七、故障排查
feishu-wiki-mcp命令未找到:先确认全局安装成功,npm bin -g在PATH- 启动报 token 错误:检查 APP_ID / APP_SECRET 是否正确、应用是否开通对应权限
- OAuth 首次无效:检查 callback URL 是否可达、端口放行是否正常、浏览器可打开授权链接
- Token 缓存文件:
~/.feishu-wiki-mcp-token.json(每个用户一份,按需清理可强制重新登录)
八、当前版本行为边界
- 当前实现基于
@modelcontextprotocol/sdk的 stdio transport,适配本地/远程 MCP 客户端调用 - 已实现 36 个工具,按需在服务端扩展后可追加
九、Changelog
v1.3.0
- 新增
wiki_create_node_with_markdown:一步到位在知识库中创建带 Markdown 内容的文档节点。内部自动完成:上传 Markdown → 转换为 docx → 移入知识库指定位置。AI Agent 只需一次调用即可完成之前需要 3 步(create_node → list_blocks → create_blocks)的操作。 - 新增
drive_upload_file:支持 base64 编码文件上传到飞书云空间,返回file_token,可用于在文档中插入图片等场景。 - 增强
doc_import:新增space_id+parent_wiki_token可选参数,导入 Markdown 后自动将文档移入知识库,省去手动调用wiki_move_docs_to_wiki。 - 增强
doc_create_blocks:- 补全所有 block_type 文档:新增 11=bullet、12=ordered、15=quote、22=divider 等类型的完整 JSON 示例
- 新增客户端参数校验:block_type 与字段名不匹配时返回明确错误提示(如
block_type=4 需要字段 "heading2"),不再依赖飞书 API 笼统的invalid param错误
v1.2.0
- bugfix
doc_import:修复创建空文档的问题。现在正确实现三步流程:① 上传 md 文件获取file_token→ ② 创建导入任务(md→docx)→ ③ 轮询等待,内容完整导入。 - bugfix
wiki_delete_node:飞书无公开 wiki 删除端点(DELETE 返回 404)。改为两步删除工作流:本工具先将节点移出 wiki 至云空间根目录,再配合drive_delete_file彻底删除底层文件。
v1.1.0
- 新增 5 个 Docx Blocks 操作工具:
doc_list_blocks、doc_get_block、doc_create_blocks、doc_update_block、doc_delete_blocks,支持对飞书文档内容的完整 CRUD - 新增
wiki_delete_node、drive_delete_file删除工具 - OAuth 改进:支持
--user-token/--refresh-token参数和FEISHU_USER_TOKEN/FEISHU_REFRESH_TOKEN环境变量,第三方 MCP 客户端无需浏览器即可授权 - 环境变量支持
FEISHU_APP_ID/FEISHU_APP_SECRET
v1.0.7
- 初始版本,27 个工具(Wiki、Bitable、IM、权限)
Установка Feishu Wiki
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/akakenle/feishu-wiki-mcpFAQ
Feishu Wiki MCP бесплатный?
Да, Feishu Wiki MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Feishu Wiki?
Нет, Feishu Wiki работает без API-ключей и переменных окружения.
Feishu Wiki — hosted или self-hosted?
Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.
Как установить Feishu Wiki в Claude Desktop, Claude Code или Cursor?
Открой Feishu Wiki на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Feishu Wiki with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
