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若含密钥,注意文件权限与备份范围。
相关推荐
tiger从容淡定是人生17 小时前
AI替代软件战略(一):从 CCleaner 到 MCP 架构重构 —— TigerCleaner 的工程实践
人工智能·重构·架构·c#·mcp
@SmartSi19 小时前
Spring AI 实战:如何使用 MCP Server 搭建 MCP 天气查询服务
spring ai·mcp
qcx2320 小时前
拆解 Warp AI Agent(五):跨生态联邦——10 种 Skill + MCP + 多 Harness 互操作设计
人工智能·rust·ai agent·skill·warp·mcp·harness
无糖可乐没有灵魂1 天前
AI Agent结构图例和工作流程描述
ai·llm·prompt·agent·mcp·skills
Joseph Cooper2 天前
AI Agent 落地入门:从模型、工具到 Skills 与 MCP 的分工
人工智能·ai·agent·claude·skill·mcp
@SmartSi2 天前
Spring AI 实战:如何使用 MCP Client 接入 MCP 天气查询服务
spring ai·mcp
少许极端2 天前
AI修炼记2-MCP
人工智能·ai·mcp
Zhencode2 天前
Python创建MCP服务
python·mcp
小蠢驴打代码2 天前
我做了一个工具:一键同步 Claude Code、Cursor、Codex 的 MCP 和 Skills 配置
openai·claude·cursor