axlook-mcp
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
axlook-mcp
Let Claude work with New Outlook for Mac: mail, drafts and calendars, without Graph, tokens or app registrations
axlook (Accessibility + Outlook) is a local MCP server that drives the Outlook app you already have open, through the macOS Accessibility API. It sees every account Outlook shows, including Exchange and Microsoft 365 mailboxes whose organization only allows the Outlook app.
/plugin install axlook-mcp --marketplace flol3622/axlook-mcp๐ At a Glance
New Outlook for Mac hides cloud accounts from AppleScript: its scripting dictionary sees zero Exchange accounts and an empty Inbox. Microsoft has cancelled its plan to bring AppleScript back. Here is how the usual options compare:
AppleScript / JXA servers | Microsoft Graph servers | Local cache readers | axlook | |
Works with New Outlook | โ Legacy Outlook only | โ | โ | โ |
Needs app registration or tokens | No | โ Tenant consent, OAuth | No | โ No, uses Outlook's own sign-in |
Works where only the Outlook app is allowed | โ | โ Usually blocked | โ | โ Yes, it is Outlook |
Read mail and full source | โ | โ | โ ๏ธ Sync window only | โ |
Attachments | โ | โ | โ | โ |
Move, flag, read/unread | โ | โ | โ Read-only | โ |
Calendar create/edit/delete | โ | โ | โ | โ |
Permission needed | Automation | Cloud consent | โ Full Disk Access | โ Accessibility |
Can send mail by accident | Possible | Possible | No | โ Never: drafts only |
Related MCP server: Apple Mail MCP Server
๐ฆ Install
You need:
macOS 13 or later
New Outlook for Mac running, with its language set to English
Node.js 18+ or Bun (Claude Code users nearly always have one of them)
Claude Code (recommended)
On Claude Code 2.1.275 or later, one command:
/plugin install axlook-mcp --marketplace flol3622/axlook-mcpOn older versions, or to browse the marketplace first:
/plugin marketplace add flol3622/axlook-mcp
/plugin install axlook-mcp@axlookThe plugin bundles:
the MCP server, a prebuilt universal helper and a single-file server, so there's nothing to compile or
npm install;a skill that tells Claude to use these tools for every mail and calendar question.
Update with /plugin update axlook-mcp. Third-party marketplaces don't auto-update.
Grant Accessibility (once)
macOS gives the permission to the app that runs Claude, not to axlook itself:
Open System Settings โ Privacy & Security โ Accessibility.
Enable the app that runs Claude: Terminal, iTerm, Visual Studio Code, Cursor or Claude.
Restart that app.
Ask Claude to run
outlook_status. It reportstrusted: trueonce permission is in place.
Accessibility lets that app control others. Grant it only to apps you trust, and remove it if you stop using axlook.
Other MCP clients (Claude Desktop, Cursor, VS Code, โฆ)
Clone the repository, then point your client at the bundled launcher:
git clone https://github.com/flol3622/axlook-mcp ~/axlook-mcp{
"mcpServers": {
"axlook": { "command": "/bin/sh", "args": ["/Users/YOU/axlook-mcp/scripts/start.sh"] }
}
}If the package is published on npm, npx works too, with no clone needed:
claude mcp add axlook -s user -- npx -y axlook-mcp๐๏ธ Architecture
flowchart LR
subgraph CLIENT["MCP client"]
A["Claude Code ยท Claude Desktop ยท Cursor ยท โฆ"]
end
subgraph SERVER["dist/axlook-mcp.js (Node or Bun)"]
B["22 MCP tools, one call at a time"]
C["Outlook UI logic: mail ยท drafts ยท calendar"]
D[".eml parsing, safe attachment saving"]
end
subgraph HELPER["dist/axlook-helper (Swift, universal)"]
E["Generic AX primitives: find ยท press ยท set value/date ยท menus ยท type ยท paste ยท focus"]
end
subgraph OUTLOOK["Microsoft Outlook (New Outlook)"]
F["Main window ยท reading pane ยท Save As panel ยท Move dialog ยท event peeks and forms"]
G[("Exchange ยท Microsoft 365 ยท Gmail ยท IMAP: every account Outlook shows")]
end
A -- "stdio JSON-RPC" --> B
B --> C
C -- "JSON lines" --> E
C --> D
E -- "Accessibility API" --> F
F --- G
style SERVER fill:#f8f9fa,stroke:#3178c6,stroke-width:2px,color:#000
style HELPER fill:#f8f9fa,stroke:#f05138,stroke-width:2px,color:#000
style OUTLOOK fill:#e8f1fb,stroke:#0078d4,stroke-width:2px,color:#000The Swift helper is generic. It knows nothing about Outlook, only the Accessibility API. All Outlook-specific knowledge lives in TypeScript (
src/outlook/), where it is easy to adjust when Outlook's UI changes.No network access of its own. axlook never talks to Exchange, Google or any other service; Outlook does.
๐งฐ Tools
๐ป = runs in the background (Outlook can stay behind your windows, even on another Space). ๐ช = briefly brings Outlook to the front for menus, dialogs or typing, then returns focus.
Area | Tool | Mode | What it does |
Diagnostics |
| ๐ป | Outlook running? Accessibility granted? Screen locked? |
| ๐ป | Dumps part of Outlook's accessibility tree, for debugging UI changes | |
| ๐ป | Folders of every account as | |
| ๐ป | Sender, subject, date, preview, unread / flagged / replied / attachment / meeting markers | |
| ๐ป | Outlook's own search ( | |
| ๐ป | Headers, body text and links; leaves the message unread unless asked | |
| ๐ช | Full RFC 822 source: Message-ID, all addresses, text and HTML, attachment list | |
| ๐ช | Writes attachments to a folder (sanitized names, never overwrites) | |
| ๐ช | Moves to any folder of any account and checks the move happened | |
| ๐ช | Read/unread, flag/clear flag | |
| ๐ช | Archive; delete moves to Deleted Items (drafts are discarded) | |
Drafts |
| ๐ช | To/Cc/Bcc, subject, text or HTML body, choice of From account |
| ๐ช | Your text above the quoted original. Saved, never sent | |
Calendar |
| ๐ป | Calendars of every account, and whether each is shown |
| ๐ป | Time, location, recurrence, organizer, your response, attendees | |
| ๐ป / ๐ช | One event; | |
| ๐ช | Appointments in any calendar, using local wall-clock times |
List and search calls return refs (msg_โฆ, evt_โฆ) that the other tools take as input. Outlook's UI exposes no stable IDs, so a ref encodes where the item is shown and what it looks like. If a ref goes stale, list again.
๐ Quickstart
Once installed, just ask:
"What's unread in my work inbox? Summarize anything about the conference."
"Save the PDFs from the latest mail from Alice to ~/Downloads/Reviews."
"Move this week's registration notifications into the Conference/Registrations folder."
"Draft a reply to Bob confirming Thursday. Don't send it."
"Block Friday 10:00โ11:30 in my Personal calendar for 'Paper revision'."
Tip: tell Claude your own conventions in your CLAUDE.md or a personal skill, for example "work events go in the Calendar of my work account, social ones in 'Family'".
๐ก๏ธ Safety by Design
Nothing is ever sent. Drafts, replies and forwards land in Drafts for you to review. Meetings that would notify attendees are refused.
Nothing is permanently deleted. Delete moves to Deleted Items, and deleting from a deleted-items folder is refused.
Your typing wins. If you're writing a draft in Outlook, tools refuse to navigate away from it.
Keystrokes can't go astray. Keys are delivered only to Outlook's process, and only while it is frontmost. Shortcuts use menu commands rather than key codes, so any keyboard layout works (AZERTY included).
Your clipboard is restored. Pasted bodies borrow it briefly, mark the paste transient for clipboard managers, and put your clipboard back afterwards.
Threads are handled one message at a time. Tools never act on a whole conversation row. They expand it and act on the specific message.
Data stays local. Nothing leaves your Mac except through Outlook itself.
๐ฌ How It Works
Reading across Spaces.
AXWindowsreturns nothing when Outlook is on another Space or in full screen, butAXMainWindowstill reaches it. Reading never needs Outlook in front.Full source through Save As. Outlook is sandboxed, so axlook saves the message as
.emlinto~/Downloadsunder a unique name, waits for the write to finish, moves the file into a private temp folder and parses it. That gives Message-ID, HTML and attachments without clicking through the UI.Calendar through event peeks. Each event tile has a hidden "Show event" action. It opens a preview in the background with stable fields for subject, date, time, location, recurrence, organizer and body, plus Edit and Delete buttons.
Typing reaches Outlook's data. Writing a field's value only changes what's displayed. Subjects and descriptions are typed as keystrokes into Outlook, then read back to confirm.
โ ๏ธ Limitations
English UI only. Labels such as "Message List" and the menu titles are matched; localization is future work.
Speed. Calls take 2โ15 seconds, since this is UI automation. Search waits for Outlook's server-side results.
Read-only meetings. Meetings with attendees can't be created or edited, because that would send mail.
Recurring events. Edits and deletes apply to the selected occurrence.
Shared screen. ๐ช tools take Outlook's window for a few seconds. If you switch apps mid-action, axlook re-activates Outlook once, then fails cleanly.
Locked screen. Nothing works while the Mac is locked.
๐ Verification
The Accessibility selectors were mapped on Outlook 16.114 / macOS 27, against a profile with Exchange, two shared mailboxes and Gmail. scripts/e2e.ts drives every tool through the MCP protocol against the live app.
Area | Live-tested |
folders, list, search, read, | |
Drafts | new, reply and forward; discarding drafts |
Calendar | list calendars and events; create โ get โ edit โ delete |
Not yet | archive and delete on regular messages (the code paths are shared with move and draft discard) |
bun test # offline: row parser, calendar dates, MIME and attachments
E2E_FOLDER=โฆ E2E_MOVE_TO=โฆ E2E_SELF=โฆ E2E_ATTACH_SCOPE=โฆ E2E_CALENDAR=โฆ bun scripts/e2e.tsThe e2e variables are documented in the header of scripts/e2e.ts.
๐ ๏ธ Development
.claude-plugin/ plugin.json (incl. the MCP server entry) + marketplace.json (the repo is its own marketplace)
skills/outlook/ skill shipped with the plugin
scripts/start.sh launcher: picks Node/Bun, checks the helper (rebuilds it from source if needed)
dist/ shipped build: axlook-mcp.js (bundle) + axlook-helper (universal, ad-hoc signed)
helper/OutlookAX.swift Accessibility bridge (JSON lines over stdio)
src/ MCP server (TypeScript): ax.ts, outlook/{session,mail,compose,calendar}.ts, mime.ts
test/ bun test suitesbun install
bun run build # dist/axlook-helper (arm64 + x86_64) and dist/axlook-mcp.js
bun test && bun run typecheck
claude plugin validate . --strictdist/ is committed because the plugin runs it as is. Rebuild and commit it together with any change to src/ or helper/. To release, bump version in both package.json and .claude-plugin/plugin.json.
To inspect Outlook's UI when it changes, use outlook_ui_snapshot, or query the helper directly:
printf '%s\n' '{"id":1,"cmd":"tree","h":"main","depth":3}' | dist/axlook-helper๐ Acknowledgements
trsdn/outlook-ax (MIT): its map of New Outlook's accessibility paths was a valuable starting point.
postal-mime for MIME parsing, and the official MCP TypeScript SDK.
Built with Claude Code.
This server cannot be deployed
Maintenance
Related MCP Connectors
Mac & Windows: let ChatGPT, Claude & Cursor use your email, calendar, iMessage, Teams, files.
Read, send, file and search email in any Gmail, Microsoft 365 or IMAP mailbox, plus its calendar.
Mail, Calendar, Messages, Notes, Contacts, Slack on your Mac for AI. Remote needs Pro or free trial.
Hosted email MCP for your own Gmail, Outlook.com, Microsoft 365, iCloud or IMAP inbox: read, search, draft, reply in thread, forward and file mail. It moves or flags up to 500 messages in one call, and a send leaves exactly one copy in Sent. A calendar is a separate connection, and connecting one adds diary and scheduling tools.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to read, send, search, and manage emails in Apple Mail on macOS.2562 PyPI106MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read, search, send, and manage email on macOS through programmatic access to Apple Mail.29MIT
- AlicenseAqualityBmaintenanceEnables searching and reading email across permitted accounts and mailboxes on macOS, plus optionally saving drafts for review, without sending or deleting messages.5MIT
- AlicenseNot gradedqualityAmaintenanceEnables an AI assistant to read, search, triage and send mail, manage calendars and browse, write and organize notes by driving the Mail, Calendar and Notes apps already on a Mac, with no dependencies, no network code and only two permission prompts.MIT