Skip to main content
Glama

List Votes

list_votes
Read-onlyIdempotent

Voting records (roll-calls) — sourced directly from official chamber publications. Replaces list_votes + list_bill_votes + list_actor_votes: pass bill_id and/or actor_id to scope to one bill/actor (freely combinable), or neither for a raw cross-country feed. Most votes have no linked bill; project_information is their text context.

country_code is comma-separated (e.g. BR,CO); omit for every accessible/your default country. Use since/until (YYYY-MM-DD) for 'votes this week' type questions — they filter on recorded_at (when the vote row was captured), not vote_date (only ~20% populated). commission_id narrows to votes on a bill that passed through that commission (use list_commissions(country_code=...) to discover valid IDs) — excludes the ~79.5% of votes with no linked bill at all; for 'what did commission X decide this week' prefer list_bill_updates(commission_id=...), which covers tramitaciones too, not just roll-calls.

Input Schema

NameRequiredDescriptionDefault
limitNoRows per page (1-100, default 20). The response's `meta.has_more` and `meta.next_cursor` tell you whether there are more. `meta.total`, when it is not null, is the full count without paging; some lists return null rather than pay for a count. Raise the limit when you genuinely need a whole list in one call rather than the most relevant few.
sinceNoFilters recorded_at (when the vote row was captured), NOT vote_date, which is only ~20% populated.
untilNoUpper bound on recorded_at (YYYY-MM-DD).
cursorNoOpaque pagination cursor from a previous response's `meta.next_cursor`. Pass every other filter unchanged when paging. Only ever use a cursor this API handed you — never build one. With `q`, a cursor continues the keyword listing (`meta.mode: "keyword_fallback"`): relevance-ranked results are a single page of at most 20 rows and report `has_more: false`, so if you got one there is no next page to ask for, and a `limit` above 20 adds nothing to it. Narrow `q` instead of paging.
bill_idNoScope to votes cast on this bill. Freely combinable with actor_id.
actor_idNoScope to votes cast by this legislator. Freely combinable with bill_id.
country_codeNoISO alpha-2 country codes, comma-separated or as a list: 'BR,CO' or ['BR','CO']. Pass 'all' for every country you can access. Omitting it is NOT the same as 'all': logged in via OAuth it falls back to your own default country, and the response says so in `meta.country_scope`.
commission_idNoVotes on bills that passed through this commission. ⚠️ Excludes the ~79.5% of votes with no linked bill at all — for 'what did commission X decide this week' prefer list_bill_updates(commission_id=...).

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description still adds genuine domain context: most votes have no linked bill, project_information is the text context for those, recorded_at differs from the sparsely populated vote_date, and omitting country_code falls back to the user's default country (surfaced in meta.country_scope). However, it does not touch on result ordering or the volume/rate characteristics of a cross-country feed, so it is strong context rather than full 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool is and the sibling it supersedes, then parameter guidance in descending order of importance. It is dense and mostly earns its length, but the recorded_at/vote_date caveat and the commission_id warning are duplicated verbatim in the schema, adding some redundancy.

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?

With 8 optional parameters, an output schema, and full annotation coverage, the description supplies everything the structured fields cannot: which filters to combine for which question type, the semantic gap between recorded_at and vote_date, the default-country fallback, and when a different sibling tool is the better answer. Nothing needed to call it correctly is missing.

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 coverage is 100%, so a baseline 3 applies, but the description adds real meaning the schema does not: that bill_id and actor_id are freely combinable, that country_code accepts comma-separated or list form with 'all' being distinct from omission, and the practical consequence of commission_id excluding ~79.5% of votes. Some caveats (recorded_at vs vote_date, the commission_id warning) are restated from the schema, keeping it below a 5.

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?

Opens with a specific verb+resource ('Voting records (roll-calls)') and states provenance ('sourced directly from official chamber publications'). It also distinguishes itself from its predecessors by naming the three merged tools and explaining the scoping parameters that replace them, so an agent can tell what this returns without opening the schema.

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?

Gives explicit routing: pass bill_id and/or actor_id (freely combinable) to scope, or neither for a raw feed; use since/until for 'votes this week'; use commission_id only for bill-linked votes. It names a concrete alternative with the condition that selects it ('for what did commission X decide this week prefer list_bill_updates(commission_id=...), which covers tramitaciones too').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources