owa-mail-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | MCP host (if transport is not stdio) | |
| MCP_PORT | No | MCP port (if transport is not stdio) | |
| MCP_TRANSPORT | No | MCP transport | stdio |
| EXCHANGE_OWA_URL | No | OWA host | https://owa.example.com |
| EXCHANGE_PASSWORD | Yes | Password (required) | |
| EXCHANGE_USERNAME | Yes | NTLM account, e.g. DOMAIN\user (required) | |
| MCP_ENABLED_TOOLS | No | Allowlist of visible tools (comma-separated, empty string disables all) | |
| EXCHANGE_LOG_LEVEL | No | Log level (to stderr) | INFO |
| EXCHANGE_TIME_ZONE | No | Windows time zone for TimeZoneContext | Russian Standard Time |
| EXCHANGE_VERIFY_SSL | No | Set to 'true' for strict TLS verification | false |
| EXCHANGE_COOKIE_FILE | No | Session cookie cache file (written by server) | ~/.config/owa-mail-mcp/cookies |
| EXCHANGE_ATTACHMENT_DIR | No | Directory where attachments are saved | /tmp/attachments |
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_authA | Is the OWA session live? A health check for this MCP connection. Makes one light authenticated call to the mailbox — not just a cookie-file check — so the answer covers both the credentials and whether the OWA host is reachable, independent of any particular tool. |
| get_foldersA | List mail/calendar folders with their ids, item counts and unread counts. Use it to turn a custom folder name into the FolderId find_emails and
move_email accept. |
| find_emailsA | List emails in a folder, or search the whole mailbox by text. Newest first. Bodies are not included — a row carries a short A listing answers with total/has_more and both continuations, next_offset and next_cursor — take either for the next page. A search has neither a total (the server reports 0 whatever it found) nor a cursor. |
| get_emailA | Full email: body, all recipients, and attachment ids for get_attachment. |
| get_threadA | Every email in a conversation, newest first — the whole back-and-forth. The only way to read a thread in full: search returns just the messages that matched, get_email returns one. Bodies are not included — follow up with get_email on the messages you need.
|
| send_emailA | Send an email, or save it to Drafts. Sending is immediate — no confirmation step. |
| reply_emailA | Reply to an email, quoting the original. Sends immediately. |
| forward_emailA | Forward an email with its attachments. Sends immediately. |
| delete_emailA | Delete an email — to Deleted Items by default. |
| get_calendar_eventsA | Calendar events in a time window, recurrences expanded.
There is no paging and nothing to page — the whole window is read every call,
so |
| get_eventA | Full calendar event: body, attendees with response status, attachment ids. |
| get_calendarsA | List the calendars in your sidebar — yours and colleagues' — and who you can read. A colleague's calendar being listed does NOT mean it is readable: the entry
looks identical either way, and only a read attempt tells them apart — hence
|
| get_user_availabilityA | Read someone's schedule: their busy blocks, WITH MEETING SUBJECTS. Works for a colleague who has not shared their calendar folder, where
get_calendar_events(person=…) needs exactly that sharing and otherwise fails
with "Доступ запрещён". Subjects appear when their sharing level exposes
details; otherwise For "when can we all meet?" use find_meeting_time. |
| find_meeting_timeA | Concrete meeting slots where everyone is free, in working hours. Feed a chosen slot straight into create_event. Slots are computed from each attendee's actual busy blocks (absolute times), not from the merged free/busy string — that string comes back shifted by the mailbox time zone on this server and would place meetings on top of existing ones. |
| create_eventA | Create a calendar event, one-off or recurring, and invite attendees. With no attendees this is a private appointment and nothing is sent. |
| update_eventA | Change an existing event and notify attendees. Only the fields you pass change. For a RECURRING event |
| cancel_eventA | Cancel an event YOU organize and notify the attendees. The notice reaches them and cannot be recalled. Only the organizer can cancel: asked to cancel someone else's event this refuses rather than quietly deleting your copy — to take it off your own calendar, decline it with respond_to_event. For a RECURRING event |
| respond_to_eventA | Accept, decline or tentatively accept an event invitation. For a RECURRING event |
| get_attachmentA | Download an attachment to disk and return its path. Works for both mail and calendar attachments. |
| find_peopleA | Look someone up in the corporate address book. A single match comes back with the full card — job title, department, office,
phones. Several come back as a compact list, each with the exact SMTP address
send_email and create_event want. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mainpart/owa-mail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server