Read-only access to Outlook / Microsoft 365 email via Microsoft Graph v1.0. Tools: list messages, get message, list folders, search messages, get profile.
Server has well-structured tool definitions with clear naming (verb_noun pattern) and comprehensive descriptions (avg 180 chars, within baseline 194). All 5 tools have input schemas with type declarations and parameter descriptions. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is minimal (only connection_required and HTTP status codes returned). No enum constraints on folder/search parameters. Missing idempotency guidance and confirmation patterns for read-only operations.
Get the full content of a single Outlook / Microsoft 365 email message by its ID, including subject, sender, recipients (to/cc), received time, and the full body (HTML or text). Use after outlook_list_messages or outlook_search_messages to read an email in full.
Get the signed-in user's Microsoft 365 / Outlook profile: display name, email address, user principal name, job title, and mobile phone. Use to identify whose mailbox is connected.
List the mail folders in an Outlook / Microsoft 365 mailbox, with display names, unread counts, and total item counts. Use to discover folder names/IDs before listing messages.
List email messages from an Outlook / Microsoft 365 mailbox folder (default: inbox). Returns compact message summaries (subject, sender, received time, preview, read status, attachment flag). Supports keyword search and unread-only filtering. Use to browse a user's Outlook email.
Search across an entire Outlook / Microsoft 365 mailbox by keyword. Returns matching email summaries (subject, sender, received time, preview). Use to find emails by topic, sender, or content regardless of folder.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining or data extraction. compactMessage() and full message responses are visible in code but not declared in tool definitions.
No enum constraints on folder parameter in outlook_list_messages. Description mentions 'well-known names like inbox, sentitems, drafts, deleteditems' but does not enforce them. LLMs may pass invalid folder names, causing API errors.
Error responses lack recovery guidance. gFetch() returns { error: 'connection_required', message: '...' } or { error: <status>, message: <body> }, but does not tell LLM what to do next (retry? ask user? check token?). No error classification (retryable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No pagination support. outlook_list_messages and outlook_search_messages accept 'top' parameter but do not return total count, next_cursor, or offset. Large result sets risk context window exhaustion.
Transport mechanism unknown. package.json lists no dependencies (only typescript devDep). No evidence of HTTP server, SSE, or STDIO transport implementation. Cannot assess protocol readiness without seeing transport layer.