An example MCP server with personal assistant capabilities for calendar management and weather forecasting
Server has 4 tools with basic naming and descriptions, but significant gaps in schema completeness and parameter documentation. Tool names follow verb_noun convention (list_events, create_event, delete_event, get_forecast), which is good. However, parameter descriptions are minimal or absent in the visible schema. create_event has the most complete schema with 4 parameters all described; list_events has empty input schema; delete_event and get_forecast have minimal descriptions. No output schemas documented. Error handling is absent, no guidance on retryability, user-fixable errors, or recovery paths. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Descriptions are present but generic (10-50 chars), below the 50-200 char LLM-optimized baseline.
Create a new event in the calendar
Delete an event from the calendar
Get the forecast for a given location
List events from the calendar
list_events has empty input schema ({}). No parameters documented, yet the implementation accepts optional 'days' parameter. LLM cannot infer pagination or filtering options.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., event_id from create_event, forecast structure from get_forecast). Violates pattern:tool and mxe:include-chaining-ids.
No tool annotations despite clear risk levels. delete_event is DESTRUCTIVE but lacks destructiveHint. list_events and get_forecast are READ_ONLY but lack readOnlyHint. Agents cannot reason about side effects or retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If create_event fails due to time conflict or invalid ISO format, LLM receives no actionable error message. No distinction between retryable and user-fixable errors.
Descriptions are too short (10-50 chars, below 50-200 baseline). 'List events from the calendar' and 'Delete an event from the calendar' lack context on when to use, what is returned, or prerequisites. LLMs cannot reliably select the right tool.