为Azure功能设计MCP服务器
该项目提供了一个远程MCP(模型上下文协议)服务器,用于与Devin API交互。它是用TypeScript构建的,旨在作为Azure Function应用程序部署。
该服务器将Devin API功能公开为自定义工具,可由GitHub Copilot等兼容客户端调用。
特性
实施了以下工具:
createSession:创建新的Devin会话。sendMessage:向现有Devin会话发送消息。uploadFile:将文件上传到Devin会话。listSessions:检索所有会话的列表。getSession:获取特定会话的详细信息。updateTags:更新特定会话的标签。
先决条件
- (建议使用v18.x或更高版本)
- Azure功能核心工具
- Devin API密钥
入门指南
1.克隆存储库
git clone https://github.com/your-username/devin-mcp.git
cd devin-mcp2.安装依赖项
npm install3.配置环境变量
服务器需要将您的Devin API密钥配置为环境变量。对于本地开发,您可以使用 local.settings.json 文件。
打开 local.settings.json 并替换 YOUR_DEVIN_API_KEY_HERE 使用您的实际Devin API密钥。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node",
"DEVIN_API_KEY": "YOUR_DEVIN_API_KEY_HERE",
"AzureWebJobsSecretStorageType": "Files"
}
}本地运行
要在本地启动功能应用程序,请运行以下命令:
npm startMCP服务器将在 http://localhost:7071。然后,您可以将MCP客户端连接到此端点。
从客户端连接
您可以从任何兼容的客户端连接到此MCP服务器,例如 MCP检查员 或GitHub Copilot。
连接到本地服务器
在本地运行服务器时,请使用以下SSE端点URL:
http://localhost:7071/runtime/webhooks/mcp/sse
本地连接不需要身份验证。
对于支持配置文件的客户端(例如 .mcp.json 文件),您可以这样定义服务器连接:
{
"servers": {
"DevinMCP": {
"type": "sse",
"url": "http://localhost:7071/runtime/webhooks/mcp/sse"
}
}
}连接到远程服务器(Azure)
部署到Azure后,服务器需要使用系统密钥进行身份验证。您可以从Terraform输出或Azure门户获取此密钥(Function App -> App Keys -> System Keys -> mcp_extension).
对于支持配置文件的客户端(例如 .mcp.json 文件),您可以这样定义远程服务器连接。将URL替换为功能应用程序的主机名,将密钥替换为 mcp_extension 系统密钥。
{
"servers": {
"Devin-MCP-Azure-Functions": {
"type": "sse",
"url": "https://.azurewebsites.net/runtime/webhooks/mcp/sse",
"headers": {
"x-functions-key": "YOUR_MCP_EXTENSION_SYSTEM_KEY"
}
}
}
}关于身份验证的注意事项: 此示例使用Azure函数内置的API密钥(系统密钥)身份验证,以简化部署。正式的MCP规范提到符合 OAuth 2.0动态客户端注册协议 以获得更强大的安全性。生产级实现可能需要更复杂的设置,包括身份提供者,以完全遵守此标准。
部署
此功能应用程序已准备好部署到Azure。您可以使用 Azure开发者命令行界面(azd) 或标准Azure Functions部署方法。
使用Terraform部署
对于作为代码部署的自动化基础设施,您可以使用提供的Terraform配置。
详细说明见 地形自述.
参考文献
- Azure功能远程MCP服务器示例: Azure示例/远程mcp函数类型脚本
- Azure函数MCP触发器绑定: Azure函数MCP触发器文档
- Devin API参考: Devin API文件
