MCP Hub
Back to servers

@hibson/mcp-feishu-doc

A Model Context Protocol (MCP) server for Feishu (Lark) cloud document and wiki management. Supports OAuth, Markdown upload, document reading/updating/deleting, search, and multi-app configuration.

npm102/wk
Updated
Mar 6, 2026

Quick Install

npx -y @hibson/mcp-feishu-doc

mcp-feishu-doc

飞书(Lark)云文档与知识库管理的 MCP 服务器。支持 OAuth 授权、Markdown 上传/更新/删除、文档搜索、多应用配置,以及本地和边缘(Cloudflare Workers)运行。

15 个飞书工具

Version MCP Spec MCP SDK License Status TypeScript pnpm Code Coverage


✨ 特性

  • 飞书云文档集成:OAuth 2.0 认证、Markdown 上传/更新/删除、批量上传、文档搜索。
  • 知识库管理:列出知识库空间、文件夹、知识库节点。
  • 多应用配置:支持多个飞书应用、设置默认应用。
  • 抽象化存储:支持 in-memoryfilesystem、Supabase、SurrealDB 等后端。
  • 强大的错误处理:统一的 McpError 系统确保一致的错误响应。
  • 全栈可观测性:结构化日志(Pino)和可选的 OpenTelemetry。
  • 边缘就绪:支持本地或 Cloudflare Workers 运行。

🏗️ 架构

本项目遵循模块化、领域驱动的架构,具有清晰的关注点分离:

┌─────────────────────────────────────────────────────────┐
│              MCP 客户端(Claude Code、ChatGPT 等)        │
└────────────────────┬────────────────────────────────────┘
                     │ JSON-RPC 2.0
                     ▼
┌─────────────────────────────────────────────────────────┐
│           MCP 服务器(工具、资源)                        │
│           📖 [MCP 服务器指南](src/mcp-server/)          │
└────────────────────┬────────────────────────────────────┘
                     │ 依赖注入
                     ▼
┌─────────────────────────────────────────────────────────┐
│          依赖注入容器                                     │
│              📦 [容器指南](src/container/)              │
└────────────────────┬────────────────────────────────────┘
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
 ┌──────────┐   ┌──────────┐   ┌──────────┐
 │ 服务     │   │ 存储     │   │ 工具     │
 │ 🔌 [→]   │   │ 💾 [→]   │   │ 🛠️ [→]   │
 └──────────┘   └──────────┘   └──────────┘

[→]: src/services/    [→]: src/storage/    [→]: src/utils/

核心模块:

  • MCP 服务器 - 工具、资源、提示和传输层实现
  • 容器 - 使用 tsyringe 进行依赖注入设置,实现清晰的架构
  • 服务 - 外部服务集成(LLM、语音、图),具有可插拔的提供者
  • 存储 - 抽象化的持久层,支持多个后端
  • 工具 - 横切关注点(日志记录、安全、解析、遥测)

💡 提示:每个模块都有自己的综合 README,包含架构图、使用示例和最佳实践。点击上面的链接深入了解!

🛠️ 功能概览

飞书工具

工具描述
feishu_auth_url生成飞书 OAuth 2.0 授权链接。
feishu_auth_callback处理飞书 OAuth 授权回调。
feishu_upload_markdown上传 Markdown 文档到飞书云文档。
feishu_update_document更新已存在的飞书文档(支持冲突检测)。
feishu_batch_upload_markdown批量上传多个 Markdown 文档。
feishu_get_document读取飞书文档内容。
feishu_delete_document删除飞书文档。
feishu_search_documents搜索飞书文档。
feishu_list_folders列出飞书云空间文件夹。
feishu_list_wikis列出飞书知识库空间。
feishu_list_wiki_nodes列出知识库节点。
feishu_get_user_info获取当前飞书用户信息。
feishu_set_default_app设置默认飞书应用。
feishu_list_apps列出已配置的飞书应用。
feishu_add_app添加飞书应用配置。

🚀 快速开始

MCP 客户端设置/配置

将以下内容添加到您的 MCP 客户端配置文件(例如,cline_mcp_settings.json)。

{
  "mcpServers": {
    "mcp-feishu-doc": {
      "command": "npx",
      "args": ["-y", "@hibson/mcp-feishu-doc@latest"],
      "env": {
        "FEISHU_DEFAULT_APP_ID": "cli_xxx",
        "FEISHU_DEFAULT_APP_SECRET": "xxx",
        "FEISHU_OAUTH_CALLBACK_URL": "http://localhost:3010/oauth/feishu/callback",
        "MCP_TRANSPORT_TYPE": "stdio",
        "LOGS_DIR": "~/.mcp-feishu-doc/logs",
        "STORAGE_PROVIDER_TYPE": "filesystem",
        "STORAGE_FILESYSTEM_PATH": "~/.mcp-feishu-doc/storage"
      }
    }
  }
}

前置要求

  • Node.js v20.0.0 或更高版本
  • pnpm v10.0.0 或更高版本

安装

  1. 克隆仓库:
git clone https://github.com/Hbin-Zhuang/mcp-feishu-doc.git
  1. 进入目录:
cd mcp-feishu-doc
  1. 安装依赖:
pnpm install

⚙️ 配置

所有配置都在 src/config/index.ts 中集中管理并在启动时验证。.env 文件中的关键环境变量包括:

变量描述默认值
MCP_TRANSPORT_TYPE要使用的传输方式:stdiohttphttp
MCP_HTTP_PORTHTTP 服务器的端口。3010
MCP_HTTP_HOSTHTTP 服务器的主机名。127.0.0.1
MCP_AUTH_MODE身份验证模式:nonejwtoauthnone
MCP_AUTH_SECRET_KEYjwt 身份验证模式必需。 32+ 字符的密钥。(none)
OAUTH_ISSUER_URLoauth 身份验证模式必需。 OIDC 提供者的 URL。(none)
STORAGE_PROVIDER_TYPE存储后端:in-memoryfilesystemsupabasesurrealdbcloudflare-d1cloudflare-kvcloudflare-r2in-memory
STORAGE_FILESYSTEM_PATHfilesystem 存储必需。 存储目录的路径。(none)
FEISHU_DEFAULT_APP_ID飞书应用 ID(可选,也可通过 OAuth 流程配置)。(none)
FEISHU_DEFAULT_APP_SECRET飞书应用密钥(可选)。(none)
FEISHU_OAUTH_CALLBACK_URL飞书 OAuth 回调地址。(none)
SUPABASE_URLsupabase 存储必需。 您的 Supabase 项目 URL。(none)
SUPABASE_SERVICE_ROLE_KEYsupabase 存储必需。 您的 Supabase 服务角色密钥。(none)
SURREALDB_URLsurrealdb 存储必需。 SurrealDB 端点(例如,wss://cloud.surrealdb.com/rpc)。(none)
SURREALDB_NAMESPACEsurrealdb 存储必需。 SurrealDB 命名空间。(none)
SURREALDB_DATABASEsurrealdb 存储必需。 SurrealDB 数据库名称。(none)
SURREALDB_USERNAMEsurrealdb 存储可选。 用于身份验证的数据库用户名。(none)
SURREALDB_PASSWORDsurrealdb 存储可选。 用于身份验证的数据库密码。(none)
OTEL_ENABLED设置为 true 以启用 OpenTelemetry。false
LOG_LEVEL日志记录的最低级别(debuginfowarnerror)。info
OPENROUTER_API_KEYOpenRouter LLM 服务的 API 密钥。(none)

身份验证和授权

  • 模式none(默认)、jwt(需要 MCP_AUTH_SECRET_KEY)或 oauth(需要 OAUTH_ISSUER_URLOAUTH_AUDIENCE)。
  • 强制执行:使用 withToolAuth([...])withResourceAuth([...]) 包装您的工具/资源 logic 函数以强制执行范围检查。当身份验证模式为 none 时,为方便开发人员,范围检查会被绕过。

存储

  • 服务:DI 管理的 StorageService 为持久化提供一致的 API。永远不要从工具逻辑直接访问 fs 或其他存储 SDK。
  • 提供者:默认是 in-memory。仅 Node 的提供者包括 filesystem。边缘兼容的提供者包括 supabasesurrealdbcloudflare-kvcloudflare-r2
  • SurrealDB 设置:使用 surrealdb 提供者时,在首次使用前使用 docs/surrealdb-schema.surql 初始化数据库架构。
  • 多租户StorageService 需要 context.tenantId。启用身份验证时,这会自动从 JWT 中的 tid 声明传播。
  • 高级功能
    • 安全分页:带有租户 ID 绑定的不透明游标可防止跨租户攻击
    • 批处理操作getMany()setMany()deleteMany() 的并行执行
    • TTL 支持:所有提供者的生存时间,具有适当的过期处理
    • 全面验证:租户 ID、密钥和选项的集中输入验证

可观测性

  • 结构化日志记录:Pino 已开箱即用集成。所有日志都是 JSON 格式,并包含 RequestContext
  • OpenTelemetry:默认禁用。通过设置 OTEL_ENABLED=true 并配置 OTLP 端点来启用。每次工具调用都会自动捕获跟踪、指标(持续时间、负载大小)和错误。

▶️ 运行服务器

本地开发

  • 构建并运行生产版本

    # 一次性构建
    pnpm run rebuild
    
    # 运行构建的服务器
    pnpm run start:http
    # 或
    pnpm run start:stdio
    
  • 运行检查和测试

    pnpm run typecheck  # 类型检查
    pnpm run lint       # 代码检查
    pnpm run test       # 运行测试套件
    

Cloudflare Workers

  1. 构建 Worker 包
pnpm run build
  1. 使用 Wrangler 本地运行
pnpm run deploy:dev
  1. 部署到 Cloudflare
pnpm run deploy:prod

注意wrangler.toml 文件已预配置以启用 nodejs_compat 以获得最佳结果。

📂 项目结构

目录用途和内容指南
src/mcp-server/tools/definitions您的工具定义(*.tool.ts)。这是您添加新功能的地方。📖 MCP 指南
src/mcp-server/resources/definitions您的资源定义(*.resource.ts)。这是您添加新数据源的地方。📖 MCP 指南
src/mcp-server/transportsHTTP 和 STDIO 传输的实现,包括身份验证中间件。📖 MCP 指南
src/storageStorageService 抽象和所有存储提供者实现。💾 存储指南
src/services与外部服务的集成(例如,默认的 OpenRouter LLM 提供者)。🔌 服务指南
src/container依赖注入容器注册和令牌。📦 容器指南
src/utils用于日志记录、错误处理、性能、安全和遥测的核心工具。
src/config使用 Zod 进行环境变量解析和验证。
tests/单元和集成测试,镜像 src/ 目录结构。

📚 文档

每个主要模块都包含综合文档,包括架构图、使用示例和最佳实践:

核心模块

  • MCP 服务器指南 - 构建 MCP 工具和资源的完整指南

    • 使用声明式定义创建工具
    • 使用 URI 模板进行资源开发
    • 身份验证和授权
    • 传输层(HTTP/stdio)配置
    • SDK 上下文和客户端交互
    • 响应格式化和错误处理
  • 容器指南 - 使用 tsyringe 进行依赖注入

    • 理解 DI 令牌和注册
    • 服务生命周期(单例、瞬态、实例)
    • 构造函数注入模式
    • 使用模拟依赖进行测试
    • 向容器添加新服务
  • 服务指南 - 外部服务集成模式

    • LLM 提供者集成(OpenRouter)
    • 语音服务(使用 ElevenLabs、Whisper 的 TTS/STT)
    • 图数据库操作(SurrealDB)
    • 创建自定义服务提供者
    • 健康检查和错误处理
  • 存储指南 - 抽象化的持久层

    • 存储提供者实现
    • 多租户和租户隔离
    • 基于游标的安全分页
    • 批处理操作和 TTL 支持
    • 特定于提供者的设置指南

其他资源

🧑‍💻 代理开发指南

有关使用 AI 代理开发本项目的规则,请参阅 AGENTS.md。关键原则包括:

  • 逻辑抛出,处理器捕获:永远不要在工具/资源 logic 中使用 try/catch。而是抛出 McpError
  • 使用引导获取缺失输入:如果工具需要用户输入但未提供,请使用 SdkContext 中的 elicitInput 函数向用户询问。
  • 传递上下文:始终通过调用堆栈传递 RequestContext 对象。
  • 使用桶导出:仅在 index.ts 桶文件中注册新工具和资源。

❓ 常见问题

  • 这同时支持 STDIO 和 Streamable HTTP 吗?
    • 是的。两种传输都是一等公民。使用 pnpm run dev:stdiopnpm run dev:http
  • 我可以将其部署到边缘吗?
    • 是的。本项目支持 Cloudflare Workers。运行 pnpm run build 后使用 pnpm run deploy:devpnpm run deploy:prod 部署。
  • 我必须使用 OpenTelemetry 吗?
    • 不,默认情况下它是禁用的。通过在 .env 文件中设置 OTEL_ENABLED=true 来启用它。

🤝 贡献

欢迎提交问题和拉取请求!如果您计划贡献,请在提交 PR 之前运行本地检查和测试。

pnpm run typecheck && pnpm run lint
pnpm run test

📜 许可证

本项目根据 Apache 2.0 许可证授权。有关详细信息,请参阅 LICENSE 文件。


Reviews

No reviews yet

Sign in to write a review