Provides access to Microsoft Outlook email, calendar, and contacts through Microsoft Graph API with a modular architecture
Server has 7 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-200 chars range, mostly adequate), and input schemas are present with type definitions. However, naming conventions are inconsistent (handle_* prefix violates verb_noun pattern), parameter descriptions lack constraint details, output schemas are undocumented, and error handling is minimal. No tool annotations (readOnlyHint/destructiveHint). The send_email tool is marked WRITE but lacks confirmation/dry-run pattern. Most tools are READ_ONLY discovery/retrieval, which is appropriate, but the overall design prioritizes API passthrough over LLM-optimized composition.
About tool handler - provides information about the Outlook MCP server Returns: String containing server information including name, version, capabilities, and available features for managing Outlook emails and calendar events
Authentication tool handler - manages Microsoft Graph API authentication for Outlook access Args: force: Whether to force re-authentication even if valid tokens exist (default: False) Returns: Authentication status message indicating success, failure, or instructions for completing the OAuth flow to access Outlook services
Check authentication status tool handler - verifies current Microsoft Graph API authentication state Returns: String containing current authentication status, token validity, expiration details, and whether the user is properly authenticated to access Outlook services
List emails from a specified Outlook folder Args: folder: The email folder to list emails from (default: "inbox") count: Maximum number of emails to retrieve (default: 10) Returns: Formatted string containing email list with sender, subject, date, and read status
Tool names use handle_* prefix instead of verb_noun pattern (get_, list_, send_, search_). LLMs infer intent from action verbs; 'handle_authenticate' is vague vs 'authenticate' or 'start_auth'. All 7 tools affected.
Output schemas are not documented. Tools return formatted strings but LLMs cannot parse structure (e.g., handle_list_emails returns 'Formatted string' with no field definitions). Agents cannot extract sender, subject, date reliably.
handle_send_email (WRITE operation) lacks confirmation/dry-run pattern. No mechanism to preview email before sending or require explicit confirmation. Agents can accidentally send emails to wrong recipients.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Read a specific email by its ID and return detailed content Args: id: The unique identifier of the email to read Returns: Formatted string containing complete email details including sender, recipients, subject, date, importance, attachments status, and full body content
Search emails in a specified folder with various filter criteria Args: folder: The email folder to search in (default: "inbox") count: Maximum number of emails to retrieve (default: 10) query: General search query string to match against email content from_addr: Filter emails by sender email address to: Filter emails by recipient email address subject: Filter emails by subject line content has_attachments: Filter emails that have attachments (default: False) unread_only: Filter to show only unread emails (default: False) Returns: Formatted string containing search results with email details including sender, subject, date, read status, and attachment information
Send an email through Outlook with specified recipients and content Args: to: Primary recipient email addresses (comma-separated for multiple recipients) cc: Carbon copy recipient email addresses (comma-separated for multiple recipients) subject: Email subject line body: Email body content (supports HTML formatting) importance: Email importance level ("low", "normal", or "high") (default: "normal") save_to_sent_items: Whether to save the email to Sent Items folder (default: True) Returns: Success message with sent email details or error message if sending failed
Parameter descriptions lack constraint details. 'count' param has no min/max bounds (default 10, but is 1-100 valid? 1-1000?). 'importance' enum values stated in description but not as formal enum constraint in schema.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe retry operations from destructive ones without reading descriptions. send_email marked WRITE but no annotation in schema.