使用说明

项目简介

本项目 'MCP-MSGraph' 是一个原型 MCP (Model Context Protocol) 服务器,它演示了如何将 MCP 协议应用于访问 Microsoft Graph 中存储的用户数据。 该服务器作为一个桥梁,允许符合 MCP 协议的客户端(如LLM应用)通过标准化的方式,安全地访问和操作 Microsoft Graph 中的用户 Profile 信息,例如读取用户的技能、兴趣等。

主要功能点

  • 用户 Profile 数据访问: 提供读取 Microsoft Graph 中用户 Profile 数据的能力,包括用户的基本信息、技能、兴趣等。
  • 用户 Profile 数据管理: 支持添加和更新用户的技能和兴趣信息。
  • 基于标准 MCP 请求: 通过 '/mcp' 端点接收符合 MCP 格式的 JSON-RPC 请求,并返回 JSON-RPC 响应。
  • 基于 FastAPI 框架: 使用 FastAPI 构建,易于部署和扩展。
  • 使用 Microsoft Graph API: 作为数据源,连接 Microsoft Graph API 获取和操作用户数据。
  • 简单的鉴权机制: 使用 Azure AD 应用的客户端凭据流进行身份验证,确保数据访问安全。

安装步骤

  1. 克隆仓库: 将 GitHub 仓库 'https://github.com/kevinbellinger/mcp-msgraph' 克隆到本地。

    git clone https://github.com/kevinbellinger/mcp-msgraph
    cd mcp-msgraph
  2. 创建虚拟环境: 建议在虚拟环境中运行以隔离依赖包。

    python3 -m venv venv
    source venv/bin/activate
  3. 安装依赖包: 使用 pip 安装项目所需的 Python 包。

    pip install -r requirements.txt

    (如果仓库中没有 'requirements.txt' 文件,请手动执行以下命令)

    pip install fastapi uvicorn requests requests-oauthlib pydantic python-dotenv
  4. 配置环境变量:

    • 在项目根目录下创建 '.env' 文件。
    • 按照 'README.md' 中的 "Create an Azure AD Application" 步骤,在 Azure Portal 中创建 Azure AD 应用程序。
    • 将生成的 Application (client) IDClient Secret 和你的 Tenant ID 填入 '.env' 文件,示例如下:
      CLIENT_ID="YOUR_APPLICATION_CLIENT_ID"
      CLIENT_SECRET="YOUR_CLIENT_SECRET"
      TENANT_ID="YOUR_TENANT_ID"
      请替换 'YOUR_APPLICATION_CLIENT_ID', 'YOUR_CLIENT_SECRET', 'YOUR_TENANT_ID' 为你的实际值。 可选地,你可以设置 'SCOPE' 环境变量来指定 Microsoft Graph API 的访问范围,默认为 'https://graph.microsoft.com/.default'。

服务器配置

MCP 客户端需要配置以下信息以连接到 'MCP-MSGraph' 服务器。配置信息为 JSON 格式:

{
  "serverName": "mcp-msgraph",  // 服务器名称,可以自定义
  "command": "uvicorn",         // 启动服务器的命令
  "args": [                     // 启动命令的参数
    "main:app",                 // FastAPI 应用入口点 (main.py 文件中的 app 实例)
    "--reload"                  // (可选) 启用热重载,方便开发调试,生产环境建议移除
  ]
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,客户端可以使用此名称来标识和管理连接。
  • 'command': 运行 MCP 服务器的命令,这里使用 'uvicorn' 启动 FastAPI 应用。
  • 'args': 传递给 'command' 命令的参数列表。
    • 'main:app': 指定 FastAPI 应用的入口点,'main' 指的是 'main.py' 文件,'app' 指的是在该文件中创建的 FastAPI 应用实例。
    • '--reload': (可选) 在开发模式下启用热重载,当代码文件发生更改时,服务器会自动重启。生产环境中不建议使用 '--reload',应移除此参数以提高性能和安全性。

基本使用方法

  1. 启动服务器: 在虚拟环境激活的情况下,在项目根目录下运行以下命令启动服务器。

    uvicorn main:app --reload

    服务器成功启动后,你将看到类似 'INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)' 的信息,表示服务器已在 'http://127.0.0.1:8000' 地址监听请求。

  2. 发送 MCP 请求: 使用 curl 或任何 HTTP 客户端工具,向服务器的 '/mcp' 端点发送 POST 请求,请求体为 JSON 格式的 MCP 请求。

    示例请求 (读取用户 Profile):

    curl -X POST http://localhost:8000/mcp \
      -H "Content-Type: application/json" \
      -d '{
            "action":"readUserProfile",
            "contextId":"test-context-123",
            "data": {"userId":"[email protected]"}  // 替换为实际的用户邮箱
          }'

    请将 '[email protected]' 替换为你的 Microsoft 365 租户中实际存在的用户邮箱地址。

    其他支持的 'action' (参考 'main.py' 代码):

    • 'readUserProfileSkills': 读取用户技能
    • 'addUserProfileSkill': 添加用户技能 (需要提供 'skill' 数据)
    • 'updateUserProfileSkill': 更新用户技能 (需要提供 'skillId' 和 'skill' 数据)
    • 'readUserProfileInterests': 读取用户兴趣
    • 'addUserProfileInterest': 添加用户兴趣 (需要提供 'interest' 数据)
    • 'updateUserProfileInterest': 更新用户兴趣 (需要提供 'interestId' 和 'interest' 数据)

    响应结果: 服务器会返回 JSON 格式的 MCP 响应,包含 'status' (success 或 error), 'action', 'contextId' 和 'data' (成功时返回数据) 或 'errorCode', 'errorMessage' (错误时返回错误信息)。

注意:

  • 本项目是一个原型实现,仅演示了 MCP 服务器的基本功能,可能不包含完整的 MCP 协议支持,例如会话管理、能力声明、多种传输协议支持等。
  • 本项目依赖于 Microsoft Graph API 和 Azure AD 应用程序的配置,请确保已正确配置 Azure AD 应用程序并授予必要的 API 权限 ('User.Read.All')。
  • 在生产环境中使用时,请务必考虑安全性、性能和错误处理等方面,并进行充分的测试和优化。

信息

分类

网页与API