
EWS Meeting MCP
io.github.ap311036Published by GitHub account ap311036v0.1.17Updated Oct 24, 2026
Safely schedule Outlook meetings on on-prem Exchange EWS with preview-confirmed writes.
The publisher's own server: Meeting.ai
Overview
Local MCP server that lets an assistant read an on-prem Exchange Outlook inbox and availability, then preview and confirm meeting create, update and cancel on E
- What you can do
- Check setup and credentials, and read Keychain status without exposing the password; get a signature setup guide with a sample HTML template. Search and read inbox messages read-only, without marking them read or changing mailbox state. List calendar events, query free/busy and find events in a time window. Resolve attendees and list rooms, then suggest slots using workday, avoid-window and room-capacity policy. Preview, then confirm creation (including weekly recurrence and show-as status), update or cancel of meetings, and verify the saved result. Send a report only to the configured mailbox, and read the local audit log.
- When to use it
- For teams on on-prem Exchange/EWS that want an assistant to help with scheduling, room and attendee lookup, and inbox reading while keeping every calendar write behind a human-approved preview and confirmation step.
- Requirements
- Runs locally over stdio, typically via npx (Node.js) or a Python checkout. Needs EWS_ENDPOINT, EWS_EMAIL and EWS_USERNAME, plus the password via EWS_PASSWORD or macOS Keychain variables; EWS_AUTH_TYPE and EWS_TIMEZONE are optional. Network access to the Exchange EWS endpoint is required.
Installation
In SourceWeft
- Open EWS Meeting MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
EWS Meeting MCP
[npm] [License: MIT] [Node.js >=18] [Python]
The MCP server for safely reading Outlook inbox messages, sending self-only reports, and scheduling meetings on on-prem Exchange EWS.
EWS Meeting MCP gives coding assistants and desktop agents a safe, structured way to read Outlook inbox messages and availability, send a report only to the configured mailbox, discover rooms, suggest meeting slots, and create, update, or cancel meetings only after an explicit human confirmation step.
It is built for companies where calendar access is sensitive infrastructure: regulated teams, internal networks, strict security review, legacy Exchange deployments, and organizations that cannot simply hand a cloud agent broad Microsoft 365 permissions. Credentials stay local, meeting writes are previewed before they touch Exchange, self-only report sends require idempotency protection, and every write can be traced through a local audit trail.
Why This Exists
Many teams still run calendar infrastructure through on-prem Exchange/EWS. General-purpose agents can reason about scheduling, but they should not receive raw passwords, guess attendee addresses, or send calendar invitations without a reviewable checkpoint.
This is not a generic Outlook wrapper or a Microsoft Graph-first calendar connector. It is designed for the stricter enterprise case: local EWS access, room resources, explicit human approval, duplicate-send protection, and audit-friendly meeting lifecycle tools.
This project wraps Exchange calendar operations in a small MCP surface with:
- Room-aware scheduling: finds overlapping attendee availability and filters meeting rooms by Exchange discovery or local policy.
- Human-in-the-loop writes: create, update, and cancel operations require a preview plus a matching
confirmation_id. - Outlook Show As: create or update personal appointments with
show_as: "out_of_office"(EWSOOF). Empty attendees and rooms never send invitations; this does not configure email automatic replies. - Local-first credential handling: reads
.env, shell environment, or macOS Keychain without passing passwords through the model. - Structured recovery: setup failures return machine-readable error codes and user-facing setup commands.
- Auditability: lifecycle previews, confirmed actions, duplicate confirmations, in-progress states, and structured errors are written to a local JSONL audit log.
- Agent-ready instructions: the MCP server exposes tool descriptions and initialization guidance, and the repo includes a companion skill for agents that support skills.
What Agents Can Do
Documentation
- Usage Guide: local setup, Keychain, scheduling policy, smoke checks, CLI examples, MCP config, and npm wrapper details.
- Agent Guide: tool contracts, setup checks, attendee resolution, room selection, preview-confirm flows, audit log, and verification rules.
- Publishing: npm package and GitHub Actions release checklist.
Quick Start
1. Configure EWS
Create a .env file in the working directory or provide equivalent environment variables:
Use EWS_AUTH_TYPE=BASIC only if IT confirms Basic auth is enabled and the endpoint is protected by HTTPS.
2. Store the Password
For local development, the generic ACCOUNT_PASSWORD override works, but do not put it in MCP config:
On macOS, Keychain is safer than storing the password in .env or MCP client config:
Use the same Keychain service/account pair from any local tool that needs this account password:
If ACCOUNT_PASSWORD_KEYCHAIN_ACCOUNT is omitted, EWS_USERNAME is used. ACCOUNT_PASSWORD is only a generic local override; Keychain is preferred.
3. Add the MCP Server
For an npm-installed MCP client:
For a local checkout:
Optional: Add an Outlook-Style Signature
Meeting invites append a configured HTML signature by default. Ask the MCP tool for a copyable starter template:
Save the returned sample_html as ews-meeting-signature.html in the MCP working directory, then edit the name, email, title, logo URL, and disclaimer. You can also point to a different file:
Use an HTTPS logo URL recipients can access, or replace the <img> source with a base64 data URI. Set EWS_MEETING_SIGNATURE_ENABLED=false to temporarily stop appending the signature.
4. Verify Setup
The first command prints the configured endpoint and account without printing the password. The second command validates that the account can connect to EWS.
Agent Workflow
For incoming Outlook mail, search the configured inbox first and then read the selected message:
These mailbox tools are read-only. They do not mark messages as read, send mail, move messages, or change labels.
For the Thursday Jira weekly-report automation, compose the report from the Jira results and then call the dedicated self-only mail tool through this EWS MCP:
ews_send_email_to_self takes no recipient, to, cc, or bcc argument. It obtains the only recipient from EWS_EMAIL, sends through Exchange EWS, and appends the configured HTML signature by default. It does not write the email body or recipient address to the audit log. Reuse the same idempotency key for an automation retry; a completed or in-progress key will not call Exchange again.
Scheduling should follow this shape:
Recurring meetings are created by passing a structured recurrence object to both preview and confirmed create calls. For example, "every Monday and Wednesday" uses weekly recurrence:
"Every business day until 7/26" means Monday through Friday, without holiday or makeup-day handling:
If the user asks only for weekdays such as "every Monday and Wednesday" without an end date, occurrence count, or explicit no-end choice, ask for one before previewing.
Existing meeting changes should use exact calendar metadata:
Agents should never infer an event from subject text when multiple candidates are possible.
Safety Model
EWS Meeting MCP is designed around a simple rule: reads may be automated, and every write must have a narrow safety gate. Inbox reads are limited to explicit read-only search and read tools; meeting writes require preview plus explicit confirmation, while the self-only report send requires configured-self enforcement plus idempotency protection.
- Authentication failures are fail-fast: the EWS client uses
FailFast, and after one invalid-credential or locked-account response the MCP blocks all later EWS calls in that process. Fix the shared Keychain item and restart the MCP before trying again. - Confirmed create, update, and cancel tools refuse to run unless
confirm=trueis passed. - Confirmed tools require the exact
confirmation_idreturned by the matching preview. - Confirmed update and cancel tools also require the exact EWS
idandchangekeyfromews_find_calendar_eventsor a prior verified result. - Duplicate confirmed requests return
error_code: "duplicate_confirmation"with prior result metadata instead of calling EWS again. - In-progress confirmations return
error_code: "confirmation_in_progress"and should not be blindly retried. - Preview tools never save, move, delete, or send Exchange notifications.
ews_send_email_to_selfis the only mail-write capability. It is self-only, requiresEWS_EMAILto be configured, and sends a saved draft with EWSCreateItemfollowed bySendItem; it does not accept an arbitrary recipient.- Self-only sends require a stable, non-secret
idempotency_key. A duplicate or in-progress key is refused before another EWS send. If delivery is uncertain, inspect Sent Items before retrying. - Self-only send audit entries contain only action/status and non-sensitive delivery/idempotency metadata; they do not contain the configured email address, subject, body, password, or token.
- The local confirmation ledger and audit log store operation metadata, not EWS passwords.
If ews_setup_check returns ready: false, an agent should show the returned user_message or setup_command verbatim and stop. It should not ask for attendee emails or continue scheduling as a workaround.
Scheduling Policy
By default, scheduling tools look for ews-meeting-policy.json in the current working directory. Set EWS_MEETING_POLICY_FILE to point at a different file.
If no policy file exists, built-in defaults are used:
- workday:
10:00to18:00 - avoid:
12:00-14:00 - fallback rooms:
2-11,2-13,2-14,3-1,3-2,3-4
Live room selection uses Exchange room-list discovery when available, then falls back to configured rooms.
Example policy:
Policy rooms are merged with the default fallback rooms by alias. A matching alias overrides the default room, and new aliases are appended.
CLI Usage
The npm wrapper starts the MCP server by default:
Pass --cli to run the Python CLI through the same package:
Suggest a 30-minute meeting slot:
Preview a meeting invitation without sending anything:
Actually create the meeting and send invitations:
The --confirm flag is intentionally required. Without it, the command prints a dry-run preview and does not call EWS to create the event.
Calendar Show As / 不在辦公室
The create and update preview/confirmed MCP tools accept optional show_as:
Omitting it during creation keeps the existing Busy default; omitting it during updates preserves the stored status. Personal appointments use attendees: [] and rooms: [], and are saved with SendToNone. Existing meetings with attendees or resources retain their invitation behavior. Weekly recurring creation also accepts show_as; recurrence editing capabilities are unchanged.
Call ews_create_meeting_preview with, for example:
Show the user the start/end, timezone offsets, show_as, and invitation behavior. After explicit confirmation, call ews_create_meeting_confirmed with the same arguments plus confirm: true and the returned confirmation_id. Changing the status after preview invalidates that confirmation. Query/verification tools return the stored show_as and raw legacy_free_busy_status; use ews_verify_meeting to read the server after saving.
See Calendar status usage, MCP update steps, and live verification for update examples and a manual verification checklist. This feature affects the calendar status only, not mail automatic replies.
Local Development
For detailed setup, smoke tests, CLI examples, and MCP client configuration, see the Usage Guide.
The short development loop is:
Run the MCP server from a checkout:
Companion Skill
The repo includes a companion skill for agents that support skills:
See the Agent Guide for the same workflow in plain Markdown.
Troubleshooting
Operational troubleshooting lives in the Usage Guide. For agent behavior, setup-check handling, and lifecycle safety, see the Agent Guide.
Release
See Publishing.
License
MIT
Source: README.md at commit 2d7e020
Tools
0Version history
1- v0.1.17LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Meeting integrations
Meeting.ai
ai.meetingOfficial publisher
Remote MCP endpoint that lets an AI assistant record meetings and work with notes, transcripts, contacts and Drive.
MeetingBurner
Published by GitHub account phoneburner
MeetingBurner MCP lets an assistant join a live MeetingBurner meeting as a disclosed agent, reading the meeting as it happens and adding to it.

City Council & Public Meeting Transcripts
Published by GitHub account catalyst-labs-dev
Remote Apify MCP server that retrieves city council and county meeting transcripts with agenda timestamps and official votes.

Zovo Meeting Planner
Published by GitHub account theluckystrike
Zovo Meeting Planner's hosted MCP server; no sign-in required; Streamable HTTP; 2 tools.

Referna Meeting Recaps
Published by GitHub account referna-ai
A remote MCP server that lets an AI assistant read the member's personalized Referna meeting recaps, including mixer 1:1 checklists.