A universal Model Context Protocol (MCP) implementation that exposes tools leveraging free public APIs for weather information, cryptocurrency prices, news headlines, web search queries, random jokes, and word definitions.
Server has 6 tools with basic descriptions and input schemas. All tools are READ_ONLY and follow verb_noun naming (get_*, web_search, define_word). However, descriptions are generic (avg ~60 chars, well below the 194-char baseline), lack WHEN/WHY context, and parameter descriptions are minimal. No output schemas documented. Error handling returns plain text rather than structured guidance. Parameters lack enums where appropriate (e.g., joke category, news country). No tool annotations (readOnlyHint, etc.). Schemas are present but sparse, most parameters have type and description, but lack constraints (min/max, patterns, enums). This is typical community-server quality: functional but not LLM-optimized.
Get the definition of a word.
Get the current price of a cryptocurrency.
Get top news headlines, optionally filtered by topic.
Get a random joke, optionally from a specific category.
Get current weather information for a city.
Search the web for information.
Descriptions are too short and lack WHEN/WHY context. Average ~50 chars vs. 194-char baseline. LLMs cannot determine when to select these tools over alternatives or what downstream actions they enable.
No output schemas documented. Tools return plain-text strings; LLMs cannot parse structured fields for chaining or extraction. E.g., get_news_headlines returns formatted text instead of {articles: [{title, source, url, date}]}.
Parameters lack enums and constraints. E.g., get_random_joke 'category' accepts free-form strings instead of enum [programming, misc, dark, pun, spooky, christmas]. get_news_headlines 'country' should be enum, not free string. Invites hallucinated invalid values.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Error responses are plain text without recovery guidance. E.g., 'Error fetching weather data: ...' tells LLM nothing about retry eligibility or next steps. Should follow pattern: 'City not found. Try search_cities() or check spelling.'
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY but this is not declared in schema. Agents cannot infer safety properties without explicit hints.