项目简介

该项目是一个基于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服务器,您需要安装以下先决条件:

  1. Node.js 20 LTS 或更高版本: 访问 'https://nodejs.org/' 下载安装。
  2. Azure Developer CLI (azd): 访问 'https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd' 下载安装。
  3. Azure Functions Core Tools: 访问 'https://learn.microsoft.com/azure/azure-functions/functions-run-local' 下载安装。
  4. Azure CLI: 访问 'https://learn.microsoft.com/cli/azure/install-azure-cli' 下载安装。
  5. Git: 用于克隆仓库。
  6. 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。

信息

分类

开发者工具