天气查询工具

一个基于MCP协议和OpenAI集成的天气查询工具,提供天气警报和预报功能,适用于美国地区的天气数据查询。

  • by ruixingshi
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ruixingshi/mcp-guide

使用说明

MCP指南

一个包含基本MCP客户端和MCP服务器(基于SDK和JSON-RPC实现)的存储库,帮助每个人从0开始学习MCP。

项目结构

  • mcp-client.ts:一个命令行界面(CLI)客户端,连接到MCP服务器,使用OpenAI的API处理用户查询并与可用工具交互。
  • mcp-server-v1.ts:使用 @modelcontextprotocol/sdk 图书馆。它提供天气工具(get-alerts 和 get-forecast)超过stdio。
  • mcp-server-v2.ts:另一个MCP服务器实现,类似于 v1,但使用与SDK略有不同的服务器设置。它还通过stdio提供天气工具。
  • mcp-server-protocol.ts:使用Express.js实现为HTTP服务器的MCP服务器。它手动实现基于JSON-RPC的MCP,通过HTTP端点提供相同的天气工具。
  • utils.ts:包含用于与NWS API交互的实用程序函数,包括发出请求和格式化警报数据。
  • types.ts:定义用于验证与NWS API相关的参数和结构化数据的TypeScript类型和Zod架构。

特性

  • 多服务器实现:
    • 基于Stdio的MCP服务器(v1和v2使用SDK)。
    • 基于HTTP的MCP服务器(手动协议实现)。
  • 天气工具:
    • get-alerts:获取美国特定州的天气警报。
    • get-forecast:检索特定纬度和经度的天气预报。
  • OpenAI集成客户端使用OpenAI模型来理解自然语言查询,并决定调用哪个工具。
  • 动态服务器连接:客户端可以连接到多个配置的MCP服务器。

设置

  1. 再进行:
    npm install
    
  2. 环境变量: 创建一个 .env 文件,并添加您的OpenAI API密钥:
    OPENAI_API_KEY=your_openai_api_key_here
    # Optional: Specify a different OpenAI model or base URL
    # OPENAI_MODEL=gpt-3.5-turbo
    # OPENAI_BASE_URL=https://api.openai.com/v1
    

运行服务器

您可以使用以下命令运行不同的服务器实现:

  • MCP服务器V1(stdio):
    tsx mcp-server-v1.ts
    
  • MCP服务器V2(标准输入输出):
    tsx mcp-server-v2.ts
    
  • MCP服务器(HTTP):
    tsx mcp-server-protocol.ts
    
    此服务器通常运行在 http://localhost:3000.

运行客户端

客户端已在中配置 mcp-client.ts默认情况下,它会尝试连接到标记为的服务器 isOpen: true 在其配置中。

要运行客户端,请执行以下操作:

tsx mcp-client.ts

连接后,您可以键入与天气相关的查询,例如:

  • “加利福尼亚州的天气警报是什么?”
  • “获取纬度34.05和经度-118.24的预报”

客户端将与连接的MCP服务器和OpenAI交互,以提供所请求的信息。类型 quit 退出客户端。

原理

  1. 这 mcp-client.ts 启动并连接到配置的MCP服务器。
  2. 它列出了每个连接服务器的可用工具。
  3. 当用户输入查询时,客户端将此查询与可用工具列表一起发送到OpenAI模型。
  4. OpenAI模型确定是否有任何工具可以满足请求。
  5. 如果选择了一个工具,客户端将使用OpenAI模型标识的参数在相应的MCP服务器上调用相应的工具。
  6. MCP服务器执行该工具(例如,通过调用NWS API)并返回结果。
  7. 客户端接收工具的结果,并将其与原始查询和对话历史一起发送回OpenAI模型。
  8. OpenAI模型根据工具的输出为用户生成最终响应。
  9. 客户端显示此响应。

备注

  • NWS API主要提供美国境内地点的数据。
  • 这 mcp-server-v1.ts 和 mcp-server-v2.ts 使用 @modelcontextprotocol/sdk 以便在stdio上更容易地实现MCP。
  • 这 mcp-server-protocol.ts 演示了MCP over HTTP的手动实现,其中涉及直接处理JSON-RPC消息。
  • 错误处理在客户端和服务器组件中都实现了。
  • 客户端可以扩展以支持更多的服务器或不同类型的传输(例如SSE)。