From outlook
Use Microsoft Outlook end-to-end — read, search, triage, and send mail; manage calendar events and meeting invites; work with contacts, tasks, color categories, and mail rules; check Out-of-Office. Trigger this skill whenever the user asks to do anything with their inbox, email, calendar, meetings, contacts, or to-do list AND tools whose names start with `outlook_` are available (e.g. `outlook_list_mails`, `outlook_send_mail`, `outlook_create_event`). Trigger even when the user doesn't say "Outlook" — phrases like "check my inbox", "what's on my calendar this week", "draft a reply to that email about Y", "schedule a meeting with Sarah Friday at 3", "remind me to follow up next Monday", "move that thread to a folder", "find Bob's phone number", or "is my OOO still on?" all qualify. The skill teaches the right way to chain these tools: how to refer to folders, how item handles work, how to format dates, how to recur an event, and which calls have side effects you must confirm first.
How this skill is triggered — by the user, by Claude, or both
Slash command
/outlook:outlookThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You have tools whose names begin with `outlook_` that operate on the user's actual Microsoft Outlook account. They read and write live data — sent mail goes out, deleted items move to Deleted Items, accepted invites notify organizers. Treat write operations the way you would treat any user-visible action: confirm intent first.
You have tools whose names begin with outlook_ that operate on the user's actual Microsoft Outlook account. They read and write live data — sent mail goes out, deleted items move to Deleted Items, accepted invites notify organizers. Treat write operations the way you would treat any user-visible action: confirm intent first.
Activate whenever the user wants to do something with their Outlook data. The user does not need to say "Outlook." Triggers include:
If outlook_* tools are not available in the session, the underlying integration isn't installed yet. Don't guess or improvise — instead, read references/setup.md and walk the user through installing it (Windows + classic Outlook + a one-line install + restart their MCP client). After install they restart the client and the tools appear.
All tools are prefixed outlook_. Memorize the categories; consult references/tools.md for exact parameters and return shapes the first time you reach for one.
| Category | Tools |
|---|---|
list_mails, search_mails, get_mail, send_mail, reply_mail, forward_mail, move_mail, delete_mail, mark_mail, save_attachments | |
| Folders | list_folders, create_folder |
| Calendar | list_events, get_event, create_event, update_event, delete_event, respond_event |
| Contacts | list_contacts, search_contacts (incl. org directory), get_contact, resolve_name |
| Tasks | list_tasks, create_task, complete_task |
| Categories | list_categories, set_category |
| Rules | list_rules, toggle_rule |
| Out-of-Office | get_out_of_office (read-only) |
| Account | whoami |
These rules are the same across every tool. Internalize them and you'll rarely need to peek at references/tools.md.
Any parameter named folder, target_folder, parent, or root accepts:
inbox, sent, drafts, deleted (alias trash), outbox, junk (alias spam), calendar, contacts, tasks, notes.Inbox/Projects/Acme.Mailbox - [email protected]/Inbox/Projects/Acme.When unsure of the exact path, call outlook_list_folders first and use the path string it returns verbatim.
EntryIDEvery mail, event, contact, and task has a stable entry_id string. List/search tools return it on every item; pass that exact string back to detail/edit/delete/reply/move tools. Never invent an entry_id. Never paste a subject line into an entry_id field.
If the user refers to an item by description ("the email from Bob about Q3"), first find it (e.g. search_mails), then act on the returned entry_id.
entry_ids become invalid if the item is deleted; moving an item between stores produces a new ID. If you get an "Item not found" error, re-list to refresh.
All date/time parameters are ISO-8601 strings: 2026-04-25T14:30:00. Without a timezone suffix the value is interpreted as the user's local time, which is what the user expects.
Resolve relative phrasing ("Friday at 3", "next Monday morning", "tomorrow") yourself before calling — the tools don't parse natural language. Use today's date from the conversation context as the anchor.
response_formatMost read tools accept response_format='markdown' (default; pretty for the user) or response_format='json' (structured for you to parse). Pick json when you need to extract a field (almost always an entry_id) to chain into another call. Pick markdown when the result is the final answer to the user.
outlook_create_event accepts an optional recurrence object:
{
"type": "weekly", // "daily" | "weekly" | "monthly" | "yearly"
"interval": 1, // every N units; default 1
"occurrences": 10, // OR
"end_date": "2026-12-31" // ISO date — provide one or the other; omit both for indefinite
}
update_event does not change recurrence. If the user wants to alter a recurring series' cadence, the simplest path is delete + recreate.
attachments= (on send_mail/reply_mail/forward_mail) and output_dir= (on save_attachments) require absolute paths under the user's profile directory (C:\Users\<them>\...). This sandbox is enforced; you can't bypass it from a tool call. If the user really needs a path elsewhere (a network share, D:, etc.), they have to set OUTLOOK_MCP_ALLOW_ANY_PATH=1 in their environment — tell them, don't try to work around it.
Read freely:
list_mails, search_mails, get_mail, list_folders, list_events, get_event, list_contacts, search_contacts, get_contact, resolve_name, list_tasks, list_categories, list_rules, get_out_of_office, whoami.
Confirm before calling (these change shared state or send messages):
send_mail, reply_mail, forward_mail, delete_mail, move_mail, mark_mail, save_attachments, create_event (especially with attendees — that sends a meeting invite immediately), update_event, delete_event, respond_event (with send_response=true), create_folder, create_task, complete_task, set_category, toggle_rule.
Two staging tricks worth knowing:
outlook_send_mail(..., save_only=true) saves to Drafts without sending — perfect for "draft a reply for me to look at" requests.outlook_respond_event(..., send_response=false) records your local accept/decline without emailing the organizer.search_mails over list_mails when the user describes content (subject keyword, sender name). For calendar, list_events with a date range. Capture entry_ids as you go (response_format='json' makes this clean).get_mail / get_event return the full body — list/search results only include a 200-char preview, which is not enough to write a grounded reply.Read references/gotchas.md for the complete list. The non-negotiables:
EX:/O=... distinguished names, not SMTP. When filtering with from_address in list_mails, pass a name substring (e.g. "sarah") rather than an exact address.toggle_rule flips a real rule the instant it's called. Always list_rules first, confirm the exact rule name with the user, then toggle.get_out_of_office reports state; there is no tool to enable/disable. If the user wants to set OOO, tell them to use Outlook → File → Automatic Replies.send_mail/reply_mail/forward_mail/delete_mail. If the user reports "you said you sent it but I don't see it", point them to Outlook → File → Options → Trust Center → Programmatic Access.create_event succeeds — there's no "save as draft" for invites. Confirm attendee list and times before calling.olk.exe), the tools won't see it. Tell them to switch back to classic Outlook.references/tools.md — every outlook_* tool: parameters, defaults, return shape, and notes on which fields feed into which subsequent tools.references/recipes.md — worked examples for triage, drafting replies, weekly digests, scheduling meetings, recurring events, attachment workflows, multi-mailbox setups.references/gotchas.md — every quirk and failure mode worth knowing, with the user-visible symptom and the corrective action.references/setup.md — load this only when the outlook_* tools aren't yet available. It walks the user through the one-time install of the underlying integration (Windows + classic Outlook prerequisites, install command, registering with the user's MCP client, and a troubleshooting tree).Read the relevant reference file when you're about to do something for the first time in a session. The information is dense — fetching it once and keeping it in working memory is cheaper than calling tools blindly and recovering from errors.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub anasahmed07/outlook-classic-mcp --plugin outlook