get_votes

Pack: congress · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)

No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/get_votes for the schema, then POST the same URL with its arguments for the data.

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.

Parameters

NameTypeRequiredDescription
chamberstringyesRequired: “house” or “senate”.
congressnumbernoCongress number, e.g. 119. Omit for the current Congress.
sessionnumberno1 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).
limitnumbernoNumber of votes to return (default 20, max 100).

Example call

Arguments

{
  "chamber": "senate",
  "limit": 20
}

curl

curl -X POST https://gateway.pipeworx.io/congress/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_votes","arguments":{"chamber":"senate","limit":20}}}'

TypeScript (@pipeworx/sdk)

import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();

const result = await pipeworx.call('get_votes', {
  "chamber": "senate",
  "limit": 20
});

More examples

{
  "chamber": "senate",
  "congress": 119,
  "session": 1,
  "limit": 5
}
{
  "chamber": "house",
  "congress": 119,
  "session": 1,
  "limit": 10
}

Response shape

FieldTypeDescription
totalnumberTotal votes available
returnednumberNumber of votes returned
votesarray
Full JSON Schema
{
  "type": "object",
  "properties": {
    "total": {
      "type": "number",
      "description": "Total votes available"
    },
    "returned": {
      "type": "number",
      "description": "Number of votes returned"
    },
    "votes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "number",
              "null"
            ],
            "description": "Vote ID"
          },
          "congress": {
            "type": "number",
            "description": "Congress number"
          },
          "session": {
            "type": "string",
            "description": "Session number"
          },
          "chamber": {
            "type": "string",
            "description": "Chamber (House or Senate)"
          },
          "number": {
            "type": "number",
            "description": "Vote number"
          },
          "question": {
            "type": "string",
            "description": "Vote question text"
          },
          "question_details": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional question details"
          },
          "result": {
            "type": "string",
            "description": "Vote result"
          },
          "category": {
            "type": "string",
            "description": "Vote category label"
          },
          "created": {
            "type": "string",
            "description": "Vote date/time"
          },
          "yes_votes": {
            "type": "number",
            "description": "Number of yes votes"
          },
          "no_votes": {
            "type": "number",
            "description": "Number of no votes"
          },
          "other_votes": {
            "type": "number",
            "description": "Number of abstain/other votes"
          },
          "related_bill_title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Related bill title"
          },
          "link": {
            "type": "string",
            "description": "GovTrack vote URL"
          }
        }
      }
    }
  }
}

Connect

Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://pipeworx.io/mcp"
    }
  }
}
Connect to just the congress pack
{
  "mcpServers": {
    "congress": {
      "url": "https://gateway.pipeworx.io/congress/mcp"
    }
  }
}

See Getting Started for client-specific install steps.

Regenerated from source · build October 30, 2026