基于 MCP (Model Context Protocol) 的多服务器聊天系统,支持同时连接 Node.js、Python 和 HTTP MCP 服务器。
# Node.js 依赖
npm install
# Python 依赖
pip install fastmcp创建 .env 文件:
# API 配置
API_KEY=your_api_key_here
API_URL=https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
MODEL=qwen-plus
AMAP_KEY=your_amap_key_here编辑 mcp.json:
{
"mcpServers": {
"local-tools": {
"command": "node",
"args": ["node-mcp-server/index.js"],
"description": "本地 Node.js MCP 服务器(教学工具)"
},
"amap-maps": {
"url": "https://mcp.amap.com/mcp?key=your_amap_key_here",
"description": "高德地图 MCP 服务器"
},
"python-files": {
"command": "python",
"args": ["python-mcp-server/server.py"],
"description": "Python 文件操作服务器(fast-mcp)"
}
}
}# 运行原始聊天(无 mcp 工具)
npm run chat:raw
# 运行 MCP 聊天(连接 MCP 服务器)
npm run chat:mcp
.
├── src/ # 源代码
│ ├── chat-mcp.js # MCP 聊天主程序 ⭐
│ ├── chat.js # 基础聊天(直接导入工具)
│ ├── rawChat.js # 原始聊天(无工具)
│ ├── universal-mcp-client.js # 统一 MCP 客户端
│ └── mcp-loader.js # MCP 服务器加载器
│
├── node-mcp-server/ # Node.js MCP 服务器
│ ├── index.js # 服务器入口
│ └── tools/ # 工具实现
│ ├── calculate.js # 数学计算
│ ├── greeting.js # 问候生成
│ └── timestamp.js # 时间戳
│
├── python-mcp-server/ # Python MCP 服务器
│ ├── server.py # 服务器入口 (fast-mcp)
│ ├── requirements.txt # Python 依赖
│ └── output/ # 文件输出目录
│
├── mcp.json # MCP 服务器配置
├── .env # 环境变量
├── package.json # Node.js 依赖
└── README.md # 本文档
使用标准 MCP 协议,支持多服务器工具调用。
功能:
- 自动加载并连接所有 MCP 服务器
- 为工具添加服务器名称前缀(避免冲突)
- 流式输出 AI 响应
- 工具调用结果解析
支持多种传输方式的 MCP 客户端。
传输方式:
- stdio: 本地进程(Node.js、Python)
- HTTP: 远程服务(高德地图)
从 mcp.json 加载并连接所有 MCP 服务器。
功能:
- 读取配置文件
- 自动连接服务器
- 为工具添加前缀(
serverName:toolName) - 工具路由
教学用 MCP 服务器,演示基础工具实现。
工具:
calculate- 数学计算(加减乘除)greeting- 生成问候语get_timestamp- 获取时间戳
基于 fast-mcp 的文件操作服务器。
工具:
write_file- 写入文件read_file- 读取文件list_files- 列出文件delete_file- 删除文件
local-tools:calculate - 数学计算
local-tools:greeting - 生成问候语
local-tools:get_timestamp - 获取时间戳
amap-maps:amap_search_text - 关键词搜索
amap-maps:amap_search_around - 周边搜索
amap-maps:amap_weather - 天气查询
amap-maps:amap_direction - 路径规划
python-files:write_file - 写入文件
python-files:read_file - 读取文件
python-files:list_files - 列出文件
python-files:delete_file - 删除文件
You: 帮我算 25 * 4
AI: 🔧 调用工具: local-tools:calculate
✅ 通过 local-tools 执行
计算结果: 25 × 4 = 100
---
You: 创建一个 test.txt 文件,内容是 "Hello MCP"
AI: 🔧 调用工具: python-files:write_file
✅ 通过 python-files 执行
✅ 文件写入成功: .../output/test.txt
---
You: 搜索北京附近的咖啡馆
AI: 🔧 调用工具: amap-maps:amap_search_text
✅ 通过 amap-maps 执行
找到了 20 家咖啡馆...
| 变量 | 说明 | 示例 |
|---|---|---|
API_KEY |
AI 服务密钥 | sk-xxx |
API_URL |
AI 服务端点 | https://... |
MODEL |
使用的模型 | qwen-plus |
AMAP_KEY |
高德地图密钥 | your_key |
| 字段 | stdio 类型 | HTTP 类型 |
|---|---|---|
command |
启动命令 | - |
args |
命令参数 | - |
url |
- | 服务地址 |
description |
服务器描述 | 服务器描述 |
- 在
node-mcp-server/tools/创建工具文件 - 在
node-mcp-server/tools/index.js导出 - 重启聊天程序
- 在
python-mcp-server/server.py添加@mcp.tool()装饰的函数 - 重启聊天程序
在 mcp.json 添加配置:
{
"my-server": {
"command": "node", // 或 "url": "http://..."
"args": ["path/to/server.js"],
"description": "我的 MCP 服务器"
}
}- Node.js: MCP 客户端和服务器
- Python: fast-mcp 服务器
- @modelcontextprotocol/sdk: MCP 官方 SDK
- fast-mcp: Python MCP 快速开发框架
- zod: 参数验证