Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Outlook MCP

PYPI · OUTLOOK-GRAPH-MCP · SCANNED SEP 20

Microsoft Outlook personal accounts: mail, calendar, contacts, to-do, drafts (62 tools).

Available components

−12 this week 59 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 64 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 7 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability80
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 5585 tokens (~90/item across 62 items; 62 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management53
  • Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 11 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 63 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the Outlook MCP server?

Outlook MCP runs locally as a PyPI package, launched with uvx outlook-graph-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · outlook-graph-mcp

# add to Claude Code
claude mcp add mpalermiti-outlook-mcp -- uvx outlook-graph-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "mpalermiti-outlook-mcp": {
      "command": "uvx",
      "args": [
        "outlook-graph-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "mpalermiti-outlook-mcp": {
      "command": "uvx",
      "args": [
        "outlook-graph-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add mpalermiti-outlook-mcp -- uvx outlook-graph-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mpalermiti-outlook-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "outlook-graph-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add mpalermiti-outlook-mcp --command uvx --arg outlook-graph-mcp
# ~/.hermes/config.yaml
mcp_servers:
  mpalermiti-outlook-mcp:
    command: "uvx"
    args: ["outlook-graph-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "mpalermiti-outlook-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "outlook-graph-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add mpalermiti-outlook-mcp -t stdio -c uvx -a outlook-graph-mcp
// mcp.json
{
  "mcpServers": {
    "mpalermiti-outlook-mcp": {
      "command": "uvx",
      "args": [
        "outlook-graph-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 +15
    • Malware scan: unverified → pass security
  • 12 Sept 26 +1
    • Package version: 1.20.0 → 1.22.0 functional
    • Package version: 1.20.0 → 1.21.0 functional
  • 10 Sept 26 +3
    • Schema quality: unverified → 100 functional
    • Package version: 1.19.0 → 1.20.0 functional
  • 9 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/outlook-graph-mcp@1.22.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 64 packages
Packages resolved 64
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 62 exposed · ~5,268 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
outlook_attach_to_draft ~103

Add attachments to an existing draft; auto-switches to upload-session for files >3MB. `attachment_paths` resolve inside the configured attachments directory (`attachments_dir`, default ~/.outlook-mcp/attachments) — a bare filename is looked up there, and a path outside it is refused. Returns new attachment IDs for later removal via outlook_remove_draft_attachment.

NameTypeReqDescription
attachment_pathsarrayyes
draft_idstringyes

No output schema declared.

No examples provided.

outlook_auth_status ~27

Check authentication status. Run `outlook-mcp auth` on the host if needed.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_batch_triage ~119

Triage up to 20 messages in one $batch call. `action` is "move", "flag", "categorize", or "mark_read". Example: outlook_batch_triage(message_ids=[id1, id2], action="move", value="Archive") `value` is the action target (folder name for move, status for flag/mark_read, category name for categorize). Hard cap of 20.

NameTypeReqDescription
actionstringyes
message_idsarrayyes
valuestringyes

No output schema declared.

No examples provided.

outlook_categorize_message ~57

Set categories on a message (replaces the full list). Example: outlook_categorize_message(message_id=..., categories=["Follow-up", "Pricing"])

NameTypeReqDescription
categoriesarrayyes
message_idstringyes

No output schema declared.

No examples provided.

outlook_changes_since ~317

One structured "since last call" digest across mail, events, and contacts. Use this for recurring agent loops (morning brief, hourly inbox sweep) — one call returns counts, urgent_flagged mail, by-sender rollup, plus new/cancelled events and contacts counts. Use the three individual delta tools (outlook_list_inbox_delta, outlook_list_events_delta, outlook_list_contacts_delta) when you need raw item lists or per-resource control. Example: first call: outlook_changes_since(); next: outlook_changes_since(delta_tokens=<delta_tokens from prior response>). First call returns a snapshot filtered to the last `fallback_window_hours` (default 24) so the digest doesn't surface thousands of historical items; subsequent calls (tokens passed back) return only what changed. Each resource's token is independent — drop one stale token without re-syncing the others. If Graph 410s on a token (`syncStateNotFound`), that resource auto-resyncs and `_meta.resync` lists which one. `urgent_flagged` = high-importance OR flagged mail. `by_sender` = top 5 senders. Calendar `modified[]` is reserved for future use — modified events surface in `new[]` today (Graph delta doesn't distinguish them). Calendar `organizer_email` is also currently empty (the v1.9.0 delta formatter surfaces the organizer name only).

NameTypeReqDescription
delta_tokens
fallback_window_hoursinteger

No output schema declared.

No examples provided.

outlook_complete_task ~31

Mark a To Do task as completed.

NameTypeReqDescription
list_id
task_idstringyes

No output schema declared.

No examples provided.

outlook_copy_message ~65

Copy a message to another folder (duplicates; source is unchanged). Use outlook_move_message to remove from source. `folder` accepts display names, well-known names, or Graph IDs — prefer names.

NameTypeReqDescription
folderstringyes
message_idstringyes

No output schema declared.

No examples provided.

outlook_create_contact ~59

Create a new contact with name and optional email, phone, company, title.

NameTypeReqDescription
company
email
first_namestringyes
last_name
phone
title

No output schema declared.

No examples provided.

outlook_create_draft ~166

Create a draft email for later review/send (pair with outlook_send_draft). Use this when a human should review before sending; use outlook_send_message to send immediately without review. Pass deferred_send_datetime (ISO 8601, e.g. "2026-05-06T08:00:00Z") to schedule delayed delivery — Exchange holds the message server-side after outlook_send_draft. Pass reply_to to pre-populate the Reply-To header.

NameTypeReqDescription
bcc
bodystringyes
cc
deferred_send_datetime
importancestring
is_htmlboolean
reply_to
subjectstringyes
toarrayyes

No output schema declared.

No examples provided.

outlook_create_event ~363

Create a calendar event with optional attendees, recurrence, and Teams online meeting. Example: outlook_create_event(subject="Q3 review", start="2026-08-15T14:00:00Z", end="2026-08-15T15:00:00Z", attendees=["alice@acme.com"]) `is_online` is accepted but has no effect on personal accounts — Graph silently ignores isOnlineMeeting for consumer mailboxes (it returns isOnlineMeeting: False, onlineMeetingProvider: "unknown"). Teams meetings require a work/school account. `start`/`end` are ISO 8601. Passing `recurrence` creates a series, not a single event. It takes either a shorthand — "daily", "weekdays", "weekly", "monthly", "yearly", all anchored on `start` and open-ended — or a full Microsoft Graph recurrence object for anything else, e.g. every other Mon+Fri for 10 occurrences: {"pattern": {"type": "weekly", "interval": 2, "daysOfWeek": ["monday", "friday"]}, "range": {"type": "numbered", "numberOfOccurrences": 10}} `range.startDate` defaults to the event's start date. Prefer a bounded range ("endDate"/"numbered") when the event has attendees — a "noEnd" series invites them to every future occurrence.

NameTypeReqDescription
attendees
body
endstringyes
is_all_dayboolean
is_onlineboolean
location
recurrence
startstringyes
subjectstringyes

No output schema declared.

No examples provided.

outlook_create_folder ~44

Create a mail folder; pass `parent_folder` (name or ID) to nest under an existing folder.

NameTypeReqDescription
namestringyes
parent_folder

No output schema declared.

No examples provided.

outlook_create_task ~186

Create a Microsoft To Do task with optional due date, importance, body, and recurrence. Example: outlook_create_task(title="Send invoice", due="2026-09-01", importance="high") `reminder=True` requires `due` and sets the reminder to the due time — Graph silently drops a reminder that has no time. `due` takes ISO 8601 or a relative offset — note `+7d` is seven days from now, while a bare `7d` means seven days *ago*. `importance` is "low", "normal", or "high". Defaults to the user's default list when `list_id` is omitted.

NameTypeReqDescription
body
due
importance
list_id
recurrence
reminder
titlestringyes

No output schema declared.

No examples provided.

outlook_delete_contact ~23

Delete a contact by ID.

NameTypeReqDescription
contact_idstringyes

No output schema declared.

No examples provided.

outlook_delete_draft ~25

Delete a draft message by ID.

NameTypeReqDescription
draft_idstringyes

No output schema declared.

No examples provided.

outlook_delete_event ~36

Delete a calendar event by ID (cancels and notifies attendees if you're the organizer).

NameTypeReqDescription
event_idstringyes

No output schema declared.

No examples provided.

outlook_delete_folder ~37

Delete a user-created mail folder by ID; refuses well-known folders (inbox, sentitems).

NameTypeReqDescription
folder_idstringyes

No output schema declared.

No examples provided.

outlook_delete_inbox_override ~33

Delete a Focused Inbox per-sender override rule by its ID.

NameTypeReqDescription
override_idstringyes

No output schema declared.

No examples provided.

outlook_delete_message ~70

Delete a message — soft delete (to Deleted Items) by default; permanent=True to hard-delete. This is the canonical way to delete a message. Do NOT use outlook_move_message(folder="deleteditems") for deletion.

NameTypeReqDescription
message_idstringyes
permanentboolean

No output schema declared.

No examples provided.

outlook_delete_task ~33

Delete a task from a Microsoft To Do list.

NameTypeReqDescription
list_id
task_idstringyes

No output schema declared.

No examples provided.

outlook_download_attachment ~97

Download an attachment and write the decoded bytes to `save_path` on the host. `save_path` is resolved inside the configured attachments directory (`attachments_dir`, default ~/.outlook-mcp/attachments) — a bare filename lands there; a path outside it is refused. Same directory for reads and writes.

NameTypeReqDescription
attachment_idstringyes
message_idstringyes
save_pathstringyes

No output schema declared.

No examples provided.

outlook_flag_message ~50

Set the follow-up flag on a message. `status` is "flagged", "complete", or "notFlagged".

NameTypeReqDescription
message_idstringyes
statusstringyes

No output schema declared.

No examples provided.

outlook_forward ~40

Forward an existing message to new recipients, with optional comment.

NameTypeReqDescription
comment
message_idstringyes
toarrayyes

No output schema declared.

No examples provided.

outlook_get_contact ~24

Get one full contact by ID.

NameTypeReqDescription
contact_idstringyes

No output schema declared.

No examples provided.

outlook_get_event ~71

Get one full calendar event by ID: body, attendees, organizer, recurrence, type. `recurrence` comes back in the same shape outlook_create_event accepts; `type` is "singleInstance", "seriesMaster", "occurrence" or "exception".

NameTypeReqDescription
event_idstringyes

No output schema declared.

No examples provided.

outlook_get_mail_tips ~35

Pre-send check for recipients: out-of-office, delivery limits, mailbox-full warnings.

NameTypeReqDescription
emailsarrayyes

No output schema declared.

No examples provided.

outlook_list_accounts ~19

List all configured Outlook accounts and their authentication status.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_list_attachments ~35

List attachments on a message — returns IDs, names, sizes, and content types.

NameTypeReqDescription
message_idstringyes

No output schema declared.

No examples provided.

outlook_list_calendars ~24

List all calendars available to the authenticated user (primary + secondary).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_list_categories ~31

List the user's master category definitions (names + colors). Provides the valid values for outlook_categorize_message.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_list_contacts ~45

List contacts with cursor pagination. Use for one-shot queries; use outlook_list_contacts_delta for polling/recurring agents.

NameTypeReqDescription
countinteger
cursor

No output schema declared.

No examples provided.

outlook_list_contacts_delta ~120

List only contact changes since the last call. Use this for polling/recurring agents — typically 10x cheaper than outlook_list_contacts after the first call. Use outlook_list_contacts for one-shot queries. Example: first call: outlook_list_contacts_delta(); next: outlook_list_contacts_delta(delta_token=<token from prior response>). is_deleted=True items are tombstones (drop cached payload). has_more=True means drain immediately by passing the returned delta_token back.

NameTypeReqDescription
delta_token
page_sizeinteger

No output schema declared.

No examples provided.

outlook_list_drafts ~33

List messages in the Drafts folder with cursor pagination.

NameTypeReqDescription
countinteger
cursor

No output schema declared.

No examples provided.

outlook_list_events ~107

List calendar events in a date range (expands recurring instances). Use for one-shot queries; use outlook_list_events_delta for polling/recurring agents. Pass concise=True to drop large fields (body, attendees, organizer, categories) — ~10x fewer tokens for day-at-a-glance scans.

NameTypeReqDescription
after
before
conciseboolean
countinteger
cursor
daysinteger

No output schema declared.

No examples provided.

outlook_list_events_delta ~170

List only calendar event changes within a window since the last call. Use this for polling/recurring agents — typically 10x cheaper than outlook_list_events after the first call. Use outlook_list_events for one-shot queries. Example: first call: outlook_list_events_delta(start="2026-05-22T00:00:00Z", end="2026-05-29T00:00:00Z"); next: outlook_list_events_delta(delta_token=<token>). start/end (ISO 8601) required on first call only; the cursor encodes the window thereafter. is_deleted=True items are tombstones. has_more=True means drain immediately.

NameTypeReqDescription
delta_token
end
page_sizeinteger
start

No output schema declared.

No examples provided.

outlook_list_folders ~57

List mail folders with message counts, parent_id, and child count. Default is top-level only; pass recursive=True to walk the full tree and resolve subfolder names.

NameTypeReqDescription
cursor
recursiveboolean

No output schema declared.

No examples provided.

outlook_list_inbox ~267

List messages in one folder with structured filters (read, sender, date, category, Focused). Use this for folder-scoped browsing; use outlook_search_mail for KQL full-text search across all folders. For polling/recurring agents use outlook_list_inbox_delta (typically 10x cheaper after the first call). Example: outlook_list_inbox(folder="Junk Email", unread_only=True, count=5) `folder` accepts display names, well-known names ("inbox", "junkemail"), or Graph IDs — prefer names. Pass concise=True to drop large fields (preview, categories) — ~10x fewer tokens. Pass uncategorized_only=True to return only messages with no categories assigned. `after`/`before` take ISO 8601 or a relative offset — `7d` is seven days ago, `+7d` is seven days from now.

NameTypeReqDescription
after
before
classification
conciseboolean
countinteger
cursor
folderstring
from_address
skipinteger
uncategorized_onlyboolean
unread_onlyboolean

No output schema declared.

No examples provided.

outlook_list_inbox_delta ~132

List only inbox changes since the last call. Use this for polling/recurring agents — typically 10x cheaper than outlook_list_inbox after the first call. Use outlook_list_inbox for one-shot snapshots. Example: first call: outlook_list_inbox_delta(); next: outlook_list_inbox_delta(delta_token=<token from prior response>). is_deleted=True items are tombstones (drop cached payload). has_more=True means drain immediately by passing the returned delta_token back.

NameTypeReqDescription
delta_token
folderstring
page_sizeinteger

No output schema declared.

No examples provided.

outlook_list_inbox_overrides ~45

List the user's Focused Inbox per-sender override rules. Each override forces mail from a given sender into Focused or Other regardless of Graph's inference.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_list_task_lists ~22

List all Microsoft To Do task lists for the current user.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

outlook_list_tasks ~61

List tasks in a To Do list with optional `status` filter. `status`: "notStarted", "inProgress", or "completed".

NameTypeReqDescription
countinteger
cursor
list_id
status

No output schema declared.

No examples provided.

outlook_list_thread ~81

List all messages in a conversation thread, chronological order. Needs `conversation_id` from a message's metadata. Pass concise=True to drop large fields (quoted prior-message text in each preview) — ~10x fewer tokens on long reply chains.

NameTypeReqDescription
conciseboolean
conversation_idstringyes
countinteger

No output schema declared.

No examples provided.

outlook_mark_read ~41

Mark a single message as read or unread (set is_read=True or False).

NameTypeReqDescription
is_readbooleanyes
message_idstringyes

No output schema declared.

No examples provided.

outlook_move_message ~91

Move a message to another folder (removes from source). Use outlook_copy_message to duplicate without removing the source. For deletion use outlook_delete_message (not move to "deleteditems"). `folder` accepts display names, well-known names ("inbox", "archive", "deleteditems"), or Graph IDs — prefer names.

NameTypeReqDescription
folderstringyes
message_idstringyes

No output schema declared.

No examples provided.

outlook_read_message ~131

Get one full message by ID. `format` is "text", "html", or "full" (both). Pass include_deferred_send=True to also return the scheduled-send time (PR_DEFERRED_SEND_TIME) as deferred_send_datetime — useful when recreating a delayed draft. Pass concise=True to drop large fields (body, body_html) and return a 200-char body_preview — ~10x fewer tokens for triage scans.

NameTypeReqDescription
conciseboolean
formatstring
include_deferred_sendboolean
message_idstringyes

No output schema declared.

No examples provided.

outlook_read_messages ~167

Bulk read up to 20 messages by ID via $batch — use NOT N outlook_read_message calls. Per-message shape in `messages` matches outlook_read_message byte-for-byte for the same (format, concise, include_deferred_send). Ordering follows input `message_ids`. Returns `{messages, failures, requested, succeeded, failed}` — 404s on some IDs are surfaced in `failures` without failing the whole call (partial-failure tolerant). Example: outlook_read_messages(message_ids=[id1, id2, id3], concise=True) Hard cap of 20 (Graph $batch limit).

NameTypeReqDescription
conciseboolean
formatstring
include_deferred_sendboolean
message_idsarrayyes

No output schema declared.

No examples provided.

outlook_reclassify_message ~77

Reclassify ONE message's Focused/Other placement. `classification` is "focused" or "other". Use this to fix a single message; use outlook_set_inbox_override for a sticky rule that affects future messages from the same sender.

NameTypeReqDescription
classificationstringyes
message_idstringyes

No output schema declared.

No examples provided.

outlook_remove_draft_attachment ~39

Remove a single attachment from a draft message by attachment ID.

NameTypeReqDescription
attachment_idstringyes
draft_idstringyes

No output schema declared.

No examples provided.

outlook_rename_folder ~34

Rename a user-created mail folder by ID.

NameTypeReqDescription
folder_idstringyes
namestringyes

No output schema declared.

No examples provided.

outlook_reply ~64

Reply (or reply-all) to an email message. Use this for email; use outlook_rsvp for calendar meeting invites.

NameTypeReqDescription
bodystringyes
is_htmlboolean
message_idstringyes
reply_allboolean

No output schema declared.

No examples provided.

outlook_rsvp ~69

RSVP to a calendar meeting invite. `response` is "accept", "decline", or "tentative". Use this for meeting invites; use outlook_reply to reply to a regular email message.

NameTypeReqDescription
event_idstringyes
message
responsestringyes

No output schema declared.

No examples provided.

Common questions

What is the Outlook MCP server?

Outlook MCP is listed in the public MCP registry as io.github.mpalermiti/outlook-mcp. Microsoft Outlook personal accounts: mail, calendar, contacts, to-do, drafts (62 tools). This page covers its PyPI package (outlook-graph-mcp).

Is the Outlook MCP server safe to use?

Outlook MCP scores 59 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Outlook MCP server expose?

Outlook MCP exposes 62 tools: outlook_auth_status, outlook_list_inbox, outlook_read_message, outlook_read_messages, outlook_search_mail, and 57 more. Their descriptions and schemas cost roughly 5,268 tokens of context every time the server is loaded.

Is the Outlook MCP server still maintained?

Outlook MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.