Skip to main content
Glama

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.

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 tools
get_bill_detailGet Bill DetailA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_numberYes
stateNoNY
session_yearNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 TranscriptA
Read-onlyIdempotent
Inspect

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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 ActivityA
Read-onlyIdempotent
Inspect

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
speaker_nameYes
stateNoNY
topicNo
date_fromNo
date_toNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 StatesA
Read-onlyIdempotent
Inspect

List all states with data in Gavelin, including whether transcript data is available.

Use this to understand what data is available before searching.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 BillsA
Read-onlyIdempotent
Inspect

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
stateNo
sponsorNo
committeeNo
chamberNo
statusNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 HearingsA
Read-onlyIdempotent
Inspect

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
stateNoNY
committeeNo
chamberNo
date_fromNo
date_toNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 TestimonyA
Read-onlyIdempotent
Inspect

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
stateNoNY
speaker_nameNo
committeeNo
chamberNo
date_fromNo
date_toNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updates
    • First observedget_bill_detail
    • First observedget_hearing_transcript
    • First observedget_speaker_activity
    • First observedlist_available_states
    • First observedsearch_bills
    • First observedsearch_committee_hearings
    • First observedsearch_hearing_testimony

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides 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.
    10
    4 npm
    11
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides tools to search and retrieve US federal and state legislative data, including bills, votes, campaign contributions, and legislator information, with provenance tracking.
    8
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Access U.S. state legislative data including bills, legislators, and votes across all 50 states via the OpenStates API.
    3 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying legislative data from the LegiScan API, including bills and votes, via natural language through an MCP gateway.
    2 npm
    MIT