microsoft-todo-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@microsoft-todo-mcpshow my tasks from the Work list"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
microsoft-todo-mcp
A remote Model Context Protocol server
for Microsoft To Do, deployable on Azure and usable as a custom connector
in both ChatGPT and Claude. Multi-account (personal + work
Microsoft accounts), multi-profile (/mcp/personal, /mcp/work, or any
custom alias), single-owner administration.
Architecture at a glance
flowchart TB
subgraph Clients
ChatGPT[ChatGPT custom connector]
Claude[Claude custom connector]
Browser[Owner's browser -> /accounts]
end
App["microsoft-todo-mcp\n(Azure Container Apps, scale-to-zero)"]
KV[(Key Vault)]
ST[(Storage: Table + Blob)]
Graph[[Microsoft Graph]]
ChatGPT -- Bearer JWT --> App
Claude -- Bearer JWT --> App
Browser --> App
App --> KV
App --> ST
App -- per-connection token --> GraphFull details: docs/architecture.md.
Related MCP server: Microsoft To Do MCP
Why this exists
Microsoft To Do has no first-party remote MCP connector. This project lets you talk to your Microsoft To Do lists from ChatGPT or Claude, across however many personal/work Microsoft accounts you have, from a small self-hosted deployment you fully control (your own Azure subscription, your own OAuth authorization server, your own encrypted token storage).
Feature summary
Bulk task renaming with a default preview, stale-title checks and per-task verification; prepares location prefixes for alphabetical grouping in the To Do app — see
docs/bulk-rename.md.MCP tools: full read/write coverage of task lists, tasks, and checklist items, plus account/profile discovery tools — see the tool list in
src/tools/. Large lists get a one-call summary, multi-query search, cross-profile copy and verified bulk complete/delete — seedocs/large-lists.md.Multi-account routing that never guesses which Microsoft account a tool call should hit — see
docs/multi-account.md.Two independent OAuth systems, documented in
docs/oauth.md: this server as an OAuth 2.1 authorization server toward ChatGPT/Claude, and this server as an OAuth client toward Microsoft Entra ID/Graph.Encrypted token storage: AES-256-GCM MSAL token caches in Blob Storage, hashed OAuth codes/refresh tokens in Table Storage, secrets in Key Vault, all accessed via a least-privilege user-assigned managed identity — no client secrets or connection strings in the running production process.
Owner-only admin UI at
/accountsfor connecting accounts, binding profiles, reauthorizing, revoking, and deleting connections.Azure Container Apps, consumption plan, scale-to-zero — near-zero idle cost; see the cost estimate in
docs/azure-deployment.md.
Quick start (local development)
npm install
cp .env.example .env # fill in real values — see docs/azure-deployment.md
npm run devnpm run dev starts the server with tsx watch. You'll need a reachable
Storage account (Azurite works for local dev) and Key Vault (or adapt
src/config/secrets.ts for local secret sources) before OAuth flows will
actually work end-to-end — see docs/operations.md.
Deploying to Azure
./scripts/login.ps1
./scripts/validate-environment.ps1
$region = ./scripts/select-region.ps1
./scripts/provision.ps1 -ResourceGroupName rg-microsoft-todo-mcp -Location $region -ResourceSuffix prod01 `
-AzureClientId <graph-app-client-id> -AzureTenantId <tenant-id> `
-PublicBaseUrl https://todo.h-aa.dk -BudgetNotificationEmail you@example.com
./scripts/deploy.ps1 -ResourceGroupName rg-microsoft-todo-mcp -ContainerAppName todomcp-app-prod01 `
-Image ghcr.io/<you>/microsoft-todo-mcp:sha-abc123 -Build
./scripts/configure-domain.ps1 -ResourceGroupName rg-microsoft-todo-mcp `
-ContainerAppEnvironmentName todomcp-env-prod01 -ContainerAppName todomcp-app-prod01 `
-DomainName todo.h-aa.dk -Location $regionFull walkthrough: docs/azure-deployment.md.
DNS specifics: docs/dns.md.
Connecting ChatGPT / Claude
Connect at least one Microsoft account and bind a profile from
/accounts—docs/multi-account.md.Add a custom connector pointing at
/mcp/personal,/mcp/work, or/mcp(universal) —docs/chatgpt-setup.md/docs/claude-setup.md.
Security model
Summarized in docs/security.md; vulnerability
reporting in SECURITY.md.
Cost estimate
Roughly 10–25 DKK/month depending on whether Log Analytics is enabled
— see the itemized breakdown in
docs/azure-deployment.md.
Teardown
az group delete --name rg-microsoft-todo-mcp --yes --no-waitProject layout
src/ Server source (mcp, graph, oauth, storage, crypto, tools, admin, http)
infra/ Bicep: Container Apps (consumption, scale-to-zero), Key Vault, Storage, RBAC, budget
scripts/ PowerShell 7 provisioning/deploy/ops scripts
docs/ Architecture, deployment, DNS, OAuth, security, connector setup, operations
.github/ CI, CodeQL, secret scanning, OIDC-based deploy workflow
tests/ Vitest unit tests + Playwright OAuth flow testsLicense
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
ADHD-friendly task management MCP server for ChaTodo: organize tasks, lists, and priorities.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86113 npm246MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that enables AI assistants like Claude and Cursor to interact with Microsoft To Do via the Microsoft Graph API.93 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server to read and manage your Microsoft To Do tasks through the Microsoft Graph To Do API.1MIT
- AlicenseAqualityDmaintenanceA hardened MCP server that lets you manage Microsoft To Do tasks via natural language in Claude Desktop, with OS-keychain token storage and no client secret.13ISC