MCP server exposing The Website Specification as queryable tools.
Server exposes 6 well-named, read-only tools with clear verb-noun naming (search, list_topics, get_topic, get_checklist, get_categories, get_changes). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas are present with type declarations and parameter descriptions. However, output schemas are NOT formally documented in the source, only inferred from code. Descriptions are functional but terse; several lack context on WHEN to use each tool or dependencies between them. No error handling guidance visible. No tool annotations (readOnlyHint, etc.). Pagination is implemented (limit params) but total counts and next_cursor patterns are inconsistent.
List all specification categories with topic counts.
Get recent changelog entries with optional filtering by change type.
Generate a checklist of specification items, optionally filtered by category and status.
Fetch a single specification topic by slug as Markdown with frontmatter.
List specification topics with optional filtering by category and status.
Search the specification by free-text query. Returns ranked results with snippets.
Output schemas not formally documented. Code returns structuredContent objects but no JSON Schema definitions visible for response types. LLMs cannot plan downstream tool calls without knowing response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in tool metadata, forcing LLMs to infer safety from descriptions alone.
Descriptions lack WHEN-to-use context and inter-tool dependencies. E.g., get_categories description does not explain it should be called first to discover valid category filters for list_topics.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
No error handling guidance. Code returns empty results on no matches but does not guide LLM on recovery (e.g., 'Try a broader query' or 'Call get_categories to see available filters').
Pagination inconsistency: search and list_topics accept limit but do not return total count or next_cursor. Agents cannot determine if more results exist or how to fetch them.