mcp-planner
Click on "Install 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., "@mcp-plannercreate a task 'Prepare quarterly report' in the Finance plan"
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.
mcp-planner
MCP server for Microsoft Planner via the Microsoft Graph API. Find groups and plans, list buckets and tasks, and create, update, assign, complete, or delete tasks — including descriptions and checklists — with Planner's ETag concurrency handled automatically.
Sibling project to mcp-itglue and mcp-connectwise-psa — same architecture.
Tools
Tool | Description |
| Find Microsoft 365 groups (Teams) by name → group ID |
| Find a user by name/UPN → user ID for assignments |
| List plans owned by a group |
| Plan + its buckets |
| Create a bucket in a plan |
| Tasks in a plan or bucket (filter by assignee, open/completed) |
| All tasks assigned to a user, across plans |
| Task with description and checklist |
| Create task (bucket, due date, priority, assignees, description) |
| Update title/bucket/due/priority/progress/assignees |
| Update description; add or (un)check checklist items |
| Permanently delete a task |
| Search a curated catalog of the /planner, /groups, /users Graph surface |
| Read-only GET for any Graph v1.0 path under /planner, /groups, /users |
† Advanced toolset (opt-in, off by default) — an escape hatch for Graph surface the curated tools don't wrap. Enable with PLANNER_ADVANCED_TOOLSET=true or --advanced. graph_get is verb-locked to GET, rejects /beta, and only reaches the three path prefixes above, so a shared app registration's other permissions (e.g. mail) stay out of reach.
Related MCP server: mcp-planner-premium
Setup
1. Entra ID app registration
Entra admin center → App registrations → New registration
API permissions → Application permissions → add
Tasks.ReadWrite.All,GroupMember.Read.All,User.Read.All→ Grant admin consentCertificates & secrets → New client secret — note the value
2. Run
MS_TENANT_ID=<tenant> MS_CLIENT_ID=<client-id> MS_CLIENT_SECRET=<secret> npx -y mcp-plannerClaude Code:
claude mcp add planner --env MS_TENANT_ID=<tenant> --env MS_CLIENT_ID=<client-id> --env MS_CLIENT_SECRET=<secret> -- npx -y mcp-plannerHTTP mode
npx -y mcp-planner --transport http --port 3000Sessions authenticate per-request (BYOK) with x-ms-tenant-id + x-ms-client-id plus either x-ms-client-secret (app-only) or x-ms-refresh-token (delegated — see below), or fall back to the MS_* environment credentials when set. When both a secret and a refresh token arrive, the refresh token wins (header-overlay proxies can add but not remove headers). Health probe at GET /health.
Delegated mode — act as the signed-in user
App-only sessions act as the app registration; delegated sessions act as a user: their Planner permissions apply and every write is attributed to them.
A separate, public app registration: Authentication → Allow public client flows → Yes; API permissions → Delegated
Tasks.ReadWrite,Group.Read.All,User.ReadBasic.All(+ admin consent where the tenant requires it).Each user signs in once via the device-code helper and keeps the printed refresh token:
node scripts/device-login.mjs --tenant <tenant-id> --client <public-client-id>Use
MS_REFRESH_TOKENinstead ofMS_CLIENT_SECRET(stdio), or thex-ms-refresh-tokenheader (HTTP). Behind the MCP gateway, register it as a personal credential (fieldx-ms-refresh-token).
The refresh token is a secret — it acts as you — and stays valid ~90 days past its last use; re-run the helper when it expires.
Docker
docker build -t mcp-planner .
docker run -p 3000:3000 -e MS_TENANT_ID=... -e MS_CLIENT_ID=... -e MS_CLIENT_SECRET=... mcp-plannerAccess model
No MCP-level role gating: the Entra app registration's granted Graph permissions are the access control. Point sessions at different app registrations (BYOK headers) to scope what they can do.
Notes
Planner requires an
If-MatchETag on every update/delete — the tools fetch the current resource and pass its ETag automatically. On a 412 (concurrent change), just retry.Priority mapping: urgent=1, important=3, medium=5, low=9 (Graph uses 0–10).
Progress: not started (0), in progress (50), completed (100).
Development
npm install
npm run dev # stdio
npm run dev:http # http
npm test
npm run build
npm run bundle # Claude Desktop .mcpbLicense
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAn unofficial MCP server that connects AI assistants to Microsoft Planner, enabling natural language task management such as creating tasks, organizing plans, and managing buckets.10MIT
- AlicenseNot gradedqualityBmaintenanceA self-hosted MCP server that exposes Microsoft Planner Premium structural writes via Dataverse PSS V2 APIs as MCP tools, running in the signed-in user's delegated context.MIT
- AlicenseAqualityCmaintenanceMCP server for Microsoft To Do that enables managing task lists, tasks, and checklist items via the Microsoft Graph API with zero-config authentication.131Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to list, view details of, and update Microsoft Planner tasks grouped by bucket.1MIT
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
The official MCP Server from Mia-Platform to interact with Mia-Platform Console
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mspstack/mcp-planner'
If you have feedback or need assistance with the MCP directory API, please join our Discord server