SSE-based MCP Server and Client
Server has 4 tools with basic descriptions and input schemas. Naming follows verb_noun convention (get_*, google_search). However, descriptions are minimal (10-80 chars, below the 50-200 char baseline for LLM optimization), parameter descriptions lack detail on constraints/formats, and output schemas are entirely undocumented. Error handling exists but is generic (returns error strings without recovery guidance). No tool annotations (readOnlyHint, etc.). Tools are simple read-only operations with limited composition risk.
Get the weather for a specific date and city using wttr.in (no API key needed).
Fetches the main content of a web page and returns it in the specified format. Attempts to remove common boilerplate like headers, footers, and navigation.
input date, return weekday
Performs a Google search for the given query.
Output schemas completely undocumented. All 4 tools return strings with no structured schema definition. LLMs cannot plan downstream calls or extract typed fields.
Parameter descriptions lack format/constraint details. 'date_str' says 'format is YYYY-MM-DD' but no validation guidance. 'format' param in get_web_content lists enum values in description instead of as a formal enum constraint.
Tool descriptions are too brief (10-80 chars vs 50-200 char baseline). Lack WHEN to use, prerequisites, and dependencies. E.g., get_weather_for_city_at_date does not explain that date_str is optional or what 'today' means.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
Error handling returns generic error strings without recovery guidance. E.g., 'Error fetching weather data: {e}' tells LLM nothing about retry eligibility or next steps.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in schema, forcing LLM to infer safety.