微软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工具
- 认证
- list_accounts -列出经过身份验证的帐户 - authenticate_account -启动OAuth流 - wait_for_callback -等待OAuth回调 - complete_authentication -完整身份验证
- 用户档案
- get_user_profile -获取用户资料信息
- 电子邮件
- 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📚 文档
- MCP服务器设置指南 -地方发展
- 部署指导 -Kubernetes部署
- 回拨服务器 -独立回拨服务
- Kubernetes配置 -K8s详细信息
🔐 Azure AD安装程序
- 首选 Azure门户
- 引导到 Azure Active Directory > 应用程序注册
- 创建新注册:
- 姓名: microsoft-mcp-server - 支持的帐户类型:根据您的需求进行选择
- 注意 应用程序(客户端)ID
- 创建 客户端密钥 证书和机密
- 添加 重定向URI 在身份验证下:
- 当地: http://localhost:8000/callback - 生产: https://yourdomain.com/oauth/callback
- 添加 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许可证
🔗 相关项目
- FastMCP -MCP框架
- Microsoft Graph API -Microsoft 365 API
- Python -Microsoft身份验证库
