MCP server for accessing Hacker News data and functionality
Server has 10 tools with consistent verb-noun naming (get_*, find_*) and basic descriptions. All tools are READ_ONLY, reducing risk. However, parameter descriptions are minimal or absent for most tools. Input schemas are present but lack detail (e.g., 'limit' parameters missing min/max constraints). Output schemas are partially documented via Pydantic models but not exposed in tool definitions. Error handling is generic ('Failed to fetch data') without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only.
Find Hacker News stories that match a title query or keywords.
Get the latest Ask HN stories.
Get the best stories from Hacker News.
Get a Hacker News item by its ID.
Get the latest job stories.
Get the current largest item ID.
Get the newest stories from Hacker News.
Parameter descriptions missing or minimal. 'limit' appears in 6 tools with identical descriptions but no min/max constraints. LLMs cannot infer valid ranges (e.g., max 500 vs max 200 varies by tool).
No tool annotations despite all tools being read-only. Missing readOnlyHint and idempotentHint annotations prevent clients from optimizing caching and retry logic.
Error handling is generic and non-actionable. 'Failed to fetch data from Hacker News API: {e}' provides no recovery guidance. LLMs cannot determine if error is retryable, user-fixable, or fatal.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Get the latest Show HN stories.
Get the top stories from Hacker News.
Get a Hacker News user by their ID.
Output schemas not exposed in tool definitions. Pydantic models (Item, User, UpdatesResponse) exist in code but are not documented as tool return types in the MCP schema. LLMs cannot plan downstream tool calls without knowing response structure.
find_stories_by_title lacks pagination support. Limits search to 200 stories and returns up to 5 matches, but no offset/cursor for iterating beyond top results. Large result sets risk context window exhaustion.