项目简介

该项目展示了如何使用C# (.NET) MCP SDK构建一个MCP服务器,并将其作为自定义处理程序托管在Azure Functions上。它以一个天气查询服务为例,演示了如何通过MCP协议向大型语言模型(LLM)客户端提供天气警报和预报功能。

主要功能点

  • MCP服务器托管: 将基于.NET MCP SDK开发的服务部署到Azure Functions平台,利用其无服务器特性和弹性伸缩能力。
  • 天气查询工具: 提供'GetAlerts'(获取指定州的最新天气警报)和'GetForecast'(获取指定经纬度位置的天气预报)两个核心工具,允许LLM客户端查询实时天气信息。
  • 安全与认证: 支持通过Function App访问密钥或Azure API Management (APIM) 进行服务器访问认证,并通过Entra ID(Azure Active Directory)实现身份验证,确保服务安全。
  • 本地运行与云端部署: 支持在本地运行进行测试和开发,并使用Azure Developer CLI ('azd up') 命令行工具快速部署到Azure云端,简化部署流程。

安装步骤

  1. 克隆仓库: 在您的本地开发环境中,通过Git命令行克隆此仓库:
    git clone https://github.com/Azure-Samples/mcp-sdk-functions-hosting-dotnet.git
  2. 安装必要工具: 请确保您的开发环境已安装以下最新版本的工具:
  3. 注册Azure资源提供程序: 如果您是首次部署到Azure,可能需要注册'Microsoft.App'资源提供程序。在Azure CLI中运行以下命令:
    az provider register --namespace 'Microsoft.App'
    等待几秒钟,直到注册状态变为"Registered"。

服务器配置

MCP客户端需要以下配置信息来连接到此服务器。以下是一个JSON格式的配置示例,其中包含根据仓库信息生成的准确参数和注释。请根据实际部署情况替换占位符。

{
  "name": "远程MCP天气服务器",
  "command": "func",
  "args": [
    "start",
    "--port",
    "7071"
  ],
  "env": {
    "FUNCTIONS_CUSTOMHANDLER_PORT": "7071"
  },
  "serverInfo": {
    "endpoint": "https://{functionapp-name}.azurewebsites.net/mcp",
    "key": "{functionapp-key}"
  },
  "apimServerInfo": {
    "endpoint": "https://{apim-resource-name}.azure-api.net/mcp"
  },
  "description": "提供天气警报和预报功能的MCP服务器。",
  "tools": [
    {
      "name": "GetAlerts",
      "description": "获取某个美国州的天气警报。",
      "parameters": [
        {
          "name": "state",
          "type": "string",
          "description": "美国州的两位字母缩写(例如:NY)"
        }
      ]
    },
    {
      "name": "GetForecast",
      "description": "获取某个地点的天气预报。",
      "parameters": [
        {
          "name": "latitude",
          "type": "number",
          "description": "地点的纬度"
        },
        {
          "name": "longitude",
          "type": "number",
          "description": "地点的经度"
        }
      ]
    }
  ]
}
  • 'name': MCP服务器在客户端中显示的友好名称。
  • 'command': 启动MCP服务器的命令(主要用于本地运行,例如'func')。
  • 'args': 启动命令的附加参数,如指定端口。
  • 'env': 本地运行时的环境变量,如'FUNCTIONS_CUSTOMHANDLER_PORT'指定服务器监听的端口。
  • 'serverInfo.endpoint': 部署到Azure Functions后,MCP服务器的HTTP访问地址。请将'{functionapp-name}'替换为您在Azure上部署的Function App名称。
  • 'serverInfo.key': 部署到Azure Functions后,访问Function App所需的密钥。请从Azure门户的Function App资源页面导航到“函数” -> “应用密钥”,复制'default'密钥。
  • 'apimServerInfo.endpoint': 如果通过Azure API Management (APIM) 保护服务器,则使用此终端点。请将'{apim-resource-name}'替换为您在Azure上创建的APIM实例名称。
  • 'description': 服务器的简要功能描述。
  • 'tools': 服务器提供的工具列表。每个工具包含其名称、描述以及所需的参数(名称、类型、描述)。

基本使用方法

  1. 在本地运行服务器:

    • 在克隆的仓库根目录中,打开终端并运行命令:'func start'。
    • 在Visual Studio Code中,打开'_vscode/mcp.json'文件。
    • 点击'local-mcp-server'配置项旁边的“Start”按钮,启动本地MCP服务器。
    • 打开VS Code中的Copilot,切换到Agent模式,并提问:“What is the weather in NYC?”(纽约的天气怎么样?)。Copilot将通过本地MCP服务器调用天气工具并给出回答。
  2. 部署服务器到Azure:

    • 在克隆的仓库根目录中,打开终端并运行命令:'azd up'。
    • 此命令将引导您完成Azure资源的创建和应用的部署过程。部署完成后,终端将显示Function App的访问终端点(Endpoint)。
  3. 连接远程服务器 (Azure Functions Endpoint):

    • 部署完成后,在Azure门户中找到您的Function App资源,获取其名称和访问密钥。
    • 在Visual Studio Code中,打开'_vscode/mcp.json'文件。
    • 点击'remote-mcp-server'配置项旁边的“Start”按钮。
    • 根据提示输入您的Function App名称和访问密钥。
    • 现在,您可以通过VS Code Copilot等MCP客户端与部署在Azure上的远程天气服务器进行交互。
  4. 连接远程服务器 (APIM Endpoint - 增强安全):

    • 在Visual Studio Code中,打开'_vscode/mcp.json'文件。
    • 点击'remote-mcp-server-apim'配置项旁边的“Start”按钮。
    • 根据提示输入您的APIM资源名称。
    • 系统将弹出窗口提示MCP服务器请求Microsoft账户认证,点击“Allow”并登录您的Microsoft账户进行身份验证。
    • 成功认证后,您将通过APIM网关安全地连接到远程MCP服务器。

故障排除

如果您在部署或使用过程中遇到问题,请参考仓库'README.md'中的“Troubleshooting”部分,其中列出了常见的错误和解决方案。

信息

分类

网页与API