MCP Server
介绍
Tuanjie AI MCP Server 是基于模型上下文协议(Model Context Protocol,MCP)构建的扩展服务器,旨在为 Codely CLI 提供与外部系统和服务集成的能力。通过 MCP Server,Tuanjie AI 可以访问数据库、API、文件系统和其他第三方服务,从而大幅扩展其功能边界。
什么是 MCP Server?
MCP Server 是一个独立运行的应用程序,它通过标准化的 MCP 协议向 Codely CLI 暴露工具(tools)、资源(resources)和提示(prompts)。Codely CLI 通过三种传输机制与 MCP Server 通信:
- Stdio 传输:通过标准输入/输出与本地子进程通信
- SSE 传输:通过服务器发送事件(Server-Sent Events)与远程服务器通信
- Streamable HTTP 传输:通过 HTTP 流与远程服务器通信
Tuanjie AI MCP Server 的优势
- 模块化扩展:将复杂功能封装为独立服务器,保持核心代码库简洁
- 安全隔离:敏感凭证和服务逻辑与 Tuanjie AI 主进程隔离
- 灵活部署:支持本地进程、Docker 容器或远程服务多种部署方式
- 统一接口:所有外部服务通过统一的 MCP 协议访问
- 动态发现:Tuanjie AI 自动发现服务器提供的工具,无需手动配置
典型应用场景
- 代码仓库集成:访问 GitHub、GitLab 等 Git 托管服务
- 数据库操作:查询和操作 PostgreSQL、MySQL、MongoDB 等数据库
- 云服务访问:与 AWS、Google Cloud、Azure 等云平台交互
- 团队协作:集成 Slack、Jira、Notion 等协作工具
- 文件处理:访问网络存储、S3、Google Drive 等文件服务
通过 GUI 管理 MCP Server
- 在对话框输入 '/',在下拉菜单中选择 "Manage Mcp Servers"。或者直接输入 "/MCP"。
- 在打开的对话框口中创建自己的Mcp Server。
- 创建新的Mcp Server后,请开启新的对话会话,新增的 Mcp Server 将在新会话启动时完成加载。
- 在对话窗口输入 '@' 即可快速选中您新增的 Mcp Server。
创建Mcp Server时Type的区别:
- STDIO:标准输入输出(Standard Input/Output)。
通过标准输入输出流进行本地进程间通信,适合本地工具调用。 - SSE:服务器发送事件(Server-Sent Events)。
基于 HTTP 的服务器推送技术,适合服务端向客户端持续推送数据流。 - Streamable HTTP:可流式传输的 HTTP(一种支持数据流式传输的 HTTP 协议变体)。
兼容 HTTP 且支持流式响应,兼顾兼容性与实时数据传输。
三种通信方式适用场景对比表
| 通信方式 | 全称 | 核心特点 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|---|---|
| STDIO | Standard Input/Output | 基于进程标准输入输出流的本地通信 | ✅ 本地工具/脚本调用 ✅ 桌面端本地 MCP 服务 ✅ 无网络依赖的离线场景 | 🔹 低延迟、性能高 🔹 无需网络配置 🔹 部署简单、安全隔离 | 🔸 仅支持本地进程间通信 🔸 无法跨机器/网络使用 |
| SSE | Server-Sent Events | 基于 HTTP 的单向服务器推送流 | ✅ 云端 MCP 服务 ✅ 实时数据推送(如日志、进度) ✅ 浏览器/客户端长连接 | 🔹 兼容 HTTP 标准 🔹 自动重连机制 🔹 服务端主动推送 | 🔸 仅单向通信(服务端→客户端) 🔸 不支持二进制数据 🔸 受浏览器连接数限制 |
| Streamable HTTP | 可流式传输 HTTP | 兼容 HTTP 协议的双向流式通信 | ✅ 跨网络/云服务部署 ✅ 需要双向交互的实时场景 ✅ 兼容现有 HTTP 基础设施 | 🔹 双向流式数据传输 🔹 兼容标准 HTTP/HTTPS 🔹 支持二进制/文本混合流 | 🔸 实现复杂度略高于 SSE 🔸 部分老旧代理可能不兼容 |
快速选择建议
- 本地开发/离线工具 → 选 STDIO,简单高效,无需网络。
- 云端服务+单向推送 → 选 SSE,适合日志、通知等场景。
- 跨网络+双向实时交互 → 选 Streamable HTTP,兼容性与实时性平衡最好。
通过 CLI 管理 MCP Server
前置条件
在开始之前,请确保您具备以下条件:
- Codely CLI 已安装:确保您的系统上已安装最新版本的 Codely CLI
- Docker(可选):某些 MCP Server 以 Docker 容器形式运行
- 必要的凭证:根据要连接的服务,准备相应的 API 密钥或访问令牌
- 网络连接:确保可以访问 MCP Server 所在的服务地址
准备凭证
大多数 MCP Server 需要身份验证才能访问受保护的资源。凭证的安全管理至关重要。
凭证管理最佳实践
- 使用环境变量:将敏感凭证存储在环境变量中,而非硬编码在配置文件
- 最小权限原则:为凭证分配完成任务所需的最小权限
- 定期轮换:定期更新访问令牌和密钥
- 安全存储:使用系统的安全凭证存储机制
示例:准备 GitHub 凭证
如果您要使用 GitHub MCP Server,需要创建一个 Personal Access Token(PAT):
- 登录 GitHub,进入 Settings → Developer settings → Personal access tokens → Tokens (classic)
- 创建新的 token,授予以下权限:
- repo: 完整仓库访问权限
- read:org: 读取组织信息(如果需要)
- 将 token 安全地存储在环境变量中
macOS/Linux:
export GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..."
Windows (PowerShell):
$env:GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..."
配置 Codely CLI
Codely CLI 通过 settings.json 文件来发现和连接 MCP Server。您可以配置全局服务器(用户级别)或项目特定服务器(项目级别)。
配置文件位置
- 用户级别配置:~/.codely-cli/settings.json
- 项目级别配置:
<项目目录>/.codely-cli/settings.json
项目级别配置会覆盖用户级别配置中相同名称的服务器。
基本配置结构
在 settings.json 中添加 mcpServers 对象:
{
"mcpServers": {
"serverName": {
"command": "path/to/executable",
"args": ["--arg1", "value1"],
"env": {
"API_KEY": "$API_KEY"
},
"cwd": "./working/directory",
"timeout": 30000,
"trust": false
}
}
}
配置属性说明
| 属性 | 类型 | 必需 | 说明 |
|---|---|---|---|
| command | string | 之一 | Stdio 传输的可执行文件路径 |
| url | string | 之一 | SSE 传输的端点 URL |
| httpUrl | string | 之一 | HTTP 流式传输的端点 URL |
| args | string[] | 否 | 命令行参数(仅用于 Stdio) |
| headers | object | 否 | HTTP 请求头(用于 SSE/HTTP) |
| env | object | 否 | 环境变量(支持 $VAR 语法展开) |
| cwd | string | 否 | 工作目录(仅用于 Stdio) |
| timeout | number | 否 | 请求超时(毫秒,默认 600000) |
| trust | boolean | 否 | 是否跳过工具调用确认(默认 false) |
| includeTools | string[] | 否 | 包含的工具白名单 |
| excludeTools | string[] | 否 | 排除的工具黑名单 |
示例配置
1. GitHub MCP Server(Docker)
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server:latest"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
}
}
}
}
2. PostgreSQL MCP Server(Python)
{
"mcpServers": {
"postgres": {
"command": "python",
"args": ["-m", "postgres_mcp_server"],
"cwd": "./mcp-servers/postgres",
"env": {
"DATABASE_URL": "$DATABASE_URL",
"DB_HOST": "${DB_HOST}",
"DB_PORT": "${DB_PORT:-5432}"
},
"timeout": 15000
}
}
}
3. 自定义 Node.js MCP Server
{
"mcpServers": {
"my-custom-server": {
"command": "node",
"args": ["dist/server.js", "--verbose"],
"cwd": "./my-mcp-server",
"trust": true
}
}
}
4. 远程 HTTP MCP Server
{
"mcpServers": {
"remote-api": {
"httpUrl": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer ${API_TOKEN}",
"X-Custom-Header": "custom-value"
},
"timeout": 5000
}
}
}
验证连接
配置完成后,重启 Codely CLI 以加载新的 MCP Server 配置。
检查服务器状态
使用 /mcp 或 /mcp list 命令查看所有 MCP Server 的连接状态:
/mcp list
预期输出示例:
✓ github: docker run -i --rm ... - Connected
✓ postgres: python -m postgres_mcp_server - Connected
✗ remote-api: https://api.example.com/mcp - Disconnected
Error: Connection timeout
状态说明
- Connected:服务器已成功连接并注册了工具
- Connecting:正在尝试连接
- Disconnected:连接失败或未连接
- Disabled:服务器已被手动禁用
故障排 查
如果服务器显示为 Disconnected:
- 检查 Docker 是否运行(对于 Docker 服务器)
docker ps
- 验证命令是否可用
python --version
node --version
- 检查环境变量是否设置
echo $GITHUB_PERSONAL_ACCESS_TOKEN
- 查看详细错误日志
/mcp list
- 强制重新加载
/mcp reload
使用新工具
一旦 MCP Server 成功连接,Tuanjie AI 就可以自动使用服务器提供的所有工具。您无需学习特殊的命令——只需用自然语言描述您的需求即可。
工具自动发现
Tuanjie AI 会自动:
- 枚举工具:从服务器获取所有可用工具及其定义
- 模式验证:验证工具的输入/输出模式
- 命名空间处理:为工具添加 mcp_{serverName}_ 前缀以避免冲突
- 注册到工具库:使工具对模型可见
使用场景示例
场景 1:列出 GitHub 仓库的 Pull Requests
用户输入:
列出 google/gemini-cli 仓库的所有打开的 PR,按创建时间排序
Tuanjie AI 自动执行的步骤:
- 识别请求涉及 GitHub 仓库操作
- 选择 mcp_github_list_pull_requests 工具
- 请求用户确认工具调用(除非服务器被标记为信任)
- 使用参数执行工具:
{
"owner": "google",
"repo": "gemini-cli",
"state": "open"
}
- 解析返回的 PR 数据并以友好的格式呈现
场景 2:创建 GitHub Issue
用户输入:
在我的仓库中创建一个 issue,标题是"Bug: 登录失败",描述是"请查看附件的日志"
Tuanjie AI 执行:
- 识别需要创建 GitHub Issue
- 调用 mcp_github_create_issue 工具
- 使用以下参数:
{
"title": "Bug: 登录失败",
"body": "请查看附件的日志",
"labels": ["bug"]
}
- 返回创建的 issue 链接和详情
场景 3:查询 PostgreSQL 数据库
用户输入:
查询 users 表中最近注册的 10 个用户
Tuanjie AI 执行:
- 识别需要数据库查询
- 调用 mcp_postgres_query 工具
- 使用参数:
{
"query": "SELECT * FROM users ORDER BY created_at DESC LIMIT 10"
}
- 以表格形式展示查询结果
场景 4:读取 MCP 资源
如果 MCP Server 暴露了资源,您可以使用 @ 语法引用:
请分析 @github://repo/contents/README.md 的内容
Tuanjie AI 会自动:
- 识别 @github:// 资源引用
- 调用服务器的 resources/read 方法
- 将资源内容注入到对话上下文中
故障排除
常见问题
问题 1:服务器无法启动
症状:/mcp list 显示 Disconnected
解决方案:
- 手动运行服务器命令查看错误信息
docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server:latest
- 检查端口是否被占用
netstat -an | grep 8080
- 验证依赖是否安装
pip list | grep mcp
npm list | grep @modelcontextprotocol
问题 2:工具未被发现
症状:服务器已连接但工具列表为空
解决方案:
- 强制重新加载:
/mcp reload
- 检查服务器日志是否有错误
- 验证服务器是否正确实现了 MCP 协议的工具列表端点
问题 3:工具执行失败
症状:工具调用时返回错误
解决方案:
- 检查参数是否符合工具的模式定义
- 验证凭证是否有效且具有足够权限
- 增加超时时间
- 查看服务器的 stderr 输出
问题 4:环境变量未展开
症状:服务器无法访问环境变量
解决方案:
- 确认环境变量已在 shell 中设置
- 使用正确的语法:
${VAR_NAME}或$VAR_NAME(所有平台)- %VAR_NAME%(仅 Windows)
- 验证变量名拼写正确
如何创建 Tuanjie AI MCP Server
理解 MCP 协议
MCP 是一个开放标准协议,定义了 AI 助手与外部服务的通信规范。核心概念包括:
MCP 核心组件
- Tools(工具):可执行的函数,接受输入参数并返回结果
- Resources(资源):可读取的数据实体(文件、文档、记录等)
- Prompts(提示):预定义的提示模板,可作为斜杠命令调用
MCP 消息类型
| 方法 | 方向 | 说明 |
|---|---|---|
| tools/list | 客户端 → 服务器 | 列出所有可用工具 |
| tools/call | 客户端 → 服务器 | 调用特定工具 |
| resources/list | 客户端 → 服务器 | 列出所有可用资源 |
| resources/read | 客户端 → 服务器 | 读取特定资源 |
| prompts/list | 客户端 → 服务器 | 列出所有可用提示 |
| prompts/get | 客户端 → 服务器 | 获取特定提示 |
创建项目结构
项目目录布局
codely-mcp-server/
├── package.json # Node.js 项目配置
├── tsconfig.json # TypeScript 配置
├── src/
│ ├── index.ts # 服务器入口点
│ ├── tools/ # 工具实现
│ │ ├── calculator.ts
│ │ └── data-processor.ts
│ ├── resources/ # 资源实现
│ │ └── file-reader.ts
│ └── prompts/ # 提示实现
│ └── code-review.ts
├── dist/ # 编译输出(自动生成)
└── README.md # 项目文档
初始化项目
# 创建项目目录
mkdir codely-mcp-server
cd codely-mcp-server
# 初始化 Node.js 项目
npm init -y
# 安装依赖
npm install @modelcontextprotocol/sdk zod
# 安装开发依赖
npm install -D typescript @types/node ts-node
配置 TypeScript
创建 tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"lib": ["ES2022"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "Node16",
"resolveJsonModule": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
更新 package.json:
{
"name": "codely-mcp-server",
"version": "1.0.0",
"description": "Tuanjie AI MCP Server for custom integrations",
"type": "module",
"main": "dist/index.js",
"bin": {
"codely-mcp": "./dist/index.js"
},
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "ts-node src/index.ts",
"watch": "tsc --watch"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.4",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/node": "^20.0.0",
"ts-node": "^10.9.0",
"typescript": "^5.0.0"
}
}