项目简介

这个项目是一个使用Node.js和官方Model Context Protocol (MCP) SDK构建的天气信息MCP服务器示例。它演示了如何在Azure Functions上以自定义处理程序(Custom Handler)的方式部署MCP服务器,从而利用Azure Functions的无服务器、按需扩展和安全特性。该服务器暴露了两个核心工具:获取某个州的天气警报和获取指定经纬度地点的天气预报。LLM客户端(如支持MCP协议的Copilot)可以通过JSON-RPC调用这些工具来获取实时天气数据。

主要功能点

  • MCP服务器实现: 遵循Model Context Protocol规范,通过Node.js SDK提供标准化的上下文和功能接口。
  • 天气预警工具: 提供 'get-alerts' 工具,根据两字母州代码查询美国国家气象局(NWS)的活跃天气警报。
  • 天气预报工具: 提供 'get-forecast' 工具,根据经纬度查询美国国家气象局(NWS)的短期天气预报。
  • Azure Functions部署: 示范如何将MCP服务器作为Azure Functions的自定义处理程序进行部署,实现无状态、事件驱动的云端托管。
  • JSON-RPC通信: 使用JSON-RPC协议与MCP客户端进行通信,确保标准化的请求和响应模式。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/Azure-Samples/mcp-sdk-functions-hosting-node.git
    cd mcp-sdk-functions-hosting-node
  2. 安装依赖: 在项目根目录运行npm安装命令。
    npm install
  3. 安装必备工具 (用于Azure部署和本地运行):
  4. 注册Azure资源提供程序 (仅在首次部署Azure时需要):
    az provider register --namespace 'Microsoft.App'

服务器配置 (供MCP客户端连接使用)

以下是一个MCP客户端连接到此MCP服务器所需的配置示例。你需要将 'command' 和 'args' 中的服务器路径和端口根据实际情况进行调整。

{
  "servers": [
    {
      "name": "weather-mcp-server",
      "command": "npm",
      "args": ["start"],
      "endpoint": "http://localhost:3000/mcp",
      "description": "本地运行的MCP天气服务器",
      "capabilities": {
        "tools": {
          "get-alerts": {
            "description": "获取某个州的天气警报",
            "parameters": {
              "type": "object",
              "properties": {
                "state": {
                  "type": "string",
                  "description": "两字母州代码 (例如 CA, NY)",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              "required": ["state"]
            }
          },
          "get-forecast": {
            "description": "获取某个位置的天气预报",
            "parameters": {
              "type": "object",
              "properties": {
                "latitude": {
                  "type": "number",
                  "description": "地点的纬度",
                  "minimum": -90,
                  "maximum": 90
                },
                "longitude": {
                  "type": "number",
                  "description": "地点的经度",
                  "minimum": -180,
                  "maximum": 180
                }
              },
              "required": ["latitude", "longitude"]
            }
          }
        }
      }
    }
  ]
}
  • 'name': MCP服务器的唯一名称,例如 'weather-mcp-server'。
  • 'command': 启动MCP服务器进程的命令。对于本地运行,通常是 'npm'。
  • 'args': 传递给 'command' 的参数。'start' 是在 'package.json' 中定义的启动脚本。
  • 'endpoint': MCP服务器监听的URL路径。默认本地运行在 'http://localhost:3000/mcp'。部署到Azure后,此URL将变为 'https://{functionapp-name}.azurewebsites.net/mcp'。
  • 'description': 服务器的简短描述。
  • 'capabilities': 服务器提供的功能声明,包含所暴露的工具 ('tools') 及其详细描述和参数定义。

基本使用方法

  1. 本地运行服务器: 在项目根目录运行以下命令启动MCP服务器:
    func start
    服务器将在配置的端口(默认为3000)上监听。
  2. 连接MCP客户端 (例如VS Code Copilot):
    • 打开VS Code中的 'mcp.json' 文件(通常位于 '.vscode' 目录下)。
    • 点击 'local-mcp-server' 上方的“Start”按钮来连接本地服务器。
    • 切换到VS Code的Copilot(或Agent)模式。
    • 向Copilot提问,例如:“What is the weather in NYC?” 或 “Get weather alerts for California.”
    • Copilot将通过调用MCP服务器的相应工具来获取天气信息。
  3. 部署到Azure Functions (可选): 在项目根目录运行 'azd up' 命令,Azure Developer CLI将自动化创建所需的Azure资源并部署MCP服务器。部署完成后,你将获得一个公共的API端点,可用于远程连接。

信息

分类

AI与计算