飞书令牌管理服务

一个基于Smithery和Python构建的MCP服务,用于自动管理和刷新飞书的app_access_token。

  • by Leon-Algo
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Leon-Algo/feishu_access_token_MCP

使用说明

飞书 Access Token MCP

本项目是一个基于 Smithery 和 Python 构建的 MCP (Model-Context-Protocol) 服务,用于管理并自动刷新飞书的 app_access_token。

该服务将飞书的 Token 管理逻辑封装成一个 MCP 工具。客户端(如 AI Agent)可以通过配置会话(Session)并调用此工具,来获取一个有效的 app_access_token,无需关心其内部的获取机制。

功能特性

  • MCP 服务化:将 Token 管理封装为标准的 MCP 工具。
  • 会话配置:通过 MCP 会话安全地传递 app_id 和 app_secret。
  • 自动刷新与状态管理:在 app_access_token 过期前自动刷新。
  • Smithery 集成:利用 @smithery.server 装饰器,轻松实现部署和会话管理。
  • 环境变量支持:支持从 .env 文件加载配置。

项目结构

feishu_access_token_mcp/
├── .env                 # 环境变量配置文件
├── .gitignore
├── README.md
├── deployment_test.py   # 部署前测试脚本
├── import_test.py       # 模块导入测试脚本
├── pyproject.toml       # Smithery 配置文件
├── simple_test.py       # 简单功能测试脚本
├── smithery.yaml
├── test_env.py          # 环境变量测试脚本
├── uv.lock              # 依赖锁定文件
└── src/
    └── feishu_access_token_mcp/
        ├── __init__.py
        └── server.py    # MCP 服务器定义和核心逻辑

环境要求

  • Python 3.12
  • 已通过 uv 固定解释器版本

安装与设置

  1. 克隆仓库:

    git clone <your-repo-url>
    cd feishu_access_token_mcp
    
  2. 配置环境变量: 创建 .env 文件并添加您的飞书应用凭证:

    FEISHU_APP_ID=your_app_id
    FEISHU_APP_SECRET=your_app_secret
    
  3. 安装 uv (如果尚未安装): 这是一个高效的 Python 包管理器。

    pip install uv
    
  4. 创建虚拟环境并安装依赖: uv 会自动创建虚拟环境并安装项目依赖。

    uv sync
    

如何运行和测试

1. 部署前测试

在部署到 Smithery 之前,建议运行部署前测试以确保所有配置正确:

python deployment_test.py

2. 测试环境变量配置

使用以下命令测试环境变量配置和 Token 获取功能:

python test_env.py

3. 测试模块导入

使用以下命令测试模块是否可以正确导入:

python import_test.py

4. 测试核心功能

使用以下命令测试核心 Token 获取功能:

python simple_test.py

5. 本地开发运行

使用以下命令启动本地开发服务器:

uv run dev

服务器将在 http://127.0.0.1:8081 上运行。

6. 在 Smithery Playground 中测试

为了方便地测试 MCP 服务,您可以使用 Smithery Playground。它提供了一个图形界面来配置会话和调用工具。

运行以下命令:

uv run playground

此命令会将您的本地服务器通过 ngrok 安全地连接到 Smithery Playground。您会得到一个 URL,在浏览器中打开它即可开始测试。

在 Playground 中的测试步骤:

  1. 配置会话 (Configure Session): 在 Playground 页面的 "Session Config" 部分,填入您的飞书应用凭证:

    {
      "app_id": "你的飞书 app_id",
      "app_secret": "你的飞书 app_secret"
    }
    
  2. 调用工具: 在聊天框中,输入指令来调用我们定义的工具,例如:

    "获取飞书 token"

    或者

    "Call the get_feishu_token tool"

  3. 查看结果: 模型会调用 get_feishu_token 工具,您将在界面上看到返回的包含 app_access_token 和 expires_at 的 JSON 结果。

用于生产环境

此 MVP (最小可行产品) 实现使用内存中的字典来存储不同会话的 TokenManager 实例。这对于开发和大多数场景是足够的,但请注意:

  • 重启后状态丢失:如果应用程序重启,所有会话的令牌信息都将丢失,下次调用时会重新初始化。
  • 扩展性:如果需要部署到多个实例(例如,使用负载均衡),内存缓存将导致状态不一致。

对于需要跨实例共享状态或在重启后保留状态的生产环境,建议将 token_manager_cache 替换为外部的持久化存储,例如:

  • Redis:一个快速的内存数据存储,非常适合缓存令牌。
  • 数据库:如 PostgreSQL 或 MySQL。

部署到 Smithery

准备好部署了吗?将您的代码推送到 GitHub 并部署到 Smithery:

  1. 在 github.com/new 创建一个新的仓库

  2. 初始化 git 并推送到 GitHub:

    git add .
    git commit -m "Initial commit: Feishu Access Token Manager"
    git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO.git
    git push -u origin main
    
  3. 在 smithery.ai/new 部署您的服务器

故障排除

部署时出现 "Expected a Python module at: src/feishu_access_token_mcp/init.py" 错误

这个问题通常是由于文件系统大小写敏感性差异导致的。确保:

  1. 目录名使用小写字母:src/feishu_access_token_mcp/(而不是 src/feishu_access_token_MCP/)
  2. [pyproject.toml](file://d:\AI\Agent_experiment\MCP\feishu_access_token_MCP\pyproject.toml) 中的服务器入口点配置正确:server = "feishu_access_token_mcp.server:create_server"
  3. 运行 python deployment_test.py 来验证配置是否正确

如果问题仍然存在,请检查:

  • 确保 [init.py](file://d:\AI\Agent_experiment\MCP\feishu_access_token_MCP\src\feishu_access_token_mcp_init_.py) 文件存在于正确的位置
  • 确保 [uv.lock](file://d:\AI\Agent_experiment\MCP\feishu_access_token_MCP\uv.lock) 文件是最新的(运行 uv lock 重新生成)