项目简介

此仓库不仅是一个交互式AI聊天应用的前端,它还包含一个基于Model Context Protocol (MCP) 构建的独立服务器实现。该MCP服务器的核心功能是向LLM客户端提供一个名为 'fetch-weather' 的工具,允许LLM通过标准化的JSON-RPC协议查询全球任意城市的实时天气信息。这使得AI应用能够轻松集成外部实时数据,增强其功能。

主要功能点

  • 实时天气查询工具: 服务器提供 'fetch-weather' 工具,LLM客户端可以调用它来获取指定城市的当前天气,包括温度、降水、云量和风速等。
  • 遵循MCP协议: 服务器严格遵循Model Context Protocol (MCP) 标准,通过JSON-RPC协议与客户端通信,确保互操作性和可扩展性。
  • 能力声明: 服务器会向连接的LLM客户端声明其提供的工具,包括工具名称、描述及其所需的参数(如城市名称)。
  • 稳健的数据处理: 内部使用Zod库进行API响应验证,并包含错误处理机制,以确保天气数据查询的可靠性。
  • 独立运行: MCP服务器可以作为一个独立的进程运行,通过标准输入/输出 (Stdio) 与MCP客户端进行通信。

安装步骤

要运行此MCP服务器,您需要安装Node.js环境。

  1. 克隆仓库:

    git clone https://github.com/MmmarRTha/echobot-ai-app.git
    cd echobot-ai-app
  2. 安装依赖:

    npm install
  3. 启动MCP服务器: MCP服务器代码位于 'src/mcp-server.ts'。您可以使用 'ts-node' 直接运行它。

    npx ts-node src/mcp-server.ts

    (请确保您的环境中安装了 'ts-node',如果没有,可以通过 'npm install -g ts-node' 进行全局安装,或通过 'npm install --save-dev ts-node' 作为开发依赖安装。)

    服务器启动后,它将监听标准输入/输出 (Stdio) 以接收MCP客户端的请求。

服务器配置 (针对MCP客户端)

MCP客户端需要以下JSON格式的配置信息来连接并使用此MCP服务器。这份配置描述了服务器的启动方式及其提供的能力。

{
  "name": "MCP Server",
  "command": "npx",
  "args": ["ts-node", "src/mcp-server.ts"],
  "description": "提供实时天气查询功能的MCP服务器,可供LLM客户端调用以获取指定城市的天气信息。",
  "capabilities": {
    "tools": [
      {
        "name": "fetch-weather",
        "description": "获取给定城市的当前天气信息",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string",
              "description": "要查询天气的城市名称"
            }
          },
          "required": ["city"]
        }
      }
    ]
  }
}
  • 'name': MCP服务器的标识名称,此处为 "MCP Server"。
  • 'command': 启动MCP服务器的可执行命令,此处为 'npx'。
  • 'args': 传递给 'command' 的参数列表,用于指定启动 'src/mcp-server.ts'。
  • 'description': 对MCP服务器功能用途的简要描述。
  • 'capabilities': 声明服务器提供的各项功能。
    • 'tools': 列出服务器支持的工具。
      • 'name': 工具的唯一名称,LLM客户端通过此名称调用。
      • 'description': 工具的具体用途。
      • 'parameters': 定义工具所需参数的JSON Schema。这里,'fetch-weather' 工具需要一个名为 'city' 的字符串类型参数。

基本使用方法 (作为MCP客户端用户)

一旦MCP客户端成功连接到此服务器并获取了其能力声明,LLM即可通过调用 'fetch-weather' 工具来查询天气。

例如,一个LLM可能会生成如下的JSON-RPC请求来调用此工具:

{
  "jsonrpc": "2.0",
  "method": "tool_code",
  "params": {
    "call_id": "unique_call_id_123",
    "tool_name": "fetch-weather",
    "args": {
      "city": "London"
    }
  }
}

服务器接收并处理此请求后,会通过JSON-RPC响应返回查询结果,例如:

{
  "jsonrpc": "2.0",
  "method": "tool_result",
  "params": {
    "call_id": "unique_call_id_123",
    "result": {
      "content": [
        {
          "type": "text",
          "text": "Weather for London:\n- Temperature: 50.18°F\n- Day/Night: Day\n- Precipitation: 0mm\n- Rain: 0mm\n- Cloud Cover: 0%\n- Wind Speed: 11.2 km/h"
        }
      ]
    }
  }
}

LLM客户端将解析此响应,获取天气信息并用于进一步的交互或展示。

信息

分类

AI与计算