Skip to main content

outlook-mcp-com

An MCP server that lets Claude (or any MCP client) control Microsoft Outlook desktop on Windows through the Win32 COM API — read and send email, manage your calendar, save attachments, and work with tasks and notes, all against the Outlook profile you are already signed in to. No Azure app registration, no Graph API tokens.

⚠️ Requirements & Limitations

This package is Windows-only and requires:

  • Windows 10 or Windows 11 (classic Outlook COM API support)
  • Python 3.10, 3.11, 3.12, or 3.13
  • Classic Outlook desktop (Microsoft 365 / Office 2016+)

    The "new Outlook" (olk.exe) does not expose a COM API and will not work with this server.

  • A configured Outlook mail profile with your account already signed in.

Not supported:

  • macOS, Linux, or other Unix-like systems
  • The new Outlook (UWP/Store app)
  • Outlook Web Access (OWA) or cloud-only accounts
  • The test suite runs on any OS (COM calls are mocked), but the actual server only works on Windows.

Installation

git clone https://github.com/adamkopelman/outlook-mcp.git
cd outlook-mcp
pip install .

This installs the outlook-mcp console command (and pywin32 on Windows).

Hooking it up to Claude

As a Claude Code plugin (recommended for Claude Code) — this repo is itself a plugin (.claude-plugin/plugin.json) that registers the outlook MCP server for you. After pip install . (above), either:

# Try it locally without installing anything into Claude Code's config:
claude --plugin-dir /path/to/outlook-mcp

# Or install it properly, from a local checkout or directly from GitHub:
claude plugin install outlook-mcp@/path/to/outlook-mcp
claude plugin install outlook-mcp@github.com/adamkopelman/outlook-mcp

The plugin launches the server as python -m outlook_mcp rather than via the outlook-mcp console script, so it works even if pip's script directory isn't on PATH — it just needs outlook_mcp importable by whichever python is first on PATH.

Claude Desktop — add to %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "outlook": {
      "command": "outlook-mcp"
    }
  }
}

If outlook-mcp isn't on PATH, use the full interpreter instead:

{
  "mcpServers": {
    "outlook": {
      "command": "C:\\Path\\To\\python.exe",
      "args": ["-m", "outlook_mcp"]
    }
  }
}

Claude Code (manual, without the plugin):

claude mcp add outlook -- outlook-mcp

Tools

Tool Description
list_folders List mail folders with item/unread counts
list_emails Recent emails in a folder (newest first, unread_only option)
search_emails Search subject/sender/body, optional since_days window
get_email Full email by id (body, recipients, attachment names)
send_email Send immediately (to/cc/bcc, plain or HTML body)
create_draft Compose and save to Drafts without sending
reply_email Reply / reply-all (send, or save as draft with send=false)
move_email Move an email to another folder (returns its new id)
delete_email Move an email to Deleted Items
list_events Calendar events in a date range (recurrences expanded)
get_event Full event details including attendees
create_event Create an appointment — adding attendees sends invites
respond_to_meeting Accept / decline / tentative a meeting invite
list_attachments List an email's attachments
save_attachments Save attachments to a local directory
list_tasks List tasks (open only by default)
create_task Create a task with due date and importance
complete_task Mark a task complete
list_notes List sticky notes
get_note Read a note's full body
create_note Create a sticky note

Items are addressed by an opaque id returned from list/search tools. Ids change when an item moves folders — move_email returns the new id, and a stale id produces a clear "item not found" error.

Security notes

  • send_email, reply_email, create_event (with attendees) and respond_to_meeting act immediately as the signed-in Outlook user, with no confirmation step inside the server. If you want a human in the loop, prefer create_draft / send=false, or deny the sending tools in your MCP client's permission settings.
  • Outlook's object model guard may show a "A program is trying to send an e-mail message on your behalf" prompt, typically when no up-to-date antivirus is registered with Windows or group policy demands it. The prompt blocks the tool call until answered. Do not disable Outlook security to avoid it.
  • save_attachments writes to any local path the MCP client asks for.

Troubleshooting

  • "Outlook is not available..." — you're not on Windows, or classic Outlook isn't installed.
  • The first tool call may take a few seconds while Outlook launches.
  • "Item not found" — the id went stale (item moved or was deleted); list/search again to get a fresh id.
  • Date filters use Outlook's JET format internally; if search_emails with since_days misbehaves on a heavily localized system, try without it and filter by eye.

Development

pip install -e .[dev]
pytest

The COM layer lives in outlook_mcp/outlook/client.py behind the OutlookClientBase interface (outlook_mcp/outlook/base.py); tests run on any OS against an in-memory fake (tests/conftest.py).

License

MIT — see LICENSE.

Metadata

Release files for outlook-mcp-com 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for outlook-mcp-com 0.1.3
File Size Uploaded
outlook_mcp_com-0.1.3.tar.gz 20.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for outlook-mcp-com 0.1.3
File
outlook_mcp_com-0.1.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
outlook_mcp_com-0.1.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
outlook_mcp_com-0.1.3-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
outlook_mcp_com-0.1.3-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details

Total release size: 91.4 kB

Release files / outlook_mcp_com-0.1.3.tar.gz

Download URL outlook_mcp_com-0.1.3.tar.gz
Size 20.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5fdec6c5e74f8f2a01b0610e864f6140f696a82c7c90ee4829ff2e7e3714ba07
BLAKE2b-256 checksum
How to use checksums
4774fa26665648762daa5ce25062c47de64a193fa0f8f30eca0284226d8efe7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.

Transparency log

Release files / outlook_mcp_com-0.1.3-cp313-cp313-win_amd64.whl

Download URL outlook_mcp_com-0.1.3-cp313-cp313-win_amd64.whl
Size 17.8 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
fce6e0d72f43391573368c1f2dfee6bcd9848fcdfe353a124a808f0c933f097b
BLAKE2b-256 checksum
How to use checksums
941a07ef72ff19d6e149efdc17d35683e5060d9907415c91125546ea559b5bb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.

Transparency log

Release files / outlook_mcp_com-0.1.3-cp312-cp312-win_amd64.whl

Download URL outlook_mcp_com-0.1.3-cp312-cp312-win_amd64.whl
Size 17.8 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
15709873b08b413a0c7bda704e7d9e4b285a9388a08184a2325ad4146c087866
BLAKE2b-256 checksum
How to use checksums
d7a06772d9019f93167830e949827be69bffcb1201c2ade49d0ba77d9fbb868a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.

Transparency log

Release files / outlook_mcp_com-0.1.3-cp311-cp311-win_amd64.whl

Download URL outlook_mcp_com-0.1.3-cp311-cp311-win_amd64.whl
Size 17.8 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
2948430d4555bda0bfa06331b1c4152b27e892e1e28446510e28be34c3079cc1
BLAKE2b-256 checksum
How to use checksums
e76c51da408f2947f4bfd07c59c771cac1f9ecc43d38900774ab3cd3b41ce9e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.

Transparency log

Release files / outlook_mcp_com-0.1.3-cp310-cp310-win_amd64.whl

Download URL outlook_mcp_com-0.1.3-cp310-cp310-win_amd64.whl
Size 17.8 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
0532b441571bb13332a8e2229009c48f680f5b29b2db097fc4d870ec2b415449
BLAKE2b-256 checksum
How to use checksums
1200a41d1dcdc590fe563a2876c4bbddb08a6546b87136bab50e019c84b3c71d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

5 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page