基于 FastMCP v2 框架的腾讯 IMA Copilot MCP (Model Context Protocol) 服务器,使用环境变量配置,简化项目结构,专注于 MCP 协议实现。
.env 文件管理所有配置Code=3 错误执行退避重试并自动恢复AttributeError: 'FastMCP' object has no attribute 'on_shutdown' 问题(通过在当前版本中禁用该钩子)。# 拉取镜像
docker pull highkay/tencent-ima-copilot-mcp:latest
# 运行容器(需要替换以下两个必需的环境变量)
docker run -d \
--name ima-copilot-mcp \
-p 8081:8081 \
-e IMA_X_IMA_COOKIE="your_x_ima_cookie_here" \
-e IMA_X_IMA_BKN="your_x_ima_bkn_here" \
-v $(pwd)/logs:/app/logs \
--restart unless-stopped \
highkay/tencent-ima-copilot-mcp:latest
# 查看日志
docker logs -f ima-copilot-mcp
创建 .env 文件(或直接在 shell 中设置环境变量):
# .env 文件
IMA_X_IMA_COOKIE="your_x_ima_cookie_here"
IMA_X_IMA_BKN="your_x_ima_bkn_here"
启动服务:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 安装 FastMCP、tenacity、Loguru 和所有依赖
pip install -r requirements.txt
# 复制配置文件模板
cp .env.example .env
# 编辑 .env 文件,填入从浏览器获取的 IMA 认证信息
nano .env # 或使用其他编辑器
以下环境变量必须正确配置才能使用服务:
IMA_X_IMA_COOKIE: X-Ima-Cookie 请求头值(包含平台信息、token 等)IMA_X_IMA_BKN: X-Ima-Bkn 请求头值(业务密钥)/cgi-bin/assistant/qa 的 POST 请求x-ima-cookie → IMA_X_IMA_COOKIEx-ima-bkn → IMA_X_IMA_BKN# Windows
start.bat
# 或使用 Python 脚本(跨平台)
python run.py
fastmcp run ima_server_simple.py:mcp --transport http --host 127.0.0.1 --port 8081
# 安装 MCP Inspector
npx @modelcontextprotocol/inspector
# 连接到服务器
# 在 Inspector 中输入: http://127.0.0.1:8081/mcp
http://127.0.0.1:8081/mcp(用于 MCP Inspector 或其他 MCP 客户端)logs/debug/ima_server_YYYYMMDD_HHMMSS.log(Loguru 自动生成和管理)logs/debug/raw/sse_*.log(发生错误时自动保存)向腾讯 IMA 知识库询问任何问题
参数:
question (必需): 要询问的问题示例:
问题: "什么是机器学习?" 问题: "如何制作番茄炒蛋?"
特性:
IMA_ASK_CONCURRENCY_LIMIT=1)Code=3 且无文本时自动指数退避重试(最多 2 次)TextContent 列表,包含回答文本和格式化后的参考资料注意:当配置了多个知识库 ID 时,
ask会直接报错并提示改用ask_with_kb。
向指定知识库询问问题(多知识库模式)
参数:
question (必需): 要询问的问题knowledge_base_id (必需): 目标知识库 ID(必须在配置列表中)示例:
问题: "总结这个知识库的核心内容" knowledge_base_id: "7305806844290061"
获取当前配置信息(不包含敏感数据)
获取帮助信息
| 变量名 | 说明 | 获取方式 |
|---|---|---|
IMA_X_IMA_COOKIE | X-Ima-Cookie 请求头 | 从浏览器开发者工具 Network 标签中复制 |
IMA_X_IMA_BKN | X-Ima-Bkn 请求头 | 从浏览器开发者工具 Network 标签中复制 |
| 变量名 | 说明 | 默认值 |
|---|---|---|
IMA_KNOWLEDGE_BASE_ID / knowledgeBaseId | 单知识库 ID(两者等价) | 无(必须显式配置) |
IMA_KNOWLEDGE_BASE_IDS / knowledgeBaseIds | 多知识库 ID 列表(逗号分隔) | 无 |
IMA_MCP_HOST | MCP 服务器地址 | 127.0.0.1 |
IMA_MCP_PORT | MCP 服务器端口 | 8081 |
IMA_MCP_LOG_LEVEL | 日志级别 (支持 DEBUG, INFO, WARNING, ERROR) | INFO |
IMA_REQUEST_TIMEOUT | IMA API 请求超时时间(秒) | 30 |
IMA_RETRY_COUNT | 网络/超时类异常重试次数 | 3 |
IMA_ASK_CONCURRENCY_LIMIT | 问答并发上限(建议 1-2) | 1 |
IMA_ROBOT_TYPE | 机器人类型 | 5 |
IMA_SCENE_TYPE | 场景类型 | 1 |
IMA_MODEL_TYPE | 模型类型 | 4 |
IMA_KNOWLEDGE_BASE_ID(或 knowledgeBaseId),使用 ask 或 ask_with_kb 均可。IMA_KNOWLEDGE_BASE_IDS(或 knowledgeBaseIds,逗号分隔),必须使用 ask_with_kb。IMA_KNOWLEDGE_BASE_ID(单知识库模式)。IMA_KNOWLEDGE_BASE_ID 与 IMA_KNOWLEDGE_BASE_IDS 都未配置,服务将直接退出。IMA_KNOWLEDGE_BASE_ID=<id> 即可,无需改调用方式。IMA_KNOWLEDGE_BASE_IDS=id1,id2,...,并把调用从 ask(question) 改为 ask_with_kb(question, knowledge_base_id)。Q: 认证失败(Token 验证失败)怎么办?
A:
.env 文件中的 IMA_X_IMA_COOKIE 和 IMA_X_IMA_BKN 是否正确IMA_X_IMA_COOKIE 中包含 IMA-REFRESH-TOKEN 字段Q: 如何连接特定的知识库?
A:
在 .env 文件中设置 IMA_KNOWLEDGE_BASE_ID(或 knowledgeBaseId)即可。获取方法:
init_session 请求knowledge_base_idQ: 多知识库怎么配置和调用?
A:
.env 中设置 IMA_KNOWLEDGE_BASE_IDS=id1,id2,id3ask_with_kb(question, knowledge_base_id)ask,会提示错误并给出可用 knowledge_base_id 列表Q: 偶发出现 Code=3 且无文本怎么办?
A:
IMA_ASK_CONCURRENCY_LIMIT=1)Code=3 退避重试;若仍频繁出现,可适当增加请求间隔MIT License