A Simple Mcp Server And Client

A Simple Mcp Server And Client

🚀 一个简单的 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/listresources/readtools/callprompts/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 版本的限制。

  • 0 关注
  • 0 收藏,9 浏览
  • system 提出于 2025-09-21 15:48

相似服务问题