名称: outlook
描述: 通过 Microsoft Graph API 读取、搜索和管理 Outlook 邮件与日历。当用户询问邮件、收件箱、Outlook、Microsoft 邮件、日历事件或日程安排时使用。
版本: 1.3.0
作者: jotamed
通过 OAuth2 使用 Microsoft Graph API 访问 Outlook/Hotmail 邮件和日历。
# 要求:Azure CLI, jq
./scripts/outlook-setup.sh
设置脚本将:
1. 使用设备代码流登录 Azure
2. 自动创建应用注册
3. 配置 API 权限(Mail.ReadWrite、Mail.Send、Calendars.ReadWrite)
4. 引导您完成授权
5. 将凭据保存到 ~/.outlook-mcp/
请参阅 references/setup.md,了解通过 Azure 门户进行分步手动配置的说明。
./scripts/outlook-token.sh refresh # 刷新过期的令牌
./scripts/outlook-token.sh test # 测试连接
./scripts/outlook-token.sh get # 打印访问令牌
./scripts/outlook-mail.sh inbox [数量] # 列出最新邮件(默认:10)
./scripts/outlook-mail.sh unread [数量] # 列出未读邮件
./scripts/outlook-mail.sh search "查询词" [数量] # 搜索邮件
./scripts/outlook-mail.sh from <邮箱地址> [数量] # 列出指定发件人的邮件
./scripts/outlook-mail.sh read <邮件ID> # 读取邮件内容
./scripts/outlook-mail.sh attachments <邮件ID> # 列出邮件附件
./scripts/outlook-mail.sh mark-read <邮件ID> # 标记为已读
./scripts/outlook-mail.sh mark-unread <邮件ID> # 标记为未读
./scripts/outlook-mail.sh flag <邮件ID> # 标记为重要
./scripts/outlook-mail.sh unflag <邮件ID> # 取消重要标记
./scripts/outlook-mail.sh delete <邮件ID> # 移动到垃圾箱
./scripts/outlook-mail.sh archive <邮件ID> # 归档邮件
./scripts/outlook-mail.sh move <邮件ID> <文件夹> # 移动到指定文件夹
./scripts/outlook-mail.sh send <收件人> <主题> <正文> # 发送新邮件
./scripts/outlook-mail.sh reply <邮件ID> "正文" # 回复邮件
./scripts/outlook-mail.sh folders # 列出邮件文件夹
./scripts/outlook-mail.sh stats # 收件箱统计信息
./scripts/outlook-calendar.sh events [数量] # 列出即将发生的事件
./scripts/outlook-calendar.sh today # 列出今天的事件
./scripts/outlook-calendar.sh week # 列出本周的事件
./scripts/outlook-calendar.sh read <事件ID> # 查看事件详情
./scripts/outlook-calendar.sh calendars # 列出所有日历
./scripts/outlook-calendar.sh free <开始时间> <结束时间> # 检查空闲时间
./scripts/outlook-calendar.sh create <主题> <开始时间> <结束时间> [地点] # 创建事件
./scripts/outlook-calendar.sh quick <主题> [时间] # 快速创建1小时事件
./scripts/outlook-calendar.sh update <事件ID> <字段> <值> # 更新事件(主题/地点/开始/结束时间)
./scripts/outlook-calendar.sh delete <事件ID> # 删除事件
日期格式:YYYY-MM-DDTHH:MM(例如:2026-01-26T10:00)
$ ./scripts/outlook-mail.sh inbox 3
{
"n": 1,
"subject": "您的每周摘要",
"from": "digest@example.com",
"date": "2026-01-25T15:44",
"read": false,
"id": "icYY6QAIUE26PgAAAA=="
}
{
"n": 2,
"subject": "会议提醒",
"from": "calendar@outlook.com",
"date": "2026-01-25T14:06",
"read": true,
"id": "icYY6QAIUE26PQAAAA=="
}
$ ./scripts/outlook-mail.sh read "icYY6QAIUE26PgAAAA=="
{
"subject": "您的每周摘要",
"from": { "name": "摘要", "address": "digest@example.com" },
"to": ["you@hotmail.com"],
"date": "2026-01-25T15:44:00Z",
"body": "这是本周发生的事情..."
}
$ ./scripts/outlook-mail.sh stats
{
"folder": "收件箱",
"total": 14098,
"unread": 2955
}
$ ./scripts/outlook-calendar.sh today
{
"n": 1,
"subject": "团队站会",
"start": "2026-01-25T10:00",
"end": "2026-01-25T10:30",
"location": "Teams",
"id": "AAMkAGQ5NzE4YjQ3..."
}
$ ./scripts/outlook-calendar.sh create "与客户午餐" "2026-01-26T13:00" "2026-01-26T14:00" "餐厅"
{
"status": "事件已创建",
"subject": "与客户午餐",
"start": "2026-01-26T13:00",
"end": "2026-01-26T14:00",
"id": "AAMkAGQ5NzE4YjQ3..."
}
访问令牌约1小时后过期。请使用以下命令刷新:
./scripts/outlook-token.sh refresh
~/.outlook-mcp/config.json - 客户端 ID 和密钥~/.outlook-mcp/credentials.json - OAuth 令牌(访问令牌 + 刷新令牌)Mail.ReadWrite - 读取和修改邮件Mail.Send - 发送邮件Calendars.ReadWrite - 读取和修改日历事件offline_access - 刷新令牌(保持登录状态)User.Read - 基本个人资料信息id 字段显示完整邮件 ID 的最后 20 个字符。请将此 ID 与 read、mark-read、delete 等命令一起使用。outlook-token.sh refresh。read、mark-read 等命令会在最近的 100 封邮件中搜索指定的 ID。“Token expired” → 运行 outlook-token.sh refresh
“Invalid grant” → 令牌无效,请重新运行设置:outlook-setup.sh
“Insufficient privileges” → 在 Azure 门户中检查应用权限:API 权限
“Message not found” → 该邮件可能超过 100 封。请先使用搜索功能查找。
“Folder not found” → 请使用确切的文件夹名称。运行 folders 查看可用文件夹。
outlook-calendar.sh)Calendars.ReadWrite 权限mark-unread - 将邮件标记为未读flag/unflag - 将邮件标记/取消标记为重要delete - 将邮件移至垃圾箱archive - 归档邮件move - 将邮件移至任何文件夹from - 按发件人筛选邮件attachments - 列出邮件附件reply - 回复邮件send - 更好的错误处理和状态输出move - 文件夹名称不区分大小写,出错时显示可用文件夹read 输出中包含 to 字段