A JSR-based TypeScript MCP package for personal Microsoft Graph access via CLI
MS Graph MCP has well-structured tool definitions with consistent naming (verb_noun pattern) and complete input schemas. All 6 tools follow the verb_noun convention (mail_list_messages, calendar_create_event, onedrive_*). Descriptions are present and adequate (50-100 chars), though some lack actionable context for LLM selection. Input schemas are properly typed with JSON Schema. However, output schemas are not documented in the source, parameter descriptions lack constraint details (e.g., OData filter syntax), and error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Missing pagination guidance for list operations.
Create a new event in the signed-in user's calendar
List email messages from the signed-in user's mailbox
Create a folder in OneDrive root or under a specific parent
Get metadata for a OneDrive file or folder by path or item ID
List files and folders from OneDrive root or a specific folder
Search OneDrive for files and folders
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what fields does mail_list_messages return? Does it include sender, subject, body, date?). Breaks tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY vs WRITE). LLMs cannot infer safety properties and may retry destructive operations.
Parameter descriptions lack constraint details. 'OData $filter expression' is vague, LLMs need examples or syntax guidance. 'Maximum number of messages to return' lacks min/max bounds. Invites invalid input.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
List operations (mail_list_messages, onedrive_list_items, onedrive_search_items) lack pagination guidance. No mention of result limits, next_cursor, or total_count. Large result sets risk context window exhaustion.
No error handling guidance. Tool descriptions do not explain what to do if a folder is not found, authentication fails, or quota is exceeded. LLMs cannot self-correct or retry intelligently.