项目简介
该项目展示了如何使用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云端,简化部署流程。
安装步骤
- 克隆仓库:
在您的本地开发环境中,通过Git命令行克隆此仓库:
git clone https://github.com/Azure-Samples/mcp-sdk-functions-hosting-dotnet.git - 安装必要工具: 请确保您的开发环境已安装以下最新版本的工具:
- 注册Azure资源提供程序:
如果您是首次部署到Azure,可能需要注册'Microsoft.App'资源提供程序。在Azure CLI中运行以下命令:
等待几秒钟,直到注册状态变为"Registered"。az provider register --namespace 'Microsoft.App'
服务器配置
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': 服务器提供的工具列表。每个工具包含其名称、描述以及所需的参数(名称、类型、描述)。
基本使用方法
-
在本地运行服务器:
- 在克隆的仓库根目录中,打开终端并运行命令:'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服务器调用天气工具并给出回答。
-
部署服务器到Azure:
- 在克隆的仓库根目录中,打开终端并运行命令:'azd up'。
- 此命令将引导您完成Azure资源的创建和应用的部署过程。部署完成后,终端将显示Function App的访问终端点(Endpoint)。
-
连接远程服务器 (Azure Functions Endpoint):
- 部署完成后,在Azure门户中找到您的Function App资源,获取其名称和访问密钥。
- 在Visual Studio Code中,打开'_vscode/mcp.json'文件。
- 点击'remote-mcp-server'配置项旁边的“Start”按钮。
- 根据提示输入您的Function App名称和访问密钥。
- 现在,您可以通过VS Code Copilot等MCP客户端与部署在Azure上的远程天气服务器进行交互。
-
连接远程服务器 (APIM Endpoint - 增强安全):
- 在Visual Studio Code中,打开'_vscode/mcp.json'文件。
- 点击'remote-mcp-server-apim'配置项旁边的“Start”按钮。
- 根据提示输入您的APIM资源名称。
- 系统将弹出窗口提示MCP服务器请求Microsoft账户认证,点击“Allow”并登录您的Microsoft账户进行身份验证。
- 成功认证后,您将通过APIM网关安全地连接到远程MCP服务器。
故障排除
如果您在部署或使用过程中遇到问题,请参考仓库'README.md'中的“Troubleshooting”部分,其中列出了常见的错误和解决方案。
信息
分类
网页与API