返回 MCP 目录
public公开dns本地运行

a-simple-mcp-server-and-client

一个简单的MCP服务器和客户端实现,展示如何通过JSON-RPC协议提供和访问天气信息,包含城市资源查询、天气预报工具和天气建议提示功能。

article

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/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 版本的限制。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端