Skip to content
Agentmart
Submit a tool

Outlook MCP

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

Connector by mpalermiti · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 40
Write a review

Chalk Labs

Need help deploying Outlook MCP?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/mpalermiti-outlook-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

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

Use cases: email, scheduling

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
27 read · 31 write · 12 delete · 1 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 71

Read from the source code; the running server may list different tools.

Read 27 · Look things up without changing anything.

  • outlook_auth_status
  • outlook_find_event_by_key
  • outlook_get_contact
  • outlook_get_event
  • outlook_get_mail_tips
  • outlook_get_task
  • outlook_list_attachments
  • outlook_list_calendars
  • outlook_list_categories
  • outlook_list_contacts
  • outlook_list_contacts_delta
  • outlook_list_drafts
Show 15 more tools
  • outlook_list_events
  • outlook_list_events_delta
  • outlook_list_folders
  • outlook_list_inbox
  • outlook_list_inbox_delta
  • outlook_list_inbox_overrides
  • outlook_list_task_attachments
  • outlook_list_task_lists
  • outlook_list_tasks
  • outlook_list_thread
  • outlook_read_message
  • outlook_read_messages
  • outlook_search_contacts
  • outlook_search_mail
  • outlook_whoami

Write 31 · Create, change, send or run things.

  • outlook_add_checklist_item
  • outlook_attach_to_draft
  • outlook_attach_to_event
  • outlook_batch_triage
  • outlook_categorize_message
  • outlook_complete_task
  • outlook_copy_message
  • outlook_create_contact
  • outlook_create_draft
  • outlook_create_event
  • outlook_create_folder
  • outlook_create_task
Show 19 more tools
  • outlook_download_attachment
  • outlook_download_task_attachment
  • outlook_flag_message
  • outlook_forward
  • outlook_mark_read
  • outlook_reclassify_message
  • outlook_rename_folder
  • outlook_reply
  • outlook_rsvp
  • outlook_send_draft
  • outlook_send_message
  • outlook_send_with_attachments
  • outlook_set_inbox_override
  • outlook_update_checklist_item
  • outlook_update_contact
  • outlook_update_draft
  • outlook_update_event
  • outlook_update_task
  • outlook_upload_task_attachment

Delete 12 · Delete, drop, revoke or wipe things.

  • outlook_delete_checklist_item
  • outlook_delete_contact
  • outlook_delete_draft
  • outlook_delete_event
  • outlook_delete_folder
  • outlook_delete_inbox_override
  • outlook_delete_message
  • outlook_delete_task
  • outlook_delete_task_attachment
  • outlook_move_message
  • outlook_remove_draft_attachment
  • outlook_remove_event_attachment

Not yet classified 1 · We could not tell from the name and description.

  • outlook_changes_since

Network hosts it talks to 2

  • github.com · found in code
  • graph.microsoft.com · found in code

Files it touches

  • /etc/localtime
  • /usr/share/zoneinfo
  • Your home directory (~)
  • ~/.outlook-mcp
  • Any path the agent passes to its tools

Tools (71)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • outlook_add_checklist_item

    Add a checklist item (sub-step) to a To Do task.

  • outlook_attach_to_draft

    Add attachments to an existing draft; auto-switches to upload-session for files >3MB. `attachment_paths` resolve inside the configured attachments directory (`attachments_dir`, an `attachments` folder in the settings directory by default) — a bare filename is looked up there, and a path outside it is refused. `attachments`: inline files [{name, content_base64, content_type?}], up to 3MB each. Returns new attachment IDs for later removal via outlook_remove_draft_attachment.

  • outlook_attach_to_event

    Attach files to an event; auto-switches to upload-session for files >3MB. `attachment_paths` resolve inside `attachments_dir`, as for outlook_attach_to_draft. Attendees get the files with the event's next update. Returns new attachment IDs.

  • outlook_auth_status

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

  • outlook_batch_triage

    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.

  • outlook_categorize_message

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

  • outlook_changes_since

    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…

  • outlook_complete_task

    Mark a To Do task as completed.

  • outlook_copy_message

    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.

  • outlook_create_contact

    Create a new contact with name and optional email, phone, company, job_title, birthday (YYYY-MM-DD). title is the name prefix ("Dr.", "Ms."), shown in the display name — not the job. phone_type: "mobile", "business" or "home".

  • outlook_create_draft

    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. reply_to_message_id (reply_all=True for all) or forward_message_id drafts in that thread, quoting the original; on a reply, Graph fills to/cc/subject. 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.

  • outlook_create_event

    Create a calendar event with optional attendees, recurrence, busy status, 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", …

  • outlook_create_folder

    Create a mail folder; pass `parent_folder` (name, path or ID) to nest it under that one.

  • outlook_create_task

    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.

  • outlook_delete_checklist_item

    Delete a checklist item from a To Do task.

Show 56 more tools
  • outlook_delete_contact

    Delete a contact by ID.

  • outlook_delete_draft

    Delete a draft message by ID.

  • outlook_delete_event

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

  • outlook_delete_folder

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

  • outlook_delete_inbox_override

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

  • outlook_delete_message

    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.

  • outlook_delete_task

    Delete a task from a Microsoft To Do list.

  • outlook_delete_task_attachment

    Remove an attachment from a To Do task.

  • outlook_download_attachment

    Download an attachment to `save_path` on the host, or return it with `as_content=True`. `save_path` is resolved inside the configured attachments directory (`attachments_dir`, an `attachments` folder in the settings directory by default) — a bare filename lands there; a path outside it is refused. Same directory for reads and writes. `as_content` writes nothing; 10 MB at most.

  • outlook_download_task_attachment

    Download a To Do task attachment to a local file, or return it with `as_content=True`. `save_path` resolves inside the configured attachments directory; the write is atomic (temp file + replace), so a failed download never truncates a file already staged there. `as_content` writes nothing; 10 MB at most.

  • outlook_find_event_by_key

    Find events by the `key` given to outlook_create_event or outlook_update_event. Any date. Searches the default calendar, or `calendar`. Returns events and series masters, not occurrences.

  • outlook_flag_message

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

  • outlook_forward

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

  • outlook_get_contact

    Get one full contact by ID.

  • outlook_get_event

    Get one event by ID: body, attendees, organizer, recurrence, type, show_as, anchor zone, key, attachments (metadata). `recurrence` comes back in the same shape outlook_create_event accepts; `type` is "singleInstance", "seriesMaster", "occurrence" or "exception". `start`/`end` are UTC; `original_start_time_zone` is the zone the event is anchored in.

  • outlook_get_mail_tips

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

  • outlook_get_task

    Get full To Do task details: notes (`body`), checklist items, due, recurrence flag. Use this for one task's sub-steps and notes; use outlook_list_tasks for overviews. `checklist_items` are ordered unchecked-first, matching the To Do client. `list_id` is only needed when the task lives in a non-default list.

  • outlook_list_attachments

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

  • outlook_list_calendars

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

  • outlook_list_categories

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

  • outlook_list_contacts

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

  • outlook_list_contacts_delta

    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.

  • outlook_list_drafts

    List messages in the Drafts folder with cursor pagination.

  • outlook_list_events

    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 for day-at-a-glance scans: drops organizer, response_status, type and show_as; adds is_organizer and attendees_count; spells is_online as is_online_meeting. `calendar`: a display name or an ID from outlook_list_calendars; omit for the default calendar. A cursor continues the listing it came from.

  • outlook_list_events_delta

    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.

  • outlook_list_folders

    List mail folders with message counts, parent_id, and child count. Default is top-level only; pass recursive=True to walk the full tree, each folder with the `path` that folder arguments accept.

  • outlook_list_inbox

    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 ret…

  • outlook_list_inbox_delta

    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.

  • outlook_list_inbox_overrides

    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.

  • outlook_list_task_attachments

    List attachments on a To Do task (id, name, size, content_type) with pagination. Use `outlook_download_task_attachment` with an id from here to save the content. has_more=True means pass next_cursor back for the next page.

  • outlook_list_task_lists

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

  • outlook_list_tasks

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

  • outlook_list_thread

    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.

  • outlook_mark_read

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

  • outlook_move_message

    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.

  • outlook_read_message

    Get one full message by ID or Message-ID (`<abc@example.com>`). `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. include_sender_auth=True adds sender_authentication: did Microsoft verify the From domain?

  • outlook_read_messages

    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, include_sender_auth). 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).

  • outlook_reclassify_message

    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.

  • outlook_remove_draft_attachment

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

  • outlook_remove_event_attachment

    Remove one attachment from an event (IDs from outlook_get_event's `attachments`).

  • outlook_rename_folder

    Rename a user-created mail folder by ID.

  • outlook_reply

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

  • outlook_rsvp

    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.

  • outlook_search_contacts

    Search contacts by name or email using KQL query syntax. phone (instead of query) finds a number written any way, with or without country code.

  • outlook_search_mail

    Full-text search mail with KQL across all folders (or one, if `folder` is set). Use this for "find emails about X"; use outlook_list_inbox for structured filters scoped to a single folder. Example: outlook_search_mail(query="from:sarah@acme.com received>=2026-01-01", count=10) `query` is Microsoft KQL (from:, subject:, received>=, hasattachment:true, AND/OR/NOT). Operators must be UPPERCASE — lowercase `and` is matched as a literal term. Two terms with no operator between them broaden the search; use AND explicitly to narrow. Pass concise=True to drop large fields (preview, categories) — ~10…

  • outlook_send_draft

    Send an existing draft (pair with outlook_create_draft for human-review send flow).

  • outlook_send_message

    Send an email immediately, no human review. For human-review workflows use outlook_create_draft + outlook_send_draft instead. For replying to an existing message use outlook_reply; for calendar invites use outlook_rsvp. Pass reply_to to route recipient replies to a different address (e.g. a shared team alias).

  • outlook_send_with_attachments

    Send an email with file attachments; auto-switches to upload-session for files >3MB. `attachment_paths` resolve inside the configured attachments directory (`attachments_dir`, an `attachments` folder in the settings directory by default) — a bare filename is looked up there, and a path outside it is refused. `attachments`: inline files [{name, content_base64, content_type?}], up to 3MB each. Pass reply_to to route replies to a different address.

  • outlook_set_inbox_override

    Create or update a sticky Focused/Other rule for a sender (upsert, case-insensitive). Use this to permanently change classification for FUTURE messages from a sender; use outlook_reclassify_message to fix ONE existing message. Example: outlook_set_inbox_override(sender_email="marketing@acme.com", classify_as="other") Returns status: "created" or "updated".

  • outlook_update_checklist_item

    Update a checklist item (partial patch — only provided fields change). `is_checked=True` marks a sub-step done; Graph maintains the checked timestamp from it. Renaming passes `display_name`.

  • outlook_update_contact

    Update an existing contact (partial patch — only provided fields change). An address takes the shape outlook_get_contact returns — any subset of {"street", "city", "state", "postal_code", "country_or_region"} — and REPLACES that whole address, so pass back every part you want to keep. Omit it to leave it untouched. phone_type ("mobile", "business", "home") picks the field; business/home REPLACE that list. clear_phones empties those types: phone_type="business", clear_phones=["mobile"] moves it. title is the name prefix ("Dr.", "Ms."), shown in the display name — not the job. birthday is a dat…

  • outlook_update_draft

    Update an existing draft (partial patch). Pass is_html=True when body is HTML — required when overwriting a draft originally composed as HTML (consumer Outlook rejects Text-over-HTML PATCH). Pass reply_to=[...] to overwrite Reply-To; reply_to=[] to clear it. Pass deferred_send_datetime (ISO 8601) to set the scheduled-send time; empty string clears it.

  • outlook_update_event

    Update fields on an existing event (partial patch — only provided fields change). `recurrence` takes the same shapes as outlook_create_event and converts a single event into a series, or replaces an existing series' pattern. Omit it to leave any recurrence alone; pass remove_recurrence=True to turn a series back into a single event, keeping the first occurrence's time (the two are mutually exclusive). `attendees` REPLACES the whole guest list (Graph has no add-one operation) and sends invitations to everyone on it plus cancellations to anyone dropped — pass the full intended list; [] removes …

  • outlook_update_task

    Update fields on a To Do task (partial patch — only provided fields change).

  • outlook_upload_task_attachment

    Attach a local file to a To Do task via inline base64 POST (1 byte – 20 MiB). `file_path` resolves inside the configured attachments directory. Larger files are refused up front: Graph caps the request body at 30 MB and base64 inflates the file 4/3, so 20 MiB is the honest ceiling.

  • outlook_whoami

    Get the authenticated user's profile (display name, email, ID).

Signals

Stars
40
Forks
13
Open issues
21
Weekly downloads
450
Last commit
Oct 24, 2026 (7 days ago)
Last release
Oct 25, 2026 (6 days ago)
Last package publish
Oct 24, 2026 (7 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.mpalermiti/outlook-mcp
Version
1.28.0
Auth
No auth
Packages
pypi outlook-graph-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 26, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Outlook MCP running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Outlook MCP?

CallGet help
Cite this page

Outlook MCP. Agent Mart. https://agentmart.dev/connectors/mpalermiti-outlook-mcp (last updated 2026-10-26)