Gavelin
Gavelin MCP Server
State legislative intelligence for AI agents. The only MCP server with speaker-attributed hearing transcripts from US state legislatures.
Search bills across all 50 states, find what legislators said in hearings, get full committee hearing transcripts with speaker attribution — all via the Model Context Protocol.
Connect
Server URL: https://mcp.gavelin.ai/mcp
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"gavelin": {
"url": "https://mcp.gavelin.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Claude Code
{
"mcpServers": {
"gavelin": {
"type": "url",
"url": "https://mcp.gavelin.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Any MCP Client
The server uses Streamable HTTP transport. Any MCP-compatible client (Cursor, Windsurf, custom agents) can connect with the URL and a bearer token.
Related MCP server: civic-awareness-mcp
Get an API Key
Sign up at gavelin.ai and generate an API key from your Account page under "Developer API."
Available Tools
search_bills
Search bills across all 50 US states + DC by keyword, sponsor, committee, status, or chamber. Covers multiple legislative sessions with full detail including sponsors, subjects, and legislative history.
Example queries an agent might make:
"What housing bills are pending in California?"
"Find bills sponsored by Rivera in New York"
"Search for cannabis legislation that passed in 2025"
search_hearing_testimony
Search speaker-attributed hearing and floor session segments. Find what specific legislators or witnesses said about any topic. Returns speaker name, role, committee, date, and surrounding context.
Example queries:
"What has Senator Krueger said about affordable housing?"
"Find testimony about SNAP benefits in Finance committee hearings"
get_bill_detail
Get full details on a specific bill including sponsor, subjects, committee, legislative history, and any hearing mentions.
get_speaker_activity
Get everything a specific legislator or witness has said in hearings and floor sessions. Useful for opposition research, coalition mapping, and pre-meeting preparation.
search_committee_hearings
Browse committee and public hearings by topic, committee, chamber, or date range.
get_hearing_transcript
Get the full transcript of a specific hearing with all speakers labeled by name.
list_available_states
See which states have data and what type (bills, transcripts, or both).
Rate Limits
Plan | Limit |
Starter | 100 calls/hour |
Professional | 500 calls/hour |
Enterprise | Custom |
What Makes This Different
Every government affairs team will have AI agents doing policy research. Those agents need clean, structured legislative data. Gavelin is the access layer.
Speaker attribution — real names on hearing testimony, not "Speaker A/B"
All 50 states — not just federal, not just one state
Historical depth — multiple years of legislative sessions
Authenticated + rate-limited — production-ready for team workflows
No other MCP server has speaker-attributed state legislative hearing transcripts.
About
Gavelin is an AI-powered legislative intelligence platform.
Web app: gavelin.ai
Contact: hello@gavelin.ai
Pricing: gavelin.ai — Starter, Professional, and Enterprise plans
License
The MIT License in this repository applies only to the documentation contained here (README, server configuration files, logos). The Gavelin MCP server itself is a proprietary hosted service operated by Gavelin (gavelin.ai) and is not covered by the MIT License. Access to the server requires an API key issued under Gavelin's terms of service.
Available Tools
7 toolsget_bill_detailGet Bill DetailARead-onlyIdempotentInspect
Get full details on a specific bill including sponsor, subjects, history, and hearing mentions.
Args: bill_number: The bill print number (e.g., "S1234", "HB1001", "SB250") state: 2-letter state code (e.g., "NY", "CA") session_year: Session year (default 2025). Use 0 to search all sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| bill_number | Yes | ||
| state | No | NY | |
| session_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds context about what details are included (sponsor, subjects, history, hearing mentions), which is useful but not rich behavioral disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a structured 'Args:' section with clear parameter explanations. Every sentence earns its place with no wasted words, making it efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, annotations covering safety and idempotency, and the presence of an output schema, the description is complete enough. It explains the purpose, parameters, and included details, leaving return values to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining all three parameters: bill_number (with examples like 'S1234'), state (2-letter code with examples), and session_year (default 2025, use 0 for all sessions). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get full details') and resource ('a specific bill'), listing the types of details included (sponsor, subjects, history, hearing mentions). It distinguishes from siblings like 'search_bills' by focusing on a single bill's comprehensive details rather than searching multiple bills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving detailed information on a specific bill, but does not explicitly state when to use this versus alternatives like 'search_bills' or 'get_hearing_transcript'. It provides clear context for the tool's purpose without exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hearing_transcriptGet Hearing TranscriptARead-onlyIdempotentInspect
Get the full transcript of a specific hearing with all speakers.
Use search_committee_hearings first to find the source_id.
Args: source_id: The hearing source ID (UUID from search_committee_hearings results) limit: Max segments to return (default 50, max 200)
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide key behavioral hints: readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds context by specifying that it returns 'all speakers' and mentions default/max values for 'limit', which are useful beyond annotations. However, it does not detail aspects like rate limits or auth needs, so it adds some value but not comprehensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it starts with the core purpose, then usage guidelines, and finally parameter details. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple retrieval with 2 parameters), rich annotations, and the presence of an output schema, the description is mostly complete. It covers purpose, usage, and parameter semantics adequately. However, it could briefly mention what 'segments' entail or link to the output schema for return values, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'source_id' as 'The hearing source ID (UUID from search_committee_hearings results)' and 'limit' as 'Max segments to return (default 50, max 200)', adding crucial semantics not in the schema. This effectively clarifies parameter meanings, though it could note that 'source_id' is required or provide more on segment format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the full transcript of a specific hearing with all speakers.' It uses specific verbs ('Get') and resources ('transcript of a hearing'), but it does not explicitly differentiate from siblings like 'search_hearing_testimony' or 'get_speaker_activity', which might involve similar data. This makes it clear but not fully sibling-distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use search_committee_hearings first to find the source_id.' This clearly states a prerequisite and when to use this tool (after finding the source_id), distinguishing it from alternatives like 'search_committee_hearings' for discovery. It effectively guides the agent on the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_speaker_activityGet Speaker ActivityARead-onlyIdempotentInspect
Get everything a specific legislator or witness has said in hearings and floor sessions.
Use this for opposition research, coalition mapping, and pre-meeting preparation.
Args: speaker_name: Name to search for (e.g., "Krueger", "Rivera"). Partial match. state: 2-letter state code (default "NY") topic: Optional keyword filter (e.g., "housing", "taxes") date_from: Start date (YYYY-MM-DD) date_to: End date (YYYY-MM-DD) limit: Max segments (default 30, max 100)
| Name | Required | Description | Default |
|---|---|---|---|
| speaker_name | Yes | ||
| state | No | NY | |
| topic | No | ||
| date_from | No | ||
| date_to | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains that searches use partial matching on speaker names, mentions default values and limits (max 100 segments), and clarifies the scope ('hearings and floor sessions'). Annotations already cover read-only, non-destructive, and idempotent properties, but the description usefully supplements with practical constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured and concise: a clear purpose statement, usage context, and well-organized parameter documentation. Every sentence adds value without redundancy, and the information is front-loaded with the core functionality before parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 0% schema coverage) and the presence of an output schema, the description provides complete context. It explains what the tool does, when to use it, and documents all parameters thoroughly. The output schema will handle return values, so no additional output explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing clear semantic explanations for all 6 parameters. Each parameter gets specific context: 'speaker_name' uses partial matching, 'state' has a default and format, 'topic' is optional with examples, date parameters specify format, and 'limit' includes default and maximum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Get') and resource ('everything a specific legislator or witness has said in hearings and floor sessions'). It distinguishes from siblings by focusing on speaker activity rather than bills, hearings, or testimony details, making it easy for an agent to understand its unique function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('opposition research, coalition mapping, and pre-meeting preparation'), which helps an agent understand when to use this tool. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the sibling tools, which would be needed for a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_statesList Available StatesARead-onlyIdempotentInspect
List all states with data in Gavelin, including whether transcript data is available.
Use this to understand what data is available before searching.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover key traits (read-only, non-destructive, idempotent, closed-world), but the description adds useful context about the purpose ('to understand what data is available') and the inclusion of transcript data availability, which isn't captured in annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and followed by usage guidance. Every sentence earns its place with no wasted words, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, annotations covering safety and behavior, output schema present), the description is complete. It explains what the tool does, when to use it, and key output details, leaving no gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the baseline is high. The description adds value by clarifying the tool's output includes transcript data availability, which isn't inferable from the empty input schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all states with data in Gavelin'), specifying the inclusion of transcript data availability. It distinguishes from siblings like search_bills or get_hearing_transcript by focusing on metadata about available states rather than specific content retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('before searching') and implies alternatives by referencing search operations in the sibling tools. This provides clear context for its preparatory role in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_billsSearch BillsARead-onlyIdempotentInspect
Search bills across all 50 US states + DC, spanning multiple legislative sessions.
Returns bill number, title, sponsor, status, committee, summary, and state.
Args: query: Search terms for bill title and summary (e.g., "rent stabilization", "cannabis", "gun safety") state: 2-letter state code to filter (e.g., "CA", "NY", "TX"). Leave empty for all states. sponsor: Filter by sponsor name (partial match, e.g., "Rivera") committee: Filter by committee (e.g., "Judiciary") chamber: Filter by chamber: "senate" or "house" (leave empty for both) status: Filter by status (e.g., "Introduced", "Passed", "Enrolled", "Vetoed") limit: Max results (default 20, max 50)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| state | No | ||
| sponsor | No | ||
| committee | No | ||
| chamber | No | ||
| status | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating safe, non-destructive, repeatable operations. The description adds valuable context beyond annotations: it specifies the geographic scope (50 states + DC), temporal scope (multiple legislative sessions), and return fields (bill number, title, etc.), which helps the agent understand the tool's behavior without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized: it starts with the core purpose, lists return fields, and then details each parameter with examples. Every sentence earns its place by providing essential information without redundancy, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, 0% schema coverage) and the presence of an output schema, the description is complete enough. It covers purpose, usage context, parameters with semantics, and behavioral details, while the output schema handles return values. No critical gaps exist for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantics for all 7 parameters. Each parameter includes clear explanations, examples (e.g., 'CA' for state, 'rent stabilization' for query), and defaults (e.g., limit default 20, max 50), adding significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches bills across all 50 US states and DC, spanning multiple legislative sessions, and specifies it returns bill number, title, sponsor, status, committee, summary, and state. This is a specific verb ('search') with a clear resource ('bills') and scope, distinguishing it from siblings like get_bill_detail or search_committee_hearings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (searching bills with filters), but does not explicitly mention when not to use it or name alternatives. It implies usage for broad searches rather than detailed lookups, but lacks explicit exclusions or comparisons to siblings like get_bill_detail for single-bill details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_committee_hearingsSearch Committee HearingsARead-onlyIdempotentInspect
Search committee and public hearings. Returns titles, dates, committees, and speaker counts.
Args: query: Optional keyword to search hearing titles (e.g., "housing", "budget") state: 2-letter state code (default "NY") committee: Filter by committee name (partial match) chamber: Filter by chamber: "senate" or "assembly" date_from: Start date (YYYY-MM-DD) date_to: End date (YYYY-MM-DD) limit: Max results (default 20, max 50)
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| state | No | NY | |
| committee | No | ||
| chamber | No | ||
| date_from | No | ||
| date_to | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds useful context about default values (state='NY', limit=20) and constraints (max 50 results), but doesn't mention pagination behavior, rate limits, or authentication requirements beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with a clear purpose statement followed by well-organized parameter documentation. Every sentence earns its place - the first sentence explains what the tool does and returns, while the parameter section efficiently documents all inputs without redundancy. It's appropriately sized for a 7-parameter search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (7 parameters, search functionality) and the presence of annotations and output schema, the description is mostly complete. It thoroughly documents all parameters and provides useful behavioral context about defaults and limits. The main gap is lack of sibling tool differentiation, but otherwise it provides sufficient guidance for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries full burden for parameter documentation. It provides clear explanations for all 7 parameters including examples ('housing', 'budget'), valid values ('senate' or 'assembly'), format requirements (YYYY-MM-DD), and constraints (max 50). This effectively compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches committee and public hearings and returns specific fields (titles, dates, committees, speaker counts). It uses the specific verb 'search' with the resource 'committee and public hearings', but doesn't explicitly differentiate from sibling tools like search_hearing_testimony or search_bills, which likely search different content types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like search_hearing_testimony (which might search testimony content rather than hearing metadata) or search_bills (which searches different legislative documents), leaving the agent to guess about appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_hearing_testimonySearch Hearing TestimonyARead-onlyIdempotentInspect
Search speaker-attributed hearing and floor session segments.
Returns matching segments with speaker name, role, committee, hearing date, and context. This is the most powerful tool for finding what specific legislators or witnesses said about any topic.
Transcript coverage: NY, CA, PA, OH, CO, IL, NE, NJ, CT (use list_available_states for current list).
Args: query: Search terms (e.g., "housing affordability", "SNAP benefits", "renewable energy") state: 2-letter state code (e.g., "NY", "CA", "PA"). Default "NY". speaker_name: Filter by speaker name (e.g., "Krueger", "Pretlow"). Partial match. committee: Filter by committee name (e.g., "Finance", "Housing") chamber: Filter by chamber: "senate" or "assembly" (leave empty for both) date_from: Start date in YYYY-MM-DD format (e.g., "2025-01-01") date_to: End date in YYYY-MM-DD format limit: Max results (default 20, max 50)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| state | No | NY | |
| speaker_name | No | ||
| committee | No | ||
| chamber | No | ||
| date_from | No | ||
| date_to | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds valuable context beyond annotations: it specifies transcript coverage states, mentions partial matching for speaker_name, and notes default/max values for limit. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it starts with the core purpose, then key behavioral details (coverage, power claim), and ends with a clear parameter breakdown. Every sentence adds value without redundancy, and the parameter section is efficiently formatted with examples and defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, 0% schema coverage) and the presence of annotations and an output schema, the description is highly complete. It covers purpose, usage context, behavioral details like coverage and limits, and full parameter semantics. The output schema likely handles return values, so no need to explain them here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantics for all 8 parameters. It explains each parameter's purpose, format (e.g., YYYY-MM-DD for dates, 2-letter state codes), defaults (e.g., state='NY', limit=20), constraints (e.g., max 50 for limit), and examples (e.g., query='housing affordability'). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches 'speaker-attributed hearing and floor session segments' and returns specific fields like speaker name, role, committee, etc. It distinguishes itself from siblings by emphasizing it's 'the most powerful tool for finding what specific legislators or witnesses said about any topic,' differentiating from tools like search_bills or get_hearing_transcript.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage by mentioning transcript coverage for specific states and referring to list_available_states for current lists. However, it doesn't explicitly state when to use alternatives like search_bills or get_hearing_transcript, though the phrase 'most powerful tool for finding what specific legislators or witnesses said' implies a comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- First observed
get_bill_detail - First observed
get_hearing_transcript - First observed
get_speaker_activity - First observed
list_available_states - First observed
search_bills - First observed
search_committee_hearings - First observed
search_hearing_testimony
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with no overlap: get_bill_detail retrieves specific bill information, get_hearing_transcript fetches full hearing transcripts, get_speaker_activity tracks individual speaker contributions, list_available_states provides metadata, search_bills searches bill databases, search_committee_hearings finds hearing records, and search_hearing_testimony searches testimony content. The descriptions explicitly differentiate their functions and use cases.
All tools follow a consistent verb_noun naming pattern: get_bill_detail, get_hearing_transcript, get_speaker_activity, list_available_states, search_bills, search_committee_hearings, and search_hearing_testimony. The verbs (get, list, search) are used logically and consistently throughout the set, making the tools predictable and easy to understand.
With 7 tools, this server is well-scoped for legislative data analysis. Each tool serves a distinct and necessary function in the domain, covering bill details, hearing transcripts, speaker activity, state availability, and various search capabilities. The count is neither too sparse nor bloated, fitting typical server ranges effectively.
The tool set provides comprehensive coverage for legislative research, including CRUD-like operations (get, search) for bills, hearings, and testimony. Minor gaps exist, such as no explicit tools for updating or deleting data (though likely not needed in this read-heavy domain) or for tracking bill amendments, but agents can work around these with the available search and retrieval tools.
Maintenance
Related MCP Connectors
Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories.
Search 209k+ US state bills, all 50 states + DC: full text, sponsors, votes, status. Free.
OpenStates MCP — bills, legislators, votes in all 50 US states
U.S. federal policy data — bills, Congress members, voting records, and civic info.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides access to legislative data from all 50 US states through the LegiScan API, enabling comprehensive search and retrieval of bills, votes, legislators, and legislative session information.104 npm11MIT
- AlicenseAqualityDmaintenanceProvides tools to search and retrieve US federal and state legislative data, including bills, votes, campaign contributions, and legislator information, with provenance tracking.81MIT
- AlicenseNot gradedqualityCmaintenanceAccess U.S. state legislative data including bills, legislators, and votes across all 50 states via the OpenStates API.3 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying legislative data from the LegiScan API, including bills and votes, via natural language through an MCP gateway.2 npmMIT