Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Legislation

REMOTE · MCP.DELILAHUSA.COM · SCANNED SEP 29

U.S. bills, roll-call votes, legislators and 2026 elections for all 50 states, D.C. and Congress.

62 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security46
Transport & Reachability100
Schema Quality & AI Usability74
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5991 tokens (~166/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management17
  • Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 96% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Legislation MCP server?

Legislation is a hosted endpoint at https://mcp.delilahusa.com/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.delilahusa.com

# add to Claude Code
claude mcp add --transport http com-delilahusa-legislation 'https://mcp.delilahusa.com/'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-delilahusa-legislation": {
      "url": "https://mcp.delilahusa.com/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-delilahusa-legislation": {
      "type": "http",
      "url": "https://mcp.delilahusa.com/"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-delilahusa-legislation]
url = "https://mcp.delilahusa.com/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-delilahusa-legislation": {
      "type": "remote",
      "url": "https://mcp.delilahusa.com/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-delilahusa-legislation --url 'https://mcp.delilahusa.com/' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-delilahusa-legislation:
    url: "https://mcp.delilahusa.com/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-delilahusa-legislation": {
      "Transport": "http",
      "Url": "https://mcp.delilahusa.com/"
    }
  }
}
# add to Vellum
assistant mcp add com-delilahusa-legislation -t streamable-http -u 'https://mcp.delilahusa.com/'
// mcp.json
{
  "mcpServers": {
    "com-delilahusa-legislation": {
      "type": "http",
      "url": "https://mcp.delilahusa.com/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 29 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 60

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 29 Sept 2026 · Probed https://mcp.delilahusa.com/

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=delilahusa.com CN=WE1,O=Google Trust Services,C=US 13 Aug 2026 11 Nov 2026 ECDSA 256 ECDSA-SHA256 928b1b91a9de9b5813877b7cbf447b9d
SANs: delilahusa.com, mcp.delilahusa.com, *.mcp.delilahusa.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.delilahusa.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
delilahusa.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.delilahusa.com/ Verified 200
http (plaintext) http://mcp.delilahusa.com/ Inconclusive 405
MCP tools · 36 exposed · ~5,743 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_ballot_measure ~140

Ballot measures (GET /v1/measures): the list for a state, or one measure by its number (e.g. 'Amendment 1') with full text, summary and official source URL. Use for 'what's on the ballot in X' and 'what does Amendment N do'.

NameTypeReqDescription
limitinteger––
numberstring–Exact measure number (e.g. 'Amendment 1') to fetch one measure.
offsetinteger––
qstring–Title search.
statestringyesPostal code.
typestring–Measure type filter.

No output schema declared.

No examples provided.

get_bill ~354

Fetch a single bill by its numeric bill_id (GET /v1/bills/{bill_id}), optionally merging in sub-resources: votes (roll calls with tallies), sponsors, history (action timeline), texts (version metadata), amendments, subjects, analyses (staff analyses), calendar (scheduled events), citations (statutes the bill touches), referrals (committee referrals), sast (same-as / similar-to companion bills in the other chamber or other states), supplements (fiscal notes and summaries). analyses and citations are populated only for the deeper-coverage states. Each include is a separate API call, so ask only for what you need. Pass detail:true to get everything in one round trip instead. Get a bill_id from search_bills or semantic_search_bills. status_id values: 1=Introduced, 2=In Committee, 3=Passed One Chamber, 4=Passed Both Chambers, 5=Signed into Law, 6=Vetoed, 7=Failed/Dead, 8=Chaptered. Aggregate buckets: passed={4,5,8}, failed={6,7}, alive={1,2,3}.

NameTypeReqDescription
bill_idintegeryesNumeric bill_id from a search result.
detailboolean–true = one request to /v1/bills/{id}/detail with every sub-resource merged (the cheapest way to get everything). Ignores include.
includearray–Sub-resources to merge into the result: votes, sponsors, history, texts, amendments, subjects, analyses, calendar, citations, referrals, sast, supplements.
max_itemsinteger–Cap on items per included list (default 50).

No output schema declared.

No examples provided.

get_bill_diff ~153

Compare two versions of a bill's text (GET /v1/bills/{bill_id}/diff): a unified diff plus similarity, added/removed line and character counts, and changed-section highlights. Get the two version ids from get_bill with include:['texts'] — each text row's `text_id`. Pass them as `from` (the earlier version) and `to` (the later version). Diffs are precomputed, so only bills that have more than one text version return one.

NameTypeReqDescription
bill_id–yesbill_id the two texts belong to.
from–yesText-version id of the earlier version (the baseline).
to–yesText-version id of the later version to compare against.

No output schema declared.

No examples provided.

get_bill_text ~92

The cleaned plain text of one bill-text version (GET /v1/texts/{text_id}), entities decoded, ready to quote or summarize. Get text_id from get_bill with include:['texts'] (each version has a date and type). Texts longer than 40,000 characters are clipped with a '[truncated]' marker.

NameTypeReqDescription
text_id–yestext_id from get_bill include:['texts'].

No output schema declared.

No examples provided.

get_bill_text_history ~97

Timeline of all computed diffs between successive text versions of one bill (GET /v1/bills/{bill_id}/changes): what changed, when, and how much. Use get_bill_diff for one specific pair of versions. Get bill_id from search_bills or semantic_search_bills.

NameTypeReqDescription
bill_id–yesbill_id from a search result.
include_whitespaceboolean–Include whitespace-only changes (default false).

No output schema declared.

No examples provided.

get_candidate ~117

Fetch one election candidate by id (GET /v1/candidates/{id}): their party, office, district and cycle, plus an FEC filer id where the campaign has filed and a Bioguide id for sitting members of Congress. When people_id is set, the candidate has a legislative voting record — pass it to get_legislator or get_legislator_scorecard to go from candidate to voting history in one hop. Get an id from list_candidates.

NameTypeReqDescription
id–yesCandidate id from list_candidates or get_midterms.

No output schema declared.

No examples provided.

get_candidate_photo ~154

The URL of a candidate's official portrait (GET /v1/photos/{candidate_id} returns the image bytes). Sources are official state-legislature and congressional portraits, public-domain and licensed images only — never a third party's photo library — and each carries a license and attribution string that MUST be shown when the license requires it (Wikimedia CC BY). Returns null when the candidate has no accepted portrait — which is the COMMON case: only about a tenth of the 2026 field has one (11%), so design for an initials-avatar default. Candidate rows from list_candidates and get_midterms already include photo_url, so call this only when you have just an id.

NameTypeReqDescription
candidate_id–yesCandidate id.

No output schema declared.

No examples provided.

get_changes ~184

Near-real-time feed of what changed (GET /v1/changes). Poll with since=<ISO timestamp> to get everything newer than your cursor; with no since it defaults to the last hour. Reason types include NewBill, StatusChange, Text, Vote and Amendment. Use this for monitoring and incremental sync — 'what moved in Florida since yesterday' — rather than re-scanning search_bills.

NameTypeReqDescription
limitinteger–Max rows to return (default 50).
reasonstring–Restrict to one change type, e.g. NewBill, StatusChange, Text, Vote, Amendment.
sincestring–ISO-8601 cursor. Omit for the last hour. Pass the newest timestamp you have already seen.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

get_committee ~102

Fetch a committee by committee_id (GET /v1/committees/{committee_id}), optionally merging in members (its roster, with roles) and hearings (its scheduled meetings). Find a committee_id with list_committees.

NameTypeReqDescription
committee_idintegeryesNumeric committee_id.
includearray–Sub-resources to merge in: members, hearings.
max_itemsinteger–Cap on items per included list (default 50).

No output schema declared.

No examples provided.

get_coverage ~157

Per-state depth snapshot (GET /v1/coverage): how COMPLETE each jurisdiction's data is — bill counts, the share of bills holding at least one vote, text or sponsor, and whether the legislature is currently in session. Use it before drawing conclusions from a thin result set, to tell 'no such bills' apart from 'this state is thinly covered'. Read the completeness ratios rather than the raw percentages: most bills die in committee without ever getting a roll call, so a low pct_with_votes usually reflects the legislature, not a gap in the data. Served from a materialised snapshot; `computed_at` gives its age.

NameTypeReqDescription
max_itemsinteger–Cap on rows returned (default 60 — all jurisdictions).

No output schema declared.

No examples provided.

get_legislator ~174

Fetch a legislator's profile by people_id (GET /v1/legislators/{people_id}), optionally merging in votes (every roll call they are recorded on, newest first, with their individual position: 1=Yea, 2=Nay, 3=Not Voting, 4=Absent) and bills (legislation they sponsor, with sponsor_type_id 1=primary, 2=cosponsor). Find a people_id with list_legislators or from a bill's sponsors. Corpus is 2026-forward only.

NameTypeReqDescription
includearray–Sub-resources to merge in: votes, bills.
limitinteger–Rows per included sub-resource (default 25).
people_idintegeryesNumeric people_id (int64 — many exceed int32).

No output schema declared.

No examples provided.

get_legislator_scorecard ~94

One-call voting and sponsorship profile for a legislator (GET /v1/legislators/{people_id}/scorecard): participation, party-line alignment, bills sponsored and passed, notable votes. This is the tool for 'how does X vote' or 'is X effective'. Get people_id from list_legislators (q=name).

NameTypeReqDescription
people_id–yespeople_id from list_legislators.

No output schema declared.

No examples provided.

get_midterms ~245

The election slate for 2026-11-03 (GET /v1/midterms): races, candidates and ballot measures per state, with official results where available. All data is official state election-office and FEC content collected by Delilah — no third-party attribution is required. live_results carries ONE ENTRY PER CONTEST, each with `contest` (e.g. primary:DEM, runoff:REP) and `party`: a closed primary returns each party separately and vote_pct is the share of THAT party's ballot, so never compare or rank candidates across two contests. Use for 'who is running for X' and results questions. Never call or project a race; report counts exactly as reported.

NameTypeReqDescription
chamberstring–House | Senate
levelstring–federal | governor | state_executive | state_legislative
limitinteger–Max rows (default 50).
offsetinteger–Pagination offset.
qstring–Candidate or race name search.
statestring–Postal code. Omit for all states.
yearinteger–Election year (default 2026).

No output schema declared.

No examples provided.

get_roll_call ~173

Fetch a roll call by roll_call_id (GET /v1/votes/{roll_call_id}): the motion, chamber, date and yea/nay/absent tallies. Add include:['details'] to also pull how every individual member voted (vote_id 1=Yea, 2=Nay, 3=Not Voting, 4=Absent) — this is the tool for 'how did each legislator vote on this'. Get a roll_call_id from get_bill with include:['votes'].

NameTypeReqDescription
includearray–Add 'details' for individual member positions.
max_itemsinteger–Cap on member rows returned (default 200 — enough for any single chamber).
roll_call_idintegeryesNumeric roll_call_id (int64 — may exceed int32).

No output schema declared.

No examples provided.

get_session_breakdown ~172

Bill count per status (by:'status', on the status_id ladder) or per subject (by:'subject') for one session (GET /v1/sessions/{id}/status-counts or /subject-counts). Get session_id from list_sessions. status_id values: 1=Introduced, 2=In Committee, 3=Passed One Chamber, 4=Passed Both Chambers, 5=Signed into Law, 6=Vetoed, 7=Failed/Dead, 8=Chaptered. Aggregate buckets: passed={4,5,8}, failed={6,7}, alive={1,2,3}.

NameTypeReqDescription
bystringyesGroup by status or by subject.
session_id–yessession_id from list_sessions (filter by state).

No output schema declared.

No examples provided.

get_session_dashboard ~80

Headline counts for one legislative session (GET /v1/sessions/{id}/dashboard): bills filed, passed, signed, vetoed, roll calls, active legislators. Start here for 'how is the 2026 Florida session going'. Get session_id from list_sessions.

NameTypeReqDescription
session_id–yessession_id from list_sessions (filter by state).

No output schema declared.

No examples provided.

get_session_sponsor_stats ~215

Legislators ranked by bills sponsored and passed in one session (GET /v1/sessions/{id}/sponsor-stats). Each row has bills_sponsored, bills_primary, bills_passed, bills_primary_passed and pass_rate (passed = status 4, 5 or 8). This is the one call for 'who is most active or effective this session' and 'which senator passed the most bills': set chamber and sort:'passed' (or 'primary_passed' to count only bills they carried). Committees filed as sponsors are excluded by default. Get session_id from list_sessions.

NameTypeReqDescription
chamberstring–Restrict to one chamber.
include_committeesboolean–Include committee sponsor rows (default false).
limitinteger–Max rows (default 40).
partystring–Restrict to one party.
session_id–yessession_id from list_sessions (filter by state).
sortstring–Ranking key (default sponsored).

No output schema declared.

No examples provided.

get_session_vote_participation ~81

How many roll calls each legislator voted in versus missed during one session (GET /v1/sessions/{id}/vote-participation). Use for attendance questions. Get session_id from list_sessions.

NameTypeReqDescription
limitinteger–Max rows (default 50).
session_id–yessession_id from list_sessions (filter by state).

No output schema declared.

No examples provided.

get_trending_bills ~110

Bills with the most news coverage in the window (GET /v1/trending), optionally for one state. Use for 'what's in the news' or 'hot bills right now'. Returns bill summaries with mention counts; call get_bill for detail.

NameTypeReqDescription
daysinteger–Look-back window in days (default 7).
limitinteger–Max rows (default 20).
statestring–Postal code, DC, or US. Omit for all.

No output schema declared.

No examples provided.

get_usage ~59

The current key's tier, monthly cap, requests used and remaining, and when the period resets (GET /v1/_meta/usage). Call this when a request is rate-limited (HTTP 429) or the user asks about their plan.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_weekly_stage_breakdown ~82

One row per stage with the number of bills whose latest action landed there in the window (GET /v1/bills-weekly-breakdown). All jurisdictions combined. Use for a national 'how much moved this week' number; use get_session_dashboard for one state.

NameTypeReqDescription
daysinteger–Look-back window in days (default 7).

No output schema declared.

No examples provided.

keyword_search_bills ~142

Keyword search where EVERY term must appear (GET /v1/search/bills). Use when the user gives specific words that all have to be present, e.g. ['short-term rental', 'tax']. Prefer semantic_search_bills for questions and search_bills for structured filters. Up to 10 terms. Returns bill summaries plus pagination. Corpus is 2026-forward only.

NameTypeReqDescription
keywordsarrayyesTerms that must all match.
limitinteger–Max rows (default 25).
offsetinteger–Pagination offset.
statearray–Jurisdictions (postal codes, DC, US). Omit for all.

No output schema declared.

No examples provided.

list_bills_by_stage ~149

Bills whose LATEST action in the window falls in a stage (GET /v1/bills-by-stage): introduced, committee, passed, executive (with the governor, signed, or vetoed), amendments, other. Fleet-wide across all jurisdictions — there is no state filter, so filter the rows by state_id or state_name yourself. Classified from the action text, not status_id. Use for 'what passed this week' or 'what reached the governor'. Stage values are lowercase.

NameTypeReqDescription
daysinteger–Look-back window in days (default 7).
limitinteger–Max rows (default 100).
stagestringyesLowercase stage name.

No output schema declared.

No examples provided.

list_candidates ~242

Search the election-candidate directory (GET /v1/candidates): people running for office. Filters combine with AND. Roughly a third carry an FEC filer id and sitting members of Congress carry a Bioguide id; both are null otherwise. Rows also carry people_id where the person has a legislative voting record — pass it to get_legislator / get_legislator_scorecard to go from candidate to voting history in one hop. Covers STATE and federal candidates. Pass a candidate id to get_candidate for the full record.

NameTypeReqDescription
bioguidestring–Filter by federal Bioguide id.
cycle––Election cycle / year filter, e.g. 2026.
fec_idstring–Filter by FEC filer id.
limitinteger–Max rows to return (default 50).
officestring–Office filter: H, S, P, House, Senate, President, or a whole word from a state office name (min 3 chars; unknown short values are rejected).
offsetinteger–Pagination offset.
statestring–2-letter postal code filter.

No output schema declared.

No examples provided.

list_committees ~109

List legislative committees (GET /v1/committees), filterable by jurisdiction, chamber, or name search. Returns the committee_id values that get_committee needs.

NameTypeReqDescription
chamberstring–Chamber filter, e.g. House or Senate.
limitinteger–Max rows to return (default 50).
qstring–Name search.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

list_districts ~193

District metadata by state and type (GET /v1/districts): congressional, state senate, state house. Pass district_id with boundary:true to get the polygon as GeoJSON (GET /v1/districts/{id}/boundary) — it is large, so set simplify (degrees, e.g. 0.01) to shrink it. Match districts NUMERICALLY (district_number), never by label text.

NameTypeReqDescription
boundaryboolean–true = return the GeoJSON polygon for district_id.
district_id––A district id from a previous list call (for boundary:true).
limitinteger––
offsetinteger––
simplifynumber–Simplification tolerance in degrees.
statestring–Postal code.
typestring–congressional | sldu (state senate/upper) | sldl (state house/lower)

No output schema declared.

No examples provided.

list_hearings ~142

Scheduled committee hearings across committees (GET /v1/hearings), filterable by jurisdiction and start date. Use this to answer 'what is being heard this week' or to track when a committee next meets. For hearings on one specific committee use get_committee with include:['hearings']; for one specific bill use get_bill with include:['calendar'].

NameTypeReqDescription
limitinteger–Max rows to return (default 50).
sincestring–ISO-8601 date or timestamp; only hearings on or after it.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

list_legislators ~150

Search or list legislators (GET /v1/legislators) by jurisdiction, chamber, party, district, or name. This is how you turn a name into the people_id that get_legislator needs. Filters combine with AND.

NameTypeReqDescription
chamberstring–Chamber filter, e.g. House or Senate.
districtstring–District identifier.
limitinteger–Max rows to return (default 50).
offsetinteger–Pagination offset.
partystring–Party filter.
qstring–Name search.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

list_session_legislators ~81

Every legislator who served in one session (GET /v1/sessions/{id}/legislators), with people_id. Use list_legislators for the current roster by state; use this for a specific past or special session. Get session_id from list_sessions.

NameTypeReqDescription
session_id–yessession_id from list_sessions (filter by state).

No output schema declared.

No examples provided.

list_sessions ~130

Legislative sessions (GET /v1/sessions): regular and special sessions with their years, start/sine-die dates and a session_id. Use this to resolve which session a bill belongs to, to find the current session for a state, or to pass session_id as a filter to search_bills. Omit `state` to list every jurisdiction's sessions. Corpus is 2026-forward only.

NameTypeReqDescription
max_itemsinteger–Cap on rows returned (default 200).
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

list_states ~85

The jurisdiction directory (GET /v1/states): the 50 states, D.C. and the U.S. Congress with their state_id, 2-letter code and full name. Returns the full list (52 rows) so you can resolve a name to a code or enumerate everything the corpus covers. For how COMPLETE each jurisdiction's data is, use get_coverage instead.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_subjects ~145

The raw subject taxonomy with per-subject bill counts (GET /v1/subjects). Subjects are the fine-grained categories the legislatures themselves assign to bills — narrower and more numerous than the curated topic slugs from list_topics. Use this to find a subject_id to filter search_bills by, or to gauge what a jurisdiction is legislating on. Scope with `state` and narrow with `q`.

NameTypeReqDescription
max_itemsinteger–Cap on rows returned (default 200).
qstring–Case-insensitive subject-name search.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.

No output schema declared.

No examples provided.

list_topics ~133

The canonical topic taxonomy with per-topic bill counts (GET /v1/topics). Call this first to find the right slug for the topic filter on search_bills, instead of guessing one. Pass a slug to get that topic's detail and a sample of the raw subject names folded into it (GET /v1/topics/{slug}); to get the topic's actual bills, use search_bills with topic=<slug>.

NameTypeReqDescription
max_itemsinteger–Cap on rows returned (default 200).
slugstring–Optional topic slug, e.g. 'healthcare'. Omit to list the whole taxonomy.

No output schema declared.

No examples provided.

manage_webhooks ~217

Manage the key's webhook subscriptions (/v1/webhooks). action:'list' is read-only. 'create' REGISTERS a URL that Delilah will POST to on the chosen events — it changes the account, so it requires confirm:true and the user's explicit go-ahead. 'test' queues a sample delivery to an existing subscription. 'delete' removes one (confirm:true). Events: bill_introduced, status_change, vote_recorded, text_updated, passed, vetoed, signed, amendment_added. Optional filters: states (postal codes), subjects.

NameTypeReqDescription
actionstringyes–
confirmboolean–Required true for create and delete.
eventsarray–create: at least one event type.
statesarray–create: only fire for these jurisdictions.
subjectsarray–create: only fire for these subjects.
webhook_idstring–test/delete: the subscription id from list.
webhook_urlstring–create: HTTPS URL to deliver to.

No output schema declared.

No examples provided.

search_bills ~503

Search or list legislation with structured filters (GET /v1/bills). Use this when you know the jurisdiction, sponsor, topic, or status you want. Every filter is optional and they combine with AND. A bill number typed into q (e.g. 'HB 1', 'SB0002') matches that bill directly. Returns bill summaries plus pagination; call get_bill for the full record. Corpus is 2026-forward only. status_id values: 1=Introduced, 2=In Committee, 3=Passed One Chamber, 4=Passed Both Chambers, 5=Signed into Law, 6=Vetoed, 7=Failed/Dead, 8=Chaptered. Aggregate buckets: passed={4,5,8}, failed={6,7}, alive={1,2,3}.

NameTypeReqDescription
bill_numberstring–Bill number, compact (HB1) or padded (HB0001).
include_sponsorsboolean–Attach a sponsors array (people_id, name, party, district, sponsor_type) to every bill. Use this whenever the answer needs to name who sponsored the bills.
limitinteger–Max rows to return (default 25).
offsetinteger–Pagination offset.
qstring–Free-text search across title, description, and subject names.
session_idinteger–Narrow to one session.
sponsor_last_namestring–Last name of a bill sponsor.
statestring–2-letter postal code (e.g. FL), DC, or US for Congress.
status_idinteger–Filter by status. status_id values: 1=Introduced, 2=In Committee, 3=Passed One Chamber, 4=Passed Both Chambers, 5=Signed into Law, 6=Vetoed, 7=Failed/Dead, 8=Chaptered. Aggregate buckets: passed={4,5…
subjectstring–Raw subject name (ILIKE match).
title_containsstring–Substring match against the bill title only.
topicstring–Canonical topic slug, e.g. 'healthcare'. See list_topics.
updated_sincestring–ISO-8601 date or timestamp; only bills changed since then.

No output schema declared.

No examples provided.

semantic_search_bills ~287

Vector search over the full text of every bill (GET /v1/search/semantic): describe what you want in plain English — 'protecting kids from social media', 'limits on rent increases' — and get the closest bills with a match_score. Prefer this over search_bills for questions and topics; prefer search_bills for a known bill number, sponsor, or status filter, and keyword_search_bills for exact terms that must all appear. Returns bill_id, bill_number, title, description, state_abbr, status_id. Corpus is 2026-forward only. status_id values: 1=Introduced, 2=In Committee, 3=Passed One Chamber, 4=Passed Both Chambers, 5=Signed into Law, 6=Vetoed, 7=Failed/Dead, 8=Chaptered. Aggregate buckets: passed={4,5,8}, failed={6,7}, alive={1,2,3}.

NameTypeReqDescription
limitinteger–Max rows (default 25).
querystringyesThe question or description, in plain English.
statearray–Restrict to these jurisdictions (postal codes, DC, US). Omit for all.
thresholdnumber–Minimum similarity 0-1 (default 0.3). Lower it to widen the net.

No output schema declared.

No examples provided.

Common questions

What is the Legislation MCP server?

Legislation is an MCP server listed in the public MCP registry as com.delilahusa/legislation. U.S. bills, roll-call votes, legislators and 2026 elections for all 50 states, D.C. and Congress. This page covers its hosted endpoint (https://mcp.delilahusa.com/).

Is the Legislation MCP server safe to use?

Legislation scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Legislation MCP server expose?

Legislation exposes 36 tools: search_bills, semantic_search_bills, get_bill, get_bill_diff, keyword_search_bills, and 31 more. Their descriptions and schemas cost roughly 5,743 tokens of context every time the server is loaded.

Does the Legislation MCP server require authentication?

No. We connected to Legislation without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Legislation MCP server still maintained?

Legislation is still listed as active in the MCP registry. We last reached this channel on 29 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.