使用说明
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服务器。
设置
- 再进行:
npm install - 环境变量:
创建一个
.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.tshttp://localhost:3000.
运行客户端
客户端已在中配置 mcp-client.ts默认情况下,它会尝试连接到标记为的服务器 isOpen: true 在其配置中。
要运行客户端,请执行以下操作:
tsx mcp-client.ts
连接后,您可以键入与天气相关的查询,例如:
- “加利福尼亚州的天气警报是什么?”
- “获取纬度34.05和经度-118.24的预报”
客户端将与连接的MCP服务器和OpenAI交互,以提供所请求的信息。类型 quit 退出客户端。
原理
- 这
mcp-client.ts启动并连接到配置的MCP服务器。 - 它列出了每个连接服务器的可用工具。
- 当用户输入查询时,客户端将此查询与可用工具列表一起发送到OpenAI模型。
- OpenAI模型确定是否有任何工具可以满足请求。
- 如果选择了一个工具,客户端将使用OpenAI模型标识的参数在相应的MCP服务器上调用相应的工具。
- MCP服务器执行该工具(例如,通过调用NWS API)并返回结果。
- 客户端接收工具的结果,并将其与原始查询和对话历史一起发送回OpenAI模型。
- OpenAI模型根据工具的输出为用户生成最终响应。
- 客户端显示此响应。
备注
- NWS API主要提供美国境内地点的数据。
- 这
mcp-server-v1.ts和mcp-server-v2.ts使用@modelcontextprotocol/sdk以便在stdio上更容易地实现MCP。 - 这
mcp-server-protocol.ts演示了MCP over HTTP的手动实现,其中涉及直接处理JSON-RPC消息。 - 错误处理在客户端和服务器组件中都实现了。
- 客户端可以扩展以支持更多的服务器或不同类型的传输(例如SSE)。