Skip to main content
Glama
JonnyWaffles

va-lis-mcp

by JonnyWaffles

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LIS_API_KEYYesYour LIS API key (a GUID). Required for all requests.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_current_sessionA

The General Assembly's current working session.

During the interim this is the upcoming session, not the one that just ended; continued bills and new prefiles accumulate there. For retrospective work on a finished session, pass that session's code to the other tools instead of relying on this default.

list_sessionsA

Legislative sessions for a calendar year.

Returns each session's code, e.g. 20261 = 2026 Regular Session and 20262 = 2026 Special Session I. The reference list reaches back to 1994.

list_billsA

List bills in a session, optionally filtered by a search term.

query is a case-insensitive substring match against the bill number, description, and title. limit is capped at 200; page through larger result sets with offset. total_matching counts all matches, not just the returned page.

get_billA

Full detail for one bill: title, status, dates, patrons, session lineage.

patrons groups member names by role (Chief Patron, Co-Patron, ...); get_bill_patrons returns the same list with member ids. sessions lists every session the bill appears in; two entries mean it was carried over from the even-year session into the odd-year session.

get_bill_patronsA

Every patron of a bill with their member ids, in LIS display order.

role is Chief Patron, Chief Co-Patron, or Co-Patron. member_id chains into get_member, get_member_bills, get_member_votes, and get_member_committees. get_bill lists the same names grouped by role, without ids.

get_bill_summariesB

Plain-text summaries of a bill (as introduced, as passed, ...).

The entry with is_active true is the current summary. An empty list means LIS has published no summary for that bill and session.

get_bill_textA

Full text of one bill version, HTML stripped to plain text.

document_code selects a version (e.g. "HB1" = introduced, "HB1ER" = enrolled); the default is the most recent version. available_versions lists every version that can be requested. Long texts are cut at 15,000 characters with truncated set true. Amendment markup (additions and strikethrough deletions) is flattened to plain text.

get_bill_historyA

Chronological action history for a bill, from prefiling to governor action.

Passage dates live here (the bill detail's passage date fields are always null in LIS): look for events with is_passage true and read date and vote_tally. is_passage marks the events whose resulting status is a passage status (Passed House, Passed Senate, ...). status is the bill's status after each event. committee names the committee that acted; this is the only place LIS records which committee holds a bill. vote_id links an event to its vote: pass it to get_roll_call.

get_bill_votesA

Every recorded vote on a bill, in both chambers, in chronological order.

Floor, committee, and subcommittee votes all appear. is_roll_call is true when the recorded members voted on this bill alone; it is false for a voice vote (no members recorded) and for a block vote (one motion that disposed of bills_in_vote bills at once, which is not a position on any one of them). Pass a vote_id to get_roll_call for the member by member record. Costs one request per vote.

get_roll_callA

Who voted which way on a bill, with party and district, one entry per vote.

Members are grouped under yea, nay, abstain, and not_voting. statements are corrections members filed ("recorded as yea. Intended to vote nay."); the recorded response still stands. Only votes that record members on this bill alone are included: voice votes and block votes are left out (get_bill_votes lists those too). vote_id narrows the result to one vote.

get_member_votesA

Every vote one member cast in a session, or their votes on one bill.

Floor, committee, and subcommittee votes all appear, in LIS order. A row is one (vote, bill) pair: a block vote that disposed of 105 bills appears 105 times, each with is_block true and bills_in_vote set. A block vote is a real vote, but not a considered position on any one bill; exclude_block_votes drops them. total_matching counts rows and distinct_votes counts votes cast. Attendance roll calls are omitted. limit is capped at 200; page with offset.

list_membersA

The session's member roster, searchable by name.

query matches any part of a name, ignoring case ("schmidt", "Charlie Schmidt", "Schmidt, C"); omit it for the whole roster. The roster deliberately includes members who left or arrived mid-session (service_end_date and service_end_reason mark a departure): they cast the votes recorded before they left. member_id is the key for the member tools.

get_memberA

One member's roster record: name, chamber, party, district, status, contact.

Reads the session roster, which is the authoritative source (LIS's by-id endpoint answers nothing for some sitting members). Use get_member_committees for seats, get_member_bills for patronage, and get_member_votes for the voting record.

get_member_billsA

Every bill a member patrons in a session, in any role.

The session bill list names only chief patrons, so this is the route to a member's co-patronage. is_chief_patron marks the bills the member sponsors; role restricts the list to one role. query is a case-insensitive substring match against the bill number, description, and title. limit is capped at 200; page with offset.

get_member_committeesA

Every committee seat one member holds in a session, with the role.

LIS has no member-first committee endpoint, so this reads every seat list in the member's chamber: 14 requests cold for a House member, 67 with subcommittees, all cached afterwards.

list_committeesA

The standing committees of one or both chambers, optionally with subcommittees.

The list is not session scoped: it describes the committees that exist now. Who sits on them is session scoped; see get_committee. Use a committee's number ("H08") or name with get_committee, list_meetings, and list_dockets.

get_committeeA

A committee's roster for a session: each member's role, party, and district.

committee is a number ("H08", "S13") or any part of a name ("Courts of Justice", "courts"). Both chambers have some names, so pass chamber or the number when a name is ambiguous. Seats come back in LIS order, chair first. meeting_note is the committee's regular meeting time when LIS records one, and subcommittees lists the subcommittees, which this tool accepts by number too.

list_meetingsA

Meetings on the master schedule in a date range: committees, floor, caucuses.

Dates are YYYY-MM-DD and inclusive; keep the range short, since a week in session is about 150 meetings. committee narrows the list to one committee by number or name (chamber disambiguates a name found in both chambers). time is free text as the clerk entered it ("15 minutes after adjournment") and may be blank. Cancelled meetings stay listed with cancelled true. limit is capped at 200; page with offset.

list_docketsA

A Senate committee's dockets for a session: each meeting and the bills on it.

Dockets are the Senate's committee agendas, newest first as LIS lists them. The House keeps none in the API: read a House bill's committee from get_bill_history and the committee's meetings from list_meetings. committee is a Senate committee number ("S13") or name. A docket and its linked schedule can disagree on the hour, so both times are reported. Costs one request per docket cold, cached afterwards.

list_floor_calendarsA

A chamber's floor calendars for a session, one per sitting.

A floor calendar is the day's order of business: the bills up for a reading or a vote. Pass a calendar_id to get_floor_calendar for the bills on it. Several calendars can share a date.

get_floor_calendarA

One floor calendar: the bills up for action, by section, with the votes taken.

calendar_id comes from list_floor_calendars. Each bill carries its calendar section (e.g. "Senate Bills on Third Reading") and the actions recorded against it, with a vote_id where a vote was taken; pass that with the bill number and session code to get_roll_call.

check_api_keyA

Validate the configured LIS API key.

LIS heartbeat endpoints accept any key, so this is the only real check: it asks the PartnerAuthentication service whether the key is registered and active.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target distinct resources (bills, members, committees, meetings, calendars), but get_bill_votes and get_roll_call both cover votes, and get_bill_patrons vs get_bill's patrons field overlap. Descriptions are detailed enough to disambiguate, though the vote-related pair could still cause misselection.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern: get_* for single resources, list_* for collections, check_api_key as the lone exception but still a clear verb_noun. No mixed conventions or vague verbs.

Tool Count4/5

22 tools is on the higher end but justified by the breadth of legislative data (bills, members, committees, meetings, calendars, votes). Each tool covers a distinct data need; the count feels slightly heavy but not bloated.

Completeness5/5

The surface covers the legislative domain thoroughly: sessions, bills with text/summaries/history/patrons/votes, members with their bills/votes/committees, committees with rosters/meetings/dockets, floor calendars, and API key validation. No obvious dead ends; the descriptions even document workarounds for LIS API limitations.

Maintenance

ActivityMaintained
ResponsivenessNo issues