README
🚀 一个简单的 MCP 服务器和客户端
本项目是一个简单的 Model Context Protocol (MCP) 服务器和客户端实现,旨在演示如何暴露和访问天气信息,为开发者提供了一个清晰的示例来理解和运用 MCP 相关功能。
🚀 快速开始
启动客户端
node client.js
启动客户端时会自动启动服务器作为子进程。客户端将连接到服务器并执行所有示例操作。
独立启动服务器
node server.js
✨ 主要特性
服务器特性
- 资源丰富:提供多个城市的基本信息,包括
city://NewYork(纽约市)、city://London(伦敦市)和city://Tokyo(东京市)。 - 工具实用:具备
get-weather工具,可获取某个城市的天气预报,支持城市名称和天数作为参数。 - 提示贴心:提供
weather-advice提示,能根据天气状况获取旅行建议。
客户端特性
- 功能全面:演示了连接到 MCP 服务器、列出可用资源、读取特定城市资源、调用天气预报工具以及获取天气提示信息等操作。
通信特性
- 协议标准:使用 JSON-RPC 2.0 作为客户端和服务器之间的底层通信协议。
- 概念清晰:涉及标准方法名称(如
resources/list、resources/read、tools/call和prompts/get)、参数、请求标识符以及结果/错误等关键概念。
传输特性
- 机制简单:使用 stdio(标准输入/输出)作为客户端和服务器之间的传输机制。
- 日志友好:实现了自定义日志记录传输,将客户端和服务器之间交换的消息以人类可读的格式记录到控制台,便于理解协议。
💻 使用示例
基础用法
客户端启动并自动连接服务器执行示例操作:
node client.js
高级用法
独立启动服务器:
node server.js
🔧 技术细节
JSON-RPC 通信
此实现使用 JSON-RPC 2.0 作为底层通信协议,关键概念包括:
- 方法:标准方法名称,如
resources/list用于列出可用资源,resources/read用于读取特定资源,tools/call用于调用工具,prompts/get用于获取提示信息。 - 参数:随方法调用发送的输入数据,例如在调用
get-weather工具时,需要提供城市名称和天数作为参数。 - 请求标识符:与响应匹配的唯一标识符,确保请求和响应的正确对应。
- 结果/错误:结构化响应数据或错误信息,方便客户端处理。
传输机制
使用 stdio(标准输入/输出)作为客户端和服务器之间的传输机制。客户端启动时会生成服务器作为子进程,并通过 stdin/stdout 流进行通信。同时,实现了自定义日志记录传输,将交换的消息以人类可读的格式记录到控制台,有助于理解协议。
📚 详细文档
服务器资源
| 资源 | 详情 |
|------|------|
| city://NewYork | 关于纽约市的基本信息 |
| city://London | 关于伦敦市的基本信息 |
| city://Tokyo | 关于东京市的基本信息 |
服务器工具
| 工具 | 详情 |
|------|------|
| get-weather | 获取某个城市的天气预报,支持城市名称和天数作为参数 |
服务器提示
| 提示 | 详情 |
|------|------|
| weather-advice | 根据天气状况获取旅行建议 |
客户端操作
客户端在 client.js 文件中实现,演示了以下操作:
- 连接到 MCP 服务器
- 列出可用资源
- 读取特定城市资源
- 调用天气预报工具
- 获取天气提示信息
⚠️ 故障排除
如果遇到资源或提示请求超时的问题,请检查服务器实现。示例中实现了直接消息处理以解决当前 SDK 版本的限制。
Scan to join WeChat group