{"serverId":"mcp-registry/com.delilahusa/legislation","tools":[{"name":"get_ballot_measure","fixed":{"name":"get_ballot_measure","description":"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'.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["state"],"properties":{"q":{"type":"string","description":"Title search."},"type":{"type":"string","description":"Measure type filter."},"limit":{"type":"integer","maximum":200,"minimum":1},"state":{"type":"string","maxLength":2,"minLength":2,"description":"Postal code."},"number":{"type":"string","description":"Exact measure number (e.g. 'Amendment 1') to fetch one measure."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Statewide ballot measures"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"get_bill","fixed":{"name":"get_bill","description":"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 ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["bill_id"],"properties":{"detail":{"type":"boolean","description":"true = one request to /v1/bills/{id}/detail with every sub-resource merged (the cheapest way to get everything). Ignores include."},"bill_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Numeric bill_id from a search result."},"include":{"type":"array","items":{"enum":["votes","sponsors","history","texts","amendments","subjects","analyses","calendar","citations","referrals","sast","supplements"],"type":"string"},"description":"Sub-resources to merge into the result: votes, sponsors, history, texts, amendments, subjects, analyses, calendar, citations, referrals, sast, supplements."},"max_items":{"type":"integer","maximum":200,"minimum":1,"description":"Cap on items per included list (default 50)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one bill"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":411,"tokensAfter":411},{"name":"get_bill_diff","fixed":{"name":"get_bill_diff","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["bill_id","from","to"],"properties":{"to":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"Text-version id of the later version to compare against."},"from":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"Text-version id of the earlier version (the baseline)."},"bill_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"bill_id the two texts belong to."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Diff two bill-text versions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":321,"tokensAfter":321},{"name":"get_bill_statutes","fixed":{"name":"get_bill_statutes","description":"The sections of existing law a bill amends, creates, repeals or cites (GET /v1/bills/{bill_id}/statutes), classified by how it touches each, with the current text of sections we hold. Use for 'what current law does this bill change'. Get bill_id from search_bills. Only states whose code is loaded resolve to section text (see list_statute_coverage); a link to a section we hold carries resolved:true and the text, otherwise just the citation as written.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["bill_id"],"properties":{"bill_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Numeric bill_id from a search result."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Laws a bill changes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":219,"tokensAfter":219},{"name":"get_bill_text","fixed":{"name":"get_bill_text","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text_id"],"properties":{"text_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"text_id from get_bill include:['texts']."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the text of one bill version"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":180,"tokensAfter":180},{"name":"get_bill_text_history","fixed":{"name":"get_bill_text_history","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["bill_id"],"properties":{"bill_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"bill_id from a search result."},"include_whitespace":{"type":"boolean","description":"Include whitespace-only changes (default false)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get every text diff for a bill"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"get_candidate","fixed":{"name":"get_candidate","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"Candidate id from list_candidates or get_midterms."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a candidate"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"get_candidate_photo","fixed":{"name":"get_candidate_photo","description":"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%),","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["candidate_id"],"properties":{"candidate_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"Candidate id."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Candidate portrait URL"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":237,"tokensAfter":237},{"name":"get_changes","fixed":{"name":"get_changes","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows to return (default 50)."},"since":{"type":"string","description":"ISO-8601 cursor. Omit for the last hour. Pass the newest timestamp you have already seen."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"reason":{"type":"string","description":"Restrict to one change type, e.g. NewBill, StatusChange, Text, Vote, Amendment."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the bill change feed"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":276,"tokensAfter":276},{"name":"get_committee","fixed":{"name":"get_committee","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["committee_id"],"properties":{"include":{"type":"array","items":{"enum":["members","hearings"],"type":"string"},"description":"Sub-resources to merge in: members, hearings."},"max_items":{"type":"integer","maximum":200,"minimum":1,"description":"Cap on items per included list (default 50)."},"committee_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Numeric committee_id."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one committee"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":221,"tokensAfter":221},{"name":"get_coverage","fixed":{"name":"get_coverage","description":"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 re","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"max_items":{"type":"integer","maximum":60,"minimum":1,"description":"Cap on rows returned (default 60 — all jurisdictions)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get per-state data coverage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":221,"tokensAfter":221},{"name":"get_legislator","fixed":{"name":"get_legislator","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["people_id"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Rows per included sub-resource (default 25)."},"include":{"type":"array","items":{"enum":["votes","bills"],"type":"string"},"description":"Sub-resources to merge in: votes, bills."},"people_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Numeric people_id (int64 — many exceed int32)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one legislator"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":278,"tokensAfter":278},{"name":"get_legislator_scorecard","fixed":{"name":"get_legislator_scorecard","description":"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).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["people_id"],"properties":{"people_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"people_id from list_legislators."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a legislator's scorecard"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":183,"tokensAfter":183},{"name":"get_measure_statutes","fixed":{"name":"get_measure_statutes","description":"The sections of existing law a 2026 ballot measure amends, creates, repeals or cites (GET /v1/measures/{state}/{number}/statutes). Use for 'which laws does Prop X / Question Y change'. Read from the measure's official text: constitutional amendments cite the constitution (not loaded), and a measure whose text is not yet published returns nothing. Treat the list as a floor. Only states whose code is loaded resolve to section text (see list_statute_coverage); a link to a section we hold carries re","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["state","number"],"properties":{"state":{"type":"string","maxLength":2,"minLength":2,"description":"2-letter postal code (e.g. NJ), DC, GU, or US for the U.S. Code."},"number":{"type":"string","description":"Measure number as served by get_ballot_measure, e.g. 'Proposition 319'."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Laws a ballot measure changes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":266,"tokensAfter":266},{"name":"get_midterms","fixed":{"name":"get_midterms","description":"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 candid","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Candidate or race name search."},"year":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Election year (default 2026)."},"level":{"enum":["federal","governor","state_executive","state_legislative"],"type":"string","description":"federal | governor | state_executive | state_legislative"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows (default 50)."},"state":{"type":"string","maxLength":2,"minLength":2,"description":"Postal code. Omit for all states."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset."},"chamber":{"type":"string","description":"House | Senate"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"2026 midterm election slate"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":386,"tokensAfter":386},{"name":"get_roll_call","fixed":{"name":"get_roll_call","description":"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'].","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["roll_call_id"],"properties":{"include":{"type":"array","items":{"enum":["details"],"type":"string"},"description":"Add 'details' for individual member positions."},"max_items":{"type":"integer","maximum":500,"minimum":1,"description":"Cap on member rows returned (default 200 — enough for any single chamber)."},"roll_call_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Numeric roll_call_id (int64 — may exceed int32)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one roll-call vote"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":276,"tokensAfter":276},{"name":"get_session_breakdown","fixed":{"name":"get_session_breakdown","description":"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}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id","by"],"properties":{"by":{"enum":["status","subject"],"type":"string","description":"Group by status or by subject."},"session_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"session_id from list_sessions (filter by state)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Bill counts by status or subject"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":251,"tokensAfter":251},{"name":"get_session_dashboard","fixed":{"name":"get_session_dashboard","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"session_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"session_id from list_sessions (filter by state)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Session dashboard"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"get_session_sponsor_stats","fixed":{"name":"get_session_sponsor_stats","description":"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","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"sort":{"enum":["sponsored","passed","primary_passed","pass_rate"],"type":"string","description":"Ranking key (default sponsored)."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows (default 40)."},"party":{"enum":["D","R"],"type":"string","description":"Restrict to one party."},"chamber":{"enum":["senate","house"],"type":"string","description":"Restrict to one chamber."},"session_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"session_id from list_sessions (filter by state)."},"include_committees":{"type":"boolean","description":"Include committee sponsor rows (default false)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Top sponsors in a session"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":388,"tokensAfter":388},{"name":"get_session_vote_participation","fixed":{"name":"get_session_vote_participation","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"limit":{"type":"integer","maximum":500,"minimum":1,"description":"Max rows (default 50)."},"session_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"session_id from list_sessions (filter by state)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Roll-call participation per legislator"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"get_statute","fixed":{"name":"get_statute","description":"One section of law with full text and its place in the code (GET /v1/statutes/sections/{section_id}, or by citation via GET /v1/statutes/lookup). Give section_id from a search or a bill/measure link, or state + citation exactly as the code prints it (e.g. '39:4-50', '790.01', '18-3-102'). Set include_bills:true to also return the bills that amend, create, repeal or cite the section. Only states whose code is loaded resolve to section text (see list_statute_coverage); a link to a section we hold ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"code":{"type":"string","description":"code_key when a citation exists in more than one code of the state."},"state":{"type":"string","maxLength":2,"minLength":2,"description":"2-letter postal code (e.g. NJ), DC, GU, or US for the U.S. Code."},"citation":{"type":"string","description":"Section citation without the code prefix, e.g. '39:4-50'."},"section_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"section_id from a statute search or link."},"include_bills":{"type":"boolean","description":"Also fetch the bills that touch this section."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"One statute section"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":349,"tokensAfter":349},{"name":"get_trending_bills","fixed":{"name":"get_trending_bills","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","maximum":365,"minimum":1,"description":"Look-back window in days (default 7)."},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows (default 20)."},"state":{"type":"string","maxLength":2,"minLength":2,"description":"Postal code, DC, or US. Omit for all."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Bills trending in the news"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"get_usage","fixed":{"name":"get_usage","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Your API usage this month"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"get_weekly_stage_breakdown","fixed":{"name":"get_weekly_stage_breakdown","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","maximum":365,"minimum":1,"description":"Look-back window in days (default 7)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Fleet-wide counts per stage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":149,"tokensAfter":149},{"name":"keyword_search_bills","fixed":{"name":"keyword_search_bills","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["keywords"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows (default 25)."},"state":{"type":"array","items":{"type":"string","maxLength":2,"minLength":2},"description":"Jurisdictions (postal codes, DC, US). Omit for all."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset."},"keywords":{"type":"array","items":{"type":"string","minLength":1},"maxItems":10,"minItems":1,"description":"Terms that must all match."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search bills by exact keywords (all must match)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":283,"tokensAfter":283},{"name":"list_bills_by_stage","fixed":{"name":"list_bills_by_stage","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["stage"],"properties":{"days":{"type":"integer","maximum":365,"minimum":1,"description":"Look-back window in days (default 7)."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows (default 100)."},"stage":{"enum":["introduced","committee","passed","executive","amendments","other"],"type":"string","description":"Lowercase stage name."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Bills that moved to a stage recently"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"list_candidates","fixed":{"name":"list_candidates","description":"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 r","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"cycle":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"Election cycle / year filter, e.g. 2026."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows to return (default 50)."},"state":{"type":"string","description":"2-letter postal code filter."},"fec_id":{"type":"string","description":"Filter by FEC filer id."},"office":{"type":"string","description":"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)."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset."},"bioguide":{"type":"string","description":"Filter by federal Bioguide id."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search election candidates"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":401,"tokensAfter":401},{"name":"list_committees","fixed":{"name":"list_committees","description":"List legislative committees (GET /v1/committees), filterable by jurisdiction, chamber, or name search. Returns the committee_id values that get_committee needs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Name search."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows to return (default 50)."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"chamber":{"type":"string","description":"Chamber filter, e.g. House or Senate."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List committees"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":185,"tokensAfter":185},{"name":"list_districts","fixed":{"name":"list_districts","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"type":{"enum":["congressional","sldu","sldl"],"type":"string","description":"congressional | sldu (state senate/upper) | sldl (state house/lower)"},"limit":{"type":"integer","maximum":500,"minimum":1},"state":{"type":"string","maxLength":2,"minLength":2,"description":"Postal code."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0},"boundary":{"type":"boolean","description":"true = return the GeoJSON polygon for district_id."},"simplify":{"type":"number","minimum":0,"description":"Simplification tolerance in degrees."},"district_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"A district id from a previous list call (for boundary:true)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Electoral districts (and boundaries)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":345,"tokensAfter":345},{"name":"list_hearings","fixed":{"name":"list_hearings","description":"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'].","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows to return (default 50)."},"since":{"type":"string","description":"ISO-8601 date or timestamp; only hearings on or after it."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List hearings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":227,"tokensAfter":227},{"name":"list_legislators","fixed":{"name":"list_legislators","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Name search."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max rows to return (default 50)."},"party":{"type":"string","description":"Party filter."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset."},"chamber":{"type":"string","description":"Chamber filter, e.g. House or Senate."},"district":{"type":"string","description":"District identifier."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search legislators"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":259,"tokensAfter":259},{"name":"list_session_legislators","fixed":{"name":"list_session_legislators","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["session_id"],"properties":{"session_id":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"string"}],"description":"session_id from list_sessions (filter by state)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Legislators active in a session"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":173,"tokensAfter":173},{"name":"list_sessions","fixed":{"name":"list_sessions","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"max_items":{"type":"integer","maximum":500,"minimum":1,"description":"Cap on rows returned (default 200)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List legislative sessions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":203,"tokensAfter":203},{"name":"list_states","fixed":{"name":"list_states","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List states & jurisdictions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"list_statute_coverage","fixed":{"name":"list_statute_coverage","description":"Which jurisdictions' codified law is loaded, and how big and current it is (GET /v1/statutes/coverage): per state the number of codes, sections, bill links and the edition it is current through. Pass state to list that state's codes (GET /v1/statutes/codes) — the code_id values used by get_statute lookups. Call this first to know whether a state's statutes are available.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"state":{"type":"string","maxLength":2,"minLength":2,"description":"2-letter postal code (e.g. NJ), DC, GU, or US for the U.S. Code."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Statute coverage and codes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"list_subjects","fixed":{"name":"list_subjects","description":"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`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Case-insensitive subject-name search."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"max_items":{"type":"integer","maximum":500,"minimum":1,"description":"Cap on rows returned (default 200)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List subjects"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"list_topics","fixed":{"name":"list_topics","description":"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>.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"slug":{"type":"string","description":"Optional topic slug, e.g. 'healthcare'. Omit to list the whole taxonomy."},"max_items":{"type":"integer","maximum":500,"minimum":1,"description":"Cap on rows returned (default 200)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List topics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":209,"tokensAfter":209},{"name":"manage_webhooks","fixed":{"name":"manage_webhooks","description":"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","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["action"],"properties":{"action":{"enum":["list","create","test","delete"],"type":"string"},"events":{"type":"array","items":{"enum":["bill_introduced","status_change","vote_recorded","text_updated","passed","vetoed","signed","amendment_added"],"type":"string"},"description":"create: at least one event type."},"states":{"type":"array","items":{"type":"string","maxLength":2,"minLength":2},"description":"create: only fire for these jurisdictions."},"confirm":{"type":"boolean","description":"Required true for create and delete."},"subjects":{"type":"array","items":{"type":"string"},"description":"create: only fire for these subjects."},"webhook_id":{"type":"string","description":"test/delete: the subscription id from list."},"webhook_url":{"type":"string","format":"uri","description":"create: HTTPS URL to deliver to."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"List, create, test or delete webhooks"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":416,"tokensAfter":416},{"name":"search_bills","fixed":{"name":"search_bills","description":"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=Vetoe","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Free-text search across title, description, and subject names."},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows to return (default 25)."},"state":{"type":"string","description":"2-letter postal code (e.g. FL), DC, or US for Congress."},"topic":{"type":"string","description":"Canonical topic slug, e.g. 'healthcare'. See list_topics."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset."},"subject":{"type":"string","description":"Raw subject name (ILIKE match)."},"status_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"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,8}, failed={6,7}, alive={1,2,3}."},"session_id":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Narrow to one session."},"bill_number":{"type":"string","description":"Bill number, compact (HB1) or padded (HB0001)."},"updated_since":{"type":"string","description":"ISO-8601 date or timestamp; only bills changed since then."},"title_contains":{"type":"string","description":"Substring match against the bill title only."},"include_sponsors":{"type":"boolean","description":"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."},"sponsor_last_name":{"type":"string","description":"Last name of a bill sponsor."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search bills"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":640,"tokensAfter":640},{"name":"search_statutes","fixed":{"name":"search_statutes","description":"Full-text search of a state's codified law (GET /v1/statutes/search). Use for 'what does the law say about X' and to find the section a bill or ballot measure changes. Returns matching sections with headings and excerpts; fetch the whole section with get_statute. Only states whose code is loaded resolve to section text (see list_statute_coverage); a link to a section we hold carries resolved:true and the text, otherwise just the citation as written.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["state","q"],"properties":{"q":{"type":"string","minLength":2,"description":"Words to find in section headings and text."},"code":{"type":"string","description":"Restrict to one code (code_key from list_statute_coverage), e.g. a California code."},"limit":{"type":"integer","maximum":100,"minimum":1},"state":{"type":"string","maxLength":2,"minLength":2,"description":"2-letter postal code (e.g. NJ), DC, GU, or US for the U.S. Code."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search statutes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":294,"tokensAfter":294},{"name":"semantic_search_bills","fixed":{"name":"semantic_search_bills","description":"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 i","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows (default 25)."},"query":{"type":"string","maxLength":1000,"minLength":1,"description":"The question or description, in plain English."},"state":{"type":"array","items":{"type":"string","maxLength":2,"minLength":2},"description":"Restrict to these jurisdictions (postal codes, DC, US). Omit for all."},"threshold":{"type":"number","maximum":1,"minimum":0,"description":"Minimum similarity 0-1 (default 0.3). Lower it to widen the net."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search bills by meaning"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":337,"tokensAfter":337}],"toolsChanged":41,"tokensSaved":0,"todo":[{"tool":"get_ballot_measure","params":["limit","offset"]},{"tool":"list_districts","params":["limit","offset"]},{"tool":"manage_webhooks","params":["action"]},{"tool":"search_statutes","params":["limit"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}