MCP服务器

Microsoft 365的MCP服务器,提供OAuth回调服务和Microsoft Graph API集成,适用于本地开发和Kubernetes生产环境。

  • by purva-kashyap
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 purva-kashyap/full-mcp-code

使用说明

微软365 MCP服务器

用于Microsoft 365/Microsoft Graph API的生产就绪MCP(模型上下文协议)服务器,带有独立的OAuth回调服务。

📁 项目结构

streamable-http-mcp/
├── microsoft-mcp/          # Main MCP Server
│   ├── src/                # Source code
│   ├── main.py             # Server entry point
│   ├── requirements.txt    # Python dependencies
│   ├── Dockerfile          # MCP server Docker image
│   └── kubernetes/         # K8s manifests for MCP server
│
└── callback-server/        # OAuth Callback Service (Separate)
    ├── oauth_callback_server.py  # Standalone callback server
    ├── Dockerfile                 # Callback server Docker image
    ├── deployment.yaml            # K8s manifest
    └── README.md                  # Callback server docs

🎯 为什么要分开服务器?

地方发展

  • 单个进程:MCP服务器包括内置的回调处理程序
  • 易于测试:不需要单独部署
  • 快速迭代:快速开始 python3 main.py

生产/Kubernetes

  • 可扩展性:MCP服务器可以水平扩展
  • 关注点分离:身份验证处理与业务逻辑隔离
  • 韧性:服务可以独立更新/扩展
  • 安全:回调服务可以有不同的安全策略

🚀 快速开始

本地开发(内置回调)

cd microsoft-mcp

# Install dependencies
pip install -r requirements.txt

# Configure
cp .env.example .env
# Edit .env with your Azure AD credentials

# Run (includes built-in callback server)
python3 main.py

服务器启动时间:

  • MCP服务器: http://localhost:8001
  • OAuth回调: http://localhost:8000 (内置)

Kubernetes(独立服务)

# Deploy OAuth Callback Service
cd callback-server
kubectl apply -f deployment.yaml

# Deploy MCP Server
cd ../microsoft-mcp
kubectl apply -f kubernetes/

有关详细说明,请参阅各个自述文件:

🏗️ 建筑

地方发展

┌─────────────────────────┐
│   microsoft-mcp         │
│   (main.py)             │
│                         │
│  ┌───────────────────┐  │
│  │  MCP Server       │  │
│  │  Port: 8001       │  │
│  └───────────────────┘  │
│  ┌───────────────────┐  │
│  │  OAuth Callback   │  │
│  │  Port: 8000       │  │
│  │  (built-in)       │  │
│  └───────────────────┘  │
└─────────────────────────┘

Kubernetes生产

                ┌─────────────┐
                │   Ingress   │
                │ (NGINX/ALB) │
                └──────┬──────┘
                       │
        ┌──────────────┴─────────────┐
        │                            │
┌───────▼────────┐          ┌────────▼────────┐
│ callback-server│          │  microsoft-mcp  │
│                │          │                 │
│ OAuth Callback │◄────API──┤   MCP Server    │
│  Port: 8000    │          │   Port: 8001    │
│  Replicas: 1   │          │   Replicas: N   │
└────────────────┘          └─────────────────┘

🔧 配置

MCP服务器环境变量

变量 本地 Kubernetes 描述
MICROSOFT_MCP_CLIENT_ID 必需 ConfigMap Azure AD客户端ID
MICROSOFT_MCP_CLIENT_SECRET 必需 密码 Azure AD客户端密码
MICROSOFT_MCP_ENABLE_CALLBACK_SERVER true false 启用内置回调
MICROSOFT_MCP_REDIRECT_URI http://localhost:8000/callback https://yourdomain.com/oauth/callback OAuth重定向
MICROSOFT_MCP_OAUTH_CALLBACK_API_URL - http://oauth-callback-service:8000/api/callback/{state} 外部回调API

回调服务器环境变量

变量 默认值 描述
OAUTH_CALLBACK_HOST 0.0.0.0 要绑定的主机
OAUTH_CALLBACK_PORT 8000 要收听的端口

📦 可用的MCP工具

  1. 认证

    • list_accounts -列出经过身份验证的帐户
    • authenticate_account -启动OAuth流
    • wait_for_callback -等待OAuth回调
    • complete_authentication -完整身份验证
  2. 用户档案

    • get_user_profile -获取用户资料信息
  3. 电子邮件

    • list_emails -列出文件夹中的电子邮件
    • get_email -获取电子邮件详细信息
    • search_emails -搜索电子邮件

🐳 Docker镜像

构建这两种服务

# Build OAuth Callback Server
cd callback-server
docker build -t oauth-callback-server:latest .

# Build MCP Server
cd ../microsoft-mcp
docker build -t mcp-server:latest .

使用Docker Compose运行

version: '3.8'
services:
  oauth-callback:
    build: ./callback-server
    ports:
      - "8000:8000"
  
  mcp-server:
    build: ./microsoft-mcp
    ports:
      - "8001:8001"
    environment:
      - MICROSOFT_MCP_ENABLE_CALLBACK_SERVER=false
      - MICROSOFT_MCP_OAUTH_CALLBACK_API_URL=http://oauth-callback:8000/api/callback/{state}
    env_file:
      - microsoft-mcp/.env
    depends_on:
      - oauth-callback

📚 文档

🔐 Azure AD安装程序

  1. 首选 Azure门户
  2. 引导到 Azure Active Directory > 应用程序注册
  3. 创建新注册:
    • 姓名: microsoft-mcp-server
    • 支持的帐户类型:根据您的需求进行选择
  4. 注意 应用程序(客户端)ID
  5. 创建 客户端密钥 证书和机密
  6. 添加 重定向URI 在身份验证下:
    • 当地: http://localhost:8000/callback
    • 生产: https://yourdomain.com/oauth/callback
  7. 添加 API权限:
    • Microsoft Graph>委派权限
    • 添加: User.Read, Mail.Read

🧪 测试

单独测试回调服务器

cd callback-server
python3 oauth_callback_server.py

# In another terminal
curl http://localhost:8000/health

测试MCP服务器

cd microsoft-mcp
python3 main.py

# In another terminal
python3 simple_client.py

测试全流量

# Terminal 1: Callback server
cd callback-server && python3 oauth_callback_server.py

# Terminal 2: MCP server (configured for external callback)
cd microsoft-mcp
export MICROSOFT_MCP_ENABLE_CALLBACK_SERVER=false
export MICROSOFT_MCP_OAUTH_CALLBACK_API_URL=http://localhost:8000/api/callback/{state}
python3 main.py

# Terminal 3: Client
cd microsoft-mcp && python3 simple_client.py

📝 需求

  • Python 3.12+
  • 具有客户端ID和密钥的Azure AD应用程序
  • 对于K8s:Kubernetes 1.20+,nginx入口,证书管理器

🤝 贡献

欢迎投稿!请确保:

  • 代码遵循现有结构
  • 本地和K8s模式都经过测试
  • 文档已更新

📄 许可证

MIT许可证

🔗 相关项目