auth-statusLABSCO SUMMARY
The whole To Do surface, once Azure is set up.
Lists, tasks and subtasks are all covered with real create-read-update-delete rather than a read-only view, and the OData parameters mean filtering happens on Microsoft's side instead of in the model's context. The cost is front-loaded: an Azure App Registration with consented Graph permissions, done once before anything works.
What it is
An MCP server for Microsoft To Do built on the Microsoft Graph v1.0 endpoints, authenticating through OAuth 2.0 with the PKCE flow. It covers the full shape of the product: task lists, tasks with their properties, and the checklist items beneath a task.
What you get
- Task lists retrieved with their metadata, then created, renamed or deleted —
get-task-lists,create-task-list,update-task-list,delete-task-list - Tasks filtered, sorted and paged with OData parameters
$filter,$select,$orderby,$top,$skipand$count—get-tasks - Tasks written with title, description, due date, start date, importance, reminders, status and categories —
create-task,update-task,delete-task - Subtasks under a task listed, added, edited for text or completion, and removed —
get-checklist-items,create-checklist-item,update-checklist-item,delete-checklist-item - Current authentication state, token expiry and account type —
auth-status
Requirements
An Azure App Registration you create yourself, with delegated Tasks.Read, Tasks.ReadWrite and User.Read granted admin consent and a redirect URI of exactly http://localhost:3000/callback. CLIENT_ID, CLIENT_SECRET and TENANT_ID go in .env; TENANT_ID takes organizations, consumers, common, or a specific tenant id. Tokens land in tokens.json and refresh 5 minutes before expiry — MSTODO_TOKEN_FILE relocates that file, and MS_TODO_ACCESS_TOKEN / MS_TODO_REFRESH_TOKEN pass them in directly. Node.js 16 or higher; the npm package is microsoft-todo-mcp-server at 1.1.3 and also installs as mstodo. Personal outlook.com, hotmail.com and live.com accounts hit a Microsoft-side limit and can return MailboxNotEnabledForRESTAPI; work and school accounts have full API access.
Setup effort
Follow the published steps
USE CASES
Turning a conversation into scheduled tasks
Create tasks with due dates, importance and reminders in the right list, without leaving the chat window.
Reviewing what is actually due this week
Pull tasks with an OData filter and ordering so only the relevant items reach the conversation.
Breaking a task into steps
Add checklist items under an existing task and tick them off as work proceeds.
Working out why nothing comes back
Check the current token state, its expiry and which kind of Microsoft account is connected.
15 tools
Listed in project docs. Your client may show a different list.
get-task-listscreate-task-listupdate-task-listdelete-task-listget-taskscreate-taskupdate-taskdelete-taskget-checklist-itemscreate-checklist-itemupdate-checklist-itemdelete-checklist-itemget-task-lists-organizedarchive-completed-tasksBEFORE YOU INSTALL
What to know first
Tools you get
15 tools named in the project's documentation.
Requires
- npx on PATH
- Node.js 16 or later
- pnpm (the auth and create-config steps run with it)
- CLIENT_ID in your environment
- CLIENT_SECRET in your environment
- TENANT_ID in your environment
INSTALLATION
Connect your client
Server setup
Setup
# 1. Azure Portal → App registrations: create an app with redirect URI http://localhost:3000/callback,
# a client secret, and delegated Tasks.Read, Tasks.ReadWrite and User.Read (grant admin consent)
git clone https://github.com/jordanburke/microsoft-todo-mcp-server.git
cd microsoft-todo-mcp-server
pnpm install
# 2. Put CLIENT_ID, CLIENT_SECRET, TENANT_ID and REDIRECT_URI=http://localhost:3000/callback in a .env file here
pnpm run auth # signs you in through the browser and writes tokens.json
pnpm run create-config # writes mcp.json with your tokensnpm
npm install -g microsoft-todo-mcp-serverMCP Clients
Claude Desktop
{
"mcpServers": {
"microsoftTodo": {
"command": "npx",
"args": [
"--yes",
"microsoft-todo-mcp-server"
],
"env": {
"MS_TODO_ACCESS_TOKEN": "<YOUR_MS_TODO_ACCESS_TOKEN>",
"MS_TODO_REFRESH_TOKEN": "<YOUR_MS_TODO_REFRESH_TOKEN>"
}
}
}
}<YOUR_MS_TODO_ACCESS_TOKEN> and <YOUR_MS_TODO_REFRESH_TOKEN> are the tokens that pnpm run auth wrote to tokens.json. The mcp.json from pnpm run create-config already has them filled in.
Cursor
After pnpm run create-config (in the steps above), open the mcp.json it wrote in the cloned folder
Add its microsoftTodo entry to Cursor's MCP configuration: Cursor Settings → MCP, or the file ~/.cursor/mcp.json