@pipeworx/propublica-congress
Connect: https://gateway.pipeworx.io/propublica-congress/mcp · Install: one-click buttons
Tools: 4
ProPublica’s Congress API. Detailed voting records for every member of the US House and Senate since 1995, plus committee assignments, statements, bill cosponsorship patterns, and party-unity scores. The data behind political-coverage articles. Free, requires a free API key.
Why this matters for AI agents
Where Congress.gov is the official record (bills, status, members), ProPublica Congress goes deeper on member behavior: how often a member votes with their party, missed votes, recently sponsored legislation, party-line votes vs bipartisan votes. For political analysis, journalism, or “is this senator a moderate?” questions, ProPublica is fit-for-purpose.
Common flows:
- Member voting record. “How often does Sen. X vote with their party?” → party-unity score + recent votes.
- Recent votes. Last N votes in House or Senate with member-by-member breakdown.
- Bill cosponsorship. Who co-sponsors the same bills as Member X (signal of ideological alignment).
- Member detail. Term history, leadership roles, committee assignments.
Auth
ProPublica Congress requires a free API key from https://www.propublica.org/datastore/api/propublica-congress-api. Pass via _apiKey. Generous limits.
What’s distinct from Congress.gov
| Question | Source |
|---|---|
| ”What’s the status of HR 1234?” | Congress.gov |
| ”How does Member X usually vote?” | ProPublica |
| ”Which members co-sponsored?” | Either, but ProPublica formats better |
| ”Recent vote breakdown by member?” | ProPublica |
| ”Who’s on the Energy committee?” | Either |
For substantive political research, both are useful; ProPublica adds analysis on top of the raw record.
Vote types
Recorded votes (yea, nay, present, not voting). “Voice votes” don’t appear here — they’re unanimous-ish votes that don’t go to the recorder. Many minor bills pass by voice vote, so “no recorded vote” doesn’t mean the bill didn’t pass.
Common pitfalls
- Party-unity scores are coarse. A 95% party-unity member voted with their party 95% of the time on RECORDED votes where parties differed. Doesn’t measure influence, sponsorship, or off-record positioning.
- Missed votes vary. Members miss votes for legitimate reasons (campaign, illness, family). High missed-vote percentages signal absence, not opposition. Recent presidential candidates show up with high missed votes.
- Bipartisan ≠ moderate. A bill with 90% Republican + 90% Democrat support is bipartisan but might be ideologically extreme (defense authorization, Israel aid). Bipartisan-ness is a procedural characterization.
- Term-limited tenure. Senators get 6-year terms; House members 2-year. Comparing voting records across very different career lengths is misleading without normalization.
- Lame-duck and post-election votes. Members who lost election or didn’t seek re-election still vote. Their behavior in lame-duck sessions sometimes diverges from career patterns.
- Bill cosponsorship is cheap. Members cosponsor freely; it’s not a strong commitment. A 100-cosponsor bill is meaningful; 5-cosponsor isn’t, in a 435-member body.
Tools
- get_members — List members of a chamber of Congress. Returns name, party, state, district, vote attendance, and party loyalty percentage. Example: get_members(“senate”, 118).
- get_member — Get details for a specific member of Congress by their ProPublica member ID. Returns biography, current role, committee assignments, and voting record. Example: get_member(“S001191”).
- search_bills — Search congressional bills by keyword. Returns bill ID, title, sponsor, status, and latest action. Example: search_bills(“climate change”, 118).
- get_votes — Get recent votes in a chamber for a specific year and month. Returns vote question, result, vote counts (yes/no), and related bill info. Example: get_votes(“senate”, 2024, 3).
Tools
-
get_member— Get details for a specific member of Congress by their ProPublica member ID. Returns biography, current role, committee assignments, and voting record. Example: get_member( S001191 ). -
get_members— List members of a chamber of Congress. Returns name, party, state, district, vote attendance, and party loyalty percentage. Example: get_members( senate , 118). -
get_votes— Get recent votes in a chamber for a specific year and month. Returns vote question, result, vote counts (yes/no), and related bill info. Example: get_votes( senate , 2024, 3). -
search_bills— Search congressional bills by keyword. Returns bill ID, title, sponsor, status, and latest action. Example: search_bills( climate change , 118).