使用说明

项目简介

本项目是一个基于 Model Context Protocol (MCP) 的服务器实现示例,它通过 MCP 协议向客户端提供天气查询和用户管理的功能。该服务器使用 Stdio 传输协议,并提供了两个工具:'getWeatherByCityName' 用于查询城市天气,'get_users' 和 'add_user' 用于用户信息的管理。

主要功能点

  • 天气查询工具 (getWeatherByCityName): 允许客户端查询指定城市的天气信息。目前仅支持 "patiala", "jalna", "mumbai" 这三个城市,返回简单的温度和天气预报信息。
  • 用户管理工具 (get_users, add_user):
    • 'get_users': 从 MongoDB 数据库中获取所有用户的信息。
    • 'add_user': 向 MongoDB 数据库中添加新的用户,需要提供用户名和邮箱。
  • 基于 MCP 协议: 遵循 MCP 协议规范,使用 JSON-RPC 格式进行客户端和服务器端的数据交互。
  • Stdio 传输: 使用标准输入输出 (Stdio) 作为 MCP 服务器的传输协议,方便本地测试和部署。
  • 工具注册: 通过 'server.tool()' 方法注册工具,定义工具的名称、参数和执行逻辑。
  • MongoDB 集成: 使用 MongoDB 数据库存储用户信息,演示了 MCP 服务器与外部数据源的集成。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/AayushKarwa/mcp-server-test.git
    cd mcp-server-test
  2. 安装依赖: 确保已安装 Node.js 和 npm (或 yarn)。在项目根目录下运行:

    npm install
  3. 配置环境变量:

    • MongoDB 连接 URI: 需要在项目根目录下创建 '.env' 文件,并添加 MongoDB 连接 URI。例如:
      MONGODB_URI=mongodb://your_mongodb_connection_string/your_database_name
      请替换 'your_mongodb_connection_string' 和 'your_database_name' 为您实际的 MongoDB 连接信息和数据库名称。如果本地没有 MongoDB 服务,你需要先安装并运行 MongoDB 服务。
  4. 构建项目: 由于项目是 TypeScript 编写的,需要先进行编译:

    npm run build
  5. 启动服务器: 运行以下命令启动 MCP 服务器:

    npm start

    服务器启动后,将在控制台输出 "Starting weather server...",并等待 MCP 客户端通过 Stdio 进行连接和请求。

服务器配置

MCP 客户端需要配置以下 JSON 信息来连接到此 MCP 服务器。以下配置信息为示例,请根据实际情况调整:

{
  "serverName": "Weather Server",
  "command": "node",
  "args": ["dist/index.js"]
}

配置参数说明:

  • 'serverName': 服务器名称,这里设置为 "Weather Server",与代码中 'McpServer' 实例化的 'name' 属性一致。
  • 'command': 启动服务器的命令,这里使用 'node' 命令来执行 JavaScript 文件。
  • 'args': 命令参数,这里指定服务器入口文件为 'dist/index.js' (编译后的 JavaScript 文件路径)。

注意: MCP 客户端需要能够执行 'node' 命令,并确保 'dist/index.js' 文件路径相对于客户端的工作目录是正确的。

基本使用方法

此 MCP 服务器通过 Stdio 与客户端通信。客户端需要发送符合 JSON-RPC 格式的请求到服务器的标准输入 (stdin),并从服务器的标准输出 (stdout) 读取 JSON-RPC 响应。

示例请求 (JSON-RPC over Stdio):

1. 调用 'getWeatherByCityName' 工具查询天气:

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "tool_id": "getWeatherByCityName",
    "arguments": {
      "city": "mumbai"
    }
  },
  "id": "1"
}

预期响应 (stdout):

{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"temp\":\"42C\",\"forecase\":\"jal jaoge\"}"
      }
    ]
  }
}

2. 调用 'get_users' 工具获取所有用户:

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "tool_id": "get_users",
    "arguments": {}
  },
  "id": "2"
}

预期响应 (stdout): (响应内容会根据数据库中实际用户数据而变化)

{
  "jsonrpc": "2.0",
  "id": "2",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "[{\"_id\":\"...\",\"name\":\"User1\",\"email\":\"[email protected]\",\"__v\":0},{\"_id\":\"...\",\"name\":\"User2\",\"email\":\"[email protected]\",\"__v\":0}]"
      }
    ]
  }
}

3. 调用 'add_user' 工具添加用户:

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "tool_id": "add_user",
    "arguments": {
      "name": "New User",
      "email": "[email protected]"
    }
  },
  "id": "3"
}

预期响应 (stdout):

{
  "jsonrpc": "2.0",
  "id": "3",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "User New User added successfully"
      }
    ]
  }
}

请参考 MCP 协议文档和客户端 SDK,构建 MCP 客户端来与此服务器进行交互。

信息

分类

网页与API