The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Bill Commons listing page.
Bill Commons is a public, open-source legislative search platform covering the
current session/biennium for all 50 U.S. states plus DC. It provides a web
search UI, a REST API, an MCP (Model Context Protocol) server, and a public
status/coverage page. Public infrastructure first: no paywall on ordinary
search or reasonable API use — anonymous callers get a generous daily cap
(2,000 requests/day per IP, 5,000/day per /24 subnet); a free API key raises
that further, and only high-volume/bulk use is paid. See
/docs/bulk for API keys and
full-corpus snapshots.
See docs/architecture/ARCHITECTURE.md
for the locked architecture and data model.
Hosted on Railway (project billcommons: api, mcp, worker services +
managed Postgres) and Vercel (project billcommons-web). See
docs/operations/deployment-runbook.md
for the full deploy/rollback procedure.
The hosted MCP server gives AI assistants direct access to all 209k+ bills — no API key, no setup beyond one command:
Claude Desktop: Settings → Connectors → Add custom connector with URL
https://mcp.billcommons.org/mcp. Cursor and other clients: add the same URL
as a Streamable HTTP server in mcp.json.
Ten tools including search_legislation, get_bill_record,
compare_bill_versions, and trace_legislative_history. Full walkthrough
(including REST recipes for agents without MCP):
https://billcommons.org/docs/agents
packages/schema (SQLAlchemy models + Alembic) is the single source of
truth every other package/app imports from — no service owns its own copy
of the data model.
pg_trgm, unaccent, pgcrypto extensions available)apps/web)This installs packages/schema and packages/shared as editable installs
(single source of truth for the data model + shared utils), plus the
worker package: .venv/bin/pip install -e workers/ingest. Install the API
package too if you're working on it: .venv/bin/pip install -e apps/api.
Set DATABASE_URL in your environment (or in ~/.config/billcommons/.env,
which is read as a fallback and is never committed):
Requires Postgres 16 with the pg_trgm and unaccent extensions available
(created by migration 0001). Run migrations:
This brings up Postgres, the API, the ingestion worker, and the MCP server.
The web app (apps/web) is run separately via npm run dev during local
development (see infra/docker/docker-compose.yml for the placeholder
service definition).
docs/architecture/ARCHITECTURE.md — locked architecture + data modeldocs/SPEC.md — requirements digest / acceptance gatedocs/operations/deployment-runbook.md — Railway/Vercel deploy, rollback, smoke checklistdocs/operations/ingestion-runbook.md — CLI reference, job queue, refresh cadencedocs/operations/source-failure-runbook.md — stale zips, 401/429, robots blocksdocs/operations/backup-restore.md — pg_dump/restore, raw-data re-fetchdocs/operations/add-a-jurisdiction.md — onboarding a new territory/statedocs/state-coverage/methodology.md — coverage state machine, GREEN criteriadocs/api/examples.md — curl/Python/JavaScript examples against the live APIdocs/sources/openstates-csv.md — Open States bulk CSV column mappingApache-2.0. See LICENSE and NOTICE for data attribution (Open States / Plural Policy, public-domain legislative data).
See CONTRIBUTING.md. This project follows the Contributor Covenant.
See SECURITY.md for responsible disclosure.