Conservative States

← Connection guide

Tool reference

What each tool returns, what it costs, and the chains that answer questions people actually ask.

How to read this

You never call these by name. You ask a question and the assistant chooses; the names matter when you want to know what it did, or when you are deciding whether the toolset covers a job you care about.

Every tool is scoped to one state and one legislative session, resolved from your membership. Bill numbers may be written naturally — HB809, hb 809, and H.B. 809 all resolve to the stored HB0809, and an unparseable number returns an error rather than a near-miss match.

The 19 tools

search_billsstandardlegislation:read

Find bills by structured filters: policy issue, sponsor, committee, status, filing date, significance, whether the bill is currently moving, whether it grows or shrinks government authority, and which way it leans.

Status means the stage a bill has *reached*, not where it sits today — a bill that passed the House and died in the Senate did pass the House, and both are worth being able to ask for. Long result sets are paged, with a cursor rather than a silent stop.

query · issueSlugs · statuses · sponsorName · committeeName · filedAfter · minSignificance · onlyMoving · governmentScopeDirection · lean · minLeanScore · maxLeanScore · limit · cursor

semantic_search_legislationexpensivelegislation:read

Searches the full text of bills, amendments, and fiscal notes by meaning, for when a bill addresses a topic without using its obvious words. Returns passages with the bill they came from, and handles exact strings such as statute citations.

This is what keyword tracking systematically misses, and the reason a bill blindsides an organization in April.

query · documentTypes · topK

get_billstandardlegislation:read

Full detail for one bill: sponsors, committee, status, action history, companions, policy tags, key provisions, scores, and which way the bill leans with the reasoning behind it. The right call before any specific factual claim.

The lean is a direction, not a recommendation — a bill can lean conservative and still be one an organization opposes. It carries a confidence, and is absent entirely for bills where the axis does not apply.

billNumber · billId

get_bill_textstandardlegislation:read

The actual text, by section and page. Use it when the exact wording matters — quoting a provision, checking what a section says, reading an amendment.

Long documents are paged and every response reports how much remains, so an agent cannot mistake page one for the whole bill.

billNumber · billId · documentRef · documentType · section · page · includeHistorical

get_bill_changesstandardlegislation:read

Amendments filed against a bill, what each does, and whether it was adopted, withdrawn, or is still pending.

In Tennessee amendments are how bills change — there are no separately published revisions — so this is how you know a bill is still the bill you read.

billNumber · billId · adoptedOnly

get_bill_statute_changesstandardlegislation:read

What a bill changes about the law that already exists — the current statute text, the proposed text, and a redline between them, per cited code section. Amendatory drafting ("Section 39-17-1359(b) is amended by deleting the second sentence") says nothing about what the sentence said; this does.

The redline is generated by a model from scraped statute text, so it is a reading of the change rather than the enrolled language, and the source URL travels with it. Every response says whether the bill was analysed at all — "no changes" is reported differently from "not processed" and from "this state is out of scope", because an empty list otherwise reads as a bill that leaves current law alone.

billNumber · billId · sectionNumber · includeFullText · page

compare_billsstandardlegislation:read

Two to five bills aligned side by side — provisions, statutes touched, status, scores — plus which are companions and how textually similar they are.

One call instead of several lined up by hand, which is where transcription errors creep in.

billNumbers · billIds

get_similar_billsstandardlegislation:read

Bills whose text and policy resemble a given bill, ranked, with companions labelled.

Similarity shows resemblance only. It is never evidence of coordination or of model legislation.

billNumber · billId · limit

get_votesstandardvotes:read

Totals by chamber and party, who voted against, who was absent, and any party defectors. Ask for every member and how they voted to build a whip count.

Where a source published only a tally, the member list comes back empty and flagged — so an empty dissenter list on a 12–4 vote reads as "the names were not published", never as "nobody dissented".

billNumber · billId · rollCallId · legislatorNames · includeAllVoters

get_legislatorstandardlegislators:read

A member’s profile plus sponsorship and voting activity this session: bill counts, top policy areas, and how often they vote against their own party. Omit the name to rank a whole caucus instead of asking member by member.

Breaking with the party counts only votes actually cast against it. Not Voting and Absent are reported separately, never as breaks — counting them was inflating members who simply miss votes into apparent mavericks.

name · peopleId · includeCommittees · party · chamber · sort · limit · cursor

get_legislator_dissentsexpensivevotes:read

The specific roll calls where a member voted against their own party — the bill, the date, how they voted, what their party voted, what the other party voted, and which way the bill leans. Filter to breaks on conservative-leaning bills where the member crossed to the other side, and the scorecard question answers itself.

Each break says whether the member crossed to the other party’s majority, and how many of their own party broke with them. A lone crossover and a break twenty colleagues joined are different findings, and a rate alone cannot tell them apart.

name · peopleId · crossedOnly · billLean · minSignificance · limit · cursor

get_vote_alignmentexpensivevotes:read

How closely two voting records agree — one member against another, a whole caucus ranked by how often they vote with someone, or every member ranked against your own recorded support and oppose positions. The whip-count tool: who is reliable, who is a swing, and which bloc a member actually votes with.

Quote the contested rate, not the raw one. Roughly four in five roll calls pass unanimously, so raw agreement mostly measures uncontroversial business — it makes a Republican and a Democrat who oppose each other on everything contested look like 86% allies. On contested votes that same pair is 28%. Both numbers are returned; only one of them means anything.

name · peopleId · compareToName · compareToPeopleId · compareToPortfolio · party · chamber · issueSlugs · billLean · minSignificance · limit

get_committeestandardcommittees:read

Membership with chair and vice chair, bills pending before it, and scheduled hearings. Searching bills tells you what sits in a committee; only this tells you who decides.

The roster is reconstructed from the roll-call record for the session — who actually sat on the panel, not who sits today. 43% of the member-committee pairs the Tennessee record evidences are absent from present-day rosters.

name · committeeId · include · limit · asOf

get_policy_frameworkcheaplegislation:read

The conservative position framework this organization measures legislation against — scope, principles, the bright-line support and oppose rules, Tennessee’s legal landscape, and the traps — across 13 policy domains. Ask for a domain by name, or pass a bill and get the framework for its own domain.

The bill tools are deliberately descriptive and carry no position. Without this an assistant judging whether something is "conservative" is using its own idea of the word rather than yours.

domain · billNumber · billId · includePrinciples

get_recent_legislative_activitystandardlegislation:read

Bills filed, actions taken, votes recorded, amendments filed, hearings scheduled. The starting point for "what changed this week", rather than searching text.

sinceDays · issueSlugs · limit · cursor

get_legislative_calendarstandardlegislation:read

What is scheduled and when, across every bill at once — committee and floor calendars, filterable to a committee, an issue, named bills, or just the ones your organization tracks. One call in place of asking each committee separately and merging the answers.

The structured calendar feed this state publishes is nearly empty, so most events are recovered from the wording of the action record itself. Each event says which source it came from. An empty result reports the dates the record does cover, so a recess reads as a recess rather than as an absence of data.

from · to · committeeName · issueSlugs · billNumbers · minSignificance · onlyTracked · limit

aggregate_legislative_dataexpensiveanalytics:read

Counts, averages, and outcome rates across the session, computed in the database rather than sampled from a page of results — grouped by issue, committee, sponsor, party, status, month, or which way bills lean. Pass and fail rates by referring committee answer the chokepoint question: where do our bills actually die. Filters combine, so two-dimensional questions are a single call.

Models miscount, so anything that can be arithmetic is done in SQL. Rates come with their denominator and are associations rather than causes — a committee with a high pass rate may be advancing bills, or may simply be where bills are sent once leadership has already decided to move them, and this data cannot tell the two apart.

metric · groupBy · issueSlugs · party · lean · statuses · committeeName · filedAfter · filedBefore · limit

get_org_portfoliocheaporg:read

Your organization’s own tracked bills, issue portfolios, and positions — what you support, what you oppose, and how much you care.

Reachable only through a connection you signed in to from the AI app. A pasted token can never read it.

portfolioName · onlyTracked · limit · cursor

get_org_legislator_intelstandardorg:read

What your organization knows about one legislator that the public record does not — the notes your staff recorded, how many of your supporters live in their district and how many have contacted them, and how they voted on the bills you took a position on. The brief you want before a district meeting.

Reachable only through a connection you signed in to from the AI app; a pasted token cannot see it at all. A zero supporter count usually means addresses have not been geocoded rather than that nobody there supports you, and the response says so — the two read identically and lead to opposite decisions.

name · peopleId · noteType · limit

Playbook

Each of these is one question. The chain underneath is what the assistant runs on its own — you do not orchestrate it.

The Monday morning briefing

What moved last week on our issues, and what needs a decision from us before Thursday?

get_org_portfolio → get_recent_legislative_activity → get_bill ×N → get_committee

Your tracked bills crossed against the week’s actual movement, with hearings before your deadline surfaced first. Replaces the manual pass through a tracking list every Monday.

The whip count

On HB 809 — who voted for it, who broke with their party, and who is worth a call?

get_votes (includeAllVoters) → get_vote_alignment → get_legislator_dissents

Every member named with their vote, then ranked by how often they actually vote with the members you can already count on. Quote the contested rate: four in five roll calls pass unanimously, so a raw agreement figure makes opponents look like allies. A no vote from someone who never breaks ranks is a very different call from one who breaks routinely.

Is this still the bill we endorsed?

HB 1729 has been amended twice since we took a position. What changed, and does our support still hold?

get_bill_changes → get_bill_text → get_org_portfolio

Each amendment, whether it was adopted, and the current text of the sections it touched, set against the position you actually recorded. Catches the quiet gutting amendment that turns a supported bill into one you would oppose.

Companion divergence

Do the House and Senate versions of the school choice bill still match?

search_bills → compare_bills → get_bill_changes ×2

The two bills aligned provision by provision with similarity scored, plus the amendments that pulled them apart. Answers which chamber’s version you should be lobbying.

Finding what you did not know to look for

Is anything this session quietly expanding civil liability for small employers?

semantic_search_legislation → get_bill ×N → get_bill_text

Bills matched on meaning rather than keyword, so one that never says “small employer” still surfaces.

Reading the committee before you walk in

Brief me on House Education Administration before Wednesday’s hearing.

get_legislative_calendar → get_committee → get_vote_alignment

What is actually scheduled and when, who sits on the panel, who chairs it, and how each member votes relative to the ones you already know. Turns a roster into a vote map.

Session-scale pattern questions

Which committees are the real chokepoints for our issues, and who sponsors the most bills in them?

aggregate_legislative_data ×2 → get_committee

Counts computed across the whole session rather than sampled from a page of results. Informs where relationship-building actually pays off next interim.

Where our bills die

Which committee is the chokepoint for our issues, and what happens to bills that reach it?

aggregate_legislative_data (fail rate by referring committee) → get_committee → get_vote_alignment

Pass and fail rates by the committees a bill was actually referred to, with the number of bills behind each rate, then who sits on the worst of them. Note that a rate is an association: a panel may be killing bills, or may be where bills are sent once leadership has already decided they are going nowhere.

Is this member with us?

Before I meet Rep. Smith — what do we know, and how has she voted on our bills?

get_org_legislator_intel → get_vote_alignment (compareToPortfolio) → get_legislator_dissents

Your own meeting notes, how many of your supporters live in her district and how many have contacted her, and her record against the positions you recorded — with a vote she never cast counted as a missing vote rather than as a vote against you.

What does this actually change about current law?

HB 1729 amends three code sections. What do they say now, and what would they say?

get_bill → get_bill_statute_changes → get_bill_text

The existing statute text, the proposed text, and a redline per cited section — the thing amendatory drafting cannot tell you, because "is amended by deleting the second sentence" says nothing about what the sentence said.

The week ahead

What is on the calendar next week for anything we are tracking?

get_legislative_calendar (onlyTracked) → get_bill → get_committee

Every scheduled hearing across your tracked bills in one call rather than one call per committee. An empty week reports the dates the record does cover, so a recess is distinguishable from missing data.

Drafting grounded in the record

Draft talking points opposing HB 809, quoting the liability language exactly.

get_bill → get_bill_text → get_votes → the agent writes

Talking points where every quotation is verbatim from the bill and every vote count is the recorded one. The agent writes the argument; it does not invent the facts.

Guardrails worth knowing

The agent is told when the record is silent

Roll calls report whether member-level detail exists. When a source publishes only a tally, the member list comes back empty and flagged — so an empty dissenter list on a 12–4 vote reads as “the names were not published”, never as “nobody dissented”. Without that distinction a model will confidently report a contested vote as unanimous.

Committee rosters are as of the vote, not as of today

Membership is reconstructed from the roll-call record, so a March vote is analysed against the panel that actually sat in March. Where no roll-call evidence exists, the response says so rather than implying history it does not have.

Agreement is measured on the votes that were contested

Roughly four in five roll calls pass unanimously, so a raw agreement rate mostly measures uncontroversial business — it makes a Republican and a Democrat who oppose each other on everything actually fought over look like 86% allies. On contested roll calls that same pair is 28%. Both figures are returned, rankings sort on the contested one, and every response says which to quote.

An empty answer says why it is empty

Nothing scheduled, a window outside the dates we hold, filters that excluded everything, and a bill never analysed against current law are four different things that all look like an empty list. Each is reported as itself, with the range the record does cover. Without that, "no hearings scheduled" and "we have no calendar data" are indistinguishable to a model, and it will state the first one.

A missed vote is never counted as opposition

Not Voting and Absent are excluded from both sides of every ratio — party-break rates, agreement rates, and alignment against your own recorded positions. A member who was not on the floor appears as having cast no vote, not as having voted against you. Counting absences as breaks was inflating quiet members into apparent mavericks.

Citations are grounded by construction

Tools return the entities they legitimately exposed. A citation to a bill, member, or vote the agent was never shown is rejected rather than rendered, so a plausible-looking reference cannot be fabricated.

Retrieved text is data, not instruction

Bill text, amendments, and fiscal notes are material to analyse. Text inside a document that tries to issue instructions is analysed, not obeyed.

Your queries are not retained

Requests are audited for abuse and metering — tool name, cost class, duration — but tool arguments are deliberately never stored. Which bills you are watching and which members you are counting is the sensitive part of an advocacy organization’s traffic, and the safest place to keep it is nowhere.

Access follows your staff roster

Entitlements are re-resolved from live membership on every request. A staffer who is removed or demoted loses access at the same moment they lose the interface, without anyone revoking a credential by hand.

Limits, plainly

  • One state and one session per connection, resolved from your membership.
  • Rate limits apply per connection, per account, and per organization — a second connection does not buy a second budget.
  • Read-only. No tracking, alerting, position-setting, or scheduling.
  • Member-level votes exist only where the source published them.
  • Similarity is resemblance, not evidence of coordination.
  • Significance is not likelihood of passage — a bill can matter and be going nowhere.
  • Organization data requires a signed-in connection plus the organization opt-in.
  • Positions are not decided here; full support and oppose analysis lives in the app.
  • Comparison against current law covers Tennessee only, and reports when it has not run rather than returning an empty result.
  • The hearing calendar is largely reconstructed from the action record, because the structured feed this state publishes is nearly empty. Each event says which source it came from.
  • Rate limits are per connection, per minute, by cost class: 120 cheap, 90 standard, 20 expensive, 150 in total.
conservative-states 2026.11.0 · protocol 2026-07-28 (also serving 2025-06-18). Tool names, arguments, scopes, and cost classes on this page are generated from the running server. Connection guide.