MCP server for Microsoft Planner via Microsoft Graph with Entra ID OBO Authentication
Microsoft Planner MCP demonstrates solid tool design with consistent verb-noun naming, clear parameter descriptions, and proper schema definition for all 8 tools. All tools follow action-based naming conventions (list_, create_, delete_). Parameter descriptions are comprehensive and include constraints where relevant. Output schemas are partially documented through implementation, though not explicitly in the code samples provided. Error handling is present via ErrorHandlingMiddleware but tool-level error guidance is minimal. The server uses tool annotations (destructiveHint/readOnlyHint) correctly, aligning with current MCP patterns. Main gaps: output field documentation is not visible in the provided code, some tools lack explicit per-item error recovery guidance, and no confirmation/dry-run pattern for destructive operations.
Create a new bucket in a Planner plan.
Create a new Planner plan for a Microsoft 365 group.
Delete a Planner bucket.
Return the authenticated user's profile from Microsoft Graph.
List all buckets in a Planner plan.
List all Planner plans belonging to a Microsoft 365 group.
List all Microsoft 365 groups the authenticated user is a member of. Note: with default permissions, displayName and other properties are not returned, but they can be used in filter and search.
Output schemas not explicitly documented in provided code. While input schemas are comprehensive, return value structures are not visible. LLMs need explicit documentation of what fields each tool returns to plan downstream operations effectively.
Destructive operations (delete_bucket) lack confirmation/dry-run pattern. Agents should be able to preview action or request confirmation before irreversible operations execute. The description mentions automatic retry on stale etag (412/409) but no explicit recovery guidance for other errors.
list_my_groups, list_my_plans, and list_group_plans accept optional 'select' and 'filter' parameters but lack explicit pagination (limit/offset/page_size). No documented max result count. Large group/plan lists could exceed context window without pagination controls.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 85 | 2026-07-28+ | v2 |
List Planner plans explicitly shared with the authenticated user (via plannerPlanDetails.sharedWith). This does NOT return all plans in groups the user belongs to — use list_group_plans for that.
get_me tool has very minimal description ('Return the authenticated user's profile from Microsoft Graph'). While technically adequate, it lacks context on when an agent would call it vs using info from list_my_plans/list_my_groups, and what specific fields are returned.
Parameter descriptions reference returned IDs (e.g., 'The ID of the plan to list buckets for (from list_my_plans or list_group_plans)') but output schemas are not visible in code to verify these IDs are actually returned by referenced tools. Chaining IDs must be present in upstream tool responses.