MCP server for Claude — search and read Hacker News stories and comments
Four tools with clear verb-noun naming (get_*, search_*) and reasonable descriptions (100-200 chars). All tools have input schemas with types and descriptions. However, output schemas are undocumented, LLMs cannot plan downstream calls or extract fields reliably. Error handling is minimal: get_story and get_comments return bare error dicts without recovery guidance. Parameter constraints (count 1-30, limit 1-30) are enforced in code but not declared in schema, forcing LLMs to guess valid ranges. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Missing pagination support, search_stories caps at 500 items but returns all matches without limit/offset params or total count.
Get top-level comments on a Hacker News story. Returns first-level comments only (no nested replies). Deleted and dead comments are excluded automatically.
Get full details of a specific Hacker News item by its ID. Returns title, URL, text body (for Ask HN / text posts), score, author, and the list of top-level comment IDs.
Get the current top stories from Hacker News. Returns a list of top-ranked stories with title, URL, score, author, and comment count.
Search current top stories by keyword. Fetches top stories and filters by case-insensitive keyword match in the title. This searches the live top-stories list, not a full-text index.
Output schemas undocumented. LLMs cannot infer what fields to expect from responses (e.g., does get_story return 'comment_ids' or 'kids'?). Forces agents to guess field names and risks extraction errors.
Error handling returns bare dicts without recovery guidance. get_story returns {"error": "Item X not found"}, LLM has no hint to try search_stories or validate the ID. Should include 'Try search_stories() to find valid IDs' or similar.
Parameter constraints (count 1-30, limit 1-30) enforced in code but not declared in JSON Schema. LLMs cannot see min/max bounds and may pass invalid values. Schema should include 'minimum': 1, 'maximum': 30.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No pagination support. search_stories returns all matching items without limit/offset or total count. Large result sets blow context window. Should accept limit and offset params, return total_count.
Missing tool annotations. All four tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. Prevents agents from reasoning about safety and retry behavior.