使用说明
MCP服务器Azure功能
使用Azure Functions和的模型上下文协议(MCP)服务器实现。NET 8.0隔离工作者模型。
概述
此项目将模型上下文协议(MCP)服务器实现为Azure函数,实现了与支持MCP标准的语言模型的交互。该实现使用Azure Functions v4隔离的worker模型,该模型提供了更好的性能、可扩展性和与的兼容性。网8。
特性
-
实施MCP协议操作:
list_operations:标准MCP操作,列出所有可用操作get_openapi_spec:提供API文件的标准MCP操作getBusinessData:检索业务指标和数据的自定义操作triggerLogicApp:触发Azure逻辑应用程序的自定义操作callInternalApi:将请求代理到内部API的自定义操作
-
基于Azure Functions v4构建,具有隔离的工作进程
-
使用。NET 8.0,以提高性能和功能
-
结构化错误处理和日志记录
-
使用System进行JSON序列化。文本。JSON
-
使用二头肌模板的基础设施即代码(IaC)
先决条件
- .NET 8 SDK
- Azure功能核心工具v4
- Visual Studio 2022 或 Visual Studio Code
- Azure命令行界面 (用于部署)
- Azure二头肌CLI (用于基础设施部署)
设置和配置
地方发展设置
-
克隆存储库
-
配置本地设置
local.se.json文件包含在本地运行函数所需的配置。确保它包括:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "DOTNET_ISOLATE_TIMEOUT_SECONDS": "60", "LOGIC_APP_ENDPOINT": "https://prod-12.eastus.logic.azure.com:443/workflows/your-logic-app-id", "INTERNAL_API_BASE_URL": "https://api.internal.company.com", "INTERNAL_API_KEY": "your-api-key-here", "MCP_AUTH_ENABLED": "false", "MCP_ALLOWED_OPERATIONS": "getBusinessData,triggerLogicApp,callInternalApi,list_operations,get_openapi_spec" } } -
安装依赖项
dotnet restore
本地运行
-
启动该功能
func start该功能将在
http://localhost:7071/api/MCPFunction -
停止该功能
按
Ctrl+C在运行该功能的终端中,或 使用以下命令查找PIDnetstat -ano | findstr :7071 | findstr LISTENING然后杀了它taskkill /F /PID <PID>
测试
使用JSON文件进行本地测试
该项目包括测试JSON文件,以帮助验证MCP服务器功能:
-
测试列表_操作
使用
test-list-operations.json用于测试标准MCP操作的文件,其中列出了所有可用操作:curl -X POST http://localhost:7071/api/MCPFunction -H "Content-Type: application/json" -d @test-list-operations.json -
测试getBusinessData
使用
test-business-data.json用于测试检索业务数据的文件:curl -X POST http://localhost:7071/api/MCPFunction -H "Content-Type: application/json" -d @test-business-data.json -
测试其他操作
您可以按照MCP协议格式为其他操作创建其他测试文件:
{ "requestId": "unique-request-id", "messageType": "invoke", "invokeRequest": { "operation": "operationName", "parameters": { "param1": "value1", "param2": "value2" } } }
使用功能键测试已部署的功能
在测试部署到Azure的函数时,您需要在请求中包含函数键:
-
在curl请求中使用功能键
curl -X POST https://your-function-app.azurewebsites.net/api/MCPFunction \ -H "Content-Type: application/json" \ -H "x-functions-key: YOUR_FUNCTION_KEY" \ -d @test-list-operations.json -
替代方案:使用功能键作为查询参数
curl -X POST "https://your-function-app.azurewebsites.net/api/MCPFunction?code=YOUR_FUNCTION_KEY" \ -H "Content-Type: application/json" \ -d @test-list-operations.json -
使用Postman进行测试
- 向您的函数URL创建新的POST请求
- 添加一个
x-functions-key带有功能键的标题 - 设置
Content-Type标题到application/json - 以JSON格式添加MCP请求体
- 发送请求并检查响应
部署到Azure
使用二头肌进行部署(推荐)
此项目包括用于基础架构即代码部署的二头肌模板,遵循Azure最佳实践。
-
导航到基础结构目录
cd infra -
部署到特定的Azure区域(例如瑞典中部)
# Create resource group (if it doesn't exist) az group create --name rg-mcp-function --location swedencentral # Validate the deployment with what-if operation (recommended practice) az deployment group what-if --name mcp-server-deployment --resource-group rg-mcp-function --template-file main.bicep --parameters main.parameters.json # Deploy the infrastructure az deployment group create --name mcp-server-deployment --resource-group rg-mcp-function --template-file main.bicep --parameters main.parameters.json -
将功能代码部署到创建的功能应用程序
# Build the project for release dotnet publish -c Release # Deploy to Azure Function App (replace FUNCTION_APP_NAME with your deployed function app name) func azure functionapp publish FUNCTION_APP_NAME --dotnet-isolated -
检索功能键进行测试
# List function keys az functionapp function keys list --name FUNCTION_APP_NAME --resource-group rg-mcp-function --function-name MCPFunction
二头肌模板细节
二头肌模板(main.bicep)包括:
- 功能应用程序。NET 8.0隔离工作运行时
- 应用服务计划(消费或专用)
- 功能执行存储帐户
- 监控应用洞察
- 日志分析工作区
- 用户分配的托管身份用于安全身份验证
可定制的关键参数:
location:用于部署的Azure区域(默认:swedencentral)environmentName:资源的名称前缀appServicePlanSku:应用服务计划的SKU(Y1、B1、S1)mcpAuthEnabled:是否启用MCP身份验证mcpAllowedOperations:逗号分隔的允许操作列表
使用Azure CLI进行部署(替代方案)
-
在Azure中创建功能应用程序
az login az group create --name mcp-server-rg --location eastus az storage account create --name mcpserverfunc --location eastus --resource-group mcp-server-rg --sku Standard_LRS az functionapp create --resource-group mcp-server-rg --consumption-plan-location eastus --runtime dotnet-isolated --functions-version 4 --name mcp-server-function --storage-account mcpserverfunc --os-type Windows -
设置功能应用程序设置
az functionapp config appsettings set --name mcp-server-function --resource-group mcp-server-rg --settings "LOGIC_APP_ENDPOINT=https://prod-12.eastus.logic.azure.com:443/workflows/your-logic-app-id" "INTERNAL_API_BASE_URL=https://api.internal.company.com" "MCP_AUTH_ENABLED=true" "MCP_ALLOWED_OPERATIONS=getBusinessData,triggerLogicApp,callInternalApi,list_operations,get_openapi_spec"对于API密钥等敏感设置,请使用Azure密钥保管库:
az keyvault create --name mcpserver-kv --resource-group mcp-server-rg --location eastus az keyvault secret set --vault-name mcpserver-kv --name "InternalApiKey" --value "your-api-key-here" az functionapp identity assign --name mcp-server-function --resource-group mcp-server-rg # Grant the function access to Key Vault $principalId=$(az functionapp identity show --name mcp-server-function --resource-group mcp-server-rg --query principalId --output tsv) az keyvault set-policy --name mcpserver-kv --object-id $principalId --secret-permissions get list # Add Key Vault reference to Function App settings az functionapp config appsettings set --name mcp-server-function --resource-group mcp-server-rg --settings "INTERNAL_API_KEY=@Microsoft.KeyVault(SecretUri=https://mcpserver-kv.vault.azure.net/secrets/InternalApiKey/)" -
发布函数
func azure functionapp publish mcp-server-function
使用Azure DevOps或GitHub操作进行部署
使用以下命令创建CI/CD管道:
- Azure DevOps Azure功能管道模板
- GitHub操作Azure函数工作流
生产部署注意事项
区域选择
- 瑞典中部地区福利:
- 针对欧洲数据驻留要求的强大合规产品
- 可持续发展重点,可再生能源使用量高
- 北欧和北欧用户的低延迟访问
- 配备最新基础设施的现代化Azure数据中心
安全最佳实践
- 通过设置启用MCP身份验证
MCP_AUTH_ENABLED=true生产中 - 将敏感信息(如API密钥)存储在Azure密钥保管库中
- 使用托管身份与其他Azure服务进行身份验证
- 使用Application Insights监控功能执行
- 定期更新依赖关系以解决安全漏洞
- 启用仅HTTPS访问您的功能应用程序
- 使用最低TLS版本1.2
- 禁用对功能应用程序的FTP访问
监控和卓越运营
- 启用Application Insights以进行全面监控
- 设置异常功能行为警报
- 配置日志保留的诊断设置
- 使用资源标签进行更好的资源管理
- 为管理访问实施适当的RBAC
- 定期备份功能应用程序配置
故障排除
常见问题
-
系统。网。找不到基本体程序集
运行时可能会出现这种情况。NET 8使用进程内模型运行。解决方案是使用此项目中配置的隔离工作进程模型。
-
函数未在本地启动
确保你有权利。global.json中指定的NET SDK版本:
{ "sdk": { "version": "8.0.115" } } -
身份验证或授权失败
检查你的
MCP_AUTH_ENABLED设置并确保在Azure中配置了正确的身份验证。 -
二头肌展开错误
- 使用以下工具检查棉绒错误
az bicep build --file main.bicep - 验证资源名称约定和唯一性
- 确保使用正确的参数类型
- 使用假设操作在部署前验证更改
- 常见的二头肌错误包括:
- 在不正确的位置使用函数(例如,utcNow()只能在参数默认值中使用)
- 变量引用无效
- 缺少参数或表达式
- 使用以下工具检查棉绒错误
-
功能关键问题
如果在测试部署的功能时收到401未经授权的错误,请确保在请求中包含功能键,无论是作为
x-functions-key标题或作为?code=查询参数。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 运行测试
- 提交拉取请求
许可证
[指定发布此项目的许可证]
