Skip to main content
Glama

Get Votes

get_votes
Read-onlyIdempotent

ANSWERS "how did the Senate vote on X" / "recent House roll calls" / "cloture vote tally" — recent roll-call votes for ONE chamber, newest first within that chamber + session. House votes come from the Clerk of the House's own records (via congress.gov's official API), addressed directly by roll-call number (House roll numbers are sequential 1..N within a session) — so this is capped at 25 per call for House, since each House vote costs its own upstream request; a higher limit is silently clamped with a note, not an error. Senate votes come from the Congressional Record (U.S. Government Publishing Office), which prints every Senate roll call with its member lists; senate.gov itself refuses automated requests and is not read. Each Senate vote carries its number, the Record issue date, the question and outcome sentence as the Record words them (null when the Record text has none this tool can match, never inferred from the tally), and its yea/nay tally; a roll the Record text could not be parsed with confidence is listed under unparsed, and a gap in the returned vote numbers is named in note. For HOW EACH SENATOR VOTED, attendance and party-line share use congress_member_votes (chamber "senate"). Pass chamber: "house" or "senate" — the two chambers number their votes independently, so there is no combined listing. Returns question, result, yes/no tallies and date for each vote; every response names its own chamber, congress, session and source. Pass congress + session to look at a specific past session (session can only be left out for the CURRENT Congress); omit both for the current session. A chamber/congress/session nothing has been published for returns a named reason, never a silent empty list. A House roll number that congress.gov has no record of (e.g. vacated and never reused) is skipped and named in note, not silently missing.

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of votes to return (default 20, max 100).
chamberYesRequired: "house" or "senate".
sessionNo1 or 2 — each Congress has exactly two sessions, one per calendar year. Can be omitted only when congress is also omitted, or is the current Congress (it is then inferred from today's date).
congressNoCongress number, e.g. 119. Omit for the current Congress.

Output Schema

NameRequiredDescriptionDefault
totalNoTotal votes available
votesNo
returnedNoNumber of votes returned

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "limit": 20
      -  },
      -  {
      -    "congress": 119,
      -    "limit": 50
      -  }
      -]New value: +[
      +  {
      +    "chamber": "senate",
      +    "limit": 20
      +  },
      +  {
      +    "chamber": "senate",
      +    "congress": 119,
      +    "limit": 5,
      +    "session": 1
      +  },
      +  {
      +    "chamber": "house",
      +    "congress": 119,
      +    "limit": 10,
      +    "session": 1
      +  }
      +]
    • addedInput schema / properties / chamber
      Added value: +{
      +  "description": "Required: \"house\" or \"senate\".",
      +  "type": "string"
      +}
    • changedInput schema / properties / congress / description
      Previous value: -"Congress number to filter by (e.g., 119)"New value: +"Congress number, e.g. 119. Omit for the current Congress."
    • changedInput schema / properties / limit / description
      Previous value: -"Number of votes to return (default: 20, max: 100)"New value: +"Number of votes to return (default 20, max 100)."
    • addedInput schema / properties / session
      Added value: +{
      +  "description": "1 or 2 — each Congress has exactly two sessions, one per calendar year. Can be omitted only when congress is also omitted, or is the current Congress (it is then inferred from today's date).",
      +  "type": "number"
      +}
    • addedInput schema / required
      Added value: +[
      +  "chamber"
      +]
  2. Changed2 schema fields changed
    • changedOutput schema / properties / votes / items / properties / id / type
      Previous value: -"null"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / votes / items / properties / question_details / type
      Previous value: -"null"New value: +[
      +  "string",
      +  "null"
      +]
  3. Changed15 schema fields changed
    • changedOutput schema / properties / votes / items / properties / category / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / chamber / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / congress / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"number"
    • changedOutput schema / properties / votes / items / properties / created / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / id / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"null"
    • changedOutput schema / properties / votes / items / properties / link / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / no_votes / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"number"
    • changedOutput schema / properties / votes / items / properties / number / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"number"
    • changedOutput schema / properties / votes / items / properties / other_votes / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"number"
    • changedOutput schema / properties / votes / items / properties / question / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / question_details / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"null"
    • changedOutput schema / properties / votes / items / properties / result / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / session / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / votes / items / properties / yes_votes / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"number"
    • removedOutput schema / required
      Removed value: -[
      -  "total",
      -  "returned",
      -  "votes"
      -]
  4. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "limit": 20
      +  },
      +  {
      +    "congress": 119,
      +    "limit": 50
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "returned": {
      +      "description": "Number of votes returned",
      +      "type": "number"
      +    },
      +    "total": {
      +      "description": "Total votes available",
      +      "type": "number"
      +    },
      +    "votes": {
      +      "items": {
      +        "properties": {
      +          "category": {
      +            "description": "Vote category label",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "chamber": {
      +            "description": "Chamber (House or Senate)",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "congress": {
      +            "description": "Congress number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "created": {
      +            "description": "Vote date/time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "description": "Vote ID",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "link": {
      +            "description": "GovTrack vote URL",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "no_votes": {
      +            "description": "Number of no votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "number": {
      +            "description": "Vote number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "other_votes": {
      +            "description": "Number of abstain/other votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "question": {
      +            "description": "Vote question text",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "question_details": {
      +            "description": "Additional question details",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "related_bill_title": {
      +            "description": "Related bill title",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "result": {
      +            "description": "Vote result",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "session": {
      +            "description": "Session number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "yes_votes": {
      +            "description": "Number of yes votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "returned",
      +    "votes"
      +  ],
      +  "type": "object"
      +}
  5. Changed2 schema fields changed
    • removedInput schema / examples
      Removed value: -[
      -  {
      -    "_apiKey": "your-propublica-congress-api-key",
      -    "chamber": "senate",
      -    "month": 3,
      -    "year": 2024
      -  },
      -  {
      -    "_apiKey": "your-propublica-congress-api-key",
      -    "chamber": "house",
      -    "month": 1,
      -    "year": 2024
      -  }
      -]
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "chamber": {
      -      "description": "Chamber (senate or house)",
      -      "type": "string"
      -    },
      -    "count": {
      -      "description": "Number of votes",
      -      "type": "number"
      -    },
      -    "month": {
      -      "description": "Month",
      -      "type": "number"
      -    },
      -    "votes": {
      -      "description": "List of votes",
      -      "items": {
      -        "properties": {
      -          "bill_id": {
      -            "description": "Related bill ID",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "bill_title": {
      -            "description": "Related bill title",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "chamber": {
      -            "description": "Chamber",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "congress": {
      -            "description": "Congress number",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "date": {
      -            "description": "Vote date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "description": {
      -            "description": "Vote description",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "no": {
      -            "description": "No votes",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "not_voting": {
      -            "description": "Not voting",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "present": {
      -            "description": "Present votes",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "question": {
      -            "description": "Vote question",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "result": {
      -            "description": "Vote result (Agreed to, Failed, etc.)",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "roll_call": {
      -            "description": "Roll call number",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "session": {
      -            "description": "Session number",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "time": {
      -            "description": "Vote time",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "yes": {
      -            "description": "Yes votes",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "year": {
      -      "description": "Year",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "chamber",
      -    "year",
      -    "month",
      -    "count",
      -    "votes"
      -  ],
      -  "type": "object"
      -}New value: +null
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "chamber": {
      +      "description": "Chamber (senate or house)",
      +      "type": "string"
      +    },
      +    "count": {
      +      "description": "Number of votes",
      +      "type": "number"
      +    },
      +    "month": {
      +      "description": "Month",
      +      "type": "number"
      +    },
      +    "votes": {
      +      "description": "List of votes",
      +      "items": {
      +        "properties": {
      +          "bill_id": {
      +            "description": "Related bill ID",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "bill_title": {
      +            "description": "Related bill title",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "chamber": {
      +            "description": "Chamber",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "congress": {
      +            "description": "Congress number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "date": {
      +            "description": "Vote date",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "description": {
      +            "description": "Vote description",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "no": {
      +            "description": "No votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "not_voting": {
      +            "description": "Not voting",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "present": {
      +            "description": "Present votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "question": {
      +            "description": "Vote question",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "result": {
      +            "description": "Vote result (Agreed to, Failed, etc.)",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "roll_call": {
      +            "description": "Roll call number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "session": {
      +            "description": "Session number",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "time": {
      +            "description": "Vote time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "yes": {
      +            "description": "Yes votes",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "year": {
      +      "description": "Year",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "chamber",
      +    "year",
      +    "month",
      +    "count",
      +    "votes"
      +  ],
      +  "type": "object"
      +}
  7. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "_apiKey": "your-propublica-congress-api-key",
      +    "chamber": "senate",
      +    "month": 3,
      +    "year": 2024
      +  },
      +  {
      +    "_apiKey": "your-propublica-congress-api-key",
      +    "chamber": "house",
      +    "month": 1,
      +    "year": 2024
      +  }
      +]
  8. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safe-read profile, but the description adds substantial operational context beyond them: a 25-vote effective cap for House with silent clamping plus a note rather than an error, upstream sources (Clerk of the House via congress.gov; Congressional Record, with senate.gov explicitly refused), `unparsed` handling for low-confidence rolls, `note` for numbering gaps, and skipped vacated House roll numbers. These are exactly the failure modes an agent needs to interpret responses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

Front-loaded with the user-question framing, which is good, but the body is a dense single block with nested parentheticals and em-dash asides that make it slow to parse. It is information-rich rather than padded, yet several clauses (source provenance details) could be tightened or split into sentences.

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?

For a four-parameter read tool with an output schema, this is thorough: sources, per-chamber numbering behavior, caps, degradation cases (`unparsed`, `note`, named reason instead of empty list), and the current-vs-past-session rule are all covered. Nothing needed to call it correctly or interpret edge-case responses 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 the baseline is 3, but the description adds real meaning: the two chambers number votes independently (so `chamber` is not a filter but a separate namespace), and `limit`'s stated max of 100 in the schema is effectively 25 for House with silent clamping. That nuance is not in the schema and changes how an agent sizes requests.

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 the exact user questions it answers ("how did the Senate vote on X", "cloture vote tally") and states a precise verb+resource+scope: recent roll-call votes for ONE chamber, newest first within chamber and session. It also explicitly separates itself from the sibling congress_member_votes, which handles per-member vote breakdowns.

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?

Explicit routing: "For HOW EACH SENATOR VOTED, attendance and party-line share use congress_member_votes (chamber \"senate\")" — a named alternative with the condition that selects it. It also states the chamber requirement ("no combined listing"), when congress+session can be omitted (only for the current Congress), and what an unpublished chamber/session returns.

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.