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
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/.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.
Related MCP Connectors
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86190 npm244MIT
- 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.50 npmMIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server to read and manage your Microsoft To Do tasks through the Microsoft Graph To Do API.MIT
- FlicenseAqualityCmaintenanceA 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.13-