项目简介
该项目是一个基于Node.js和TypeScript实现的MCP(Model Context Protocol)服务器。它利用Azure Functions MCP扩展,集成了Azure App Service的身份验证和授权功能(支持Entra ID),并演示了如何使用On-Behalf-Of流程调用Microsoft Graph API获取当前登录用户的详细信息。此外,它还提供了一个简单的数字加法工具。此项目可以部署到Azure云平台,也支持本地运行。
主要功能点
- MCP服务器实现: 遵循Model Context Protocol规范,提供标准的JSON-RPC接口。
- 身份验证与授权: 集成Azure App Service Authentication和Authorization,支持Microsoft Entra ID(原Azure AD)进行用户认证和服务器授权。
- Microsoft Graph集成: 演示了如何利用On-Behalf-Of流,通过已授权的用户身份安全地调用Microsoft Graph API,获取用户姓名、邮箱等信息。
- 工具注册与执行: 实现了两个可供LLM客户端调用的工具:一个简单的数字加法工具,以及一个获取当前用户信息(来自Microsoft Graph)的工具。
- 灵活部署: 支持使用Azure Developer CLI (azd) 快速部署到Azure,也可在本地运行进行开发和测试。
安装步骤
要运行此MCP服务器,您需要安装以下先决条件:
- Node.js 20 LTS 或更高版本: 访问 'https://nodejs.org/' 下载安装。
- Azure Developer CLI (azd): 访问 'https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd' 下载安装。
- Azure Functions Core Tools: 访问 'https://learn.microsoft.com/azure/azure-functions/functions-run-local' 下载安装。
- Azure CLI: 访问 'https://learn.microsoft.com/cli/azure/install-azure-cli' 下载安装。
- Git: 用于克隆仓库。
- Azurite (可选,本地开发用): 用于模拟Azure存储。
完成安装后,请克隆本仓库: 'git clone https://github.com/anthonychu/mcp-sdk-functions-hosting-node-auth.git' 进入 'src/mcp-server' 目录并安装依赖: 'cd mcp-sdk-functions-hosting-node-auth/src/mcp-server' 'npm install'
服务器配置
MCP客户端需要以下信息来连接到此服务器。具体的连接方式取决于MCP客户端的实现。
以下是一个示例MCP客户端配置(通常在客户端的 'mcp.json' 文件中配置),其中包含远程Azure部署和本地运行两种模式的连接信息。
{ "inputs": [ { "type": "promptString", "id": "functions-mcp-extension-system-key", "description": "部署到Azure时,MCP服务器的系统密钥(x-functions-key头部)。", "password": true }, { "type": "promptString", "id": "functionapp-host", "description": "部署到Azure时,Function App的域名,例如:my-mcp-function-app.azurewebsites.net。" } ], "servers": { "remote-mcp-function": { "type": "http", "url": "https://${input:functionapp-host}/runtime/webhooks/mcp", "headers": { "x-functions-key": "${input:functions-mcp-extension-system-key}" } }, "local-mcp-function": { "type": "http", "url": "http://localhost:7071/runtime/webhooks/mcp" } } }
- server name:
- 'remote-mcp-function' (远程Azure部署)
- 'local-mcp-function' (本地运行)
- command: 无需指定,MCP客户端通常通过HTTP URL直接连接。
- args: 无需指定。
- url:
- 远程Azure: 'https://<您的Function App域名>/runtime/webhooks/mcp'
- 本地: 'http://localhost:7071/runtime/webhooks/mcp'
- headers: (仅适用于远程Azure部署)
- 'x-functions-key': '<您的mcp_extension系统密钥>' (在部署后从Azure门户或Azure CLI获取)
基本使用方法
1. 部署到Azure (推荐): a. 确保您已登录Azure CLI ('az login') 和azd ('azd auth login')。 b. 在项目根目录 ('mcp-sdk-functions-hosting-node-auth') 执行 'azd env new <环境名称> --location westus2 --subscription <订阅ID>' 创建新环境。 c. 配置允许的客户端ID (例如VS Code的ID): 'azd env set PRE_AUTHORIZED_CLIENT_IDS aebc6443-996d-45c2-90f0-388ff96faa56' d. 运行 'azd up' 部署所有Azure资源和应用程序。 e. 部署完成后,通过浏览器访问 'https://<您的Function App域名>/.auth/login/aad' 登录并授予应用权限。 f. 获取Function App的MCP扩展系统密钥 'mcp_extension': 'az functionapp keys list --resource-group <资源组名称> --name <Function App名称> --query "systemKeys.mcp_extension" -o tsv' g. 使用上述配置信息(域名和系统密钥)在MCP客户端中连接到'remote-mcp-function'服务器。
2. 本地运行: a. (可选) 在 'src/mcp-server/local.settings.json' 中配置您的Microsoft Entra租户ID。 b. 启动Azurite (例如 'azurite --location . --silent' 或通过Docker)。 c. 在 'src/mcp-server' 目录执行 'npm start' 启动服务器。 d. 使用MCP客户端连接到 'local-mcp-function' 服务器。
3. 通过MCP客户端测试 (例如VS Code GitHub Copilot): a. 在VS Code中安装MCP扩展。 b. 创建或更新 'mcp.json' 文件,添加上述服务器配置。 c. 打开VS Code命令面板 (Ctrl+Shift+P),输入 "MCP: List Servers",选择您要启动的服务器 (例如 'remote-mcp-function')。 d. 选择 "Start Server"。如果选择远程服务器,按提示输入Function App URL和系统密钥。 e. 如果需要,系统会提示您登录Microsoft账户并同意权限。 f. 打开GitHub Copilot聊天面板 (Ctrl+Alt+I),输入 '#HelloTool'。Copilot会提示您允许调用工具。 g. 您将收到工具的响应,显示您的姓名和邮箱,证明MCP服务器已成功运行并调用了Microsoft Graph。
信息
分类
开发者工具