MCP Calculator Server with multiple transports (SSE, REST API) exposing calculator tools, web utilities, document generation, and reminder scheduling capabilities.
Mixed quality across 17 tools. Calculator tools (add, subtract, multiply, divide, power, sqrt, factorial, percentage) have clear naming, good parameter descriptions with types, and clear semantics. Web tools (fetch_web_content, web_search) are well-described with proper input schemas. However, workflow tools (schedule_reminder, send_message, deep_research, generate_pdf, generate_docx) lack critical details: descriptions are minimal or vague; parameter schemas exist but lack adequate documentation of constraints, formats, and expected behavior. Reminder and messaging tools lack error guidance. PDF/DOCX generation tools are under-specified for a production environment. No tool annotations (readOnlyHint, destructiveHint) present despite clear risk classifications. Output schemas are not documented for any tool, LLMs cannot infer what fields to expect from responses.
Add two numbers.
Cancel a pending reminder using its identifier.
Trigger an n8n deep-research workflow with the provided inputs.
Divide one number by another.
Calculate a factorial.
Retrieve web content from a URL.
Generate a DOCX document containing the provided content.
No output/return schemas documented for any tool. LLMs cannot infer response structure, fields, or types. Agents cannot plan downstream tool calls or extract required data (IDs, references, counts) from responses.
Workflow tools (schedule_reminder, send_message, deep_research) lack clear descriptions of behavior, prerequisites, and what happens when called. schedule_reminder description does not explain webhook dispatch mechanism, failure modes, or what 'payload' expects. send_message does not document recipient identifier format or channel routing.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Generate a PDF document containing the provided content.
List reminders currently tracked by the MCP server.
Multiply two numbers.
Calculate a percentage of a number.
Raise a base to a power.
Schedule a reminder to be dispatched to the configured webhook.
Send an immediate notification to the configured webhook.
Calculate a square root.
Subtract one number from another.
Execute a web search using the Serper API.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present despite clear risk classifications. WRITE and REVERSIBLE tools should declare destructiveHint=true to signal to LLMs that these operations have irreversible consequences and should not be retried blindly.
Parameter constraints and formats not documented in descriptions. 'target_time_iso' parameter in schedule_reminder says 'ISO-8601 timestamp (with timezone)' but no validation or error guidance if agent passes wrong format. 'payload' parameter is 'object' type but expected structure undefined, agents cannot construct valid payloads.
No error handling or recovery guidance. divide() will raise ValueError on zero divisor, but agent gets no actionable message. schedule_reminder and send_message offer no guidance on failure modes (webhook unreachable, recipient invalid, timeout). Agents cannot retry intelligently or suggest corrections.
Pagination not implemented for web_search. If Serper API returns more results than num_results (default 5), agent cannot fetch additional pages. No cursor, offset, or next_page fields documented. Large result sets could blow context window.
fetch_web_content truncates output to 500 chars without documenting this behavior in the tool description. If agent needs full content, it has no way to request it. Truncation should be explicit in description and accompanied by a 'truncated' boolean in response.
generate_pdf and generate_docx parameters 'title' and 'content' lack validation rules. No minimum/maximum length, character restrictions, or format constraints documented. What happens if content is empty? HTML? Markdown? Plain text only? Agents guess.
SERPER_API_KEY is referenced in code as environment variable but not documented in any tool description. If the API key is missing, agent gets a runtime error rather than a clear pre-flight check. No guidance on obtaining or configuring Serper credentials.
list_reminders 'status' parameter is optional with no enum or valid values documented. Agents don't know what status values exist or what 'filtering by status' actually returns. Expected behavior unclear.