Outlook Semantic MCP - Operator Manual
5 min read
Outlook Semantic MCP - Operator Manual
Overview
This guide provides IT operators with the technical information needed to deploy, configure, and maintain the Outlook Semantic MCP Server.
Note: The Outlook Semantic MCP Server is a semantic MCP server. It exposes MCP tools that allow AI assistants to search and retrieve email content. In MicrosoftGraphAndUniqueApi mode (the default), it also runs background pipelines that ingest emails from connected Microsoft 365 accounts into the Unique knowledge base via Microsoft Graph webhooks and RabbitMQ. In MicrosoftGraph mode, no ingestion runs — emails are queried live from Microsoft Graph.
For end-user and administrator documentation, see the Outlook Semantic MCP Overview.
Deployment Modes
The server supports two deployment modes set via MCP_BACKEND. Choose your mode before following any other step in this guide — prerequisites, configuration, and verification differ by mode.
|
| |
|---|---|---|
Search | Semantic (Unique KB) + KQL (Graph), merged | KQL (Graph) only |
Ingestion | Full sync + live catch-up | None |
Tools | 10 standard + 4 debug | 6 standard |
Requires Unique KB | Yes | Yes |
Requires RabbitMQ | Yes | Yes |
Folder filtering | Supported | Not supported |
See Configuration — MCP_BACKEND for details.
Documentation
Document | Description |
|---|---|
Kubernetes deployment, Helm charts, database migration | |
Environment variables, Helm values, service auth modes | |
Microsoft Entra ID app registration, OAuth setup | |
Setting up a development environment | |
Recovery runbook for DB, RabbitMQ, and Knowledge Base failures | |
Frequently asked questions and common mistakes |
Architecture Overview
The diagram below shows the full Mode A (MicrosoftGraphAndUniqueApi) topology. In Mode B (MicrosoftGraph), all infrastructure components are identical but the ingestion arrows to the Unique Knowledge Base are inactive — no email content is ingested.

The Outlook Semantic MCP Server runs as a single pod that handles MCP tool requests, receives Microsoft Graph webhook notifications, processes email via RabbitMQ consumers, stores state in PostgreSQL, and ingests email content into the Unique knowledge base.
Quick Start
Unique SaaS
After granting admin consent, provide the following to Unique Support or Solution Engineering:
[ ] Backend mode — controls how email search works; see
MCP_BACKENDfor the full trade-offs:MicrosoftGraph— live KQL search directly against Microsoft Graph; no email ingestion into Unique KB; lighter deploymentMicrosoftGraphAndUniqueApi(default) — emails ingested into Unique KB; semantic search merged with live KQL results; heavier but richer[ ] Delegated access scan — only relevant if your organization uses Exchange mailbox delegation (i.e. users who have been granted access to another user's mailbox or folders); see
DELEGATED_ACCESS_SCAN:disabled(default) — no delegation scanningfullAccessOnly— Full Access (Read & Manage) grants via Exchange admingranularAccess— folder-level grants (e.g. shared Inbox or RFQ folder); subsumesfullAccessOnly
Unique will provide you with the MCP server endpoint URL once the deployment is ready.
Self-Hosted
Follow these steps to go from zero to a running deployment:
Mode A: MicrosoftGraphAndUniqueApi
Register Microsoft Entra ID application — Create an app registration with the required delegated permissions. See Authentication Guide.
Create Zitadel service account — Create a service user with the
KB_Adminrole in Zitadel. Required for bothcluster_localandexternalauth modes. See Zitadel Service Account.Provision infrastructure — Set up PostgreSQL 17+, RabbitMQ 4+, and a Kubernetes namespace. See Deployment — Prerequisites.
Create Kubernetes secrets — Generate cryptographic secrets and store them as Kubernetes Secrets. See Deployment — Required Secrets.
Configure Helm values — Create a minimal
values.yamlwith your secrets, Microsoft client ID, and Unique API endpoints. See Configuration Guide.Deploy with Helm — Install the chart. See Deployment — Install.
Verify the deployment is working:
Check the OAuth metadata endpoint:
curl https://<your-domain>/.well-known/oauth-authorization-serverConnect with an MCP client and complete the OAuth flow
Call
verify_inbox_connectionto confirm the webhook subscription isactiveSend a test email to the connected account, wait a moment, then use
search_emailsto confirm it appears(Optional) Enable delegated access — If your organization uses Exchange mailbox delegation (Full Access or folder-level), set
delegatedAccessScantofullAccessOnlyorgranularAccessin your Helm values. Both users (delegate and owner) must connect their accounts for delegated search to work. See Configuration — DELEGATED_ACCESS_SCAN.
Mode B: MicrosoftGraph
Register Microsoft Entra ID application — same as Mode A. See Authentication Guide.
Provision infrastructure — PostgreSQL 17+, RabbitMQ 4+, and Unique Knowledge Base (all three are required, same as Mode A). See Deployment — Prerequisites.
Create Kubernetes secrets — same as Mode A.
UNIQUE_ZITADEL_CLIENT_SECRETis only needed when usingexternalservice auth mode.Configure Helm values — set
mcpConfig.app.mcpBackend: MicrosoftGraph. IncludemcpConfig.unique(required). OmitmcpConfig.ingestionentirely. See Mode B Minimal Values Example.Deploy with Helm — same command as Mode A. See Deployment — Install.
Verify the deployment is working:
Check the OAuth metadata endpoint:
curl https://<your-domain>/.well-known/oauth-authorization-serverConnect with an MCP client and complete the OAuth flow
Call
search_emailswith a simple KQL query to confirm it returns results from Microsoft Graph.
Infrastructure Requirements
See Deployment — Prerequisites for the full infrastructure requirements and version details.
Deployment Checklist
Infrastructure
Microsoft Entra ID
Application
DELEGATED_ACCESS_SCAN configured if using Exchange mailbox delegation (Mode A optional)Verification
sync_progress after full sync. Mode B: immediately after OAuth.)Security Checklist
Before going to production, verify the following:
1incompleteENCRYPTION_KEY is a cryptographically random 64-character hex string2incomplete AUTH_HMAC_SECRET is a cryptographically random 64-character hex string3incomplete MICROSOFT_WEBHOOK_SECRET is a cryptographically random 128-character string4incomplete See Configuration — Required Secrets for generation commands and format details5incomplete All secrets stored in Kubernetes Secrets (not ConfigMaps)6incomplete TLS termination configured at ingress7incomplete Network policies restrict pod-to-pod communication8incomplete Log aggregation in place (tokens are not logged)9incomplete Monitoring alerts configured for authentication failuresFor the full security architecture, see Security Documentation. For a breakdown of what data is stored where, see Data Classification and Flow.
Scaling Considerations
Directory sync processes a maximum of 10 users per scheduled run (every 5 minutes, configurable via
DIRECTORY_SYNC_CRON_SCHEDULE). For large deployments with many connected users, account for the fact that folder sync updates are distributed across multiple runs.