返回市场
微软-MCP

微软-MCP

作者:elyxlz27 星标更新:2025-06-23

项目介绍

Microsoft MCP

强大的Microsoft Graph API MCP服务器——适用于Outlook、日历、OneDrive和联系人的完整AI助手工具包。

功能

  • 电子邮件管理:读取、发送、回复、管理附件、组织文件夹
  • 日历智能:创建、更新、检查可用性、响应邀请
  • OneDrive文件:上传、下载、分页浏览
  • 联系人:从地址簿中搜索和列出联系人
  • 多账户支持:支持多个Microsoft账户(个人、工作、学校)
  • 统一搜索:跨电子邮件、文件、事件和人员进行搜索

快速开始使用Claude Desktop

# 添加Microsoft MCP服务器(替换为您的Azure应用ID)
claude mcp add microsoft-mcp -e MICROSOFT_MCP_CLIENT_ID=your-app-id-here -- uvx --from git+https://github.com/elyxlz/microsoft-mcp.git microsoft-mcp

# 启动Claude Desktop
claude

使用示例

# 电子邮件示例
> 查看我最新的电子邮件内容
> 回复John的邮件说“我会今天审查这个”
> 发送带有附件的电子邮件给alice@example.com

# 日历示例
> 显示我下周的日历
> 检查我明天下午2点是否有空
> 创建与Bob在下周一上午10点的会议

# 文件示例
> 列出我的OneDrive中的文件
> 将此报告上传到OneDrive
> 在所有文件中搜索“项目提案”

# 多账户
> 列出我的所有Microsoft账户
> 从我的工作账户发送电子邮件

可用工具

电子邮件工具

  • list_emails - 列出电子邮件,可选包含正文内容
  • get_email - 获取特定电子邮件及其附件
  • create_email_draft - 创建电子邮件草稿,支持附件
  • send_email - 立即发送电子邮件,支持抄送/密送和附件
  • reply_to_email - 维持线程上下文回复
  • reply_all_email - 回复线程中的所有收件人
  • update_email - 标记电子邮件为已读/未读
  • move_email - 在文件夹之间移动电子邮件
  • delete_email - 删除电子邮件
  • get_attachment - 获取电子邮件附件内容
  • search_emails - 按查询搜索电子邮件

日历工具

  • list_events - 列出日历事件及其详细信息
  • get_event - 获取特定事件的详细信息
  • create_event - 创建具有位置和参会者的事件
  • update_event - 调整或修改事件
  • delete_event - 取消事件
  • respond_event - 接受/拒绝/暂定响应邀请
  • check_availability - 检查空闲/忙碌时间以安排
  • search_events - 搜索日历事件

联系人工具

  • list_contacts - 列出所有联系人
  • get_contact - 获取特定联系人的详细信息
  • create_contact - 创建新的联系人
  • update_contact - 更新联系人信息
  • delete_contact - 删除联系人
  • search_contacts - 按查询搜索联系人

文件工具

  • list_files - 浏览OneDrive中的文件和文件夹
  • get_file - 下载文件内容
  • create_file - 将文件上传到OneDrive
  • update_file - 更新现有文件的内容
  • delete_file - 删除文件或文件夹
  • search_files - 在OneDrive中搜索文件

实用工具

  • unified_search - 跨电子邮件、事件和文件进行搜索
  • list_accounts - 显示已认证的Microsoft账户
  • authenticate_account - 开始新Microsoft账户的身份验证
  • complete_authentication - 输入设备代码后完成身份验证过程

手动设置

1. Azure应用注册

  1. 前往Azure门户 → Microsoft Entra ID → 应用注册
  2. 新注册 → 名称:microsoft-mcp
  3. 支持的账户类型:个人 + 工作/学校
  4. 身份验证 → 允许公共客户端流:是
  5. API权限 → 添加以下委派权限:
    • Mail.ReadWrite
    • Calendars.ReadWrite
    • Files.ReadWrite
    • Contacts.Read
    • People.Read
    • User.Read
  6. 复制应用程序ID

2. 安装

git clone https://github.com/elyxlz/microsoft-mcp.git
cd microsoft-mcp
uv sync

3. 身份验证

# 设置您的Azure应用ID
export MICROSOFT_MCP_CLIENT_ID="your-app-id-here"

# 运行身份验证脚本
uv run authenticate.py

# 按提示进行Microsoft账户的身份验证

4. Claude Desktop配置

添加到您的Claude Desktop配置:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "microsoft": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/_elyxlz/microsoft-mcp.git", "microsoft-mcp"],
      "env": {
        "MICROSOFT_MCP_CLIENT_ID": "your-app-id-here"
      }
    }
  }
}

或者用于本地开发:

{
  "mcpServers": {
    "microsoft": {
      "command": "uv",
      "args": ["--directory", "/path/to/microsoft-mcp", "run", "microsoft-mcp"],
      "env": {
        "MICROSOFT_MCP_CLIENT_ID": "your-app-id-here"
      }
    }
  }
}

多账户支持

所有工具都需要一个作为第一个参数的account_id

# 列出账户以获取ID
accounts = list_accounts()
account_id = accounts[0]["account_id"]

# 使用账户进行操作
send_email(account_id, "user@example.com", "主题", "正文")
list_emails(account_id, limit=10, include_body=True)
create_event(account_id, "会议", "2024-01-15T10:00:00Z", "2024-01-15T11:00:00Z")

开发

# 运行测试
uv run pytest tests/ -v

# 类型检查
uv run pyright

# 格式化代码
uvx ruff format .

# 静态分析
uvx ruff check --fix --unsafe-fixes .

示例:AI助手场景

智能电子邮件管理

# 首先获取账户ID
accounts = list_accounts()
account_id = accounts[0]["account_id"]

# 列出最新电子邮件并包含完整内容
emails = list_emails(account_id, limit=10, include_body=True)

# 维持线程回复
reply_to_email(account_id, email_id, "感谢您的消息。我会审查并回复您。")

# 带附件转发
email = get_email(email_id, account_id)
attachments = [get_attachment(email_id, att["id"], account_id) for att in email["attachments"]]
send_email(account_id, "boss@company.com", f"FW: {email['subject']}", email["body"]["content"], attachments=attachments)

智能调度

# 首先获取账户ID
accounts = list_accounts()
account_id = accounts[0]["account_id"]

# 在安排前检查可用性
availability = check_availability(account_id, "2024-01-15T10:00:00Z", "2024-01-15T18:00:00Z", ["同事@公司.com"])

# 创建带有详细信息的会议
create_event(
    account_id,
    "项目评审",
    "2024-01-15T14:00:00Z", 
    "2024-01-15T15:00:00Z",
    location="会议室A",
    body="季度项目进度评审",
    attendees=["同事@公司.com", "经理@公司.com"]
)

安全注意事项

  • 令牌缓存在本地~/.microsoft_mcp_token_cache.json
  • 如果启用了双因素认证,请使用应用专用密码
  • 只请求您的应用实际需要的权限
  • 考虑为生产环境使用专门的应用注册

故障排除

  • 身份验证失败:检查您的CLIENT_ID是否正确
  • “需要管理员批准”:对于个人账户使用MICROSOFT_MCP_TENANT_ID=consumers
  • 缺少权限:确保在Azure中授予了所有必需的API权限
  • 令牌错误:删除~/.microsoft_mcp_token_cache.json并重新进行身份验证

许可证

MIT