Skip to main content
Glama

Server Details

Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 37 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/openstates-mcp-server
GitHub Stars
2
Server Listing
@cyanheads/openstates-mcp-server

TDQS

A4.6/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource and action: bills, committees, events, jurisdictions, and people are cleanly separated into get/search/list variants. The only potential overlap, search_people vs get_legislators_by_location, is clearly differentiated by query method (name/ID vs coordinates).

Naming Consistency5/5

All tools follow a uniform openstates_<verb>_<noun> pattern with consistent verbs (get, list, search) and clear noun targets. Plural/singular usage aligns with resource cardinality (list_jurisdictions vs get_jurisdiction), and there is no mixing of casing or verb styles.

Tool Count5/5

Ten tools are well-scoped for a legislative data server, covering the core surfaces of bills, people, committees, events, and jurisdiction metadata. Each tool has a distinct job, and none feel redundant or unnecessary.

Completeness5/5

The surface provides comprehensive read-only coverage for the Open States domain: search and detail retrieval for all major entities, plus jurisdiction discovery to make other tools usable. Deeper data like votes, actions, sponsorships, and memberships is accessible via include parameters, and the experimental limitations of committees/events are explicitly noted.

Available Tools

10 tools
openstates_get_billGet BillA
Read-onlyIdempotent
Inspect

Fetch full detail for a specific state bill. Accepts either the three-part path (jurisdiction + session + bill_id) or a direct OCD bill ID (openstates_id from search results). Use include to request votes, actions, sponsorships, documents, and versions in one call rather than searching again. include=votes returns the full vote tally and per-legislator positions. include=actions returns the complete action history. Prefer openstates_id when available to avoid session identifier lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idNoBill identifier as used by the legislature (e.g., "HB 1000", "SB 42"). Required with jurisdiction + session.
includeNoRelated data to inline. "sponsorships", "actions", "votes" are most commonly needed. "versions" and "documents" provide links to bill text and fiscal notes.
sessionNoSession identifier. Required with jurisdiction + bill_id.
jurisdictionNoState name, abbreviation, or OCD-ID. Required when using path-based lookup with session + bill_id.
openstates_idNoOCD bill ID from openstates_search_bills results (e.g., "ocd-bill/..."). Preferred over the three-part path when available.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoOCD bill ID.
errorNoPresent when the call failed. Absent on success.
titleNoBill title.
votesNoVote events when include=votes is requested.
actionsNoFull action history when include=actions is requested.
sessionNoLegislative session identifier.
sourcesNoSource documents when include=sources is requested.
subjectNoSubject tags.
versionsNoBill text versions when include=versions is requested.
abstractsNoBill abstracts when include=abstracts is requested.
documentsNoBill documents (fiscal notes, etc.) when include=documents is requested.
identifierNoBill identifier as used by the legislature.
updated_atNoTimestamp Open States last updated this record — the field openstates_search_bills sorts by under the default sort=updated_desc.
jurisdictionNoOriginating jurisdiction.
other_titlesNoAlternate titles when include=other_titles is requested.
sponsorshipsNoSponsorships when include=sponsorships is requested.
related_billsNoRelated bills when include=related_bills is requested.
classificationNoBill classifications.
openstates_urlNoOpen States URL for this bill.
first_action_dateNoDate of first recorded action.
from_organizationNoOriginating chamber.
other_identifiersNoAlternate identifiers when include=other_identifiers is requested.
latest_action_dateNoDate of most recent action.
latest_passage_dateNoDate bill passed (when applicable).
latest_action_descriptionNoMost recent action description.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: include=votes returns the full tally and per-legislator positions, and include=actions returns complete action history. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then moves into identifier options and include semantics. Each sentence earns its place, with no filler, tautology, or unnecessary repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call this correctly: identifier alternatives, when to prefer one over the other, and how to request related data. The output schema handles return-value details, and annotations cover safety, so the description is complete for decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema: explains the two mutually exclusive lookup modes, the precedence of openstates_id over the three-part path, and what specific include values return. This pushes it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action ('Fetch full detail') and resource ('specific state bill'), making the tool's purpose unmistakable. It also distinguishes itself from search_bills by emphasizing identifier-based lookup versus searching again, and it names the primary query modes (path vs OCD ID).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage guidance: use include to pull related data in one call rather than searching again, and prefer openstates_id when available to avoid session lookup. It does not explicitly contrast with sibling get_* tools, but the bill-specific scope and identifier guidance make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_get_committeeGet CommitteeA
Read-onlyIdempotent
Inspect

Fetch committee detail by OCD organization ID. Returns name, classification, and membership roster when include=memberships is requested. Experimental — not all states have committee data in Open States. Obtain the committee_id from openstates_search_committees.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoRelated data to inline. "memberships" includes the full roster with member roles. "links" includes the committee homepage and reference links, and "sources" the provenance URLs behind the record.
committee_idYesOCD organization ID (from openstates_search_committees results).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoOCD organization ID.
nameNoCommittee name.
errorNoPresent when the call failed. Absent on success.
linksNoCommittee homepage and reference links when include=links is requested.
sourcesNoProvenance sources when include=sources is requested.
parent_idNoOCD ID of parent committee, or null for top-level committees.
membershipsNoMembership roster when include=memberships is requested.
classificationNoCommittee classification: "committee" or "subcommittee".

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, and idempotent behavior. The description adds value beyond those hints by noting the experimental status and the state-data caveat, plus the effect of include=memberships on the returned roster. It does not describe not-found behavior, but the annotations and output schema cover most safety and shape expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences deliver the core purpose, the key parameter behavior, a caveat, and the ID source with no wasted words. The most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter retrieval tool with full schema descriptions, an output schema, and safety annotations, the description covers everything needed to invoke it correctly. The experimental warning and ID sourcing instruction are useful extras that close the main usability gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both committee_id and include already described in detail. The description adds only a small clarification that include=memberships returns the roster and that committee_id comes from search results, which is largely redundant with the schema. This meets the baseline for fully documented parameters without adding substantial new semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch committee detail'), a precise resource ('by OCD organization ID'), and describes the return content ('name, classification, and membership roster'). It also references the sibling search tool as the source of the ID, so an agent can distinguish retrieval-by-ID from search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to call the tool: after obtaining a committee_id from openstates_search_committees. It also flags the experimental limitation that not all states have data. It does not explicitly enumerate when not to use it versus sibling get_* tools, but the resource type makes this unnecessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_get_eventGet EventA
Read-onlyIdempotent
Inspect

Fetch full event detail by OCD event ID. Returns agenda, participants, media links, and associated documents when requested via include. Experimental — event coverage is limited in Open States. Obtain the event_id from openstates_search_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoRelated data to inline. "agenda" and "participants" are most useful; "links", "media", and "documents" add related URLs, recordings, and files, and "sources" the provenance URLs behind the record.
event_idYesOCD event ID (from openstates_search_events results).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoOCD event ID.
nameNoEvent name.
errorNoPresent when the call failed. Absent on success.
linksNoEvent links when include=links is requested.
mediaNoMedia links when include=media is requested.
agendaNoAgenda items when include=agenda is requested.
statusNoEvent status.
sourcesNoProvenance sources when include=sources is requested.
end_dateNoEvent end datetime. Absent when not recorded.
locationNoEvent location when available.
documentsNoDocument links when include=documents is requested.
start_dateNoEvent start datetime.
descriptionNoEvent description.
jurisdictionNoHosting jurisdiction.
participantsNoParticipants when include=participants is requested.
classificationNoEvent classification.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, openWorldHint, and idempotentHint, so the description need not repeat them. It adds valuable context by stating what is returned (agenda, participants, media links, associated documents) and the experimental limitation. This goes beyond the annotations and gives the agent a fuller understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The primary purpose is front-loaded in the first sentence, with return details and a caveat in the second, and a practical source hint in the third. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (two parameters, one required, an output schema exists, and annotations declare safety properties), the description is fully sufficient. It covers the input source, expected return types, and a limitation. Nothing an agent needs to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters, so the schema already provides detailed descriptions. The description adds no new information about the parameters beyond what the schema states — the event_id hint ('from openstates_search_events') duplicates the schema's own wording, and the include explanation mirrors the schema's enum descriptions. With full schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Fetch full event detail by OCD event ID' which is a clear verb+resource. It distinguishes from sibling tools like openstates_get_bill and openstates_get_committee by focusing specifically on events, and even directs the agent to the correct source tool for the ID, showing awareness of the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'Obtain the event_id from openstates_search_events', which is a clear usage guideline. It also warns that the tool is 'Experimental — event coverage is limited', setting correct expectations. It does not explicitly exclude alternatives, but since this is the only event-fetching tool, the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_get_jurisdictionGet JurisdictionA
Read-onlyIdempotent
Inspect

Fetch full metadata for a specific jurisdiction including all legislative sessions, their identifiers, and coverage dates. Use when you need to know the exact session identifier for a state before filtering bill searches — session formats vary widely (e.g., "2025", "2025rs", "2025s1"). Jurisdiction IDs follow OCD format: ocd-jurisdiction/country:us/state:{abbr}/government (e.g., ocd-jurisdiction/country:us/state:wa/government). State names (e.g., "Washington") and two-letter abbreviations (e.g., "wa") are also accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoRelated data to inline. "legislative_sessions" returns all historical and current sessions with identifiers and date ranges. "organizations" lists the jurisdiction's legislative chambers and executive bodies. "latest_runs" shows last scraper run metadata.
jurisdiction_idYesOCD jurisdiction ID, state name (e.g., "Washington"), or two-letter abbreviation (e.g., "wa").

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoOCD jurisdiction ID.
urlNoOfficial legislature URL.
nameNoJurisdiction name.
errorNoPresent when the call failed. Absent on success.
latest_runsNoRecent scraper runs when include=latest_runs is requested.
organizationsNoLegislative chambers and executive bodies when include=organizations is requested.
classificationNoJurisdiction type.
latest_bill_updateNoISO 8601 timestamp of most recent bill data update.
latest_people_updateNoISO 8601 timestamp of most recent people data update.
legislative_sessionsNoAll legislative sessions when include=legislative_sessions is requested.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds value by describing the returned metadata (sessions, identifiers, coverage dates) and accepted ID formats, which goes beyond the annotations. There is no contradiction with the read-only and idempotent hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It is front-loaded with the action and purpose, then gives the use case and ID formats. Every sentence contributes essential information, making it concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations that cover safety, the description provides everything an agent needs: the purpose, the trigger condition, the parameter formats, and what data to expect. No critical information is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are well documented in the schema. The description reinforces the jurisdiction_id formats but adds little beyond that. It implies sessions are always included, whereas the 'include' parameter makes them optional, which is slightly ambiguous. Thus the description provides only marginal added value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('fetch full metadata'), a clear resource ('a specific jurisdiction'), and the key content returned (legislative sessions, identifiers, coverage dates). It also gives a concrete use case (getting session identifiers for bill searches) and names the exact OCD format, which distinguishes it from sibling tools like list_jurisdictions or search_bills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly instructs when to use this tool: 'Use when you need to know the exact session identifier for a state before filtering bill searches.' This is a strong contextual trigger. However, it does not explicitly mention alternatives or when not to use it, so it falls short of the full 'when-not/alternatives' criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_get_legislators_by_locationGet Legislators by LocationA
Read-onlyIdempotent
Inspect

Find every legislator representing a geographic coordinate — both tiers. Pass latitude and longitude to get the state senators and representatives for that location (and potentially governor/executive officials), plus the coordinate's two US Senators and its US Representative. jurisdiction.classification separates the tiers: "state" is a state legislature, "country" is the US Congress. current_role.org_classification does not — it is "upper"/"lower" for a US Senator exactly as for a state senator. Useful for constituent-to-representative matching, address-based policy research, and electoral boundary analysis. This server does not geocode addresses — the caller must provide decimal-degree coordinates. Use include=offices to get contact information alongside the legislator list.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoRelated data to inline. "offices" includes phone, fax, and address. "links" includes website and social links. "other_names" includes alternate/former names, "other_identifiers" cross-system IDs, and "sources" the provenance URLs behind the record.
latitudeYesLatitude in decimal degrees (e.g., 47.6062 for Seattle, WA).
longitudeYesLongitude in decimal degrees (e.g., -122.3321 for Seattle, WA).

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of legislators returned for this coordinate.
errorNoPresent when the call failed. Absent on success.
noticeNoPresent when no legislators were found — explains why (e.g., location outside US boundaries or unsupported territory).
stateCountNoResults serving a state legislature (jurisdiction.classification = "state").
legislatorsNoLegislators representing the given coordinate.
federalCountNoResults serving the US Congress (jurisdiction.classification = "country") — the coordinate's two US Senators and its US Representative.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent; the description goes further by explaining the two-tier return behavior, the distinction between jurisdiction.classification and current_role.org_classification, and the no-geocoding constraint. This is meaningful behavioral context beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then gives essential caveats and use cases. Every sentence contributes either to selecting the tool, calling it correctly, or understanding its output, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, schema coverage is complete, and annotations cover safety, the description supplies the remaining needed context: tier semantics, coordinate requirements, optional include behavior, and practical use cases. Nothing critical for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds value with concrete latitude/longitude examples, clarifies that the caller must supply decimal-degree coordinates, and highlights the include=offices option for contact data. This goes beyond simply restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Find every legislator representing a geographic coordinate — both tiers.' It clearly distinguishes the tool from sibling lookup/search tools by describing what it returns, including state legislators, US Senators, and the US Representative, and by noting the key classification distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use cases ('constituent-to-representative matching, address-based policy research, and electoral boundary analysis') and a clear limitation ('This server does not geocode addresses'). It does not explicitly name alternative tools or say when not to use them, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_list_jurisdictionsList JurisdictionsA
Read-onlyIdempotent
Inspect

List all jurisdictions covered by Open States — all 50 states, DC, and 5 US territories (American Samoa, Guam, Northern Mariana Islands, Puerto Rico, and the US Virgin Islands): 56 in total, returned complete in a single default call. Returns coverage metadata: latest bill update time, latest people update time, and optionally all legislative sessions with their identifiers. Use this when you need to discover valid session identifiers for a state before calling openstates_search_bills with a session filter. The legislative_sessions include option returns all historical and current sessions — always check valid session identifiers here before using them in bill searches, since formats vary widely by state (e.g., "2025", "2025-2026", "2025rs", "2025s1").

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-indexed).
includeNoRelated data to inline. "legislative_sessions" returns all session identifiers and date ranges — required when you need to discover valid session values for bill searches. "organizations" lists the jurisdiction's legislative chambers and executive bodies, and "latest_runs" the recent scraper run history.
per_pageNoResults per page (upstream maximum 52). The default call returns the complete state inventory (56) in one response by fetching and merging the pages server-side; set a smaller value only to page manually.
classificationNoFilter by jurisdiction type. Use "state" (default) for all 50 states, DC, and the 5 US territories.state

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNoCurrent page returned.
errorNoPresent when the call failed. Absent on success.
maxPageNoTotal pages available.
resultsNoJurisdictions matching the filter.
paginationNoPagination metadata.
totalCountNoTotal jurisdictions matching the filter across all pages.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is clear. The description adds valuable behavioral context: it reveals the default call returns the complete inventory by 'fetching and merging the pages server-side' (a non-obvious implementation detail), describes the return metadata (latest update times, optional sessions), and warns that session formats vary widely by state. These details go beyond what annotations provide, though it doesn't cover potential rate limits or error cases, which are not critical for this read-only, idempotent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured: it opens with the core purpose, then details the count and return metadata, follows with a specific use case, and ends with a caveat about session formats. Each sentence adds meaningful information; there's no fluff. It's slightly long but appropriate given the tool's nuances (session formats, include option). The key information is front-loaded, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list endpoint with an output schema (not shown here), the description covers all essential aspects: what it returns, the default complete response, the optional includes, and the primary use case for session discovery. It doesn't explicitly mention the classification or page parameters, but those are fully documented in the schema. Given the output schema exists and annotations cover safety, the description is complete enough for an agent to call the tool correctly without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by emphasizing the include parameter's role: 'The legislative_sessions include option returns all historical and current sessions — always check valid session identifiers here before using them in bill searches.' This provides practical guidance on when to set include=legislative_sessions, which is not fully expressed in the schema alone. It also clarifies the default behavior of per_page and classification, but those are already covered in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately states the precise scope: 'List all jurisdictions covered by Open States — all 50 states, DC, and 5 US territories' and notes the total count (56). This is a specific verb+resource definition, and it distinguishes itself from sibling tools by emphasizing it is a list operation, implicitly contrasting with openstates_get_jurisdiction which targets a single entity. The added detail about returning the complete inventory in one call further clarifies the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when you need to discover valid session identifiers for a state before calling openstates_search_bills with a session filter.' This gives a clear condition for when to use the tool. It also instructs to 'always check valid session identifiers here before using them in bill searches', which is actionable. However, it does not explicitly mention alternatives like openstates_get_jurisdiction for other use cases, so it lacks a direct comparison for the listing vs. single-jurisdiction scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_search_billsSearch BillsA
Read-onlyIdempotent
Inspect

Search state legislative bills across all covered US jurisdictions. Supports full-text search, jurisdiction/session filtering, subject tags, sponsor lookups, and sort order. Either jurisdiction or q (full-text) is required, and pairing them is the reliable form — a q-only search spans all 56 jurisdictions and exceeds the upstream timeout for a common term, though a distinctive one still returns quickly. include=sponsorships,actions returns sponsor and action history inline. sort=latest_action_desc surfaces bills currently moving. openstates_get_jurisdiction with include=legislative_sessions returns valid session identifiers for session filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFull-text search across bill titles, abstracts, and text. Required unless jurisdiction is provided. Pair it with jurisdiction whenever a state is known — a q-only search over every jurisdiction times out upstream for a common term.
pageNoPage number (1-indexed).
sortNoSort order. Use "latest_action_desc" for bills currently moving through the legislature.updated_desc
chamberNoFilter by originating chamber. "upper" = Senate, "lower" = House/Assembly.
includeNoRelated data to inline. "sponsorships" and "actions" cover most research needs without a separate openstates_get_bill call. "votes" adds full vote tallies and per-legislator positions.
sessionNoSession identifier (e.g., "2025", "2025-2026", "2025rs"). Use openstates_get_jurisdiction with include=legislative_sessions to discover valid values. Omit to search across all sessions.
sponsorNoFilter by sponsor name or OCD person ID.
subjectNoFilter to bills tagged with one or more subject categories.
per_pageNoResults per page. Maximum 20. Default 10.
action_sinceNoISO 8601 date — only return bills with an action after this date (e.g., "2025-01-01").
jurisdictionNoState name, two-letter abbreviation, or OCD-ID (e.g., "Washington", "wa", or "ocd-jurisdiction/country:us/state:wa/government"). Required unless q is provided.
created_sinceNoISO 8601 date — only return bills first entered in Open States after this date (e.g., "2025-01-01"). Use to find newly-introduced bills, as opposed to recently-updated or recently-acted-on.
updated_sinceNoISO 8601 date — only return bills updated after this date (e.g., "2025-01-01").
classificationNoBill classification: "bill", "resolution", "constitutional amendment", etc.
sponsor_classificationNoFilter sponsor type: "primary", "cosponsor".

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNoCurrent page returned.
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery hint when results are empty — names every filter that narrowed the query and suggests how to broaden. Absent when results are returned.
maxPageNoTotal pages available.
resultsNoBills matching the search criteria.
paginationNoPagination metadata.
totalCountNoTotal bills matching the query across all pages.
appliedFiltersNoFilters applied to this query as the server received them, for agent self-verification of zero or unexpected results.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint, openWorldHint, and idempotentHint, and the description adds a genuine failure-mode disclosure: q-only search spans all 56 jurisdictions and can exceed the upstream timeout for common terms. It also surfaces the inline include behavior and session-discovery path. Much of this context is mirrored in the rich schema, so the incremental value beyond annotations is real but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: purpose, the critical pairing/timeout caveat, the two most useful invocation tweaks, and the session-discovery pointer. The most important behavioral warning is front-loaded immediately after the purpose statement, with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter search tool with a full output schema and strong annotations, nothing essential is missing: required-parameter logic, the timeout risk, session discovery, and filter/sort guidance are all covered. The rich input schema and output schema relieve the description of return-format and pagination duties.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with unusually detailed per-parameter descriptions, so the baseline 3 applies. The description restates the q/jurisdiction requirement and the include/sort tips, but it adds little meaning beyond what the input schema already provides for the 15 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Search state legislative bills across all covered US jurisdictions.' This clearly distinguishes it from sibling search_committees, search_events, and search_people, and from openstates_get_bill, which retrieves a single bill by ID. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit invocation conditions: 'Either jurisdiction or q (full-text) is required, and pairing them is the reliable form,' and warns that a q-only search 'exceeds the upstream timeout for a common term.' It names openstates_get_jurisdiction as the sibling to use for discovering valid session identifiers, and recommends sort=latest_action_desc for bills currently moving.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_search_committeesSearch CommitteesA
Read-onlyIdempotent
Inspect

List committees for a jurisdiction. jurisdiction is required — a request spanning all 56 jurisdictions exceeds the upstream timeout, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — Open States is actively working to restore committee support and not all states have data. Use chamber to scope to upper (senate) or lower (house) committees. Use classification=subcommittee to find subcommittees of a parent. Use include=memberships to get the full roster with member roles. The coverageNote field in the output will always note the experimental coverage limitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-indexed).
parentNoOCD organization ID of a parent committee to retrieve its subcommittees.
chamberNoFilter by chamber. "upper" = Senate, "lower" = House/Assembly.
includeNoRelated data to inline. "memberships" includes the full roster with member roles. "links" includes the committee homepage and reference links, and "sources" the provenance URLs behind the record.
per_pageNoResults per page. Maximum 20.
jurisdictionYesState name, abbreviation, or OCD-ID. Required — an all-states request exceeds the upstream timeout, so every call must be scoped to a single jurisdiction.
classificationNoFilter to parent committees or subcommittees only. Omit for all.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNoCurrent page returned.
errorNoPresent when the call failed. Absent on success.
maxPageNoTotal pages available.
resultsNoCommittees matching the search criteria.
paginationNoPagination metadata.
totalCountNoTotal committees matching the query across all pages.
coverageNoteNoCommittee data is experimental — not all states have coverage in Open States. Empty results may indicate the state lacks data, not that no committees exist.
appliedFiltersNoFilters applied to this query as the server received them, for agent self-verification of zero or unexpected results.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation read-only, idempotent, and open-world, and the description adds behavioral context beyond that: the upstream timeout risk, experimental state of committee support, incomplete state coverage, and the guaranteed coverageNote field. It does not add details on auth, rate limits, or error behavior, but nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical constraint (jurisdiction required, timeout) is front-loaded, and the experimental caveat is useful. The description is slightly repetitive about experimental limitations and some parameter guidance duplicates the schema, but it is still compact for a tool with seven parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a complete input schema and an output schema present, the description covers the non-obvious operational context: required jurisdiction, timeout penalty, experimental coverage, coverageNote in output, and how to use the most selective filters. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description mostly restates what the schema already provides ('use chamber...', 'classification=subcommittee...', 'include=memberships...'). It adds no meaningful new parameter semantics beyond pointing the agent at existing fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line 'List committees for a jurisdiction' names a specific verb, resource, and scope, and the tool name/title align with that purpose. The mention of openstates_list_jurisdictions and committee-specific filters (chamber, classification, include) further separates it from the bill, event, person, and jurisdiction siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs that jurisdiction is required, warns against an all-states request, and directs the agent to openstates_list_jurisdictions to pick one. It gives clear guidance for chamber, classification, and include, though it does not name the single-committee alternative (openstates_get_committee) for when you already have a committee ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_search_eventsSearch EventsA
Read-onlyIdempotent
Inspect

Search hearings, floor sessions, and committee meetings. jurisdiction is required — the Open States events endpoint has no all-states search, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — most states do not publish event data to Open States. Use after and before to scope to a date range. Set require_bills=true to filter to events with bills on the agenda, which is the most useful filter for tracking legislation through committee. Use include=agenda,participants for full meeting context. Empty results often indicate the state lacks event data rather than no events occurring.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-indexed).
afterNoISO 8601 datetime — events starting after this time. Use to find upcoming hearings.
beforeNoISO 8601 datetime — events starting before this time.
includeNoRelated data to inline. "agenda" includes the meeting agenda with bill references. "participants" includes the committee or chamber hosting the event. "links" and "media" add related URLs and recordings, "documents" the attached files, and "sources" the provenance URLs behind the record.
per_pageNoResults per page. Maximum 20.
jurisdictionYesState name, abbreviation, or OCD-ID. Required — the Open States events endpoint has no all-states search, so every call must be scoped to a single jurisdiction.
require_billsNoWhen true, only return events with at least one bill on the agenda. Most useful for tracking legislation through committee.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNoCurrent page returned.
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery hint when results are empty. Absent when results are returned.
maxPageNoTotal pages available.
resultsNoEvents matching the search criteria.
paginationNoPagination metadata.
totalCountNoTotal events matching the query across all pages.
coverageNoteNoEvent data is experimental — most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.
appliedFiltersNoFilters applied to this query as the server received them, for agent self-verification of zero or unexpected results.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, openWorldHint, and idempotentHint, which cover safety and repeatability. The description adds meaningful behavioral context beyond that: the experimental nature, the fact that most states lack event data, and the interpretation of empty results. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is about four sentences and front-loads the core purpose and the mandatory jurisdiction constraint. It is reasonably tight, though some advice (like require_bills and include) is also present in the schema and could be considered slightly redundant, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values. It covers the sole required parameter, the experimental caveat, common filters, and empty-result interpretation—everything an agent needs to correctly scope and call the tool. It is fully complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter already has solid descriptions. The description adds extra value by explaining the rationale behind jurisdiction (no all-states search), suggesting after for upcoming hearings, and highlighting require_bills for tracking legislation. This goes just beyond the schema, warranting a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches hearings, floor sessions, and committee meetings, which is a specific verb and resource. It distinguishes from sibling get_event by focusing on search, and the opening sentence leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit, actionable guidance: jurisdiction is required and why, use openstates_list_jurisdictions to choose one, use after/before for date scoping, require_bills for filtering, and include for context. It also warns about experimental status and how to interpret empty results, which directly informs usage decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openstates_search_peopleSearch PeopleA
Read-onlyIdempotent
Inspect

Search state legislators and officials by name, jurisdiction, chamber, or district, or fetch specific people by OCD person ID. Party is reported on every result but cannot be filtered on — narrow by party after the call. Either jurisdiction or id is required — a search spanning all 56 jurisdictions exceeds the upstream timeout, including a name-only one, so scope every call to a single state or to specific person IDs. Use openstates_list_jurisdictions to pick a jurisdiction, or openstates_get_legislators_by_location when you have coordinates but no state. id takes the person IDs that openstates_get_bill sponsorships and openstates_get_committee memberships hand back, and resolves any number of them in one call. Supports name substring matching (case-insensitive). org_classification targets a role type: "upper" for Senate, "lower" for House/Assembly, "executive" for governors and executive officials, and "legislature" for every legislator — both chambers merged into one paginated set (all upper members, then all lower), which excludes executive-branch officials. Omitting org_classification is not the same as "legislature": it returns every officeholder, executive officials included. include=offices adds phone, fax, and address. include=links adds website and social links.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOCD person IDs (e.g., "ocd-person/9eddb3cd-868e-42ba-831a-b415fd7ed445"). Required unless jurisdiction is provided — it returns exactly these people, so it scopes the call on its own and needs no jurisdiction alongside it. Resolves the IDs that openstates_search_people results, openstates_get_bill sponsorships[].person.id, and openstates_get_committee memberships[].person_id hand back — any number of them in one call, subject to per_page. An ID Open States does not know matches nothing rather than failing, as does an ID paired with a jurisdiction that person does not belong to.
nameNoName or partial name to match (case-insensitive substring). Narrows within the jurisdiction; it does not substitute for one.
pageNoPage number (1-indexed).
includeNoRelated data to inline. "offices" includes phone, fax, and address. "links" includes website and social links. "other_names" includes alternate/former names, "other_identifiers" cross-system IDs, and "sources" the provenance URLs behind the record.
districtNoDistrict label (e.g., "1", "37", "At-Large"). Formats vary by state.
per_pageNoResults per page. Maximum 20.
jurisdictionNoState name, abbreviation, or OCD-ID. Required unless id is provided — an all-states search exceeds the upstream timeout, so every call must be scoped to a single jurisdiction or to specific person IDs.
org_classificationNoFilter by role type. "upper" = Senate, "lower" = House/Assembly, "executive" = governors and executive officials, "legislature" = every legislator (both chambers merged into one paginated set, all upper members then all lower, excluding executive officials). Omitting this filter returns every officeholder including executive ones — it is not equivalent to "legislature".

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNoCurrent page returned.
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery hint when results are empty. Absent when results are returned.
maxPageNoTotal pages available.
resultsNoLegislators matching the search criteria.
paginationNoPagination metadata.
totalCountNoTotal legislators matching the query across all pages.
appliedFiltersNoFilters applied to this query as the server received them, for agent self-verification of zero or unexpected results.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavior beyond those: the upstream timeout on unscoped searches, unknown IDs matching nothing rather than failing, the pagination ordering for 'legislature', and the fact that omitting org_classification includes executive officials. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place. It front-loads the core purpose, then the critical timeout constraint, then alternatives, then parameter-specific semantics. No filler or redundancy despite covering a complex 8-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, an output schema, and rich annotations, the description is complete enough for an agent to select and invoke the tool correctly. It covers required scoping, alternatives, parameter semantics, pagination ordering, and include options without needing to explain return values since an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning beyond the schema: the jurisdiction-or-id requirement, how IDs from bill sponsorships and committee memberships can be resolved in one call, the case-insensitive substring behavior for name, and the nuanced semantics of omitting org_classification. This materially helps an agent choose parameter combinations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('Search state legislators and officials by name, jurisdiction, chamber, or district') and adds the alternative fetch-by-ID mode. It clearly differentiates this tool from related siblings by naming openstates_list_jurisdictions and openstates_get_legislators_by_location as alternatives for different inputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: either jurisdiction or id is required, all-states searches time out, and it references the exact sibling tools to use instead in specific situations. It also clarifies that party cannot be filtered server-side and explains the distinction between omitting org_classification and using 'legislature'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updates
    • Changedopenstates_get_bill8 fields changed
      • removedOutput schema / properties / first_action_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / first_action_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / latest_action_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / latest_action_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / latest_action_description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / latest_action_description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / latest_passage_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / latest_passage_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedopenstates_get_committee2 fields changed
      • removedOutput schema / properties / parent_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parent_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedopenstates_get_legislators_by_location1 field changed
      • changedOutput schema / properties / legislators / items / properties / current_role / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "district": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "District label or null."
        -      },
        -      "division_id": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it."
        -      },
        -      "org_classification": {
        -        "description": "Chamber classification.",
        -        "type": "string"
        -      },
        -      "title": {
        -        "description": "Role title.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "org_classification",
        -      "district"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "district": {
        +        "description": "District label or null.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "division_id": {
        +        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "org_classification": {
        +        "description": "Chamber classification.",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Role title.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "org_classification",
        +      "district"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedopenstates_search_bills8 fields changed
      • removedOutput schema / properties / results / items / properties / first_action_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / first_action_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / latest_action_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / latest_action_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / latest_action_description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / latest_action_description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / latest_passage_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / latest_passage_date / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedopenstates_search_committees2 fields changed
      • removedOutput schema / properties / results / items / properties / parent_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / parent_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedopenstates_search_people1 field changed
      • changedOutput schema / properties / results / items / properties / current_role / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "district": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "District label or null when undistricted."
        -      },
        -      "division_id": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it."
        -      },
        -      "org_classification": {
        -        "description": "Chamber classification (e.g., \"upper\", \"lower\").",
        -        "type": "string"
        -      },
        -      "title": {
        -        "description": "Role title (e.g., \"Senator\", \"Representative\").",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "org_classification",
        -      "district"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "district": {
        +        "description": "District label or null when undistricted.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "division_id": {
        +        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "org_classification": {
        +        "description": "Chamber classification (e.g., \"upper\", \"lower\").",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Role title (e.g., \"Senator\", \"Representative\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "org_classification",
        +      "district"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 10 tool updates
    • Changedopenstates_get_bill6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "identifier",
        +      "title",
        +      "session",
        +      "jurisdiction",
        +      "from_organization",
        +      "classification",
        +      "subject",
        +      "first_action_date",
        +      "latest_action_date",
        +      "latest_action_description",
        +      "latest_passage_date"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `missing_lookup_params`: Neither openstates_id nor the complete jurisdiction+session+bill_id triple was provided. `not_found`: Bill does not exist at the given path or OCD ID. `upstream_timeout`: Open States did not answer within the per-request timeout. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "missing_lookup_params",
        +            "not_found",
        +            "upstream_timeout"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "identifier",
        -  "title",
        -  "session",
        -  "jurisdiction",
        -  "from_organization",
        -  "classification",
        -  "subject",
        -  "first_action_date",
        -  "latest_action_date",
        -  "latest_action_description",
        -  "latest_passage_date"
        -]
    • Changedopenstates_get_committee6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "name",
        +      "classification",
        +      "parent_id"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: Committee ID does not exist in Open States. `upstream_timeout`: Open States did not answer within the per-request timeout. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "upstream_timeout"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "classification",
        -  "parent_id"
        -]
    • Changedopenstates_get_event6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "name",
        +      "description",
        +      "classification",
        +      "start_date",
        +      "status",
        +      "jurisdiction"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: Event ID does not exist in Open States. `upstream_timeout`: Open States did not answer within the per-request timeout. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "upstream_timeout"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "classification",
        -  "start_date",
        -  "status",
        -  "jurisdiction"
        -]
    • Changedopenstates_get_jurisdiction6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "name",
        +      "classification",
        +      "url",
        +      "latest_bill_update",
        +      "latest_people_update"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: Jurisdiction ID does not exist in Open States. `upstream_timeout`: Open States did not answer within the per-request timeout. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "not_found",
        +            "upstream_timeout"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "classification",
        -  "url",
        -  "latest_bill_update",
        -  "latest_people_update"
        -]
    • Changedopenstates_get_legislators_by_location6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "legislators",
        +      "count",
        +      "stateCount",
        +      "federalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_coordinate`: Latitude or longitude is outside valid range. `upstream_timeout`: Open States did not answer within the per-request timeout. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_coordinate",
        +            "upstream_timeout"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "legislators",
        -  "count",
        -  "stateCount",
        -  "federalCount"
        -]
    • Changedopenstates_list_jurisdictions6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "pagination",
        +      "totalCount",
        +      "page",
        +      "maxPage"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout. `invalid_page`: Open States rejected the request as not found — page is past the last page for this classification. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "upstream_timeout",
        +            "invalid_page"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage"
        -]
    • Changedopenstates_search_bills6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "pagination",
        +      "totalCount",
        +      "page",
        +      "maxPage",
        +      "appliedFilters"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout — the query is too broad. `invalid_page`: Open States rejected the request as not found — page is past the last page for this query. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "upstream_timeout",
        +            "invalid_page"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "appliedFilters"
        -]
    • Changedopenstates_search_committees6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "pagination",
        +      "totalCount",
        +      "page",
        +      "maxPage",
        +      "coverageNote",
        +      "appliedFilters"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout — the query is too broad. `invalid_page`: Open States rejected the request as not found — page is past the last page for this query. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "upstream_timeout",
        +            "invalid_page"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "coverageNote",
        -  "appliedFilters"
        -]
    • Changedopenstates_search_events6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "pagination",
        +      "totalCount",
        +      "page",
        +      "maxPage",
        +      "coverageNote",
        +      "appliedFilters"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout — the query is too broad. `invalid_page`: Open States rejected the request as not found — page is past the last page for this query. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "upstream_timeout",
        +            "invalid_page"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "coverageNote",
        -  "appliedFilters"
        -]
    • Changedopenstates_search_people6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "pagination",
        +      "totalCount",
        +      "page",
        +      "maxPage",
        +      "appliedFilters"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout — the query is too broad. `invalid_page`: Open States rejected the request as not found — page is past the last page for this query. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "upstream_timeout",
        +            "invalid_page"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "appliedFilters"
        -]
  3. 1 tool update
    • Changedopenstates_search_bills2 fields changed
      • addedInput schema / properties / jurisdiction / minLength
        Added value: +1
      • addedInput schema / properties / q / minLength
        Added value: +1
  4. 10 tool updates
    • Changedopenstates_get_bill10 fields changed
      • changedOutput schema / properties / abstracts / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / actions / items / properties / date / description
        Previous value: -"Action date."New value: +"Action date. Empty string when Open States recorded no date."
      • changedOutput schema / properties / documents / items / properties / date / description
        Previous value: -"Document date."New value: +"Document date. Empty string when Open States recorded no date, which is the usual case for bill documents."
      • changedOutput schema / properties / documents / items / properties / note / description
        Previous value: -"Document note."New value: +"Document note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / other_titles / items / properties / note / description
        Previous value: -"Note describing the alternate title."New value: +"Note describing the alternate title. Empty string when Open States recorded no note."
      • changedOutput schema / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / sponsorships / items / properties / person / properties / id / description
        Previous value: -"OCD person ID."New value: +"OCD person ID. Pass it to openstates_search_people as id for the full legislator record, or back to openstates_search_bills as the sponsor filter for their other bills."
      • changedOutput schema / properties / versions / items / properties / date / description
        Previous value: -"Version date."New value: +"Version date. Empty string when Open States recorded no date, which is the usual case for bill versions."
      • changedOutput schema / properties / versions / items / properties / note / description
        Previous value: -"Version note."New value: +"Version note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / votes / items / properties / start_date / description
        Previous value: -"Vote date."New value: +"Vote date. Empty string when Open States recorded no date."
    • Changedopenstates_get_committee5 fields changed
      • changedOutput schema / properties / links / items / properties / note / description
        Previous value: -"Link description (e.g., \"homepage\")."New value: +"Link description (e.g., \"homepage\"). Empty string when Open States recorded no description."
      • changedOutput schema / properties / memberships / items / properties / person_id / description
        Previous value: -"OCD person ID of the member."New value: +"OCD person ID of the member — pass it to openstates_search_people as id for the full record. Empty string when the membership carries no linked person."
      • changedOutput schema / properties / memberships / items / properties / person_name / description
        Previous value: -"Member name."New value: +"Member name. Empty string when Open States recorded none."
      • changedOutput schema / properties / memberships / items / properties / role / description
        Previous value: -"Member role (e.g., \"chair\", \"member\")."New value: +"Member role (e.g., \"chair\", \"member\"). Empty string when Open States recorded none."
      • changedOutput schema / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
    • Changedopenstates_get_event4 fields changed
      • changedOutput schema / properties / documents / items / properties / note / description
        Previous value: -"Document description."New value: +"Document description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / links / items / properties / note / description
        Previous value: -"Link description."New value: +"Link description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / media / items / properties / note / description
        Previous value: -"Media description."New value: +"Media description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
    • Changedopenstates_get_jurisdiction3 fields changed
      • changedOutput schema / properties / legislative_sessions / items / properties / classification / description
        Previous value: -"Session classification: \"primary\", \"special\", etc."New value: +"Session classification: \"primary\", \"special\", etc. Empty string when Open States recorded none, which covers 28% of sessions — 13 jurisdictions carry no classification on any session at all."
      • changedOutput schema / properties / legislative_sessions / items / properties / end_date / description
        Previous value: -"Session end date."New value: +"Session end date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing."
      • changedOutput schema / properties / legislative_sessions / items / properties / start_date / description
        Previous value: -"Session start date."New value: +"Session start date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing."
    • Changedopenstates_get_legislators_by_location6 fields changed
      • changedOutput schema / properties / legislators / items / properties / family_name / description
        Previous value: -"Family (last) name."New value: +"Family (last) name. Empty string when Open States recorded none."
      • changedOutput schema / properties / legislators / items / properties / given_name / description
        Previous value: -"Given (first) name."New value: +"Given (first) name. Empty string when Open States recorded none."
      • changedOutput schema / properties / legislators / items / properties / links / items / properties / note / description
        Previous value: -"Link description."New value: +"Link description. Empty string when Open States recorded no description — common on person links."
      • changedOutput schema / properties / legislators / items / properties / openstates_url / description
        Previous value: -"Open States profile URL."New value: +"Open States profile URL. Empty string when Open States recorded none."
      • changedOutput schema / properties / legislators / items / properties / other_names / items / properties / note / description
        Previous value: -"Note describing the alternate name."New value: +"Note describing the alternate name. Empty string when Open States recorded no note."
      • changedOutput schema / properties / legislators / items / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
    • Changedopenstates_list_jurisdictions3 fields changed
      • changedOutput schema / properties / results / items / properties / legislative_sessions / items / properties / classification / description
        Previous value: -"Session type: \"primary\", \"special\", etc."New value: +"Session type: \"primary\", \"special\", etc. Empty string when Open States recorded none, which covers 28% of sessions — 13 jurisdictions carry no classification on any session at all."
      • changedOutput schema / properties / results / items / properties / legislative_sessions / items / properties / end_date / description
        Previous value: -"Session end date."New value: +"Session end date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing."
      • changedOutput schema / properties / results / items / properties / legislative_sessions / items / properties / start_date / description
        Previous value: -"Session start date."New value: +"Session start date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing."
    • Changedopenstates_search_bills10 fields changed
      • changedOutput schema / properties / results / items / properties / abstracts / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / actions / items / properties / date / description
        Previous value: -"Action date."New value: +"Action date. Empty string when Open States recorded no date."
      • changedOutput schema / properties / results / items / properties / documents / items / properties / date / description
        Previous value: -"Document date."New value: +"Document date. Empty string when Open States recorded no date, which is the usual case for bill documents."
      • changedOutput schema / properties / results / items / properties / documents / items / properties / note / description
        Previous value: -"Document note."New value: +"Document note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / other_titles / items / properties / note / description
        Previous value: -"Note describing the alternate title."New value: +"Note describing the alternate title. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / sponsorships / items / properties / person / properties / id / description
        Previous value: -"OCD person ID. Pass it back as the sponsor filter to find this legislator's other bills — an exact handle where the sponsor name string is often only a family name."New value: +"OCD person ID — an exact handle where the sponsor name string is often only a family name. Pass it to openstates_search_people as id for the full legislator record, or back as the sponsor filter to find this legislator's other bills."
      • changedOutput schema / properties / results / items / properties / versions / items / properties / date / description
        Previous value: -"Version date."New value: +"Version date. Empty string when Open States recorded no date, which is the usual case for bill versions."
      • changedOutput schema / properties / results / items / properties / versions / items / properties / note / description
        Previous value: -"Version note."New value: +"Version note. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / votes / items / properties / start_date / description
        Previous value: -"Vote date."New value: +"Vote date. Empty string when Open States recorded no date."
    • Changedopenstates_search_committees5 fields changed
      • changedOutput schema / properties / results / items / properties / links / items / properties / note / description
        Previous value: -"Link description (e.g., \"homepage\")."New value: +"Link description (e.g., \"homepage\"). Empty string when Open States recorded no description."
      • changedOutput schema / properties / results / items / properties / memberships / items / properties / person_id / description
        Previous value: -"OCD person ID of the member."New value: +"OCD person ID of the member — pass it to openstates_search_people as id for the full record. Empty string when the membership carries no linked person."
      • changedOutput schema / properties / results / items / properties / memberships / items / properties / person_name / description
        Previous value: -"Member name."New value: +"Member name. Empty string when Open States recorded none."
      • changedOutput schema / properties / results / items / properties / memberships / items / properties / role / description
        Previous value: -"Member role (e.g., \"chair\", \"member\")."New value: +"Member role (e.g., \"chair\", \"member\"). Empty string when Open States recorded none."
      • changedOutput schema / properties / results / items / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
    • Changedopenstates_search_events4 fields changed
      • changedOutput schema / properties / results / items / properties / documents / items / properties / note / description
        Previous value: -"Document description."New value: +"Document description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / results / items / properties / links / items / properties / note / description
        Previous value: -"Link description."New value: +"Link description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / results / items / properties / media / items / properties / note / description
        Previous value: -"Media description."New value: +"Media description. Empty string when Open States recorded no description."
      • changedOutput schema / properties / results / items / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
    • Changedopenstates_search_people10 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "OCD person IDs (e.g., \"ocd-person/9eddb3cd-868e-42ba-831a-b415fd7ed445\"). Required unless jurisdiction is provided — it returns exactly these people, so it scopes the call on its own and needs no jurisdiction alongside it. Resolves the IDs that openstates_search_people results, openstates_get_bill sponsorships[].person.id, and openstates_get_committee memberships[].person_id hand back — any number of them in one call, subject to per_page. An ID Open States does not know matches nothing rather than failing, as does an ID paired with a jurisdiction that person does not belong to.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Required — an all-states search exceeds the upstream timeout, so every call must be scoped to a single jurisdiction."New value: +"State name, abbreviation, or OCD-ID. Required unless id is provided — an all-states search exceeds the upstream timeout, so every call must be scoped to a single jurisdiction or to specific person IDs."
      • removedInput schema / required
        Removed value: -[
        -  "jurisdiction"
        -]
      • addedOutput schema / properties / appliedFilters / properties / id
        Added value: +{
        +  "description": "Person IDs filtered on, as received. Absent when none were supplied.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / family_name / description
        Previous value: -"Family (last) name."New value: +"Family (last) name. Empty string when Open States recorded none."
      • changedOutput schema / properties / results / items / properties / given_name / description
        Previous value: -"Given (first) name."New value: +"Given (first) name. Empty string when Open States recorded none."
      • changedOutput schema / properties / results / items / properties / links / items / properties / note / description
        Previous value: -"Link description (e.g., \"website\", \"twitter\")."New value: +"Link description (e.g., \"website\", \"twitter\"). Empty string when Open States recorded no description — common on person links."
      • changedOutput schema / properties / results / items / properties / openstates_url / description
        Previous value: -"Open States profile URL."New value: +"Open States profile URL. Empty string when Open States recorded none."
      • changedOutput schema / properties / results / items / properties / other_names / items / properties / note / description
        Previous value: -"Note describing the alternate name."New value: +"Note describing the alternate name. Empty string when Open States recorded no note."
      • changedOutput schema / properties / results / items / properties / sources / items / properties / note / description
        Previous value: -"Source note."New value: +"Source note. Empty string when Open States recorded no note."
  5. 6 tool updates
    • Changedopenstates_get_bill2 fields changed
      • changedOutput schema / properties / other_identifiers / items / properties / scheme / description
        Previous value: -"Identifier scheme (the issuing system)."New value: +"Identifier scheme (the issuing system). Absent for bills — Open States omits it on every bill record observed."
      • changedOutput schema / properties / other_identifiers / items / required
        Previous value: -[
        -  "identifier",
        -  "scheme"
        -]New value: +[
        +  "identifier"
        +]
    • Changedopenstates_get_legislators_by_location7 fields changed
      • addedOutput schema / properties / federalCount
        Added value: +{
        +  "description": "Results serving the US Congress (jurisdiction.classification = \"country\") — the coordinate's two US Senators and its US Representative.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / legislators / items / properties / family_name
        Added value: +{
        +  "description": "Family (last) name.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / legislators / items / properties / given_name
        Added value: +{
        +  "description": "Given (first) name.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / legislators / items / properties / jurisdiction / properties / classification
        Added value: +{
        +  "description": "Government level this legislator serves: \"state\" for a state legislature, \"country\" for the US Congress. The field that separates the two tiers in this result set.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / legislators / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "party",
        -  "current_role",
        -  "jurisdiction",
        -  "email",
        -  "openstates_url"
        -]New value: +[
        +  "id",
        +  "name",
        +  "party",
        +  "current_role",
        +  "jurisdiction",
        +  "given_name",
        +  "family_name",
        +  "email",
        +  "openstates_url"
        +]
      • addedOutput schema / properties / stateCount
        Added value: +{
        +  "description": "Results serving a state legislature (jurisdiction.classification = \"state\").",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "legislators",
        -  "count"
        -]New value: +[
        +  "legislators",
        +  "count",
        +  "stateCount",
        +  "federalCount"
        +]
    • Changedopenstates_search_bills6 fields changed
      • addedOutput schema / properties / appliedFilters / properties / sponsor
        Added value: +{
        +  "description": "Sponsor filter as received.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / appliedFilters / properties / sponsor_classification
        Added value: +{
        +  "description": "Sponsor-type filter as received.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / appliedFilters / properties / subject
        Added value: +{
        +  "description": "Subject tags filtered on, as received. Absent when none were supplied.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Recovery hint when results are empty — echoes the filters applied and suggests how to broaden. Absent when results are returned."New value: +"Recovery hint when results are empty — names every filter that narrowed the query and suggests how to broaden. Absent when results are returned."
      • changedOutput schema / properties / results / items / properties / other_identifiers / items / properties / scheme / description
        Previous value: -"Identifier scheme (the issuing system)."New value: +"Identifier scheme (the issuing system). Absent for bills — Open States omits it on every bill record observed."
      • changedOutput schema / properties / results / items / properties / other_identifiers / items / required
        Previous value: -[
        -  "identifier",
        -  "scheme"
        -]New value: +[
        +  "identifier"
        +]
    • Changedopenstates_search_committees3 fields changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Required — an all-states request exceeds the upstream timeout, so omitting it is rejected before any request is issued."New value: +"State name, abbreviation, or OCD-ID. Required — an all-states request exceeds the upstream timeout, so every call must be scoped to a single jurisdiction."
      • addedInput schema / properties / jurisdiction / minLength
        Added value: +1
      • addedInput schema / required
        Added value: +[
        +  "jurisdiction"
        +]
    • Changedopenstates_search_events3 fields changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Required — the Open States events endpoint has no all-states search and rejects requests that omit it."New value: +"State name, abbreviation, or OCD-ID. Required — the Open States events endpoint has no all-states search, so every call must be scoped to a single jurisdiction."
      • addedInput schema / properties / jurisdiction / minLength
        Added value: +1
      • addedInput schema / required
        Added value: +[
        +  "jurisdiction"
        +]
    • Changedopenstates_search_people3 fields changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Required — an all-states search exceeds the upstream timeout, so omitting it is rejected before any request is issued."New value: +"State name, abbreviation, or OCD-ID. Required — an all-states search exceeds the upstream timeout, so every call must be scoped to a single jurisdiction."
      • addedInput schema / properties / jurisdiction / minLength
        Added value: +1
      • addedInput schema / required
        Added value: +[
        +  "jurisdiction"
        +]
  6. 5 tool updates
    • Changedopenstates_get_bill1 field changed
      • addedOutput schema / properties / updated_at
        Added value: +{
        +  "description": "Timestamp Open States last updated this record — the field openstates_search_bills sorts by under the default sort=updated_desc.",
        +  "type": "string"
        +}
    • Changedopenstates_get_legislators_by_location2 fields changed
      • changedOutput schema / properties / legislators / items / properties / current_role / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "district": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "District label or null."
        -      },
        -      "org_classification": {
        -        "description": "Chamber classification.",
        -        "type": "string"
        -      },
        -      "title": {
        -        "description": "Role title.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "org_classification",
        -      "district"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "district": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "District label or null."
        +      },
        +      "division_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it."
        +      },
        +      "org_classification": {
        +        "description": "Chamber classification.",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Role title.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "org_classification",
        +      "district"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / legislators / items / properties / image
        Added value: +{
        +  "description": "Official headshot URL. Absent when no photo is published.",
        +  "type": "string"
        +}
    • Changedopenstates_search_bills4 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"Full-text search across bill titles, abstracts, and text. Required unless jurisdiction is provided. Combining with jurisdiction is recommended for precision."New value: +"Full-text search across bill titles, abstracts, and text. Required unless jurisdiction is provided. Pair it with jurisdiction whenever a state is known — a q-only search over every jurisdiction times out upstream for a common term."
      • addedOutput schema / properties / results / items / properties / openstates_url
        Added value: +{
        +  "description": "Citable Open States page for this bill.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / sponsorships / items / properties / person
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Linked person record when the sponsor resolves to a known legislator.",
        +  "properties": {
        +    "id": {
        +      "description": "OCD person ID. Pass it back as the sponsor filter to find this legislator's other bills — an exact handle where the sponsor name string is often only a family name.",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Person name.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "name"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / updated_at
        Added value: +{
        +  "description": "Timestamp Open States last updated this record — the field the default sort=updated_desc orders by.",
        +  "type": "string"
        +}
    • Changedopenstates_search_committees1 field changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Omitting returns no committees rather than searching all states — supply a jurisdiction to get results."New value: +"State name, abbreviation, or OCD-ID. Required — an all-states request exceeds the upstream timeout, so omitting it is rejected before any request is issued."
    • Changedopenstates_search_people4 fields changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Omitting searches across all states."New value: +"State name, abbreviation, or OCD-ID. Required — an all-states search exceeds the upstream timeout, so omitting it is rejected before any request is issued."
      • changedInput schema / properties / name / description
        Previous value: -"Name or partial name to match (case-insensitive substring)."New value: +"Name or partial name to match (case-insensitive substring). Narrows within the jurisdiction; it does not substitute for one."
      • changedOutput schema / properties / results / items / properties / current_role / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "district": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "District label or null when undistricted."
        -      },
        -      "org_classification": {
        -        "description": "Chamber classification (e.g., \"upper\", \"lower\").",
        -        "type": "string"
        -      },
        -      "title": {
        -        "description": "Role title (e.g., \"Senator\", \"Representative\").",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "org_classification",
        -      "district"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "district": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "District label or null when undistricted."
        +      },
        +      "division_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "OCD division the district maps to (e.g., \"ocd-division/country:us/state:wa/sldu:37\"). Null when undistricted, absent when upstream omits it."
        +      },
        +      "org_classification": {
        +        "description": "Chamber classification (e.g., \"upper\", \"lower\").",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Role title (e.g., \"Senator\", \"Representative\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "org_classification",
        +      "district"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / image
        Added value: +{
        +  "description": "Official headshot URL. Absent when no photo is published.",
        +  "type": "string"
        +}
  7. 10 tool updates
    • Changedopenstates_get_bill3 fields changed
      • addedOutput schema / properties / other_identifiers
        Added value: +{
        +  "description": "Alternate identifiers when include=other_identifiers is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate identifier record.",
        +    "properties": {
        +      "identifier": {
        +        "description": "Alternate bill identifier.",
        +        "type": "string"
        +      },
        +      "scheme": {
        +        "description": "Identifier scheme (the issuing system).",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "scheme"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / other_titles
        Added value: +{
        +  "description": "Alternate titles when include=other_titles is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate title record.",
        +    "properties": {
        +      "note": {
        +        "description": "Note describing the alternate title.",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Alternate bill title.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / sources
        Added value: +{
        +  "description": "Source documents when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_get_committee3 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"memberships\" includes the full roster with member roles."New value: +"Related data to inline. \"memberships\" includes the full roster with member roles. \"links\" includes the committee homepage and reference links, and \"sources\" the provenance URLs behind the record."
      • addedOutput schema / properties / links
        Added value: +{
        +  "description": "Committee homepage and reference links when include=links is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "External link record.",
        +    "properties": {
        +      "note": {
        +        "description": "Link description (e.g., \"homepage\").",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Link URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_get_event4 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"agenda\" and \"participants\" are most useful."New value: +"Related data to inline. \"agenda\" and \"participants\" are most useful; \"links\", \"media\", and \"documents\" add related URLs, recordings, and files, and \"sources\" the provenance URLs behind the record."
      • changedOutput schema / properties / participants / items / properties / role / description
        Previous value: -"Participant role."New value: +"Participant role. Absent when upstream omits it."
      • changedOutput schema / properties / participants / items / required
        Previous value: -[
        -  "name",
        -  "entity_type",
        -  "role"
        -]New value: +[
        +  "name",
        +  "entity_type"
        +]
      • addedOutput schema / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_get_jurisdiction3 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"legislative_sessions\" returns all historical and current sessions with identifiers and date ranges. \"latest_runs\" shows last scraper run metadata."New value: +"Related data to inline. \"legislative_sessions\" returns all historical and current sessions with identifiers and date ranges. \"organizations\" lists the jurisdiction's legislative chambers and executive bodies. \"latest_runs\" shows last scraper run metadata."
      • addedOutput schema / properties / latest_runs
        Added value: +{
        +  "description": "Recent scraper runs when include=latest_runs is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Scraper run record.",
        +    "properties": {
        +      "end_time": {
        +        "description": "ISO 8601 timestamp when the run finished. Absent when unrecorded.",
        +        "type": "string"
        +      },
        +      "start_time": {
        +        "description": "ISO 8601 timestamp when the scraper run started.",
        +        "type": "string"
        +      },
        +      "success": {
        +        "description": "Whether the run succeeded. Absent when not recorded.",
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "start_time"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / organizations
        Added value: +{
        +  "description": "Legislative chambers and executive bodies when include=organizations is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Organization record.",
        +    "properties": {
        +      "classification": {
        +        "description": "Organization type (e.g., \"upper\", \"lower\", \"legislature\").",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "OCD organization ID.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Organization name (e.g., \"Washington State Senate\").",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_get_legislators_by_location4 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"offices\" includes phone, fax, and address."New value: +"Related data to inline. \"offices\" includes phone, fax, and address. \"links\" includes website and social links. \"other_names\" includes alternate/former names, \"other_identifiers\" cross-system IDs, and \"sources\" the provenance URLs behind the record."
      • addedOutput schema / properties / legislators / items / properties / other_identifiers
        Added value: +{
        +  "description": "Cross-system identifiers when include=other_identifiers is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate identifier record.",
        +    "properties": {
        +      "identifier": {
        +        "description": "Alternate identifier.",
        +        "type": "string"
        +      },
        +      "scheme": {
        +        "description": "Identifier scheme (the issuing system).",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "scheme"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / legislators / items / properties / other_names
        Added value: +{
        +  "description": "Alternate/former names when include=other_names is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate name record.",
        +    "properties": {
        +      "name": {
        +        "description": "Alternate or former name.",
        +        "type": "string"
        +      },
        +      "note": {
        +        "description": "Note describing the alternate name.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / legislators / items / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_list_jurisdictions3 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"legislative_sessions\" returns all session identifiers and date ranges — required when you need to discover valid session values for bill searches."New value: +"Related data to inline. \"legislative_sessions\" returns all session identifiers and date ranges — required when you need to discover valid session values for bill searches. \"organizations\" lists the jurisdiction's legislative chambers and executive bodies, and \"latest_runs\" the recent scraper run history."
      • addedOutput schema / properties / results / items / properties / latest_runs
        Added value: +{
        +  "description": "Recent scraper runs when include=latest_runs is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Scraper run record.",
        +    "properties": {
        +      "end_time": {
        +        "description": "ISO 8601 timestamp when the run finished. Absent when unrecorded.",
        +        "type": "string"
        +      },
        +      "start_time": {
        +        "description": "ISO 8601 timestamp when the scraper run started.",
        +        "type": "string"
        +      },
        +      "success": {
        +        "description": "Whether the run succeeded. Absent when not recorded.",
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "start_time"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / organizations
        Added value: +{
        +  "description": "Legislative chambers and executive bodies when include=organizations is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Organization record.",
        +    "properties": {
        +      "classification": {
        +        "description": "Organization type (e.g., \"upper\", \"lower\", \"legislature\").",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "OCD organization ID.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Organization name (e.g., \"Washington State Senate\").",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_search_bills7 fields changed
      • addedOutput schema / properties / results / items / properties / documents
        Added value: +{
        +  "description": "Bill documents (fiscal notes, etc.) when include=documents is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Bill document record.",
        +    "properties": {
        +      "date": {
        +        "description": "Document date.",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "Document ID.",
        +        "type": "string"
        +      },
        +      "links": {
        +        "description": "Document links.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Document link.",
        +          "properties": {
        +            "media_type": {
        +              "description": "MIME type.",
        +              "type": "string"
        +            },
        +            "url": {
        +              "description": "Document URL.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "url",
        +            "media_type"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "note": {
        +        "description": "Document note.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "note",
        +      "date",
        +      "links"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / other_identifiers
        Added value: +{
        +  "description": "Alternate identifiers when include=other_identifiers is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate identifier record.",
        +    "properties": {
        +      "identifier": {
        +        "description": "Alternate bill identifier.",
        +        "type": "string"
        +      },
        +      "scheme": {
        +        "description": "Identifier scheme (the issuing system).",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "scheme"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / other_titles
        Added value: +{
        +  "description": "Alternate titles when include=other_titles is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate title record.",
        +    "properties": {
        +      "note": {
        +        "description": "Note describing the alternate title.",
        +        "type": "string"
        +      },
        +      "title": {
        +        "description": "Alternate bill title.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / related_bills
        Added value: +{
        +  "description": "Related bills when include=related_bills is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Related bill record.",
        +    "properties": {
        +      "identifier": {
        +        "description": "Related bill identifier.",
        +        "type": "string"
        +      },
        +      "legislative_session": {
        +        "description": "Session of the related bill.",
        +        "type": "string"
        +      },
        +      "relation_type": {
        +        "description": "Relationship type (e.g., \"companion\", \"identical\").",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "legislative_session",
        +      "relation_type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / sources
        Added value: +{
        +  "description": "Source documents when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / versions
        Added value: +{
        +  "description": "Bill text versions when include=versions is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Bill text version record.",
        +    "properties": {
        +      "date": {
        +        "description": "Version date.",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "Version ID.",
        +        "type": "string"
        +      },
        +      "links": {
        +        "description": "Document links.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Document link.",
        +          "properties": {
        +            "media_type": {
        +              "description": "MIME type.",
        +              "type": "string"
        +            },
        +            "url": {
        +              "description": "Document URL.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "url",
        +            "media_type"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "note": {
        +        "description": "Version note.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "note",
        +      "date",
        +      "links"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / votes
        Added value: +{
        +  "description": "Vote events when include=votes is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Vote event record.",
        +    "properties": {
        +      "counts": {
        +        "description": "Vote tallies by option.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Vote tally entry.",
        +          "properties": {
        +            "option": {
        +              "description": "Vote option (e.g., \"yes\", \"no\", \"absent\").",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "Count of votes for this option.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "option",
        +            "value"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "id": {
        +        "description": "Vote event ID.",
        +        "type": "string"
        +      },
        +      "identifier": {
        +        "description": "Vote identifier.",
        +        "type": "string"
        +      },
        +      "motion_text": {
        +        "description": "Motion text.",
        +        "type": "string"
        +      },
        +      "result": {
        +        "description": "Vote result: \"pass\" or \"fail\".",
        +        "type": "string"
        +      },
        +      "start_date": {
        +        "description": "Vote date.",
        +        "type": "string"
        +      },
        +      "votes": {
        +        "description": "Per-legislator vote positions.",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "Individual legislator vote.",
        +          "properties": {
        +            "option": {
        +              "description": "How this legislator voted.",
        +              "type": "string"
        +            },
        +            "voter": {
        +              "additionalProperties": false,
        +              "description": "Linked person record when available.",
        +              "properties": {
        +                "id": {
        +                  "description": "OCD person ID.",
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "description": "Person name.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "name"
        +              ],
        +              "type": "object"
        +            },
        +            "voter_name": {
        +              "description": "Voter name.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "option",
        +            "voter_name"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "motion_text",
        +      "start_date",
        +      "result",
        +      "identifier",
        +      "counts",
        +      "votes"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_search_committees3 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"memberships\" includes the full roster with member roles."New value: +"Related data to inline. \"memberships\" includes the full roster with member roles. \"links\" includes the committee homepage and reference links, and \"sources\" the provenance URLs behind the record."
      • addedOutput schema / properties / results / items / properties / links
        Added value: +{
        +  "description": "Committee homepage and reference links when include=links is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "External link record.",
        +    "properties": {
        +      "note": {
        +        "description": "Link description (e.g., \"homepage\").",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Link URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_search_events7 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"agenda\" includes the meeting agenda with bill references. \"participants\" includes the committee or chamber hosting the event."New value: +"Related data to inline. \"agenda\" includes the meeting agenda with bill references. \"participants\" includes the committee or chamber hosting the event. \"links\" and \"media\" add related URLs and recordings, \"documents\" the attached files, and \"sources\" the provenance URLs behind the record."
      • addedOutput schema / properties / results / items / properties / documents
        Added value: +{
        +  "description": "Document links when include=documents is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Document link record.",
        +    "properties": {
        +      "note": {
        +        "description": "Document description.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Document URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / links
        Added value: +{
        +  "description": "Event links when include=links is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "External link record.",
        +    "properties": {
        +      "note": {
        +        "description": "Link description.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Link URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / media
        Added value: +{
        +  "description": "Media links when include=media is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Media link record.",
        +    "properties": {
        +      "note": {
        +        "description": "Media description.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Media URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / participants / items / properties / role / description
        Previous value: -"Participant role."New value: +"Participant role. Absent when upstream omits it."
      • changedOutput schema / properties / results / items / properties / participants / items / required
        Previous value: -[
        -  "name",
        -  "entity_type",
        -  "role"
        -]New value: +[
        +  "name",
        +  "entity_type"
        +]
      • addedOutput schema / properties / results / items / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedopenstates_search_people4 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Related data to inline. \"offices\" includes phone, fax, and address. \"links\" includes website and social links."New value: +"Related data to inline. \"offices\" includes phone, fax, and address. \"links\" includes website and social links. \"other_names\" includes alternate/former names, \"other_identifiers\" cross-system IDs, and \"sources\" the provenance URLs behind the record."
      • addedOutput schema / properties / results / items / properties / other_identifiers
        Added value: +{
        +  "description": "Cross-system identifiers when include=other_identifiers is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate identifier record.",
        +    "properties": {
        +      "identifier": {
        +        "description": "Alternate identifier.",
        +        "type": "string"
        +      },
        +      "scheme": {
        +        "description": "Identifier scheme (the issuing system).",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "scheme"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / other_names
        Added value: +{
        +  "description": "Alternate/former names when include=other_names is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Alternate name record.",
        +    "properties": {
        +      "name": {
        +        "description": "Alternate or former name.",
        +        "type": "string"
        +      },
        +      "note": {
        +        "description": "Note describing the alternate name.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / sources
        Added value: +{
        +  "description": "Provenance sources when include=sources is requested.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "Source record.",
        +    "properties": {
        +      "note": {
        +        "description": "Source note.",
        +        "type": "string"
        +      },
        +      "url": {
        +        "description": "Source URL.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "note"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  8. 1 tool update
    • Changedopenstates_list_jurisdictions2 fields changed
      • changedInput schema / properties / classification / description
        Previous value: -"Filter by jurisdiction type. Use \"state\" (default) for all 50 states, DC, and Puerto Rico."New value: +"Filter by jurisdiction type. Use \"state\" (default) for all 50 states, DC, and the 5 US territories."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page. Default 52 to cover all states, DC, and Puerto Rico in one request."New value: +"Results per page (upstream maximum 52). The default call returns the complete state inventory (56) in one response by fetching and merging the pages server-side; set a smaller value only to page manually."
  9. 4 tool updates
    • Changedopenstates_search_bills2 fields changed
      • addedInput schema / properties / created_since
        Added value: +{
        +  "description": "ISO 8601 date — only return bills first entered in Open States after this date (e.g., \"2025-01-01\"). Use to find newly-introduced bills, as opposed to recently-updated or recently-acted-on.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$",
        +  "type": "string"
        +}
      • addedOutput schema / properties / appliedFilters / properties / created_since
        Added value: +{
        +  "description": "created_since date filter as received.",
        +  "type": "string"
        +}
    • Changedopenstates_search_committees1 field changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Omitting searches across all states."New value: +"State name, abbreviation, or OCD-ID. Omitting returns no committees rather than searching all states — supply a jurisdiction to get results."
    • Changedopenstates_search_events1 field changed
      • changedInput schema / properties / jurisdiction / description
        Previous value: -"State name, abbreviation, or OCD-ID. Omitting searches across all states."New value: +"State name, abbreviation, or OCD-ID. Required — the Open States events endpoint has no all-states search and rejects requests that omit it."
    • Changedopenstates_search_people1 field changed
      • changedInput schema / properties / org_classification / description
        Previous value: -"Filter by role type. \"upper\" = Senate, \"lower\" = House/Assembly, \"legislature\" = all legislators, \"executive\" = governors and executive officials."New value: +"Filter by role type. \"upper\" = Senate, \"lower\" = House/Assembly, \"executive\" = governors and executive officials, \"legislature\" = every legislator (both chambers merged into one paginated set, all upper members then all lower, excluding executive officials). Omitting this filter returns every officeholder including executive ones — it is not equivalent to \"legislature\"."
  10. 4 tool updates
    • Changedopenstates_search_bills6 fields changed
      • changedInput schema / properties / action_since / description
        Previous value: -"ISO 8601 date — only return bills with an action after this date."New value: +"ISO 8601 date — only return bills with an action after this date (e.g., \"2025-01-01\")."
      • addedInput schema / properties / action_since / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$"
      • changedInput schema / properties / updated_since / description
        Previous value: -"ISO 8601 date — only return bills updated after this date."New value: +"ISO 8601 date — only return bills updated after this date (e.g., \"2025-01-01\")."
      • addedInput schema / properties / updated_since / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$"
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.",
        +  "properties": {
        +    "action_since": {
        +      "description": "action_since date filter as received.",
        +      "type": "string"
        +    },
        +    "chamber": {
        +      "description": "Chamber filter as received.",
        +      "type": "string"
        +    },
        +    "classification": {
        +      "description": "Classification filter as received.",
        +      "type": "string"
        +    },
        +    "jurisdiction": {
        +      "description": "Jurisdiction filter as received.",
        +      "type": "string"
        +    },
        +    "page": {
        +      "description": "Page number requested.",
        +      "type": "number"
        +    },
        +    "per_page": {
        +      "description": "Results per page requested.",
        +      "type": "number"
        +    },
        +    "q": {
        +      "description": "Full-text query as received.",
        +      "type": "string"
        +    },
        +    "session": {
        +      "description": "Session filter as received.",
        +      "type": "string"
        +    },
        +    "sort": {
        +      "description": "Sort order applied.",
        +      "type": "string"
        +    },
        +    "updated_since": {
        +      "description": "updated_since date filter as received.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "sort",
        +    "page",
        +    "per_page"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "appliedFilters"
        +]
    • Changedopenstates_search_committees2 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.",
        +  "properties": {
        +    "chamber": {
        +      "description": "Chamber filter as received.",
        +      "type": "string"
        +    },
        +    "classification": {
        +      "description": "Classification filter as received.",
        +      "type": "string"
        +    },
        +    "jurisdiction": {
        +      "description": "Jurisdiction filter as received.",
        +      "type": "string"
        +    },
        +    "page": {
        +      "description": "Page number requested.",
        +      "type": "number"
        +    },
        +    "parent": {
        +      "description": "Parent committee filter as received.",
        +      "type": "string"
        +    },
        +    "per_page": {
        +      "description": "Results per page requested.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "page",
        +    "per_page"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "coverageNote"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "coverageNote",
        +  "appliedFilters"
        +]
    • Changedopenstates_search_events4 fields changed
      • addedInput schema / properties / after / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$"
      • addedInput schema / properties / before / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$"
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.",
        +  "properties": {
        +    "after": {
        +      "description": "after datetime filter as received.",
        +      "type": "string"
        +    },
        +    "before": {
        +      "description": "before datetime filter as received.",
        +      "type": "string"
        +    },
        +    "jurisdiction": {
        +      "description": "Jurisdiction filter as received.",
        +      "type": "string"
        +    },
        +    "page": {
        +      "description": "Page number requested.",
        +      "type": "number"
        +    },
        +    "per_page": {
        +      "description": "Results per page requested.",
        +      "type": "number"
        +    },
        +    "require_bills": {
        +      "description": "require_bills flag as received.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "require_bills",
        +    "page",
        +    "per_page"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage",
        -  "coverageNote"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "coverageNote",
        +  "appliedFilters"
        +]
    • Changedopenstates_search_people2 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.",
        +  "properties": {
        +    "district": {
        +      "description": "District filter as received.",
        +      "type": "string"
        +    },
        +    "jurisdiction": {
        +      "description": "Jurisdiction filter as received.",
        +      "type": "string"
        +    },
        +    "name": {
        +      "description": "Name filter as received.",
        +      "type": "string"
        +    },
        +    "org_classification": {
        +      "description": "Role-type filter as received.",
        +      "type": "string"
        +    },
        +    "page": {
        +      "description": "Page number requested.",
        +      "type": "number"
        +    },
        +    "per_page": {
        +      "description": "Results per page requested.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "page",
        +    "per_page"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalCount",
        -  "page",
        -  "maxPage"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "appliedFilters"
        +]
  11. 5 tool updates
    • Changedopenstates_list_jurisdictions3 fields changed
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total jurisdictions matching the filter across all pages.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalItems
        Removed value: -{
        -  "description": "Total jurisdictions matching the filter across all pages.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalItems",
        -  "page",
        -  "maxPage"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage"
        +]
    • Changedopenstates_search_bills3 fields changed
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total bills matching the query across all pages.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalItems
        Removed value: -{
        -  "description": "Total bills matching the query across all pages.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalItems",
        -  "page",
        -  "maxPage"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage"
        +]
    • Changedopenstates_search_committees3 fields changed
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total committees matching the query across all pages.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalItems
        Removed value: -{
        -  "description": "Total committees matching the query across all pages.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalItems",
        -  "page",
        -  "maxPage",
        -  "coverageNote"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "coverageNote"
        +]
    • Changedopenstates_search_events3 fields changed
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total events matching the query across all pages.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalItems
        Removed value: -{
        -  "description": "Total events matching the query across all pages.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalItems",
        -  "page",
        -  "maxPage",
        -  "coverageNote"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage",
        +  "coverageNote"
        +]
    • Changedopenstates_search_people3 fields changed
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total legislators matching the query across all pages.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalItems
        Removed value: -{
        -  "description": "Total legislators matching the query across all pages.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "totalItems",
        -  "page",
        -  "maxPage"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalCount",
        +  "page",
        +  "maxPage"
        +]
  12. 6 tool updates
    • Changedopenstates_get_legislators_by_location3 fields changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of legislators returned."New value: +"Number of legislators returned for this coordinate."
      • removedOutput schema / properties / coverage_note
        Removed value: -{
        -  "description": "Present when no legislators were found — explains why (e.g., location outside US boundaries or unsupported territory).",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Present when no legislators were found — explains why (e.g., location outside US boundaries or unsupported territory).",
        +  "type": "string"
        +}
    • Changedopenstates_list_jurisdictions4 fields changed
      • addedOutput schema / properties / maxPage
        Added value: +{
        +  "description": "Total pages available.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "Current page returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalItems
        Added value: +{
        +  "description": "Total jurisdictions matching the filter across all pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalItems",
        +  "page",
        +  "maxPage"
        +]
    • Changedopenstates_search_bills6 fields changed
      • addedOutput schema / properties / maxPage
        Added value: +{
        +  "description": "Total pages available.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Recovery hint when results are empty — echoes the filters applied and suggests how to broaden. Absent when results are returned.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery hint when results are empty — echoes the filters applied and suggests how to broaden. Absent when results are returned.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "Current page returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalItems
        Added value: +{
        +  "description": "Total bills matching the query across all pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalItems",
        +  "page",
        +  "maxPage"
        +]
    • Changedopenstates_search_committees6 fields changed
      • addedOutput schema / properties / coverageNote
        Added value: +{
        +  "description": "Committee data is experimental — not all states have coverage in Open States. Empty results may indicate the state lacks data, not that no committees exist.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / coverage_note
        Removed value: -{
        -  "description": "Committee data is experimental — not all states have coverage in Open States. Empty results may indicate the state lacks data, not that no committees exist.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / maxPage
        Added value: +{
        +  "description": "Total pages available.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "Current page returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalItems
        Added value: +{
        +  "description": "Total committees matching the query across all pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "coverage_note"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalItems",
        +  "page",
        +  "maxPage",
        +  "coverageNote"
        +]
    • Changedopenstates_search_events8 fields changed
      • addedOutput schema / properties / coverageNote
        Added value: +{
        +  "description": "Event data is experimental — most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / coverage_note
        Removed value: -{
        -  "description": "Event data is experimental — most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / maxPage
        Added value: +{
        +  "description": "Total pages available.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Recovery hint when results are empty. Absent when results are returned.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery hint when results are empty. Absent when results are returned.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "Current page returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalItems
        Added value: +{
        +  "description": "Total events matching the query across all pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination",
        -  "coverage_note"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalItems",
        +  "page",
        +  "maxPage",
        +  "coverageNote"
        +]
    • Changedopenstates_search_people6 fields changed
      • addedOutput schema / properties / maxPage
        Added value: +{
        +  "description": "Total pages available.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Recovery hint when results are empty. Absent when results are returned.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery hint when results are empty. Absent when results are returned.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "Current page returned.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalItems
        Added value: +{
        +  "description": "Total legislators matching the query across all pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "pagination"
        -]New value: +[
        +  "results",
        +  "pagination",
        +  "totalItems",
        +  "page",
        +  "maxPage"
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides access to legislative data from all 50 US states through the LegiScan API, enabling comprehensive search and retrieval of bills, votes, legislators, and legislative session information.
    10
    4 npm
    11
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Access U.S. state legislative data including bills, legislators, and votes across all 50 states via the OpenStates API.
    3 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides tools to search and retrieve US federal and state legislative data, including bills, votes, campaign contributions, and legislator information, with provenance tracking.
    8
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.