基于Azure APIM的远程MS Graph MCP服务(.NET)
项目简介
这是一个基于 .NET 的示例项目,展示了如何构建一个实现 Model Context Protocol (MCP) 的服务器。该服务器部署在 Azure App Service 上,并通过 Azure API Management (APIM) 作为 AI 网关向 MCP 客户端提供服务。它特别演示了 MCP 的第三方授权流程,并包含一个调用 Microsoft Graph API 获取当前用户信息的工具。
主要功能点
- 实现 MCP 服务器核心功能: 通过 .NET 库实现 MCP 协议,处理来自客户端的请求。
- 提供 Microsoft Graph 工具: 包含一个名为 'ShowUserProfile' 的工具,用于安全地调用 Microsoft Graph API 获取用户的显示名称、邮箱、ID 等信息。
- 集成 Azure API Management: 利用 APIM 作为代理,增强安全性、管理和监控 MCP 流量。
- 演示 MCP 授权流程: 实现了 MCP 规范中定义的特定第三方授权流程,允许服务器通过客户端提供的访问令牌代表用户调用外部 API (如 Microsoft Graph)。
- 支持 SSE 传输: 服务器配置为支持 Server-Sent Events (SSE) HTTP 传输协议。
安装步骤
- 安装 Azure Developer CLI (azd): 访问 'https://aka.ms/azd' 按照指引安装 'azd' 命令行工具。
- 部署到 Azure: 在项目根目录打开终端,运行以下命令:
该命令会自动 provision (创建) 所需的 Azure 资源 (包括 Azure API Management 和 Azure App Service),并部署服务器代码。部署完成后,终端会输出 API Management 的 SSE 端点 URL。azd up
服务器配置(用于 MCP 客户端连接)
MCP 客户端需要配置连接信息才能与此服务器通信。对于此示例,客户端需要知道服务器的访问地址和传输方式。
配置信息通常以 JSON 格式提供给 MCP 客户端。尽管具体格式可能因客户端而异,但核心信息包括:
- 服务器名称 (name): 一个用户友好的名称,例如 "Remote Microsoft Graph MCP Server"。
- 传输协议 (transport): 此服务器示例通过 Azure API Management 暴露,使用 'sse' (Server-Sent Events) 传输协议。
- 连接 URL (url): 在执行 'azd up' 命令成功后,终端输出中显示的 Azure API Management SSE 端点 URL。例如,'https://<your-apim-instance-name>.azure-api.net/mcp/sse'。
请注意,此服务器通过自定义请求头 'X-Resource-Access-Token' 接收 Microsoft Graph 的访问令牌。客户端或其使用的 AI 网关 (如 Azure APIM 在此示例中所示) 需要负责获取并传递此令牌。客户端配置本身通常不直接包含令牌,而是依赖于传输层或网关来处理授权。
基本使用方法
- 安装 MCP Inspector (可选但推荐): 在新终端窗口运行 'npx @modelcontextprotocol/inspector'。
- 启动 MCP Inspector: 打开浏览器访问 MCP Inspector 显示的本地 URL。
- 配置连接:
- 将传输类型 (Transport type) 设置为 'SSE'。
- 在 URL 字段中粘贴 'azd up' 命令输出的 Azure API Management SSE 端点 URL。
- 点击 Connect 按钮建立连接。
- 列出工具: 连接成功后,点击 List Tools 按钮,您应该会看到列出的 'ShowUserProfile' 工具。
- 运行工具: 点击 'ShowUserProfile' 工具旁边的 Run Tool 按钮。服务器将执行该工具,并返回通过 Microsoft Graph 获取的当前用户 JSON 格式的个人资料信息。