本教育演示介绍了模型上下文协议(MCP)——一种用于AI助手与外部工具和数据源交互的协议。
通过完成此演示,您将了解:
CURL_TO_CONTEXT/
├── README.md # 本文件 - 完整文档
├── CHEATSHEET.md # 快速参考(打印这个!)
├── mcp-server/ # 简单的MCP服务器实现
│ ├── src/
│ │ └── index.ts # 数学操作MCP服务器
│ ├── package.json
│ ├── tsconfig.json
│ └── README.md
├── mcp-client-stdio/ # 使用标准输入输出传输的客户端
│ ├── src/
│ │ └── client.ts # 标准输入输出客户端实现
│ ├── package.json
│ ├── tsconfig.json
│ └── README.md
├── mcp-client-remote/ # 使用HTTP传输的客户端
│ ├── src/
│ │ └── client.ts # HTTP客户端实现
│ ├── package.json
│ ├── tsconfig.json
│ └── README.md
└── examples/ # JSON-RPC请求示例
├── tools-list-request.json # 列出所有工具
├── add-request.json # 加法示例
├── subtract-request.json # 减法示例
├── multiply-request.json # 乘法示例
├── divide-request.json # 除法示例
└── README.md # 使用指南
在开始之前,请确保已安装Node.js 18+:
node --version # 应显示v18.x.x或更高版本
如果未安装,请从nodejs.org下载
💡 提示:打印或收藏
CHEATSHEET.md,以便在完成演示时快速参考!
最佳用途:学习本地MCP通信
cd mcp-server
npm install
npm run build
这会做什么:将TypeScript服务器编译成JavaScript
cd ../mcp-client-stdio
npm install
npm run build
npm start
预期输出:
持续时间:约2分钟
最佳用途:理解网络化的MCP服务器
cd mcp-server
npm install # 如果尚未执行
npm run build # 如果尚未执行
npm run start:http
预期输出:
🚀 在HTTP模式下启动MCP数学服务器
✅ HTTP服务器正在运行于 http://localhost:5001
保持此终端运行!
cd mcp-client-remote
npm install
npm run build
npm start
你会看到什么:
持续时间:约3分钟
尝试这些curl命令以直接测试服务器:
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"add","arguments":{"a":10,"b":5}},"id":2}'
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"divide","arguments":{"a":10,"b":0}},"id":3}'
“找不到服务器”错误?
# 确保先构建了服务器:
cd mcp-server
npm run build
“连接被拒绝”错误?
# 在另一个终端启动HTTP服务器:
cd mcp-server
npm run start:http
端口5001已被占用?
# 使用不同的端口:
PORT=3000 npm run start:http
# 然后更新客户端:
MCP_SERVER_URL=http://localhost:3000/mcp npm start
每个MCP消息都遵循以下结构:
{
"jsonrpc": "2.0", // 始终为 "2.0"
"method": "tools/call", // MCP方法名称
"params": { // 可选参数
"name": "add",
"arguments": {
"a": 10,
"b": 5
}
},
"id": 1 // 唯一请求ID
}
| 方法 | 目的 | 使用时机 |
|---|---|---|
initialize | 客户端和服务器之间的握手 | 第一次连接 |
tools/list | 发现可用工具 | 调用工具之前 |
tools/call | 执行特定工具 | 执行操作 |
resources/list | 获取可用资源 | 访问数据源 |
prompts/list | 获取可用提示 | 模板管理 |
notifications/ | 服务器到客户端的更新 | 实时事件 |
| 代码 | 名称 | 含义 |
|---|---|---|
-32700 | 解析错误 | 无效的JSON |
-32600 | 无效请求 | 格式不正确的JSON-RPC |
-32601 | 方法未找到 | 未知的方法 |
-32602 | 参数无效 | 错误的参数 |
-32603 | 内部错误 | 服务器错误 |
列出可用工具:
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
调用一个工具:
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"add","arguments":{"a":10,"b":5}},"id":2}'
使用示例文件:
cd examples
curl -X POST http://localhost:5001/mcp \
-H "Content-Type: application/json" \
-d @add-request.json
| 命令 | 位置 | 目的 |
|---|---|---|
npm install | 任意目录 | 安装依赖项 |
npm run build | 任意目录 | 编译TypeScript |
npm start | mcp-server | 在标准输入输出模式下运行 |
npm run start:http | mcp-server | 运行HTTP服务器 |
npm start | mcp-client-stdio | 运行标准输入输出演示 |
npm start | mcp-client-remote | 运行HTTP演示 |
npm run dev | 任意目录 | 构建+运行 |
npm run watch | mcp-server | 更改时自动重建 |
# 更改服务器端口
PORT=3000 npm run start:http
# 更改客户端服务器URL
MCP_SERVER_URL=http://localhost:3000/mcp npm start
CHEATSHEET.md —— 保持此文件便于快速参考examples/*.json文件中的值并测试src/index.ts文件以了解实现这是一个教育资源。欢迎贡献:
MIT许可 - 免费用于教育目的
问题或问题? 打开一个issue或检查每个目录中的README文件以获取更多信息。