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若含密钥,注意文件权限与备份范围。
相关推荐
hello world 9992 小时前
Cursor开发实战应用
c++·ai编程·cursor
胡哈3 小时前
MCP (Model Context Protocol) 原理与实战
node.js·mcp
-许平安-4 小时前
MCP项目笔记十(客户端 MCPClient)
c++·笔记·ai·raii·mcp·pluginapi·plugin system
jekc8689 小时前
windows 基于ollama配置openclaw和飞书私有化部署
飞书
阿梦Anmory19 小时前
claude code连接飞书
飞书
进击的野人1 天前
MCP协议:让AI应用像插USB一样连接外部世界
人工智能·agent·mcp
花千树-0101 天前
MCP + Function Calling:让模型自主驱动工具链完成多步推理
java·agent·react·mcp·toolcall·harness·j-langchain
锵锵锵锵~蒋1 天前
AI全托管处理EXCEL(并接入AI平台)
人工智能·excel·mcp·ai全托管·ai提效’