@lnwebworks/outlook-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AZURE_CLIENT_ID | Yes | Your Azure AD client (application) ID | |
| AZURE_TENANT_ID | Yes | Your Azure AD tenant ID | |
| OUTLOOK_USER_EMAIL | Yes | The mailbox this server acts on by default | |
| AZURE_CLIENT_SECRET | Yes | Your Azure AD client secret | |
| OUTLOOK_SIGNOFF_NAME | No | Optional: signoff name | |
| OUTLOOK_EXCLUDED_FOLDER_IDS | No | Optional: folder IDs to exclude | |
| OUTLOOK_SKIP_EXCLUDED_FOLDERS | No | Optional: whether to skip excluded folders |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_recent_emailsC | Fetch recently received emails from Outlook inbox |
| get_recent_emails_all_foldersA | Fetch recently received emails across the entire mailbox (all folders, not just Inbox), excluding Deleted Items (and its subfolders), Junk, Junk Emails, and Drafts. Returns bodyPreview (short text snippet) instead of full HTML body to keep payload small. |
| get_unread_emailsB | Fetch all unread emails from Outlook inbox for triage |
| get_conversation_threadB | Retrieve full email conversation history by conversation ID |
| search_emailsB | Search emails by keyword, sender, subject or topic |
| get_sent_emailsA | Fetch sent emails to track outbox and detect missing replies |
| get_email_foldersA | List all Outlook mail folders with unread counts |
| triage_emailC | Classify an email for urgency, category and suggest a reply |
| create_email_draftA | Create a standalone draft email in Outlook Drafts folder for review before sending. Supports file attachments up to 25MB combined. |
| create_reply_draftA | Create an unsent draft reply attached to an existing email thread using Microsoft Graph createReply API (POST /messages/{id}/createReply). Supports file attachments up to 25MB combined. |
| update_email_draftA | Update/edit an existing email draft subject, body, or recipient before sending (PATCH /messages/{draftId}) |
| reply_to_emailA | Reply to an existing email thread. Requires prior approval. Supports file attachments up to 25MB combined (over 3MB sends via an internal draft-then-send step — same result, no different usage). |
| send_emailA | Send an approved email. Requires explicit approval from the client first. Supports file attachments up to 25MB combined (over 3MB sends via an internal draft-then-send step — same result, no different usage). |
| move_emailC | Move an email to a specific folder |
| get_email_attachmentsA | Fetches the content of all the file attachments for a given Outlook messageId. Returns array [{id, name, contentType, size, isInline, contentBytes}]. |
| mark_email_readC | Mark an email as read or unread |
| get_upcoming_eventsC | Get upcoming calendar events for the next N days |
| get_calendar_eventsA | Get calendar events between two datetimes |
| create_calendar_eventA | Create a new calendar event. Requires approval. Automatically checks for conflicting events in that time range first and refuses (returning conflict:true and the conflicting events) unless force:true is passed — only pass force:true after the user has explicitly approved double-booking. |
| update_calendar_eventA | Update an existing calendar event. If both startTime and endTime are being changed, automatically checks for conflicting events in the new time range first and refuses (returning conflict:true and the conflicting events) unless force:true is passed — only pass force:true after the user has explicitly approved double-booking. |
| cancel_calendar_eventA | Cancel a calendar event and notify attendees |
| get_todays_briefingB | Get today's unread emails and calendar events in one call |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
There is a cluster of email retrieval tools—get_recent_emails, get_recent_emails_all_folders, get_unread_emails, and get_todays_briefing—that overlap in function and could lead an agent to pick the wrong one by name alone. Most other tools are clearly separated by resource/action, and the descriptions resolve the ambiguity if read carefully.
All tools use snake_case verb_noun names (get_, create_, update_, cancel_, send_, reply_to_, move_, mark_) with no camelCase or inconsistent style. Even phrase-based names like get_todays_briefing still follow the get_<thing> convention, so the pattern is predictable.
22 tools is on the heavy side for a mail/calendar server, and the four overlapping email-fetch variants add redundancy rather than distinct capabilities. A tighter set closer to 15-16 tools would be easier to navigate, though the count is not extreme.
Email covers fetch, search, triage, drafts, replies, send, move, mark-read, and attachments; calendar covers create/read/update/cancel with conflict checks. The main gaps are no email deletion or forwarding and no direct send for an existing draft, but agents can work around these.