MCP server exposing scenario assistant tools for email, support tickets, calendar, messaging, and document analysis
The server provides 14 tools with basic definitions but significant quality gaps. All tools have names and descriptions, but descriptions are generic and many lack actionable detail. Input schemas are present but underdeveloped, most parameters lack enums, ranges, or format constraints. Output schemas are not documented at all. Error handling is absent from descriptions. Parameter descriptions are minimal. The server exposes sensitive operations (send_email, send_message, reply_to_ticket, create_event) without confirmation patterns or dry-run support. No tool implements idempotency guarantees or recovery guidance. Composition is reasonable (tools are mostly single-responsibility), but critical chains are broken: list_inbox returns email IDs, and read_email accepts email_id, which is good; however, send_email requires 'to' as a string recipient address without lookup support, forcing agents to maintain email addresses across calls or perform extra name-to-email resolution outside the tool API.
Create a new calendar event. Attendees should be a comma-separated list of email addresses.
List all uploaded documents, showing ID and title.
List all events on the calendar, showing ID, title, date, time, and organizer.
List all emails in the inbox, showing ID, sender, subject, and date.
List all open support tickets, showing ticket number, customer, subject, priority, and date.
Look up a customer by ID or name. Searches both customer IDs and company names (case-insensitive partial match).
Read a specific document by its ID. Returns the full document content.
No output schemas documented. Tools return results but descriptions do not specify what fields are returned, their types, or whether results are paginated. LLMs cannot plan downstream tool calls or extract the right data.
Destructive operations lack confirmation or dry-run patterns. send_email, send_message, reply_to_ticket, and create_event modify state but provide no way for the agent to verify intent before execution. No description warns of irreversibility.
No input validation constraints. Parameters like 'to' (email recipient), 'date', 'time' lack enums, format patterns, or length limits. Descriptions do not specify expected format (e.g., email address format, ISO 8601 date). LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Read a specific email by its ID. Returns the full email content including sender, subject, date, and body.
Read a specific calendar event by its ID. Returns full event details including title, date, attendees, and description.
Read a specific support ticket by its ID. Returns full ticket details including customer info, subject, and message body.
Reply to a support ticket. The reply will be sent to the ticket submitter.
Send an email to the specified recipient with the given subject and body.
Send a message to the specified recipient with the given subject and body.
Display a markdown-formatted message to the user.
No error handling guidance. Descriptions do not explain what to do if a tool fails (e.g., 'User not found. Try lookup_customer() with a partial name.'). Tool definitions provide no recovery path.
Generic descriptions lack actionable context. E.g., send_email: 'Send an email to the specified recipient with the given subject and body.' does not explain when to use it vs send_message, whether it supports attachments, what happens on invalid address, or if it is idempotent.
Parameter descriptions are minimal. 'The ID of the email to read' is bare. Should include expected format (is it numeric? UUID? opaque string?), range, or link to discovery tool (use list_inbox first).
No pagination or result limits documented. list_inbox, list_tickets, list_events, list_documents do not state how many items they return, whether pagination is supported, or total count. Large result sets will blow the context window.
Overloaded recipient parameter. send_email requires 'to' as a string email address; send_message requires 'to' as a recipient identifier. Neither supports name-based lookup. Agents must maintain resolved addresses across calls, breaking composability.
attendees parameter (create_event) requires comma-separated email list. No validation that emails are well-formed, no error if invalid. Description should warn format strictly or describe fallback behavior.
lookup_customer description says 'case-insensitive partial match' but does not document max matches returned, sort order, whether name or ID matches are ranked differently, or error if multiple matches found.
Tool names send_email and send_message are near-duplicates without clear differentiation in descriptions. LLMs will waste reasoning cycles deciding which to use and may pick wrong one for a given scenario.