Demo MCP server that fetches news articles from WorldNewsAPI and provides basic utility tools
The server exhibits significant gaps across definition quality. Of the three tools, only fetch_news_articles has a reasonably detailed description; add and get_weather have minimal descriptions (5-7 chars). All three tools have schemas with type definitions present, but descriptions for parameters vary widely. fetch_news_articles parameters are well-documented with format hints (YYYY-MM-DD); the other tools lack parameter detail. Error handling is minimal, only fetch_news_articles attempts exception handling, and the get_weather tool returns a hardcoded value (45) unrelated to actual weather. Tool naming follows verb-noun convention adequately (fetch_, add, get_), but descriptions lack the depth needed for LLM selection and composition. No output schemas are documented; return types are mentioned in docstrings but not formally specified. The add and get_weather tools are stub implementations that do not reflect real functionality.
Add two numbers
Fetches news articles from the WorldNewsAPI based on specified parameters and returns them as a list of dictionaries. Args: query_text (str): The text to search for in news articles earliest_date (str): Earliest publication date in YYYY-MM-DD format latest_date (str): Latest publication date in YYYY-MM-DD format max_results (int): Maximum number of results to return Returns: list: A list of dictionaries containing article details
it gets and retuns the weather of the city
add and get_weather tools have critically short descriptions (5-7 characters). These provide no context for LLM tool selection and violate the 10 - 1024 char baseline.
Output schemas are not formally documented. fetch_news_articles returns a dict with 'all_data' key containing a list; add returns an int; get_weather returns an int. LLMs cannot reliably extract fields or chain tool outputs without documented schemas.
get_weather is a stub implementation returning hardcoded 45 instead of actual weather data. This is not a functional tool and violates expectations set by its description.
Error handling is minimal. Only fetch_news_articles catches worldnewsapi.ApiException and returns an error dict. add and get_weather have no error handling. Per pattern:recovery-guide, errors must guide the LLM on next steps (retry, lookup, etc.), not just report failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
add and get_weather parameters have type definitions in schema but lack detailed descriptions. 'The city name' and parameter descriptions in the schema JSON are minimal.
No pagination or limit enforcement documented for fetch_news_articles. The tool accepts max_results and loops up to 100-item chunks, but the response could grow large. Per pattern:paginated-result, tools returning lists should document limits and offer cursor/offset pagination.
fetch_news_articles mixes API response fields inconsistently. Returns 'author' (plural, from API) but 'text_preview' and 'full_text' (custom fields). No documented output schema means LLMs must infer field names from the description.