# doublebash/outlook-mcp architecture

> Architecture diagram of the GitHub repository doublebash/outlook-mcp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/doublebash/outlook-mcp
- Repository: https://github.com/doublebash/outlook-mcp

## Overview

Outlook MCP Server exposes Microsoft 365 operations as MCP tools: a client invokes a named tool, the Worker dispatches it to a domain handler, and handlers use Microsoft Graph to read or mutate mailbox data. Authentication stores encrypted Microsoft tokens in Cloudflare KV and supplies access tokens to Graph requests. The graph preserves the documented mail, calendar, contacts, tasks, files, Teams meeting, and settings capabilities. Several domain handlers were not excerpted, so their internal behavior is not expanded beyond documented capabilities and indexed imports.

Main entry points: [`src/graph.ts`](https://github.com/doublebash/outlook-mcp/blob/main/src/graph.ts) (Graph client), [`src/tools/index.ts`](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/index.ts) (Tool dispatch), [`src/tools/calendar.ts`](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/calendar.ts) (Calendar tools), [`src/index.ts`](https://github.com/doublebash/outlook-mcp/blob/main/src/index.ts) (Worker entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["MCP runtime"]
  node_worker["Worker entry<br/>[index.ts]"]
  node_dispatch["Tool dispatch<br/>[index.ts]"]
  node_shared["Shared tool utilities<br/>[_shared.ts]"]
  node_sanitize["Graph data sanitizers<br/>[sanitize.ts]"]
end

subgraph group_identity["Identity and Graph"]
  node_auth[("OAuth token store<br/>[auth.ts]")]
  node_graph["Graph client<br/>[graph.ts]"]
end

subgraph group_mail["Mail"]
  node_email["Email tools<br/>[email.ts]"]
  node_attachments["Email attachments<br/>[attachments.ts]"]
  node_emailhelpers["Email composition helpers<br/>[email-helpers.ts]"]
  node_signature["Signature handling<br/>[signature.ts]"]
end

subgraph group_organize["Outlook data"]
  node_calendar["Calendar tools<br/>[calendar.ts]"]
  node_calendarhelpers["Calendar helpers"]
  node_contacts["Contact tools<br/>[contacts.ts]"]
  node_tasks["Task tools<br/>[tasks.ts]"]
  node_mailbox["Mailbox settings<br/>[mailbox.ts]"]
end

subgraph group_collab["Files and meetings"]
  node_files["OneDrive tools<br/>[files.ts]"]
  node_meetings["Teams meeting tools<br/>[meetings.ts]"]
  node_transcripts["Transcript helpers"]
end

node_client(("MCP client"))
node_microsoft{{"Microsoft Graph"}}
node_kv[("Cloudflare KV")]

node_client -->|"calls MCP"| node_worker
node_worker -->|"dispatches tools"| node_dispatch
node_dispatch -->|"routes calls"| node_email
node_dispatch -->|"routes calls"| node_attachments
node_dispatch -->|"routes calls"| node_calendar
node_dispatch -->|"routes calls"| node_contacts
node_dispatch -->|"routes calls"| node_tasks
node_dispatch -->|"routes calls"| node_mailbox
node_dispatch -->|"routes calls"| node_files
node_dispatch -->|"routes calls"| node_meetings
node_worker -->|"uses OAuth"| node_auth
node_worker -->|"uses Graph client"| node_graph
node_auth -->|"stores tokens"| node_kv
node_graph -->|"gets access token"| node_auth
node_graph -->|"sends Graph requests"| node_microsoft
node_email -->|"reads and writes"| node_graph
node_attachments -->|"reads and writes"| node_graph
node_calendar -->|"reads and writes"| node_graph
node_contacts -->|"reads and writes"| node_graph
node_tasks -->|"reads and writes"| node_graph
node_mailbox -->|"reads and writes"| node_graph
node_files -->|"reads and writes"| node_graph
node_meetings -->|"reads and writes"| node_graph
node_email -->|"builds messages"| node_emailhelpers
node_email -->|"adds signatures"| node_signature
node_calendar -->|"builds recurrence"| node_calendarhelpers
node_calendar -->|"adds signatures"| node_signature
node_emailhelpers -->|"fetches OneDrive bytes"| node_graph
node_signature -->|"sanitizes HTML"| node_emailhelpers
node_meetings -->|"uses transcript helpers"| node_transcripts
node_tasks -->|"formats task lists"| node_sanitize
node_files -->|"formats file lists"| node_sanitize
node_contacts -->|"formats contacts"| node_sanitize
node_calendar -->|"formats events"| node_sanitize
node_dispatch -.->|"uses shared schemas"| node_shared

click node_worker "https://github.com/doublebash/outlook-mcp/blob/main/src/index.ts"
click node_dispatch "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/index.ts"
click node_shared "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/_shared.ts"
click node_auth "https://github.com/doublebash/outlook-mcp/blob/main/src/auth.ts"
click node_graph "https://github.com/doublebash/outlook-mcp/blob/main/src/graph.ts"
click node_email "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/email.ts"
click node_attachments "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/attachments.ts"
click node_emailhelpers "https://github.com/doublebash/outlook-mcp/blob/main/src/email-helpers.ts"
click node_signature "https://github.com/doublebash/outlook-mcp/blob/main/src/signature.ts"
click node_calendar "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/calendar.ts"
click node_calendarhelpers "https://github.com/doublebash/outlook-mcp/blob/main/src/calendar-helpers.ts"
click node_contacts "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/contacts.ts"
click node_tasks "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/tasks.ts"
click node_mailbox "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/mailbox.ts"
click node_files "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/files.ts"
click node_meetings "https://github.com/doublebash/outlook-mcp/blob/main/src/tools/meetings.ts"
click node_transcripts "https://github.com/doublebash/outlook-mcp/blob/main/src/transcript-helpers.ts"
click node_sanitize "https://github.com/doublebash/outlook-mcp/blob/main/src/sanitize.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_worker,node_dispatch,node_shared,node_sanitize,node_client toneBlue
class node_auth,node_graph,node_kv toneAmber
class node_email,node_attachments,node_emailhelpers,node_signature toneMint
class node_calendar,node_calendarhelpers,node_contacts,node_tasks,node_mailbox toneRose
class node_files,node_meetings,node_transcripts,node_microsoft toneIndigo
```

## Components

### MCP runtime

- [Worker entry](https://github.com/doublebash/outlook-mcp/blob/main/src/index.ts): `src/index.ts`
- [Tool dispatch](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/index.ts): `src/tools/index.ts`
- [Shared tool utilities](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/_shared.ts): `src/tools/_shared.ts`
- [Graph data sanitizers](https://github.com/doublebash/outlook-mcp/blob/main/src/sanitize.ts): `src/sanitize.ts`

### Identity and Graph

- [OAuth token store](https://github.com/doublebash/outlook-mcp/blob/main/src/auth.ts): `src/auth.ts`
- [Graph client](https://github.com/doublebash/outlook-mcp/blob/main/src/graph.ts): `src/graph.ts`

### Mail

- [Email tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/email.ts): `src/tools/email.ts`
- [Email attachments](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/attachments.ts): `src/tools/attachments.ts`
- [Email composition helpers](https://github.com/doublebash/outlook-mcp/blob/main/src/email-helpers.ts): `src/email-helpers.ts`
- [Signature handling](https://github.com/doublebash/outlook-mcp/blob/main/src/signature.ts): `src/signature.ts`

### Outlook data

- [Calendar tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/calendar.ts): `src/tools/calendar.ts`
- [Calendar helpers](https://github.com/doublebash/outlook-mcp/blob/main/src/calendar-helpers.ts): `src/calendar-helpers.ts`
- [Contact tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/contacts.ts): `src/tools/contacts.ts`
- [Task tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/tasks.ts): `src/tools/tasks.ts`
- [Mailbox settings](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/mailbox.ts): `src/tools/mailbox.ts`

### Files and meetings

- [OneDrive tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/files.ts): `src/tools/files.ts`
- [Teams meeting tools](https://github.com/doublebash/outlook-mcp/blob/main/src/tools/meetings.ts): `src/tools/meetings.ts`
- [Transcript helpers](https://github.com/doublebash/outlook-mcp/blob/main/src/transcript-helpers.ts): `src/transcript-helpers.ts`

### Other components

- **MCP client**
- **Microsoft Graph**
- **Cloudflare KV**

## Connections

- MCP client → Worker entry: calls MCP (evidence: `README.md`)
- Worker entry → Tool dispatch: dispatches tools (evidence: `src/index.ts`)
- Tool dispatch → Email tools: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Email attachments: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Calendar tools: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Contact tools: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Task tools: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Mailbox settings: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → OneDrive tools: routes calls (evidence: `src/tools/index.ts`)
- Tool dispatch → Teams meeting tools: routes calls (evidence: `src/tools/index.ts`)
- Worker entry → OAuth token store: uses OAuth (evidence: `src/index.ts`)
- Worker entry → Graph client: uses Graph client (evidence: `src/index.ts`)
- OAuth token store → Cloudflare KV: stores tokens (evidence: `src/auth.ts`)
- Graph client → OAuth token store: gets access token (evidence: `src/graph.ts`)
- Graph client → Microsoft Graph: sends Graph requests (evidence: `src/graph.ts`)
- Email tools → Graph client: reads and writes (evidence: `src/tools/email.ts`)
- Email attachments → Graph client: reads and writes (evidence: `src/tools/attachments.ts`)
- Calendar tools → Graph client: reads and writes (evidence: `src/tools/calendar.ts`)
- Contact tools → Graph client: reads and writes (evidence: `src/tools/contacts.ts`)
- Task tools → Graph client: reads and writes (evidence: `src/tools/tasks.ts`)
- Mailbox settings → Graph client: reads and writes (evidence: `src/tools/mailbox.ts`)
- OneDrive tools → Graph client: reads and writes (evidence: `src/tools/files.ts`)
- Teams meeting tools → Graph client: reads and writes (evidence: `src/tools/meetings.ts`)
- Email tools → Email composition helpers: builds messages (evidence: `src/tools/email.ts`)
- Email tools → Signature handling: adds signatures (evidence: `src/tools/email.ts`)
- Calendar tools → Calendar helpers: builds recurrence (evidence: `src/tools/calendar.ts`)
- Calendar tools → Signature handling: adds signatures (evidence: `src/tools/calendar.ts`)
- Email composition helpers → Graph client: fetches OneDrive bytes (evidence: `src/email-helpers.ts`)
- Signature handling → Email composition helpers: sanitizes HTML (evidence: `src/signature.ts`)
- Teams meeting tools → Transcript helpers: uses transcript helpers (evidence: `src/tools/meetings.ts`)
- Task tools → Graph data sanitizers: formats task lists (evidence: `src/tools/tasks.ts`)
- OneDrive tools → Graph data sanitizers: formats file lists (evidence: `src/tools/files.ts`)
- Contact tools → Graph data sanitizers: formats contacts (evidence: `src/tools/contacts.ts`)
- Calendar tools → Graph data sanitizers: formats events (evidence: `src/tools/calendar.ts`)
- Tool dispatch → Shared tool utilities: uses shared schemas
