MCP server for Outlook integration with OAuth authentication, message search, and batch operations
Strong foundation with 11 well-named tools covering email operations. All tools have descriptions (avg 85 chars) and input schemas with typed parameters. Naming follows verb_noun convention (message-get, label-add, message-search). However, parameter descriptions are sparse, many lack detail on constraints, formats, or dependencies. Output schemas are not documented. Error handling guidance is absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Batch operations (label-add, label-delete, message-mark-read) accept arrays but lack per-item error reporting.
List all available categories (labels) in Outlook mailbox
Add a label/category to one or more messages
Remove a label/category from one or more messages
List all available labels/categories in Outlook mailbox
Retrieve a single message by ID with full content
Mark one or more messages as read
Move one or more messages to trash/deleted items
Send a reply to a message
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., messageIds from search results for use in label-add). Violates pattern:tool requirement.
Batch operations (label-add, label-delete, message-mark-read) lack per-item error reporting. If one messageId fails, the entire operation fails with no indication which items succeeded. Violates pattern:response-shaper.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. message-send and message-respond are destructive; categories-list and labels-list are read-only. Clients cannot infer safety without annotations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Search for messages using Outlook query syntax with filters, pagination, and sorting
Send a new email message
Export search results or message list to CSV format
Parameter descriptions lack constraint details. 'limit' in message-search states 'default: 10, max: 1000' but no minimum. 'sortBy' enum is clear, but 'query' parameter lacks format guidance (Outlook KQL syntax not explained). Violates pattern:constrained-input.
No error handling guidance. Tools lack recovery hints (e.g., 'If message not found, try message-search first'). No categorization of errors as retryable vs user-fixable. Violates pattern:recovery-guide.