关于 A Simple MCP Server and Client
这是一个用于了解城市信息、天气预报和旅行建议的 MCP 服务与客户端示例。它展示 stdio 通信,并记录底层 JSON-RPC 消息,便于开发者学习 MCP。
主要功能
- 01城市信息资源
- 02天气预报工具
- 03基于天气的旅行提示词
- 04stdio 客户端与服务通信
- 05易读的 JSON-RPC 日志
适用场景
- 01学习 MCP 资源、工具和提示词的用法
- 02调试时检查 JSON-RPC 通信
- 03试用可启动服务进程的客户端
MCP 相关
服务端向 MCP 客户端提供城市资源、天气工具和旅行建议提示词。附带的客户端通过 stdio 连接,并演示读取资源、调用工具和获取提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
一个简单的 MCP 服务和客户端
这是一个简单的模型上下文协议(MCP)服务和客户端实现,演示如何公开和访问天气信息。
服务
服务实现在 server.js 中,提供以下功能:
-
资源:
city://NewYork:纽约市的基本信息city://London:伦敦的基本信息city://Tokyo:东京的基本信息
-
工具:
get-weather:获取某个城市的天气预报,可设置城市名称和天数参数
-
提示词:
weather-advice:根据天气状况获取旅行建议
客户端
客户端实现在 client.js 中,演示如何:
- 连接到 MCP 服务
- 列出可用资源
- 读取指定的城市资源
- 调用天气预报工具
- 获取天气建议提示词
JSON-RPC 通信
此实现使用 JSON-RPC 2.0 作为客户端与服务之间的底层通信协议。使用的 JSON-RPC 核心概念包括:
- 方法:标准方法名称,例如
resources/list、resources/read、tools/call和prompts/get - 参数:随方法调用发送的输入数据
- 请求 ID:用于将请求与响应对应起来的唯一标识符
- 结果/错误:结构化响应数据或错误信息
MCP SDK 抽象了其中大部分细节,但了解该协议有助于调试和自定义。查看控制台输出即可看到原始 JSON-RPC 消息。
运行服务和客户端
-
启动客户端:
node client.js启动客户端会自动将服务作为子进程启动。客户端将连接到服务并执行所有示例操作。
-
单独启动服务:
node server.js
传输机制
此示例使用 stdio(标准输入/输出)作为客户端与服务之间的传输机制。启动客户端时,它会将服务作为子进程启动,并通过 stdin/stdout 流与其通信。
此示例实现了自定义日志传输机制,用于展示客户端与服务之间交换的消息。这些消息会以便于阅读的格式记录到控制台,帮助理解该协议。
故障排查
如果资源请求或提示词请求超时,请检查服务实现。此示例针对特定请求类型加入了直接消息处理,以绕过当前 SDK 版本的限制。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。