Releases: cyanheads/openstates-mcp-server
Release list
v0.3.0: search_bills scope rejection converges onto schema refinement, and drops its typed error
search_bills scope rejection converges onto schema refinement, and drops its typed error
- openstates_search_bills no longer returns a typed missing_scope error for an omitted jurisdiction/q — it fails input validation instead, same as openstates_search_people (#45)
- empty-string jurisdiction/q now rejects identically on both tools instead of splitting between a schema error and a typed error (#47)
- openstates_search_people's either/or rejection message now states the recovery guidance directly
v0.2.2: search_people id lookup, empty-string field docs
search_people id lookup, empty-string field docs
- openstates_search_people gains an id input (OCD person IDs) to fetch specific people directly — jurisdiction or id is now required (#42)
- Every output field Open States can send as "" now documents that in its .describe(), across bill, session, person, committee, and event tools (#44)
- get-bill/get-committee/search-bills/search-committees person ID fields point to the new id lookup
v0.2.1: empty-string rendering fixes, party-filter doc correction
empty-string rendering fixes, party-filter doc correction
- bill abstracts, versions, documents, vote headings, and action lines no longer render an empty upstream note, date, or start_date as orphaned punctuation (#38, #41, #43)
- legislative session lines no longer render an empty classification as a bare (), or a missing date endpoint as a dangling separator — renders from /until instead (#43)
- search_people description, README, and design docs no longer advertise a party filter that doesn't exist upstream; party is still reported on every result (#39)
- test files mocking openstates-service.ts now spread the real module instead of replacing it, so a future export no longer breaks unrelated tests (#40)
v0.2.0: required jurisdiction schema, bill/federal disclosure fixes
required jurisdiction schema, bill/federal disclosure fixes
- jurisdiction is now a required input schema field (not just handler-enforced) on openstates_search_people, openstates_search_committees, and openstates_search_events — a breaking change. A call omitting jurisdiction now fails schema validation instead of receiving a typed jurisdiction_required error; that error contract is removed as unreachable. (#35)
- openstates_get_legislators_by_location discloses the federal delegation (jurisdiction.classification, stateCount/federalCount) it already returned alongside state legislators, and adds given_name/family_name to match openstates_search_people (#36)
- openstates_search_bills names every filter behind a zero-result answer, including an unrecognized jurisdiction (#32)
- openstates_get_bill and openstates_search_bills no longer fail output validation on include=other_identifiers — Open States omits scheme on bill records (#31)
v0.1.17: Upstream error detail, retry budget cap, empty-note rendering
Upstream error detail, retry budget cap, empty-note rendering
- Upstream 4xx
detailnow surfaces in error messages, with aninvalid_pagecontract on the five paginated search/list tools (#33) OPENSTATES_TOTAL_REQUEST_BUDGET_MScaps total retry wall-clock time, replacing an unbounded ~190s worst case (#34)- Link/media/document lists no longer render a stray
:when the upstream note is empty (#37) - deps:
@cyanheads/mcp-ts-core^0.10.17 → ^0.11.0 (+ typescript, biome, @types/node)
v0.1.16: CLAUDE.md template reconcile
CLAUDE.md template reconcile
- CLAUDE.md: reconciled with the framework template — adds What's Next? and Server identity and instructions sections, replaces stale ctx.sample with ctx.enrich/ctx.content, documents ctx.state.getMany, z.stringbool(), and the retryable/ctx.recoveryFor() error flow (#30)
v0.1.15: fail-fast upstream timeouts, configurable budget, enrichment fields
fail-fast upstream timeouts, configurable budget, enrichment fields
- Upstream timeout no longer amplifies into a ~4x wait — a caller-owned deadline fails fast and marks the error non-retryable (#25)
OPENSTATES_DAILY_REQUEST_BUDGETandOPENSTATES_REQUEST_TIMEOUT_MSmake the request budget and per-attempt deadline configurable (#28, #29)search_people/search_committeesreject an omitted jurisdiction before issuing a request that would time out (#26)search_bills,get_bill,search_people,get_legislators_by_locationsurface sponsor person links, URLs, timestamps, headshots, and OCD division IDs (#27)- deps:
@cyanheads/mcp-ts-core^0.10.14 → ^0.10.17,@biomejs/biome2.5.2 → 2.5.4; bundle strip now also drops platform-specific native bindings
v0.1.14: OpenStates request caching and rate-budget guard
OpenStates request caching and rate-budget guard
Caches successful fetchJson responses and enforces a daily request budget against the shared free-tier key rate limit; corrects a stale field-name reference in committee-search docs.
Added:
- Response cache — SHA-256 URL-keyed, per-endpoint TTLs (10 min search, 12 h jurisdiction, 24 h geo) (#23)
- Daily request-budget guard — fail-fast RateLimiter at the free-tier cap (250 / rolling 24 h) (#23)
Changed:
- 429 and HTML block-page responses now fail fast (
retryable: false) instead of retrying 4x (#23)
Fixed:
openstates_search_committeesdescription and README named the stalecoverage_notefield instead ofcoverageNote(#24)
272 tests pass; bun run devcheck clean.
v0.1.13: include enrichment parity, optional event role, territory correction
include enrichment parity, optional event role, territory correction
Every include-capable tool now surfaces the upstream fields it advertised accepting; event participants without a role no longer fail output validation.
Changed:
- Coverage copy corrected from "...DC, and Puerto Rico" to "...DC, and 5 US territories" across all identity/config surfaces.
Fixed:
- All ten tools add the output fields and format() rendering for every previously-dropped include value — other_titles, other_identifiers, sources, versions, documents, votes, related_bills, other_names, links, organizations, latest_runs. (#18)
openstates_search_events,openstates_get_event: participant role is now optional, matching upstream sparsity — no more isError on a valid result missing role. (#19)
Dependency bumps:
tsc-alias^1.9.0 → 1.9.1
266 tests pass; bun run devcheck clean.
v0.1.12: jurisdiction normalization, inventory merge, resource errors
jurisdiction normalization, inventory merge, resource errors
Fixes three issues in the jurisdiction subsystem: committee search, jurisdiction listing, and the jurisdiction resource's error handling.
Fixed:
openstates_search_committeesno longer 500s when a full jurisdiction name is combined withchamber— resolved via a static name-to-abbreviation map. (#17)openstates_list_jurisdictionsreturns the complete 56-jurisdiction inventory in one call — the default request now merges the upstream pages internally. (#20)- The
openstates://jurisdiction/{jurisdiction_id}resource adopts a typed not-found error contract instead of leaking the raw upstream 404. (#21)
239 tests pass; bun run devcheck clean.