org.billcommons/bill-commons
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Search 209k+ US state bills, all 50 states + DC: full text, sponsors, votes, status. Free.
| Author | org.billcommons |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 167 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"bill-commons": {
"url": "https://mcp.billcommons.org/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (10)
search_legislationread-onlySearch FULL BILL TEXT -- not just known-bill-number lookup. `q` is matched against titles, descriptions, AND ingested document text via Postgres websearch_to_tsquery (supports "quoted phrases", OR, and -exclusion, same syntax as a search engine), with a fuzzy pg_trgm title-similarity fallback when the exact query has no hits. `q` can ALSO be a bill number ("HB 123", "H.B. 123", "hb123" all match) and that fast path is tried first. Optionally filter by jurisdiction (two-letter state code or name), chamber, and status. For a curated cross-state slice of a subject (e.g. "every AI bill in the country") rather than an ad-hoc keyword search, call list_topics first -- its membership rules also match on structured subject tags this full-text search does not see.
Parameters:
q(required) — stringlimitstatuschamberjurisdiction
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_bill_recordread-onlyFetch the full record for one bill: metadata, sponsors, subjects, actions, versions, and vote-event summaries. Look up by canonical bill_id (UUID), or by jurisdiction + identifier (+ optional session to disambiguate). For a human bill number like HB 123, use jurisdiction="NC", identifier="HB 123"; bill_id is for UUIDs.
Parameters:
bill_idsessionidentifierjurisdictioninclude_full_text— boolean
Hints: read-only yes · destructive no · idempotent yes · open-world no
compare_bill_versionsread-onlyDeterministic diff (unified + structured) between two versions of a bill's extracted text. Defaults to earliest vs. latest texted version if version ids are omitted. Errors if fewer than 2 versions have extracted text. Result is labeled 'derived' (computed by Bill Commons, not an official document).
Parameters:
bill_id(required) — stringversion_id_aversion_id_b
Hints: read-only yes · destructive no · idempotent yes · open-world no
find_similar_billsread-onlyFind bills with similar titles via deterministic trigram similarity, across jurisdictions. Labeled 'derived' -- not an official cross-reference or companion-bill designation.
Parameters:
bill_id(required) — stringlimit
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_vote_detailsread-onlyFetch vote event(s) with member-level (yes/no/other/absent) vote records. Provide vote_event_id for one vote, or bill_id for all recorded votes on that bill.
Parameters:
bill_idvote_event_id
Hints: read-only yes · destructive no · idempotent yes · open-world no
trace_legislative_historyread-onlyFull chronological legislative history for a bill: merged timeline of actions, version publications, and votes, plus related-bill links.
Parameters:
bill_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
build_legislative_evidence_packetread-onlyCompile a citation-ready evidence packet for a bill: full official record, legislative history timeline, votes with member-level detail, and hearings -- each explicitly labeled official vs. derived with source URLs. Returns a `how_to_cite` block with a one-line `cite_as` sentence, a human `permalink`, a JSON `download_url`, and a `snapshot_id` that changes if and only if a cited fact about the bill changes -- so a reader can check later whether the citation still holds. Snapshots are NOT archived; the id is a change detector, not a way to retrieve an older packet. Pass `question` to record what the packet was assembled to answer; it is echoed into the artifact so a filed packet carries its own scope.
Parameters:
bill_id(required) — stringquestioninclude_full_text— boolean
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_jurisdiction_coverageread-onlyReturn the jurisdiction_coverage state-machine status for one state (abbreviation or name), or the full stored coverage matrix if state is omitted. Public-registry and unlisted row counts are explicit. Includes bounded retained official-source observation health and evidence links. Coverage status measures stored bill/text availability; local coverage timestamps can advance on count recomputation. Statewide semantic freshness remains unverified, including for GREEN coverage.
Parameters:
state
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_active_sessionsread-onlyList legislative sessions currently flagged active, optionally filtered by jurisdiction (two-letter state code or name).
Parameters:
jurisdiction
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_topicsread-onlyList Bill Commons' curated cross-state topic trackers (e.g. artificial intelligence, youth online safety, platform accountability, cybersecurity, cryptocurrency, data privacy, local government & preemption) -- the entry point for "what subjects does Bill Commons track across all 50 states + DC" and "how do I get every bill in one". Each topic is a title/subject membership rule tuned for precision over recall, with a live bill_count and how_to_fetch_bills. This tool does not itself return bill rows -- pair it with search_legislation or the REST API's /topics/{slug} for the bills.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.