MCP server for the On Record legislative information system, providing tools for legislator lookup, bill search, and address resolution
Three well-structured READ_ONLY tools with clear naming, good descriptions, and complete input schemas. All tools follow verb_noun pattern (lookup, search, resolve). Descriptions are detailed and context-appropriate (71-152 chars, within the 10-1024 baseline). Input parameters have types and descriptions. However, output schemas are not explicitly documented in the source code, inference from type definitions is present but not schema declarations returned to clients. No error handling guidance, no recovery instructions, and no destructive/idempotent annotations. Protocol readiness is strong (HTTP transport), but definition completeness falls short of A-grade standards due to missing output schema documentation and error guidance.
Lookup legislator(s) by name, district, or ID to retrieve contact information and session details
Resolve a street address to house and senate district numbers with canonical address form
Search bills by query, ID, sponsor, floor sponsor, session, or chamber with pagination
Output schemas not documented in tool definitions. Clients and LLMs cannot see what fields to expect from tool responses. This forces the LLM to infer structure from usage examples rather than explicit schema.
No error handling or recovery guidance in tool descriptions. If a legislator lookup fails or an address cannot be resolved, the LLM receives no guidance on what to try next or why the failure occurred.
resolve_address tool description lacks specificity about input format. Description says 'Street address to resolve' but does not specify required format (e.g., 'Utah address only?', '123 Main St, Salt Lake City, UT 84101?'). Ambiguous specifications cause LLM hallucination.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
search_bills pagination is present (count, offset) but no 'total' or 'next_cursor' return value documented. LLMs cannot determine if they have fetched all results or calculate optimal pagination strategy.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Although all three tools are READ_ONLY per the evaluation spec, this should be declared via annotations in the tool metadata for client-side filtering and agent safety.