cursor配置飞书MCP(lark-mcp)

本文介绍在本机用cursor 接入飞书开放平台官方MCP(@larksuiteoapi/lark-mcp)的步骤。

官方仓库与文档:larksuite/lark-openapi-mcp;飞书说明:OpenAPI MCP 介绍


1. 前置条件

1.1 安装 nvm(若尚未安装)

nvm用来在同一台机器上安装、切换多版本Node。在终端执行(以官方文档为准,以下为常见写法):

bash 复制代码
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

安装完成后,把加载脚本写入shell 配置(zsh~/.zshrcbash~/.bashrc):

bash 复制代码
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

执行source ~/.zshrc(或重新打开终端),确认command -v nvm有输出。

1.2 安装 Node.js 20 并作为默认版本

@larksuiteoapi/lark-mcp要求Node ≥ 20 。建议用 nvm 安装20 LTS ,并设为默认,这样终端与GUI子进程里的node/npx都指向同一主版本。

bash 复制代码
nvm install 20
nvm alias default 20
nvm use 20
node -v   # 应显示 v20.x.x
which node

常用命令备忘:

bash 复制代码
nvm ls              # 查看本机已安装的 Node 版本
nvm use 20          # 当前 shell 切换到 20
nvm alias default 20  # 新开终端默认使用 20

1.3 安装@larksuiteoapi/lark-mcp

bash 复制代码
npm install -g @larksuiteoapi/lark-mcp
lark-mcp --help

1.4 飞书开放平台应用

飞书开放平台创建自建应用,拿到App IDApp Secret ,并按需开通、审批 API 权限。如果你不清楚如何创建飞书应用可以参考:02.创建飞书应用,飞书应用中我开通的权限列表如下:

复制代码
{
  "scopes": {
    "tenant": [
      "aily:file:read",
      "aily:file:write",
      "aily:message:read",
      "aily:message:write",
      "application:application.app_message_stats.overview:readonly",
      "application:application:self_manage",
      "application:bot.menu:write",
      "base:field:read",
      "base:field:update",
      "base:record:read",
      "base:record:update",
      "base:table:read",
      "base:table:update",
      "bitable:app",
      "bitable:app:readonly",
      "cardkit:card:write",
      "contact:contact.base:readonly",
      "contact:user.base:readonly",
      "contact:user.employee_id:readonly",
      "corehr:file:download",
      "docs:doc",
      "docs:doc:readonly",
      "docs:document.comment:create",
      "docs:document.comment:read",
      "docs:document.comment:update",
      "docs:document.comment:write_only",
      "docs:document.content:read",
      "docs:document.media:download",
      "docs:document.media:upload",
      "docs:document.subscription",
      "docs:document.subscription:read",
      "docs:document:copy",
      "docs:document:export",
      "docs:document:import",
      "docx:document",
      "docx:document.block:convert",
      "docx:document:readonly",
      "drive:drive",
      "event:ip_list",
      "im:chat",
      "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.announcement:read",
      "im:chat.announcement:write_only",
      "im:chat.managers:write_only",
      "im:chat.members:bot_access",
      "im:chat.members:read",
      "im:chat.members:write_only",
      "im:chat.menu_tree:read",
      "im:chat.menu_tree:write_only",
      "im:chat.moderation:read",
      "im:chat.tabs:read",
      "im:chat.tabs:write_only",
      "im:chat.top_notice:write_only",
      "im:chat.widgets:read",
      "im:chat.widgets:write_only",
      "im:chat:create",
      "im:chat:delete",
      "im:chat:moderation:write_only",
      "im:chat:operate_as_owner",
      "im:chat:read",
      "im:chat:readonly",
      "im:chat:update",
      "im:message",
      "im:message.group_at_msg:readonly",
      "im:message.group_msg",
      "im:message.p2p_msg:readonly",
      "im:message.pins:read",
      "im:message.pins:write_only",
      "im:message.reactions:read",
      "im:message.reactions:write_only",
      "im:message.urgent",
      "im:message.urgent.status:write",
      "im:message.urgent:phone",
      "im:message.urgent:sms",
      "im:message:readonly",
      "im:message:recall",
      "im:message:send_as_bot",
      "im:message:send_multi_depts",
      "im:message:send_multi_users",
      "im:message:send_sys_msg",
      "im:message:update",
      "im:resource",
      "im:tag:read",
      "im:url_preview.update",
      "sheets:spreadsheet",
      "wiki:wiki",
      "wiki:wiki:readonly"
    ],
    "user": [
      "aily:file:read",
      "aily:file:write",
      "base:app:copy",
      "base:app:create",
      "base:app:read",
      "base:app:update",
      "base:collaborator:create",
      "base:collaborator:delete",
      "base:collaborator:read",
      "base:dashboard:copy",
      "base:dashboard:read",
      "base:field:create",
      "base:field:delete",
      "base:field:read",
      "base:field:update",
      "base:form:read",
      "base:form:update",
      "base:record:create",
      "base:record:delete",
      "base:record:read",
      "base:record:retrieve",
      "base:record:update",
      "base:role:create",
      "base:role:delete",
      "base:role:read",
      "base:role:update",
      "base:table:create",
      "base:table:delete",
      "base:table:read",
      "base:table:update",
      "base:view:read",
      "base:view:write_only",
      "base:workflow:read",
      "base:workflow:write",
      "bitable:app",
      "bitable:app:readonly",
      "board:whiteboard:node:create",
      "board:whiteboard:node:delete",
      "board:whiteboard:node:read",
      "board:whiteboard:node:update",
      "calendar:calendar",
      "calendar:calendar:readonly",
      "docs:document.comment:create",
      "docs:document.comment:read",
      "docs:document.comment:update",
      "docs:document.comment:write_only",
      "docs:document.content:read",
      "docs:document.media:upload",
      "docs:document.subscription",
      "docs:document.subscription:read",
      "docs:document:copy",
      "docs:document:import",
      "docs:event.document_deleted:read",
      "docs:event.document_edited:read",
      "docs:event.document_opened:read",
      "docs:event:subscribe",
      "docs:permission.member",
      "docs:permission.member:auth",
      "docs:permission.member:create",
      "docs:permission.member:delete",
      "docs:permission.member:readonly",
      "docs:permission.member:retrieve",
      "docs:permission.member:transfer",
      "docs:permission.member:update",
      "docs:permission.setting",
      "docs:permission.setting:read",
      "docs:permission.setting:readonly",
      "docs:permission.setting:write_only",
      "docx:document",
      "docx:document.block:convert",
      "docx:document:create",
      "docx:document:readonly",
      "docx:document:write_only",
      "drive:drive.metadata:readonly",
      "drive:drive:version",
      "drive:drive:version:readonly",
      "drive:file.like:readonly",
      "drive:file.meta.sec_label.read_only",
      "drive:file:upload",
      "drive:file:view_record:readonly",
      "im:chat",
      "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.announcement:read",
      "im:chat.announcement:write_only",
      "im:chat.managers:write_only",
      "im:chat.members:read",
      "im:chat.members:write_only",
      "im:chat.moderation:read",
      "im:chat.tabs:read",
      "im:chat.tabs:write_only",
      "im:chat.top_notice:write_only",
      "im:chat:delete",
      "im:chat:moderation:write_only",
      "im:chat:read",
      "im:chat:readonly",
      "im:chat:update",
      "im:message",
      "im:message.pins:read",
      "im:message.pins:write_only",
      "im:message.reactions:read",
      "im:message.reactions:write_only",
      "im:message.urgent.status:write",
      "im:message:readonly",
      "im:message:recall",
      "im:message:update",
      "sheets:spreadsheet",
      "sheets:spreadsheet.meta:read",
      "sheets:spreadsheet.meta:write_only",
      "sheets:spreadsheet:create",
      "sheets:spreadsheet:readonly",
      "slides:presentation:create",
      "slides:presentation:read",
      "slides:presentation:update",
      "slides:presentation:write_only",
      "space:document.event:read",
      "space:document:delete",
      "space:document:move",
      "space:document:shortcut",
      "space:folder:create",
      "wiki:member:create",
      "wiki:member:retrieve",
      "wiki:member:update",
      "wiki:node:copy",
      "wiki:node:create",
      "wiki:node:move",
      "wiki:node:read",
      "wiki:node:retrieve",
      "wiki:node:update",
      "wiki:setting:read",
      "wiki:setting:write_only",
      "wiki:space:read",
      "wiki:space:retrieve",
      "wiki:space:write_only",
      "wiki:wiki",
      "wiki:wiki:readonly"
    ]
  }
}

2. 在cursor中配置飞书MCP

首先打开cursor配置

接下来选择Tools&MCP,并选择New MCP Server,因为我已经增加了lark-mcp,所以我这里已经有一个MCP在列表中。

2.1 应用身份

在上述New MPC Server打开的配置文件中,增加以下配置。在已默认使用 Node 20 的前提下,推荐直接用npx

复制代码
{
  "mcpServers": {
    "lark-mcp": {
      "command": "npx",
      "args": ["-y", "@larksuiteoapi/lark-mcp", "mcp"],
      "env": {
        "APP_ID": "<你的 App ID>",
        "APP_SECRET": "<你的 App Secret>",
        "LARK_DOMAIN": "https://open.feishu.cn"
      }
    }
  }
}

国际版Lark将LARK_DOMAIN 改为https://open.larksuite.com

2.2 用户身份与OAuth

你仍然需要在终端完成一次浏览器授权。默认Node 20后可直接用:

bash 复制代码
npx -y @larksuiteoapi/lark-mcp login -a <App ID> -s '<App Secret>'

3. 使用

在完成了以上配置后,你可以直接把飞书文档链接粘贴到cursor agent对话框让它帮你读文档或者写文档啦。

4. 安全建议

  • 不要把 App Secret 提交到 Git、贴到公开聊天。泄露后应在开放平台重置密钥
  • mcp.json若含密钥,注意文件权限与备份范围。
相关推荐
PM老周18 小时前
团队知识库软件哪个好用?ONES、Confluence、Notion、飞书、语雀等主流工具对比
飞书·confluence·ones·知识库管理
JMchen12318 小时前
2026年六款主流AI编程工具深度实测:Cursor、Copilot、Claude Code等对比与选型思考
android·kotlin·copilot·ai编程·开发工具·cursor·claude code
货拉拉技术18 小时前
让 AI 真正读懂你的代码:一套可复用的 Cursor 辅助编码实践
cursor
xrlfreedom19 小时前
大厂 MCP 面试实录:本地 stdio MCP Server 远程化改造方案
tools·mcp·stdio 传输
码农阿豪1 天前
我把 OpenClaw 装进旧安卓手机后,又折腾了 3 天:飞书、ADB、SSH 全部打通
android·智能手机·飞书
deepseek232 天前
从 MCP 工具定义自动生成 Agent 评测集:把可靠性验证接入 CI
持续集成·ai agent·mcp·llm 评测
Blockbuater_drug2 天前
MCP Server 接入实战: 9种平台配置差异与凭证安全
claude·cursor·mcp·openclaw·hermes agent·dsh·agent 配置
Geek-Chow2 天前
MCP 模型上下文协议:八、深入传输层 · stdio 与 Streamable HTTP
人工智能·mcp
asaotomo2 天前
从抓包插件到浏览器安全 Agent:Hx0 鹰眼 v1.0.6,正式接入 MCP
安全·渗透测试·agent·浏览器插件·ai工具·mcp
golang学习记3 天前
Cursor Origin:Cursor要造一个AI时代的Github
人工智能·github·cursor