Outlook命令行工具

一个生产就绪的CLI和MCP服务器,用于通过Microsoft Graph管理Microsoft Outlook的电子邮件、日历、文件夹和规则。

  • by selvin-paul-raj
  • JavaScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 selvin-paul-raj/outlook-cli

使用说明

outlookcli

通过Microsoft Graph为Microsoft Outlook提供生产就绪的CLI和MCP服务器。

github: https://github.com/selvin-paul-raj/outlook-cli


这个包裹能给你什么

  • 全局CLI命令: outlook-cli
  • 一次性OAuth令牌存储——在运行和更新过程中重复使用
  • 人性化的命令,具有丰富的终端输出、主题预设和机器友好性 --json/--ai 模式
  • Claude和其他AI助手可以通过共享工具注册表使用21个MCP工具
  • 通过Microsoft Graph API进行完整的电子邮件、日历、文件夹和规则管理

安装

全球(推荐)

npm i -g outlook-cli
outlook-cli --help

本地开发

npm install
npm run cli -- --help

要求: Node.js>=18.0.0


Azure应用程序安装程序(必需)

在使用此软件包之前,您需要注册Azure应用程序:

  1. 首选 portal.azure.com → Azure Active Directory→ 应用注册→ 新注册
  2. 将重定向URI设置为: http://localhost:3333/auth/callback
  3. 在“API权限”下,添加Microsoft Graph委派权限:
    • Mail.Read, Mail.ReadWrite, Mail.Send
    • Calendars.Read, Calendars.ReadWrite
    • User.Read
    • offline_access
  4. 证书和秘密→ 新客户端机密--复制 价值 (不是秘密ID)
  5. 从“概述”页面复制您的应用程序(客户端)ID

快速开始

1.设置凭据

PowerShell(Windows):

$env:OUTLOOK_CLIENT_ID="your-client-id-here"
$env:OUTLOOK_CLIENT_SECRET="your-client-secret-value-here"

Bash/zsh(Linux/Mac):

export OUTLOOK_CLIENT_ID="your-client-id-here"
export OUTLOOK_CLIENT_SECRET="your-client-secret-value-here"

或者使用 .env 文件(复制自 .env.example):

cp .env.example .env
# Edit .env with your credentials

2.启动身份验证服务器(首次登录时需要)

npm run auth-server
# or
outlook-cli auth server --start

这将在端口3333上启动OAuth回调服务器。在身份验证期间保持其运行。

3.认证一次

outlook-cli auth login --open --start-server --wait

这将打开您的浏览器,进入Microsoft登录页面。批准后,令牌将保存到 ~/.outlook-mcp-tokens.json 并在未来的所有运行中重复使用。

4.验证和探索

outlook-cli auth status        # confirm authenticated
outlook-cli tools list         # see all available tools
outlook-cli email list         # list recent inbox emails
outlook-cli calendar list      # list upcoming events

环境变量

必需

变量 描述
OUTLOOK_CLIENT_ID Azure应用程序应用程序(客户端)ID
OUTLOOK_CLIENT_SECRET Azure应用程序客户端机密 价值 (不是秘密ID)

可选的

变量 默认值 描述
OUTLOOK_REDIRECT_URI http://localhost:3333/auth/callback OAuth重定向URL
OUTLOOK_SCOPES offline_access Mail.Read Mail.ReadWrite Mail.Send User.Read Calendars.Read Calendars.ReadWrite Microsoft Graph权限范围
OUTLOOK_TOKEN_STORE_PATH ~/.outlook-mcp-tokens.json 令牌保存在磁盘上的位置
OUTLOOK_TOKEN_ENDPOINT Microsoft消费者OAuth端点 令牌交换URL
OUTLOOK_AUTH_SERVER_URL http://localhost:3333 身份验证服务器基本URL
USE_TEST_MODE false 使用模拟数据而不是真正的API调用

遗留别名 (向后兼容): MS_CLIENT_ID, MS_CLIENT_SECRET, MS_REDIRECT_URI, MS_SCOPES, MS_TOKEN_STORE_PATH, MS_TOKEN_ENDPOINT, MS_AUTH_SERVER_URL


命令组

auth --身份验证

命令 描述 示例
auth status 显示当前身份验证状态 outlook-cli auth status
auth login 启动身份验证流程 outlook-cli auth login --open --start-server --wait
auth url 在不打开浏览器的情况下显示OAuth URL outlook-cli auth url
auth server 检查/启动本地OAuth回调服务器 outlook-cli auth server --start
auth logout 清除存储的令牌 outlook-cli auth logout

旗帜 auth login:

  • --open --在浏览器中自动打开身份验证URL
  • --start-server --自动启动OAuth回调服务器
  • --wait --返回前等待身份验证完成
  • --client-id --在运行时提供应用程序(客户端)ID(可选)
  • --client-secret --在运行时提供客户端机密值(可选)
  • --prompt-credentials --提示交互式终端中缺少凭据

示例:

# Full login with browser open and wait
outlook-cli auth login --open --start-server --wait

# Just get the URL to open manually
outlook-cli auth url

# Check if you're logged in
outlook-cli auth status

# Force re-authentication
outlook-cli auth login --open --force

# Runtime credentials (useful outside repo where .env is not loaded)
outlook-cli auth login --open --client-id <id> --client-secret <secret>

# Start or check auth callback server
outlook-cli auth server --start
outlook-cli auth server --status

email --电子邮件管理

命令 描述 示例
email list 列出最近的电子邮件 outlook-cli email list --count 20
email search 按条件搜索电子邮件 outlook-cli email search --from boss@company.com
email read 阅读完整的电子邮件内容 outlook-cli email read --id AAMkAGVm...
email attachments 在一封电子邮件中列出附件 outlook-cli email attachments --id AAMkAGVm...
email attachment 获取一个附件并可选择保存 outlook-cli email attachment --id AAMkAGVm... --attachment-id AA... --save-path ./downloads/
email send 发送新电子邮件 outlook-cli email send --to user@example.com --subject "Hi" --body "Hello"
email mark-read 将电子邮件标记为已读或未读 outlook-cli email mark-read --id AAMkAGVm...

email list --列出最近的电子邮件

列出文件夹中的电子邮件,按最新邮件排序。

参数:

标志 类型 默认值 描述
--folder 字符串 inbox 要列出的文件夹: inbox, sent, drafts, deleted, junk, archive,或任何自定义文件夹名称
--count 编号 10 要返回的电子邮件数量(1-50)

示例:

# Default: 10 most recent inbox emails
outlook-cli email list

# Last 25 inbox emails
outlook-cli email list --count 25

# 10 most recent sent emails
outlook-cli email list --folder sent

# 15 emails from a custom folder
outlook-cli email list --folder "Project Alpha" --count 15

# Output as JSON for scripting
outlook-cli email list --count 5 --json

输出显示: 电子邮件ID、发件人、主题、日期、已读/未读状态、附件指示器、正文预览。


email search --搜索电子邮件

使用文本和/或筛选条件搜索电子邮件。同时支持多个条件。

参数:

标志 类型 描述
--query string 跨主题、正文和发件人的全文搜索
--folder string 要搜索的文件夹(默认值: inbox)
--from string 按发件人电子邮件或姓名筛选
--to string 按收件人电子邮件筛选
--subject string 按主题文本筛选
--hasAttachments boolean 仅显示带附件的电子邮件
--unreadOnly boolean 仅显示未读电子邮件
--count number 最大结果(1–50,默认值:10)

示例:

# Search by keyword
outlook-cli email search --query "quarterly report"

# Find unread emails from a specific sender
outlook-cli email search --from manager@company.com --unreadOnly

# Find emails with attachments about invoices
outlook-cli email search --subject invoice --hasAttachments

# Search sent folder for emails to a client
outlook-cli email search --folder sent --to client@example.com

# Complex search
outlook-cli email search --from finance@company.com --subject "budget" --unreadOnly --count 20

# JSON output
outlook-cli email search --query "meeting notes" --json

email read --阅读完整电子邮件

通过ID读取一封电子邮件的完整内容。

参数:

标志 类型 必填 描述
--id string yes 来自的电子邮件ID email list 或 email search 输出

示例:

# Read a specific email
outlook-cli email read --id AAMkAGVmMDAwAT...

# Read and output as JSON
outlook-cli email read --id AAMkAGVmMDAwAT... --json

输出显示: 发件人、收件人、抄送、密件抄送、主题、日期、重要性、附件状态、全文(HTML自动转换为纯文本)。

提示: 从获取电子邮件ID email list 或 email search 输出第一。


email attachments --列出电子邮件附件

列出特定电子邮件的附件。

参数:

标志 类型 必填 默认 描述
--id string yes -- 来自的消息ID email list 或 email search
--count 编号 否 25 列表的最大附件数(1-50)

示例:

# List attachments for one message
outlook-cli email attachments --id AAMkAGVmMDAwAT...

# Limit to first 10 attachments
outlook-cli email attachments --id AAMkAGVmMDAwAT... --count 10

输出显示: 附件ID,类型(fileAttachment, itemAttachment,或 referenceAttachment)、内容类型、大小、内联标志和上次修改日期。


email attachment --获取/下载一个附件

获取一个附件的元数据,并可选择将其保存到磁盘。

参数:

标志 类型 必填 默认 描述
--id string 是 -- 消息ID
--attachmentId string yes -- 附件ID来自 email attachments
--savePath string no -- 保存下载字节的文件路径或目录路径
--includeContent boolean 否 false 当附件内容为文本时,包括文本预览
--expandItem boolean 否 false 展开项目附件的元数据
--overwrite boolean 否 false 覆盖目标路径中的现有文件

示例:

# Get metadata only
outlook-cli email attachment --id AAMkAGVmMDAwAT... --attachment-id AAMkAGVmMDAwAT...=

# Save attachment to downloads directory
outlook-cli email attachment \
  --id AAMkAGVmMDAwAT... \
  --attachment-id AAMkAGVmMDAwAT...= \
  --save-path ./downloads/

# Save and include text preview when possible
outlook-cli email attachment \
  --id AAMkAGVmMDAwAT... \
  --attachment-id AAMkAGVmMDAwAT...= \
  --save-path ./downloads/ \
  --include-content

笔记:

  • referenceAttachment 是一个云链接,无法从该端点作为原始字节下载。
  • 项目附件在下载时使用MIME原始内容。

email send --发送电子邮件

从用户帐户撰写并发送电子邮件。

参数:

标志 类型 必填 默认 描述
--to string yes -- 收件人,逗号分隔为多个
--subject string 是 -- 电子邮件主题
--body string yes -- 电子邮件正文(纯文本或HTML)
--cc string no -- 抄送收件人,逗号分隔
--bcc string no -- 密件抄送收件人,逗号分隔
--importance string 否 normal 优先级: normal, high,或 low
--saveToSentItems boolean 否 true 将副本保存到“已发送”文件夹

示例:

# Simple email
outlook-cli email send \
  --to colleague@company.com \
  --subject "Meeting notes" \
  --body "Here are today's action items..."

# Email to multiple recipients with CC and high priority
outlook-cli email send \
  --to "team@company.com,manager@company.com" \
  --cc hr@company.com \
  --subject "URGENT: System outage" \
  --body "We are investigating..." \
  --importance high

# Email without saving to sent folder
outlook-cli email send \
  --to test@example.com \
  --subject "Test" \
  --body "Hello" \
  --saveToSentItems false

笔记:

  • 当正文包含以下内容时,会自动检测HTML正文 <html.
  • 目前尚不支持发送附件,仅支持正文。

email mark-read --标记电子邮件为已读/未读

更改电子邮件的读取状态。

参数:

标志 类型 必填 默认 描述
--id string 是 -- 电子邮件ID
--isRead boolean 否 true true =标记读取, false =标记为未读

示例:

# Mark as read (default)
outlook-cli email mark-read --id AAMkAGVmMDAwAT...

# Mark as unread
outlook-cli email mark-read --id AAMkAGVmMDAwAT... --isRead false

calendar --日历管理

命令 描述
calendar list 列出即将举行的活动
calendar create 创建新事件
calendar decline 拒绝活动邀请
calendar cancel 取消您组织的活动
calendar delete 删除事件

calendar list --列出即将举行的活动

按开始时间顺序列出从现在开始的即将发生的日历事件。

参数:

标志 类型 默认值 描述
--count 编号 10 要返回的事件数(1-50)

示例:

# Next 10 events (default)
outlook-cli calendar list

# Next 30 events
outlook-cli calendar list --count 30

# JSON output
outlook-cli calendar list --count 5 --json

输出显示: 活动ID、主题、地点、开始时间、结束时间、组织者、与会者列表。

提示: 从输出中复制事件ID以与一起使用 decline, cancel,或 delete 命令。


calendar create --创建日历事件

在日历上创建新事件。可选择邀请与会者。

参数:

标志 类型 必填 描述
--subject string 是 事件标题
--start string yes 开始日期时间: YYYY-MM-DDTHH:MM:SS
--end string yes 结束日期时间: YYYY-MM-DDTHH:MM:SS
--attendees string no 逗号分隔的与会者电子邮件地址
--body string 否 事件描述/议程

示例:

# Simple personal event
outlook-cli calendar create \
  --subject "Focus time" \
  --start "2026-04-10T09:00:00" \
  --end "2026-04-10T11:00:00"

# Team meeting with attendees and agenda
outlook-cli calendar create \
  --subject "Q2 Planning" \
  --start "2026-04-15T14:00:00" \
  --end "2026-04-15T15:30:00" \
  --attendees "alice@company.com,bob@company.com" \
  --body "Agenda: review Q1, plan Q2 roadmap, assign owners"

# All-day event (use midnight to midnight)
outlook-cli calendar create \
  --subject "Company holiday" \
  --start "2026-04-25T00:00:00" \
  --end "2026-04-25T23:59:00"

笔记:

  • 日期时间必须在 YYYY-MM-DDTHH:MM:SS 没有时区偏移的格式。
  • 默认情况下,服务器使用中欧标准时间。

calendar decline --拒绝活动邀请

拒绝收到的活动邀请,并可选择向组织者发送消息。

参数:

标志 类型 必填 描述
--eventId string yes 事件ID来自 calendar list
--comment string 否 要发送给组织者的消息

示例:

# Decline without a message
outlook-cli calendar decline --eventId AAMkAGVmMDAwAT...

# Decline with a reason
outlook-cli calendar decline \
  --eventId AAMkAGVmMDAwAT... \
  --comment "Sorry, I have a conflict. Can we reschedule to next week?"

calendar cancel --取消您的活动

取消您组织的活动并通知所有与会者。

参数:

标志 类型 必填 描述
--eventId string yes 事件ID来自 calendar list
--comment string 否 已向与会者发送取消原因

示例:

# Cancel without message
outlook-cli calendar cancel --eventId AAMkAGVmMDAwAT...

# Cancel with explanation
outlook-cli calendar cancel \
  --eventId AAMkAGVmMDAwAT... \
  --comment "This meeting is no longer needed. Details will follow by email."

注: 使用 cancel (不是 delete)当您希望与会者收到取消通知时。


calendar delete --删除事件

从日历中永久删除事件,而不通知与会者。

参数:

标志 类型 必填 描述
--eventId string yes 事件ID来自 calendar list

示例:

outlook-cli calendar delete --eventId AAMkAGVmMDAwAT...

提示: 使用 cancel 而不是 delete 与与会者会面,以便他们收到适当的通知。


folder --邮件文件夹管理

命令 描述
folder list 列出所有邮件文件夹
folder create 创建新文件夹
folder move 将电子邮件移动到另一个文件夹

folder list --列出邮件文件夹

列出帐户中的所有邮件文件夹。(可选)显示项目计数和子文件夹层次结构。

参数:

标志 类型 默认值 描述
--includeItemCounts 布尔值 false 显示总邮件数和未读邮件数
--includeChildren 布尔值 false 显示嵌套子文件夹

示例:

# Simple folder list
outlook-cli folder list

# With message counts
outlook-cli folder list --includeItemCounts

# Full hierarchy with counts
outlook-cli folder list --includeItemCounts --includeChildren

# JSON output for scripting
outlook-cli folder list --includeItemCounts --json

提示: 在使用自定义文件夹名称之前,使用此功能可以发现它们 email list, email search, folder move,或 rule create.


folder create --创建邮件文件夹

在根级别或现有文件夹内创建新的邮件文件夹。

参数:

标志 类型 必填 默认 描述
--name string yes -- 新文件夹的名称
--parentFolder string no root 现有父文件夹的名称

示例:

# Create top-level folder
outlook-cli folder create --name "Project Alpha"

# Create subfolder inside an existing folder
outlook-cli folder create --name "2026 Invoices" --parentFolder "Finance"

# Create a subfolder under inbox
outlook-cli folder create --name "Action Required" --parentFolder inbox

folder move --移动电子邮件

将一封或多封电子邮件从一个文件夹移动到另一个文件夹。

参数:

标志 类型 必填 默认 描述
--emailIds string yes -- 逗号分隔的电子邮件ID
--targetFolder string yes -- 目标文件夹名称
--sourceFolder string 否 inbox 源文件夹(用于上下文)

示例:

# Move one email to archive
outlook-cli folder move \
  --emailIds AAMkAGVmMDAwAT... \
  --targetFolder archive

# Move multiple emails to a custom folder
outlook-cli folder move \
  --emailIds "AAMkAGVm...,BBMkAHXn...,CCMkAIYo..." \
  --targetFolder "Project Alpha"

# Move from a non-inbox folder
outlook-cli folder move \
  --emailIds AAMkAGVmMDAwAT... \
  --sourceFolder "Junk" \
  --targetFolder inbox

输出: 报告任何失败移动的成功计数、失败计数和错误详细信息(最多显示3条错误消息)。


rule --收件箱规则

命令 描述
rule list 列出所有收件箱规则
rule create 创建新收件箱规则
rule sequence 更改规则的执行顺序

rule list --列出收件箱规则

按顺序列出所有收件箱规则(执行顺序——先执行较低的运行)。

参数:

标志 类型 默认值 描述
--includeDetails 布尔值 false 显示完整的条件和操作

示例:

# Just rule names and enabled status
outlook-cli rule list

# Full detail — conditions and actions for each rule
outlook-cli rule list --includeDetails

# JSON for scripting
outlook-cli rule list --includeDetails --json

输出(含详细信息)显示:

  • 条件:from地址、主题包含、正文包含、有附件、重要性
  • 操作:moveToFolder、copyToFolder、markAsRead、markImportance、forwardTo、delete

rule create --创建收件箱规则

创建自动处理传入电子邮件的收件箱规则。需要一个名称、至少一个条件和至少一个操作。

参数:

标志 类型 必填 描述
--name string yes 规则名称
--fromAddresses string 条件 要匹配的逗号分隔的发件人电子邮件
--containsSubject string condition 必须出现在主题中的文本
--hasAttachments boolean 条件 仅匹配带有附件的电子邮件
--moveToFolder string action 要将匹配的电子邮件移动到的文件夹名称
--markAsRead boolean action 自动将匹配的电子邮件标记为已读
--isEnabled boolean -- 规则是否处于活动状态(默认值: true)
--sequence number -- 执行顺序(低=先);如果省略,则自动分配

至少一个条件(--fromAddresses, --containsSubject, --hasAttachments)以及至少一个动作(--moveToFolder, --markAsRead)是必需的。

示例:

# Auto-move emails from boss to Important folder
outlook-cli rule create \
  --name "Boss emails" \
  --fromAddresses boss@company.com \
  --moveToFolder Important

# Auto-file newsletters and mark as read
outlook-cli rule create \
  --name "Newsletter handler" \
  --fromAddresses "news@service.com,digest@news.com" \
  --moveToFolder Newsletters \
  --markAsRead \
  --sequence 10

# Rule based on subject text
outlook-cli rule create \
  --name "Invoice sorter" \
  --containsSubject invoice \
  --hasAttachments \
  --moveToFolder Finance

# Disabled rule (create but don't activate yet)
outlook-cli rule create \
  --name "Temp filter" \
  --fromAddresses test@example.com \
  --markAsRead \
  --isEnabled false

笔记:

  • 这 moveToFolder 目标必须已经存在。首先创建它 folder create.
  • 如果 --sequence 如果未提供,则将该规则放置在所有现有规则之后。

rule sequence --更改规则执行顺序

更改现有规则的顺序(执行顺序)。较低的序列号先运行。

参数:

标志 类型 必填 描述
--ruleName string yes 要重新排序的规则的确切名称
--sequence number yes 新序列号

示例:

# Make boss email rule run first
outlook-cli rule sequence --ruleName "Boss emails" --sequence 1

# Push newsletter rule later in the order
outlook-cli rule sequence --ruleName "Newsletter handler" --sequence 500

tools --工具检查

命令 描述 示例
tools list 列出所有可用的MCP工具 outlook-cli tools list
tools schema 显示特定工具的架构 outlook-cli tools schema list-emails

示例:

# See all tools
outlook-cli tools list

# Inspect a tool's parameters
outlook-cli tools schema send-email
outlook-cli tools schema create-event

call --通用工具调用

使用JSON参数直接按名称调用任何MCP工具。

outlook-cli call <tool-name> --args-json '<json>'

示例:

# List emails via generic call
outlook-cli call list-emails --args-json '{"folder":"inbox","count":5}'

# Send email via generic call
outlook-cli call send-email --args-json '{"to":"user@example.com","subject":"Hi","body":"Hello"}'

# With JSON output
outlook-cli call list-events --args-json '{"count":10}' --json

agents --AI代理指南

显示AI代理的最佳实践命令流(Claude、Codex、VS Code、自动化脚本)。

outlook-cli agents guide

代理工作流程(推荐):

outlook-cli auth status --json
outlook-cli tools list --json
outlook-cli tools schema send-email --json
outlook-cli call list-emails --args-json '{"folder":"inbox","count":5}' --ai

doctor --诊断

运行一系列诊断检查,并报告哪些工作正常,哪些需要修复。

outlook-cli doctor

检查:Node.js版本、环境变量、令牌文件存在、令牌有效性、服务器连接。


update --更新CLI

# Check for updates
outlook-cli update

# Run the update automatically
outlook-cli update --run

或者直接通过npm更新:

npm i -g outlook-cli@latest

输出标志(所有命令)

标志 描述
--json 输出原始JSON而不是人类可读的文本
--ai JSON模式的代理安全别名(抑制富UI输出)
`--theme k9s ocean
--plain 无颜色或格式
--no-color 仅禁用颜色
--no-animate 禁用微调器动画

在JSON模式下,响应包括:

  • result (原始MCP工具有效载荷)
  • structured (标准化的机器友好字段,如 summary, items,以及解析的元数据)

示例:

outlook-cli auth status --json
outlook-cli tools list --ai
outlook-cli email list --count 10 --json
outlook-cli --theme ocean --help
outlook-cli calendar list --plain

完整的MCP工具目录

所有21个工具都可以通过共享的MCP工具注册表获得,该注册表由Claude和其他AI助手使用,也可以通过以下方式调用 outlook-cli call <tool-name>.

身份验证工具

工具 功能 必需 可选
about 返回服务器名称、版本、描述 none none
authenticate 启动OAuth流,返回auth URL none force (布尔值)
check-auth-status 返回当前身份验证状态 none none

日历工具

工具 功能 必需 可选
list-events 列出即将发生的日历事件 无 count (1–50)
create-event 创建新事件 subject, start, end attendees (阵列), body
decline-event 拒绝活动邀请 eventId comment
cancel-event 取消活动并通知与会者 eventId comment
delete-event 以静默方式删除事件 eventId 没有

电子邮件工具

工具 功能 必需 可选
list-emails 列出文件夹中最近的电子邮件 无 folder, count
search-emails 使用文本和筛选条件搜索 无 query, folder, from, to, subject, hasAttachments, unreadOnly, count
read-email 阅读一封电子邮件的全部内容 id 没有
list-attachments 列出邮件中的附件 messageId count
get-attachment 获取一个附件元数据,并可选择下载 messageId, attachmentId savePath, includeContent, expandItem, overwrite
send-email 发送新电子邮件 to, subject, body cc, bcc, importance, saveToSentItems
mark-as-read 将电子邮件标记为已读或未读 id isRead (布尔值,默认值 true)

文件夹工具

工具 功能 必需 可选
list-folders 列出所有邮件文件夹 无 includeItemCounts, includeChildren
create-folder 创建新文件夹 name parentFolder
move-emails 将电子邮件移动到另一个文件夹 emailIds (逗号分隔), targetFolder sourceFolder

规则工具

工具 功能 必需 可选
list-rules 按执行顺序列出收件箱规则 无 includeDetails
create-rule 创建收件箱规则(1个条件+1个最小操作) name +条件+行动 isEnabled, sequence
edit-rule-sequence 更改规则执行顺序 ruleName, sequence 没有

MCP服务器模式(适用于Claude和AI助手)

作为标准MCP stdio服务器运行,与Claude Desktop或其他MCP客户端一起使用:

npm run mcp-server
# or
node index.js

Claude桌面配置

添加到您的Claude Desktop配置文件(claude-config-sample.json 作为参考):

{
  "mcpServers": {
    "outlook": {
      "command": "node",
      "args": ["/path/to/outlook-mcp/index.js"],
      "env": {
        "OUTLOOK_CLIENT_ID": "your-client-id",
        "OUTLOOK_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

或者,如果全局安装:

{
  "mcpServers": {
    "outlook": {
      "command": "outlook-cli",
      "args": ["mcp-server"],
      "env": {
        "OUTLOOK_CLIENT_ID": "your-client-id",
        "OUTLOOK_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

AI助手技能

AI助手(Claude和其他人)的完整技能参考见 技能/前景-mcp.md本文档涵盖了每个工具、每个参数、常见工作流程和示例,可用于RAG系统或作为系统提示添加。


代币行为

  • 代币存储在 ~/.outlook-mcp-tokens.json (Windows: %USERPROFILE%\.outlook-mcp-tokens.json)
  • 令牌在包更新和重新安装后仍然有效——升级后无需重新进行身份验证
  • 访问令牌过期时自动刷新(使用刷新令牌)
  • 随时强制重新身份验证 outlook-cli auth login --force 或 authenticate { force: true }

测试模式

USE_TEST_MODE=true outlook-cli email list

随着 USE_TEST_MODE=true,所有API调用都使用模拟数据-不需要真正的Microsoft帐户。可用于开发和CI测试。


故障排除

问题 解决方案
AADSTS7000215 错误 您使用的是机密ID而不是机密 价值 在Azure中
身份验证服务器无法启动 运行 npx kill-port 3333 然后再试一次
令牌存在后“未通过身份验证” 令牌过期,没有刷新令牌--运行 auth login 再一次
create-rule 在文件夹上失败 文件夹不存在--运行 folder create 首先
move-emails 部分失败 某些电子邮件ID无效--使用验证ID email list
缺少依赖项 运行 npm install

AI助手技能

这 skills/outlook-automation/ 文件夹包含Claude Code、OpenAI Codex和VS Code的结构化技能。

安装技能

# Claude Code — personal
uv run python tools/install_skill.py --personal

# Claude Code — project/team
uv run python tools/install_skill.py --project

# OpenAI Codex
uv run python tools/install_skill.py --codex

# Verify
uv run python tools/install_skill.py --verify --personal

注: OpenAI Codex技能需要实验功能标志。添加 ~/.codex/config.toml:

[features]
skills = true

技能结构

文件 内容
技能/前景自动化/SKILL.md 主要技能条目——概述、行为规则、快速示例、安装说明
技能/前景自动化/参考/cli.md 完整的CLI命令参考——每个命令、标志和示例
技能/前景自动化/参考/json-schema.md 所有21个MCP工具的JSON模式
技能/前景自动化/参考/安全.md OAuth流程、令牌生命周期、权限范围、AI安全规则
技能/前景自动化/参考/故障排除.md 常见错误、诊断清单、逐步修复

文档

文件 内容
文档/参考.md 全参数逐参数API参考
CLI.md CLI快速参考卡
QUICKSTART.md 新用户设置演练
文档/项目结构.md 代码库架构和模块概述
docs/PUBLISHING.md 发布维护人员检查表
claude-config-sample.json 克劳德桌面MCP配置示例

脚本参考

脚本 命令 描述
npm start node cli.js 运行CLI
npm run mcp-server node index.js 以MCP stdio服务器运行
npm run cli node cli.js CLI别名
npm run auth-server node outlook-auth-server.js 在端口3333上启动OAuth回调服务器
npm run doctor node cli.js doctor 运行诊断程序
npm run inspect MCP检查器 交互式测试MCP服务器
npm test Jest 运行单元测试