openstates-mcp-server
What this MCP does
Searches and retrieves US state legislative bills, legislators, committees, events, jurisdictions, votes, actions, and sponsorships.
Tools
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'bill_id': {'type': 'string', 'description': 'Bill identifier as used by the legislature (e.g., "HB 1000", "SB 42"). Required with jurisdiction + session.'}, 'include': {'type': 'array', 'items': {'enum': ['sponsorships', 'abstracts', 'other_titles', 'other_identifiers', 'actions', 'sources', 'documents', 'versions', 'votes', 'related_bills'], 'type': 'string'}, 'description': 'Related data to inline. "sponsorships", "actions", "votes" are most commonly needed. "versions" and "documents" provide links to bill text and fiscal notes.'}, 'session': {'type': 'string', 'description': 'Session identifier. Required with jurisdiction + bill_id.'}, 'jurisdiction': {'type': 'string', 'description': 'State name, abbreviation, or OCD-ID. Required when using path-based lookup with session + bill_id.'}, 'openstates_id': {'type': 'string', 'description': 'OCD bill ID from openstates_search_bills results (e.g., "ocd-bill/..."). Preferred over the three-part path when available.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'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']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'OCD bill ID.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['missing_lookup_params', 'not_found', 'upstream_timeout'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'title': {'type': 'string', 'description': 'Bill title.'}, 'votes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'motion_text', 'start_date', 'result', 'identifier', 'counts', 'votes'], 'properties': {'id': {'type': 'string', 'description': 'Vote event ID.'}, 'votes': {'type': 'array', 'items': {'type': 'object', 'required': ['option', 'voter_name'], 'properties': {'voter': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD person ID.'}, 'name': {'type': 'string', 'description': 'Person name.'}}, 'description': 'Linked person record when available.', 'additionalProperties': False}, 'option': {'type': 'string', 'description': 'How this legislator voted.'}, 'voter_name': {'type': 'string', 'description': 'Voter name.'}}, 'description': 'Individual legislator vote.', 'additionalProperties': False}, 'description': 'Per-legislator vote positions.'}, 'counts': {'type': 'array', 'items': {'type': 'object', 'required': ['option', 'value'], 'properties': {'value': {'type': 'number', 'description': 'Count of votes for this option.'}, 'option': {'type': 'string', 'description': 'Vote option (e.g., "yes", "no", "absent").'}}, 'description': 'Vote tally entry.', 'additionalProperties': False}, 'description': 'Vote tallies by option.'}, 'result': {'type': 'string', 'description': 'Vote result: "pass" or "fail".'}, 'identifier': {'type': 'string', 'description': 'Vote identifier.'}, 'start_date': {'type': 'string', 'description': 'Vote date. Empty string when Open States recorded no date.'}, 'motion_text': {'type': 'string', 'description': 'Motion text.'}}, 'description': 'Vote event record.', 'additionalProperties': False}, 'description': 'Vote events when include=votes is requested.'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'date', 'classification', 'order', 'organization'], 'properties': {'date': {'type': 'string', 'description': 'Action date. Empty string when Open States recorded no date.'}, 'order': {'type': 'number', 'description': 'Sequence order.'}, 'description': {'type': 'string', 'description': 'Action description.'}, 'organization': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Organization name.'}, 'classification': {'type': 'string', 'description': 'Organization classification.'}}, 'description': 'Chamber or committee.', 'additionalProperties': False}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Action classifications.'}}, 'description': 'Action record.', 'additionalProperties': False}, 'description': 'Full action history when include=actions is requested.'}, 'session': {'type': 'string', 'description': 'Legislative session identifier.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Source documents when include=sources is requested.'}, 'subject': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Subject tags.'}, 'versions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'note', 'date', 'links'], 'properties': {'id': {'type': 'string', 'description': 'Version ID.'}, 'date': {'type': 'string', 'description': 'Version date. Empty string when Open States recorded no date, which is the usual case for bill versions.'}, 'note': {'type': 'string', 'description': 'Version note. Empty string when Open States recorded no note.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'media_type'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'media_type': {'type': 'string', 'description': 'MIME type.'}}, 'description': 'Document link.', 'additionalProperties': False}, 'description': 'Document links.'}}, 'description': 'Bill text version record.', 'additionalProperties': False}, 'description': 'Bill text versions when include=versions is requested.'}, 'abstracts': {'type': 'array', 'items': {'type': 'object', 'required': ['abstract', 'note'], 'properties': {'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}, 'abstract': {'type': 'string', 'description': 'Plain-language summary.'}}, 'description': 'Abstract record.', 'additionalProperties': False}, 'description': 'Bill abstracts when include=abstracts is requested.'}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'note', 'date', 'links'], 'properties': {'id': {'type': 'string', 'description': 'Document ID.'}, 'date': {'type': 'string', 'description': 'Document date. Empty string when Open States recorded no date, which is the usual case for bill documents.'}, 'note': {'type': 'string', 'description': 'Document note. Empty string when Open States recorded no note.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'media_type'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'media_type': {'type': 'string', 'description': 'MIME type.'}}, 'description': 'Document link.', 'additionalProperties': False}, 'description': 'Document links.'}}, 'description': 'Bill document record.', 'additionalProperties': False}, 'description': 'Bill documents (fiscal notes, etc.) when include=documents is requested.'}, 'identifier': {'type': 'string', 'description': 'Bill identifier as used by the legislature.'}, 'updated_at': {'type': 'string', 'description': 'Timestamp Open States last updated this record â\x80\x94 the field openstates_search_bills sorts by under the default sort=updated_desc.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}}, 'description': 'Originating jurisdiction.', 'additionalProperties': False}, 'other_titles': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'note'], 'properties': {'note': {'type': 'string', 'description': 'Note describing the alternate title. Empty string when Open States recorded no note.'}, 'title': {'type': 'string', 'description': 'Alternate bill title.'}}, 'description': 'Alternate title record.', 'additionalProperties': False}, 'description': 'Alternate titles when include=other_titles is requested.'}, 'sponsorships': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type', 'primary', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Sponsor name.'}, 'person': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': '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.'}, 'name': {'type': 'string', 'description': 'Person name.'}}, 'description': 'Linked person record when available.', 'additionalProperties': False}, 'primary': {'type': 'boolean', 'description': 'Whether this is the primary sponsor.'}, 'entity_type': {'type': 'string', 'description': 'Entity type.'}, 'classification': {'type': 'string', 'description': 'Sponsorship classification.'}}, 'description': 'Sponsorship record.', 'additionalProperties': False}, 'description': 'Sponsorships when include=sponsorships is requested.'}, 'related_bills': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'legislative_session', 'relation_type'], 'properties': {'identifier': {'type': 'string', 'description': 'Related bill identifier.'}, 'relation_type': {'type': 'string', 'description': 'Relationship type (e.g., "companion", "identical").'}, 'legislative_session': {'type': 'string', 'description': 'Session of the related bill.'}}, 'description': 'Related bill record.', 'additionalProperties': False}, 'description': 'Related bills when include=related_bills is requested.'}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Bill classifications.'}, 'openstates_url': {'type': 'string', 'description': 'Open States URL for this bill.'}, 'first_action_date': {'type': ['string', 'null'], 'description': 'Date of first recorded action.'}, 'from_organization': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Chamber name.'}, 'classification': {'type': 'string', 'description': 'Chamber classification.'}}, 'description': 'Originating chamber.', 'additionalProperties': False}, 'other_identifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier'], 'properties': {'scheme': {'type': 'string', 'description': 'Identifier scheme (the issuing system). Absent for bills â\x80\x94 Open States omits it on every bill record observed.'}, 'identifier': {'type': 'string', 'description': 'Alternate bill identifier.'}}, 'description': 'Alternate identifier record.', 'additionalProperties': False}, 'description': 'Alternate identifiers when include=other_identifiers is requested.'}, 'latest_action_date': {'type': ['string', 'null'], 'description': 'Date of most recent action.'}, 'latest_passage_date': {'type': ['string', 'null'], 'description': 'Date bill passed (when applicable).'}, 'latest_action_description': {'type': ['string', 'null'], 'description': 'Most recent action description.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['committee_id'], 'properties': {'include': {'type': 'array', 'items': {'enum': ['memberships', 'links', 'sources'], 'type': 'string'}, 'description': '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.'}, 'committee_id': {'type': 'string', 'minLength': 1, 'description': 'OCD organization ID (from openstates_search_committees results).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['id', 'name', 'classification', 'parent_id']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'OCD organization ID.'}, 'name': {'type': 'string', 'description': 'Committee name.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'upstream_timeout'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description (e.g., "homepage"). Empty string when Open States recorded no description.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Committee homepage and reference links when include=links is requested.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'parent_id': {'type': ['string', 'null'], 'description': 'OCD ID of parent committee, or null for top-level committees.'}, 'memberships': {'type': 'array', 'items': {'type': 'object', 'required': ['person_id', 'person_name', 'role'], 'properties': {'role': {'type': 'string', 'description': 'Member role (e.g., "chair", "member"). Empty string when Open States recorded none.'}, 'person_id': {'type': 'string', 'description': 'OCD person ID of the member â\x80\x94 pass it to openstates_search_people as id for the full record. Empty string when the membership carries no linked person.'}, 'person_name': {'type': 'string', 'description': 'Member name. Empty string when Open States recorded none.'}}, 'description': 'Committee membership record.', 'additionalProperties': False}, 'description': 'Membership roster when include=memberships is requested.'}, 'classification': {'type': 'string', 'description': 'Committee classification: "committee" or "subcommittee".'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['event_id'], 'properties': {'include': {'type': 'array', 'items': {'enum': ['links', 'sources', 'media', 'documents', 'participants', 'agenda'], 'type': 'string'}, 'description': '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.'}, 'event_id': {'type': 'string', 'minLength': 1, 'description': 'OCD event ID (from openstates_search_events results).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['id', 'name', 'description', 'classification', 'start_date', 'status', 'jurisdiction']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'OCD event ID.'}, 'name': {'type': 'string', 'description': 'Event name.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'upstream_timeout'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description. Empty string when Open States recorded no description.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Event links when include=links is requested.'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Media URL.'}, 'note': {'type': 'string', 'description': 'Media description. Empty string when Open States recorded no description.'}}, 'description': 'Media link record.', 'additionalProperties': False}, 'description': 'Media links when include=media is requested.'}, 'agenda': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'classification', 'subjects', 'related_entities'], 'properties': {'subjects': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Subject tags.'}, 'description': {'type': 'string', 'description': 'Agenda item description.'}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Agenda item classifications.'}, 'related_entities': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type'], 'properties': {'name': {'type': 'string', 'description': 'Related entity name.'}, 'entity_type': {'type': 'string', 'description': 'Entity type (e.g., "bill", "person", "organization").'}}, 'description': 'Related entity record.', 'additionalProperties': False}, 'description': 'Bills, people, or organizations referenced.'}}, 'description': 'Agenda item record.', 'additionalProperties': False}, 'description': 'Agenda items when include=agenda is requested.'}, 'status': {'type': 'string', 'description': 'Event status.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'end_date': {'type': 'string', 'description': 'Event end datetime. Absent when not recorded.'}, 'location': {'type': 'object', 'required': ['name'], 'properties': {'url': {'type': 'string', 'description': 'Location URL when available.'}, 'name': {'type': 'string', 'description': 'Location name.'}}, 'description': 'Event location when available.', 'additionalProperties': False}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'note': {'type': 'string', 'description': 'Document description. Empty string when Open States recorded no description.'}}, 'description': 'Document link record.', 'additionalProperties': False}, 'description': 'Document links when include=documents is requested.'}, 'start_date': {'type': 'string', 'description': 'Event start datetime.'}, 'description': {'type': 'string', 'description': 'Event description.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}}, 'description': 'Hosting jurisdiction.', 'additionalProperties': False}, 'participants': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type'], 'properties': {'name': {'type': 'string', 'description': 'Participant name.'}, 'role': {'type': 'string', 'description': 'Participant role. Absent when upstream omits it.'}, 'entity_type': {'type': 'string', 'description': 'Entity type.'}}, 'description': 'Participant record.', 'additionalProperties': False}, 'description': 'Participants when include=participants is requested.'}, 'classification': {'type': 'string', 'description': 'Event classification.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['jurisdiction_id'], 'properties': {'include': {'type': 'array', 'items': {'enum': ['organizations', 'legislative_sessions', 'latest_runs'], 'type': 'string'}, 'description': '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.'}, 'jurisdiction_id': {'type': 'string', 'minLength': 1, 'description': 'OCD jurisdiction ID, state name (e.g., "Washington"), or two-letter abbreviation (e.g., "wa").'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['id', 'name', 'classification', 'url', 'latest_bill_update', 'latest_people_update']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'url': {'type': 'string', 'description': 'Official legislature URL.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'upstream_timeout'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'latest_runs': {'type': 'array', 'items': {'type': 'object', 'required': ['start_time'], 'properties': {'success': {'type': 'boolean', 'description': 'Whether the run succeeded. Absent when not recorded.'}, 'end_time': {'type': 'string', 'description': 'ISO 8601 timestamp when the run finished. Absent when unrecorded.'}, 'start_time': {'type': 'string', 'description': 'ISO 8601 timestamp when the scraper run started.'}}, 'description': 'Scraper run record.', 'additionalProperties': False}, 'description': 'Recent scraper runs when include=latest_runs is requested.'}, 'organizations': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'OCD organization ID.'}, 'name': {'type': 'string', 'description': 'Organization name (e.g., "Washington State Senate").'}, 'classification': {'type': 'string', 'description': 'Organization type (e.g., "upper", "lower", "legislature").'}}, 'description': 'Organization record.', 'additionalProperties': False}, 'description': 'Legislative chambers and executive bodies when include=organizations is requested.'}, 'classification': {'type': 'string', 'description': 'Jurisdiction type.'}, 'latest_bill_update': {'type': 'string', 'description': 'ISO 8601 timestamp of most recent bill data update.'}, 'latest_people_update': {'type': 'string', 'description': 'ISO 8601 timestamp of most recent people data update.'}, 'legislative_sessions': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'name', 'classification', 'start_date', 'end_date'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable session name.'}, 'end_date': {'type': 'string', 'description': 'Session end date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing.'}, 'identifier': {'type': 'string', 'description': 'Session identifier â\x80\x94 use as session= in bill searches.'}, 'start_date': {'type': 'string', 'description': 'Session start date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing.'}, 'classification': {'type': 'string', 'description': 'Session classification: "primary", "special", etc. Empty string when Open States recorded none, which covers 28% of sessions â\x80\x94 13 jurisdictions carry no classification on any session at all.'}}, 'description': 'Legislative session record.', 'additionalProperties': False}, 'description': 'All legislative sessions when include=legislative_sessions is requested.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['latitude', 'longitude'], 'properties': {'include': {'type': 'array', 'items': {'enum': ['other_names', 'other_identifiers', 'links', 'sources', 'offices'], 'type': 'string'}, 'description': '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.'}, 'latitude': {'type': 'number', 'description': 'Latitude in decimal degrees (e.g., 47.6062 for Seattle, WA).'}, 'longitude': {'type': 'number', 'description': 'Longitude in decimal degrees (e.g., -122.3321 for Seattle, WA).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['legislators', 'count', 'stateCount', 'federalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'count': {'type': 'number', 'description': 'Number of legislators returned for this coordinate.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['invalid_coordinate', 'upstream_timeout'], '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.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Present when no legislators were found â\x80\x94 explains why (e.g., location outside US boundaries or unsupported territory).'}, 'stateCount': {'type': 'number', 'description': 'Results serving a state legislature (jurisdiction.classification = "state").'}, 'legislators': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'party', 'current_role', 'jurisdiction', 'given_name', 'family_name', 'email', 'openstates_url'], 'properties': {'id': {'type': 'string', 'description': 'OCD person ID.'}, 'name': {'type': 'string', 'description': 'Full name.'}, 'email': {'type': 'string', 'description': 'Email address. Empty string when not available.'}, 'image': {'type': 'string', 'description': 'Official headshot URL. Absent when no photo is published.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description. Empty string when Open States recorded no description â\x80\x94 common on person links.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Website and social links when include=links is requested.'}, 'party': {'type': 'string', 'description': 'Primary party label. Empty string when unknown.'}, 'offices': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'fax': {'type': 'string', 'description': 'Fax number when available.'}, 'name': {'type': 'string', 'description': 'Office name.'}, 'voice': {'type': 'string', 'description': 'Phone number when available.'}, 'address': {'type': 'string', 'description': 'Mailing address when available.'}, 'classification': {'type': 'string', 'description': 'Office type.'}}, 'description': 'Contact office record.', 'additionalProperties': False}, 'description': 'Contact offices when include=offices is requested.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'given_name': {'type': 'string', 'description': 'Given (first) name. Empty string when Open States recorded none.'}, 'family_name': {'type': 'string', 'description': 'Family (last) name. Empty string when Open States recorded none.'}, 'other_names': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'note'], 'properties': {'name': {'type': 'string', 'description': 'Alternate or former name.'}, 'note': {'type': 'string', 'description': 'Note describing the alternate name. Empty string when Open States recorded no note.'}}, 'description': 'Alternate name record.', 'additionalProperties': False}, 'description': 'Alternate/former names when include=other_names is requested.'}, 'current_role': {'anyOf': [{'type': 'object', 'required': ['title', 'org_classification', 'district'], 'properties': {'title': {'type': 'string', 'description': 'Role title.'}, 'district': {'type': ['string', 'null'], 'description': 'District label or null.'}, 'division_id': {'type': ['string', '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': {'type': 'string', 'description': 'Chamber classification.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Current role or null.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}, 'classification': {'type': 'string', '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.'}}, 'description': 'Home jurisdiction.', 'additionalProperties': False}, 'openstates_url': {'type': 'string', 'description': 'Open States profile URL. Empty string when Open States recorded none.'}, 'other_identifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'scheme'], 'properties': {'scheme': {'type': 'string', 'description': 'Identifier scheme (the issuing system).'}, 'identifier': {'type': 'string', 'description': 'Alternate identifier.'}}, 'description': 'Alternate identifier record.', 'additionalProperties': False}, 'description': 'Cross-system identifiers when include=other_identifiers is requested.'}}, 'description': 'Legislator record.', 'additionalProperties': False}, 'description': 'Legislators representing the given coordinate.'}, 'federalCount': {'type': 'number', 'description': 'Results serving the US Congress (jurisdiction.classification = "country") â\x80\x94 the coordinate\'s two US Senators and its US Representative.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-indexed).'}, 'include': {'type': 'array', 'items': {'enum': ['organizations', 'legislative_sessions', 'latest_runs'], 'type': 'string'}, 'description': 'Related data to inline. "legislative_sessions" returns all session identifiers and date ranges â\x80\x94 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_page': {'type': 'integer', 'default': 52, 'maximum': 52, 'minimum': 1, 'description': '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.'}, 'classification': {'enum': ['state', 'municipality', 'country'], 'type': 'string', 'default': 'state', 'description': 'Filter by jurisdiction type. Use "state" (default) for all 50 states, DC, and the 5 US territories.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'pagination', 'totalCount', 'page', 'maxPage']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'number', 'description': 'Current page returned.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['upstream_timeout', 'invalid_page'], '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 â\x80\x94 page is past the last page for this classification. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'maxPage': {'type': 'number', 'description': 'Total pages available.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'classification', 'url', 'latest_bill_update', 'latest_people_update'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID â\x80\x94 use as jurisdiction filter in other tools.'}, 'url': {'type': 'string', 'description': 'Official legislature URL.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name (e.g., "Washington").'}, 'latest_runs': {'type': 'array', 'items': {'type': 'object', 'required': ['start_time'], 'properties': {'success': {'type': 'boolean', 'description': 'Whether the run succeeded. Absent when not recorded.'}, 'end_time': {'type': 'string', 'description': 'ISO 8601 timestamp when the run finished. Absent when unrecorded.'}, 'start_time': {'type': 'string', 'description': 'ISO 8601 timestamp when the scraper run started.'}}, 'description': 'Scraper run record.', 'additionalProperties': False}, 'description': 'Recent scraper runs when include=latest_runs is requested.'}, 'organizations': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'OCD organization ID.'}, 'name': {'type': 'string', 'description': 'Organization name (e.g., "Washington State Senate").'}, 'classification': {'type': 'string', 'description': 'Organization type (e.g., "upper", "lower", "legislature").'}}, 'description': 'Organization record.', 'additionalProperties': False}, 'description': 'Legislative chambers and executive bodies when include=organizations is requested.'}, 'classification': {'type': 'string', 'description': 'Jurisdiction type: "state", "municipality", etc.'}, 'latest_bill_update': {'type': 'string', 'description': 'ISO 8601 timestamp of most recent bill data update.'}, 'latest_people_update': {'type': 'string', 'description': 'ISO 8601 timestamp of most recent people data update.'}, 'legislative_sessions': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'name', 'classification', 'start_date', 'end_date'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable session name.'}, 'end_date': {'type': 'string', 'description': 'Session end date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing.'}, 'identifier': {'type': 'string', 'description': 'Session identifier â\x80\x94 use as session= in bill searches.'}, 'start_date': {'type': 'string', 'description': 'Session start date. Empty string when Open States recorded no value; an absent endpoint means unknown, not ongoing.'}, 'classification': {'type': 'string', 'description': 'Session type: "primary", "special", etc. Empty string when Open States recorded none, which covers 28% of sessions â\x80\x94 13 jurisdictions carry no classification on any session at all.'}}, 'description': 'Legislative session record.', 'additionalProperties': False}, 'description': 'Legislative sessions when include=legislative_sessions is requested.'}}, 'description': 'Jurisdiction record.', 'additionalProperties': False}, 'description': 'Jurisdictions matching the filter.'}, 'pagination': {'type': 'object', 'required': ['page', 'per_page', 'max_page', 'total_items'], 'properties': {'page': {'type': 'number', 'description': 'Current page number.'}, 'max_page': {'type': 'number', 'description': 'Total number of pages.'}, 'per_page': {'type': 'number', 'description': 'Results per page.'}, 'total_items': {'type': 'number', 'description': 'Total matching jurisdictions.'}}, 'description': 'Pagination metadata.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total jurisdictions matching the filter across all pages.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'minLength': 1, 'description': 'Full-text search across bill titles, abstracts, and text. Required unless jurisdiction is provided. Pair it with jurisdiction whenever a state is known â\x80\x94 a q-only search over every jurisdiction times out upstream for a common term.'}, 'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-indexed).'}, 'sort': {'enum': ['updated_asc', 'updated_desc', 'first_action_asc', 'first_action_desc', 'latest_action_asc', 'latest_action_desc'], 'type': 'string', 'default': 'updated_desc', 'description': 'Sort order. Use "latest_action_desc" for bills currently moving through the legislature.'}, 'chamber': {'enum': ['upper', 'lower'], 'type': 'string', 'description': 'Filter by originating chamber. "upper" = Senate, "lower" = House/Assembly.'}, 'include': {'type': 'array', 'items': {'enum': ['sponsorships', 'abstracts', 'other_titles', 'other_identifiers', 'actions', 'sources', 'documents', 'versions', 'votes', 'related_bills'], 'type': 'string'}, 'description': 'Related 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.'}, 'session': {'type': 'string', 'description': 'Session 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.'}, 'sponsor': {'type': 'string', 'description': 'Filter by sponsor name or OCD person ID.'}, 'subject': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter to bills tagged with one or more subject categories.'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Results per page. Maximum 20. Default 10.'}, 'action_since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$', 'description': 'ISO 8601 date â\x80\x94 only return bills with an action after this date (e.g., "2025-01-01").'}, 'jurisdiction': {'type': 'string', 'minLength': 1, 'description': 'State 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_since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$', 'description': 'ISO 8601 date â\x80\x94 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_since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$', 'description': 'ISO 8601 date â\x80\x94 only return bills updated after this date (e.g., "2025-01-01").'}, 'classification': {'type': 'string', 'description': 'Bill classification: "bill", "resolution", "constitutional amendment", etc.'}, 'sponsor_classification': {'type': 'string', 'description': 'Filter sponsor type: "primary", "cosponsor".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'pagination', 'totalCount', 'page', 'maxPage', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'number', 'description': 'Current page returned.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['upstream_timeout', 'invalid_page'], 'description': 'Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout â\x80\x94 the query is too broad. `invalid_page`: Open States rejected the request as not found â\x80\x94 page is past the last page for this query. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Recovery hint when results are empty â\x80\x94 names every filter that narrowed the query and suggests how to broaden. Absent when results are returned.'}, 'maxPage': {'type': 'number', 'description': 'Total pages available.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'identifier', 'title', 'session', 'jurisdiction', 'from_organization', 'classification', 'subject', 'first_action_date', 'latest_action_date', 'latest_action_description', 'latest_passage_date'], 'properties': {'id': {'type': 'string', 'description': 'OCD bill ID â\x80\x94 use as openstates_id in openstates_get_bill.'}, 'title': {'type': 'string', 'description': 'Bill title.'}, 'votes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'motion_text', 'start_date', 'result', 'identifier', 'counts', 'votes'], 'properties': {'id': {'type': 'string', 'description': 'Vote event ID.'}, 'votes': {'type': 'array', 'items': {'type': 'object', 'required': ['option', 'voter_name'], 'properties': {'voter': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD person ID.'}, 'name': {'type': 'string', 'description': 'Person name.'}}, 'description': 'Linked person record when available.', 'additionalProperties': False}, 'option': {'type': 'string', 'description': 'How this legislator voted.'}, 'voter_name': {'type': 'string', 'description': 'Voter name.'}}, 'description': 'Individual legislator vote.', 'additionalProperties': False}, 'description': 'Per-legislator vote positions.'}, 'counts': {'type': 'array', 'items': {'type': 'object', 'required': ['option', 'value'], 'properties': {'value': {'type': 'number', 'description': 'Count of votes for this option.'}, 'option': {'type': 'string', 'description': 'Vote option (e.g., "yes", "no", "absent").'}}, 'description': 'Vote tally entry.', 'additionalProperties': False}, 'description': 'Vote tallies by option.'}, 'result': {'type': 'string', 'description': 'Vote result: "pass" or "fail".'}, 'identifier': {'type': 'string', 'description': 'Vote identifier.'}, 'start_date': {'type': 'string', 'description': 'Vote date. Empty string when Open States recorded no date.'}, 'motion_text': {'type': 'string', 'description': 'Motion text.'}}, 'description': 'Vote event record.', 'additionalProperties': False}, 'description': 'Vote events when include=votes is requested.'}, 'actions': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'date', 'classification', 'order', 'organization'], 'properties': {'date': {'type': 'string', 'description': 'Action date. Empty string when Open States recorded no date.'}, 'order': {'type': 'number', 'description': 'Action sequence order.'}, 'description': {'type': 'string', 'description': 'Action description.'}, 'organization': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Organization name.'}, 'classification': {'type': 'string', 'description': 'Organization classification.'}}, 'description': 'Chamber or committee where action occurred.', 'additionalProperties': False}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Action classifications.'}}, 'description': 'Action record.', 'additionalProperties': False}, 'description': 'Action history when include=actions is requested.'}, 'session': {'type': 'string', 'description': 'Legislative session identifier.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Source documents when include=sources is requested.'}, 'subject': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Subject tags assigned by Open States scrapers.'}, 'versions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'note', 'date', 'links'], 'properties': {'id': {'type': 'string', 'description': 'Version ID.'}, 'date': {'type': 'string', 'description': 'Version date. Empty string when Open States recorded no date, which is the usual case for bill versions.'}, 'note': {'type': 'string', 'description': 'Version note. Empty string when Open States recorded no note.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'media_type'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'media_type': {'type': 'string', 'description': 'MIME type.'}}, 'description': 'Document link.', 'additionalProperties': False}, 'description': 'Document links.'}}, 'description': 'Bill text version record.', 'additionalProperties': False}, 'description': 'Bill text versions when include=versions is requested.'}, 'abstracts': {'type': 'array', 'items': {'type': 'object', 'required': ['abstract', 'note'], 'properties': {'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}, 'abstract': {'type': 'string', 'description': 'Plain-language bill summary.'}}, 'description': 'Abstract record.', 'additionalProperties': False}, 'description': 'Bill abstracts when include=abstracts is requested.'}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'note', 'date', 'links'], 'properties': {'id': {'type': 'string', 'description': 'Document ID.'}, 'date': {'type': 'string', 'description': 'Document date. Empty string when Open States recorded no date, which is the usual case for bill documents.'}, 'note': {'type': 'string', 'description': 'Document note. Empty string when Open States recorded no note.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'media_type'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'media_type': {'type': 'string', 'description': 'MIME type.'}}, 'description': 'Document link.', 'additionalProperties': False}, 'description': 'Document links.'}}, 'description': 'Bill document record.', 'additionalProperties': False}, 'description': 'Bill documents (fiscal notes, etc.) when include=documents is requested.'}, 'identifier': {'type': 'string', 'description': 'Bill identifier as used by the legislature (e.g., "HB 1000").'}, 'updated_at': {'type': 'string', 'description': 'Timestamp Open States last updated this record â\x80\x94 the field the default sort=updated_desc orders by.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}}, 'description': 'Originating jurisdiction.', 'additionalProperties': False}, 'other_titles': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'note'], 'properties': {'note': {'type': 'string', 'description': 'Note describing the alternate title. Empty string when Open States recorded no note.'}, 'title': {'type': 'string', 'description': 'Alternate bill title.'}}, 'description': 'Alternate title record.', 'additionalProperties': False}, 'description': 'Alternate titles when include=other_titles is requested.'}, 'sponsorships': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type', 'primary', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Sponsor name.'}, 'person': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': "OCD person ID â\x80\x94 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."}, 'name': {'type': 'string', 'description': 'Person name.'}}, 'description': 'Linked person record when the sponsor resolves to a known legislator.', 'additionalProperties': False}, 'primary': {'type': 'boolean', 'description': 'Whether this is the primary sponsor.'}, 'entity_type': {'type': 'string', 'description': 'Entity type: "person", "organization".'}, 'classification': {'type': 'string', 'description': 'Sponsorship type.'}}, 'description': 'Sponsorship record.', 'additionalProperties': False}, 'description': 'Sponsorships when include=sponsorships is requested.'}, 'related_bills': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'legislative_session', 'relation_type'], 'properties': {'identifier': {'type': 'string', 'description': 'Related bill identifier.'}, 'relation_type': {'type': 'string', 'description': 'Relationship type (e.g., "companion", "identical").'}, 'legislative_session': {'type': 'string', 'description': 'Session of the related bill.'}}, 'description': 'Related bill record.', 'additionalProperties': False}, 'description': 'Related bills when include=related_bills is requested.'}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Bill classifications.'}, 'openstates_url': {'type': 'string', 'description': 'Citable Open States page for this bill.'}, 'first_action_date': {'type': ['string', 'null'], 'description': 'Date of first recorded action.'}, 'from_organization': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'name': {'type': 'string', 'description': 'Chamber name.'}, 'classification': {'type': 'string', 'description': 'Chamber classification (e.g., "lower", "upper").'}}, 'description': 'Originating chamber.', 'additionalProperties': False}, 'other_identifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier'], 'properties': {'scheme': {'type': 'string', 'description': 'Identifier scheme (the issuing system). Absent for bills â\x80\x94 Open States omits it on every bill record observed.'}, 'identifier': {'type': 'string', 'description': 'Alternate bill identifier.'}}, 'description': 'Alternate identifier record.', 'additionalProperties': False}, 'description': 'Alternate identifiers when include=other_identifiers is requested.'}, 'latest_action_date': {'type': ['string', 'null'], 'description': 'Date of most recent action.'}, 'latest_passage_date': {'type': ['string', 'null'], 'description': 'Date bill passed (when applicable).'}, 'latest_action_description': {'type': ['string', 'null'], 'description': 'Description of most recent action.'}}, 'description': 'Bill record.', 'additionalProperties': False}, 'description': 'Bills matching the search criteria.'}, 'pagination': {'type': 'object', 'required': ['page', 'per_page', 'max_page', 'total_items'], 'properties': {'page': {'type': 'number', 'description': 'Current page.'}, 'max_page': {'type': 'number', 'description': 'Total pages available.'}, 'per_page': {'type': 'number', 'description': 'Results per page.'}, 'total_items': {'type': 'number', 'description': 'Total matching bills.'}}, 'description': 'Pagination metadata.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total bills matching the query across all pages.'}, 'appliedFilters': {'type': 'object', 'required': ['sort', 'page', 'per_page'], 'properties': {'q': {'type': 'string', 'description': 'Full-text query as received.'}, 'page': {'type': 'number', 'description': 'Page number requested.'}, 'sort': {'type': 'string', 'description': 'Sort order applied.'}, 'chamber': {'type': 'string', 'description': 'Chamber filter as received.'}, 'session': {'type': 'string', 'description': 'Session filter as received.'}, 'sponsor': {'type': 'string', 'description': 'Sponsor filter as received.'}, 'subject': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Subject tags filtered on, as received. Absent when none were supplied.'}, 'per_page': {'type': 'number', 'description': 'Results per page requested.'}, 'action_since': {'type': 'string', 'description': 'action_since date filter as received.'}, 'jurisdiction': {'type': 'string', 'description': 'Jurisdiction filter as received.'}, 'created_since': {'type': 'string', 'description': 'created_since date filter as received.'}, 'updated_since': {'type': 'string', 'description': 'updated_since date filter as received.'}, 'classification': {'type': 'string', 'description': 'Classification filter as received.'}, 'sponsor_classification': {'type': 'string', 'description': 'Sponsor-type filter as received.'}}, 'description': 'Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.', 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['jurisdiction'], 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-indexed).'}, 'parent': {'type': 'string', 'description': 'OCD organization ID of a parent committee to retrieve its subcommittees.'}, 'chamber': {'enum': ['upper', 'lower'], 'type': 'string', 'description': 'Filter by chamber. "upper" = Senate, "lower" = House/Assembly.'}, 'include': {'type': 'array', 'items': {'enum': ['memberships', 'links', 'sources'], 'type': 'string'}, 'description': '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.'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Results per page. Maximum 20.'}, 'jurisdiction': {'type': 'string', 'minLength': 1, 'description': 'State name, abbreviation, or OCD-ID. Required â\x80\x94 an all-states request exceeds the upstream timeout, so every call must be scoped to a single jurisdiction.'}, 'classification': {'enum': ['committee', 'subcommittee'], 'type': 'string', 'description': 'Filter to parent committees or subcommittees only. Omit for all.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'pagination', 'totalCount', 'page', 'maxPage', 'coverageNote', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'number', 'description': 'Current page returned.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['upstream_timeout', 'invalid_page'], 'description': 'Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout â\x80\x94 the query is too broad. `invalid_page`: Open States rejected the request as not found â\x80\x94 page is past the last page for this query. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'maxPage': {'type': 'number', 'description': 'Total pages available.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'classification', 'parent_id'], 'properties': {'id': {'type': 'string', 'description': 'OCD organization ID â\x80\x94 use as committee_id in openstates_get_committee.'}, 'name': {'type': 'string', 'description': 'Committee name.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description (e.g., "homepage"). Empty string when Open States recorded no description.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Committee homepage and reference links when include=links is requested.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'parent_id': {'type': ['string', 'null'], 'description': 'OCD ID of parent committee, or null for top-level committees.'}, 'memberships': {'type': 'array', 'items': {'type': 'object', 'required': ['person_id', 'person_name', 'role'], 'properties': {'role': {'type': 'string', 'description': 'Member role (e.g., "chair", "member"). Empty string when Open States recorded none.'}, 'person_id': {'type': 'string', 'description': 'OCD person ID of the member â\x80\x94 pass it to openstates_search_people as id for the full record. Empty string when the membership carries no linked person.'}, 'person_name': {'type': 'string', 'description': 'Member name. Empty string when Open States recorded none.'}}, 'description': 'Committee membership record.', 'additionalProperties': False}, 'description': 'Membership roster when include=memberships is requested.'}, 'classification': {'type': 'string', 'description': 'Committee classification: "committee" or "subcommittee".'}}, 'description': 'Committee record.', 'additionalProperties': False}, 'description': 'Committees matching the search criteria.'}, 'pagination': {'type': 'object', 'required': ['page', 'per_page', 'max_page', 'total_items'], 'properties': {'page': {'type': 'number', 'description': 'Current page.'}, 'max_page': {'type': 'number', 'description': 'Total pages.'}, 'per_page': {'type': 'number', 'description': 'Results per page.'}, 'total_items': {'type': 'number', 'description': 'Total matching committees.'}}, 'description': 'Pagination metadata.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total committees matching the query across all pages.'}, 'coverageNote': {'type': 'string', 'description': 'Committee data is experimental â\x80\x94 not all states have coverage in Open States. Empty results may indicate the state lacks data, not that no committees exist.'}, 'appliedFilters': {'type': 'object', 'required': ['page', 'per_page'], 'properties': {'page': {'type': 'number', 'description': 'Page number requested.'}, 'parent': {'type': 'string', 'description': 'Parent committee filter as received.'}, 'chamber': {'type': 'string', 'description': 'Chamber filter as received.'}, 'per_page': {'type': 'number', 'description': 'Results per page requested.'}, 'jurisdiction': {'type': 'string', 'description': 'Jurisdiction filter as received.'}, 'classification': {'type': 'string', 'description': 'Classification filter as received.'}}, 'description': 'Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.', 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['jurisdiction'], 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-indexed).'}, 'after': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$', 'description': 'ISO 8601 datetime â\x80\x94 events starting after this time. Use to find upcoming hearings.'}, 'before': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(T[\\d:.Z+-]+)?$', 'description': 'ISO 8601 datetime â\x80\x94 events starting before this time.'}, 'include': {'type': 'array', 'items': {'enum': ['links', 'sources', 'media', 'documents', 'participants', 'agenda'], 'type': 'string'}, 'description': '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.'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Results per page. Maximum 20.'}, 'jurisdiction': {'type': 'string', 'minLength': 1, 'description': 'State name, abbreviation, or OCD-ID. Required â\x80\x94 the Open States events endpoint has no all-states search, so every call must be scoped to a single jurisdiction.'}, 'require_bills': {'type': 'boolean', 'default': False, 'description': 'When true, only return events with at least one bill on the agenda. Most useful for tracking legislation through committee.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'pagination', 'totalCount', 'page', 'maxPage', 'coverageNote', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'number', 'description': 'Current page returned.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['upstream_timeout', 'invalid_page'], 'description': 'Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout â\x80\x94 the query is too broad. `invalid_page`: Open States rejected the request as not found â\x80\x94 page is past the last page for this query. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Recovery hint when results are empty. Absent when results are returned.'}, 'maxPage': {'type': 'number', 'description': 'Total pages available.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'description', 'classification', 'start_date', 'status', 'jurisdiction'], 'properties': {'id': {'type': 'string', 'description': 'OCD event ID â\x80\x94 use in openstates_get_event.'}, 'name': {'type': 'string', 'description': 'Event name.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description. Empty string when Open States recorded no description.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Event links when include=links is requested.'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Media URL.'}, 'note': {'type': 'string', 'description': 'Media description. Empty string when Open States recorded no description.'}}, 'description': 'Media link record.', 'additionalProperties': False}, 'description': 'Media links when include=media is requested.'}, 'agenda': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'classification', 'subjects', 'related_entities'], 'properties': {'subjects': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Subject tags for this agenda item.'}, 'description': {'type': 'string', 'description': 'Agenda item description.'}, 'classification': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Agenda item classification.'}, 'related_entities': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type'], 'properties': {'name': {'type': 'string', 'description': 'Related entity name.'}, 'entity_type': {'type': 'string', 'description': 'Entity type (e.g., "bill", "person", "organization").'}}, 'description': 'Related entity record.', 'additionalProperties': False}, 'description': 'Bills, people, or organizations referenced in this agenda item.'}}, 'description': 'Agenda item record.', 'additionalProperties': False}, 'description': 'Agenda items when include=agenda is requested.'}, 'status': {'type': 'string', 'description': 'Event status.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'end_date': {'type': 'string', 'description': 'Event end datetime. Absent when not recorded.'}, 'location': {'type': 'object', 'required': ['name'], 'properties': {'url': {'type': 'string', 'description': 'Location URL when available.'}, 'name': {'type': 'string', 'description': 'Location name.'}}, 'description': 'Event location when available.', 'additionalProperties': False}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Document URL.'}, 'note': {'type': 'string', 'description': 'Document description. Empty string when Open States recorded no description.'}}, 'description': 'Document link record.', 'additionalProperties': False}, 'description': 'Document links when include=documents is requested.'}, 'start_date': {'type': 'string', 'description': 'Event start datetime.'}, 'description': {'type': 'string', 'description': 'Event description.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}}, 'description': 'Hosting jurisdiction.', 'additionalProperties': False}, 'participants': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'entity_type'], 'properties': {'name': {'type': 'string', 'description': 'Participant name.'}, 'role': {'type': 'string', 'description': 'Participant role. Absent when upstream omits it.'}, 'entity_type': {'type': 'string', 'description': 'Entity type (e.g., "organization", "person").'}}, 'description': 'Participant record.', 'additionalProperties': False}, 'description': 'Participants when include=participants is requested.'}, 'classification': {'type': 'string', 'description': 'Event classification (e.g., "committee-meeting").'}}, 'description': 'Event record.', 'additionalProperties': False}, 'description': 'Events matching the search criteria.'}, 'pagination': {'type': 'object', 'required': ['page', 'per_page', 'max_page', 'total_items'], 'properties': {'page': {'type': 'number', 'description': 'Current page.'}, 'max_page': {'type': 'number', 'description': 'Total pages.'}, 'per_page': {'type': 'number', 'description': 'Results per page.'}, 'total_items': {'type': 'number', 'description': 'Total matching events.'}}, 'description': 'Pagination metadata.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total events matching the query across all pages.'}, 'coverageNote': {'type': 'string', 'description': 'Event data is experimental â\x80\x94 most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.'}, 'appliedFilters': {'type': 'object', 'required': ['require_bills', 'page', 'per_page'], 'properties': {'page': {'type': 'number', 'description': 'Page number requested.'}, 'after': {'type': 'string', 'description': 'after datetime filter as received.'}, 'before': {'type': 'string', 'description': 'before datetime filter as received.'}, 'per_page': {'type': 'number', 'description': 'Results per page requested.'}, 'jurisdiction': {'type': 'string', 'description': 'Jurisdiction filter as received.'}, 'require_bills': {'type': 'boolean', 'description': 'require_bills flag as received.'}}, 'description': 'Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.', 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1, 'description': 'OCD person IDs (e.g., "ocd-person/9eddb3cd-868e-42ba-831a-b415fd7ed445"). Required unless jurisdiction is provided â\x80\x94 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 â\x80\x94 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.'}, 'name': {'type': 'string', 'description': 'Name or partial name to match (case-insensitive substring). Narrows within the jurisdiction; it does not substitute for one.'}, 'page': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (1-indexed).'}, 'include': {'type': 'array', 'items': {'enum': ['other_names', 'other_identifiers', 'links', 'sources', 'offices'], 'type': 'string'}, 'description': '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.'}, 'district': {'type': 'string', 'description': 'District label (e.g., "1", "37", "At-Large"). Formats vary by state.'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Results per page. Maximum 20.'}, 'jurisdiction': {'type': 'string', 'minLength': 1, 'description': 'State name, abbreviation, or OCD-ID. Required unless id is provided â\x80\x94 an all-states search exceeds the upstream timeout, so every call must be scoped to a single jurisdiction or to specific person IDs.'}, 'org_classification': {'enum': ['legislature', 'executive', 'lower', 'upper', 'government'], 'type': 'string', 'description': '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 â\x80\x94 it is not equivalent to "legislature".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['results', 'pagination', 'totalCount', 'page', 'maxPage', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'number', 'description': 'Current page returned.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['upstream_timeout', 'invalid_page'], 'description': 'Machine-readable failure mode. Declared by this tool: `upstream_timeout`: Open States did not answer within the per-request timeout â\x80\x94 the query is too broad. `invalid_page`: Open States rejected the request as not found â\x80\x94 page is past the last page for this query. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Recovery hint when results are empty. Absent when results are returned.'}, 'maxPage': {'type': 'number', 'description': 'Total pages available.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'party', 'current_role', 'jurisdiction', 'given_name', 'family_name', 'email', 'openstates_url'], 'properties': {'id': {'type': 'string', 'description': 'OCD person ID.'}, 'name': {'type': 'string', 'description': 'Full name.'}, 'email': {'type': 'string', 'description': 'Email address. Empty string when not available.'}, 'image': {'type': 'string', 'description': 'Official headshot URL. Absent when no photo is published.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Link URL.'}, 'note': {'type': 'string', 'description': 'Link description (e.g., "website", "twitter"). Empty string when Open States recorded no description â\x80\x94 common on person links.'}}, 'description': 'External link record.', 'additionalProperties': False}, 'description': 'Website and social links when include=links is requested.'}, 'party': {'type': 'string', 'description': 'Primary party label. Empty string when unknown.'}, 'offices': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'classification'], 'properties': {'fax': {'type': 'string', 'description': 'Fax number when available.'}, 'name': {'type': 'string', 'description': 'Office name or label.'}, 'voice': {'type': 'string', 'description': 'Phone number when available.'}, 'address': {'type': 'string', 'description': 'Mailing address when available.'}, 'classification': {'type': 'string', 'description': 'Office type.'}}, 'description': 'Contact office record.', 'additionalProperties': False}, 'description': 'Contact offices when include=offices is requested.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'note'], 'properties': {'url': {'type': 'string', 'description': 'Source URL.'}, 'note': {'type': 'string', 'description': 'Source note. Empty string when Open States recorded no note.'}}, 'description': 'Source record.', 'additionalProperties': False}, 'description': 'Provenance sources when include=sources is requested.'}, 'given_name': {'type': 'string', 'description': 'Given (first) name. Empty string when Open States recorded none.'}, 'family_name': {'type': 'string', 'description': 'Family (last) name. Empty string when Open States recorded none.'}, 'other_names': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'note'], 'properties': {'name': {'type': 'string', 'description': 'Alternate or former name.'}, 'note': {'type': 'string', 'description': 'Note describing the alternate name. Empty string when Open States recorded no note.'}}, 'description': 'Alternate name record.', 'additionalProperties': False}, 'description': 'Alternate/former names when include=other_names is requested.'}, 'current_role': {'anyOf': [{'type': 'object', 'required': ['title', 'org_classification', 'district'], 'properties': {'title': {'type': 'string', 'description': 'Role title (e.g., "Senator", "Representative").'}, 'district': {'type': ['string', 'null'], 'description': 'District label or null when undistricted.'}, 'division_id': {'type': ['string', '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': {'type': 'string', 'description': 'Chamber classification (e.g., "upper", "lower").'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Current role or null when no active role is recorded.'}, 'jurisdiction': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'description': 'OCD jurisdiction ID.'}, 'name': {'type': 'string', 'description': 'Jurisdiction name.'}}, 'description': 'Home jurisdiction.', 'additionalProperties': False}, 'openstates_url': {'type': 'string', 'description': 'Open States profile URL. Empty string when Open States recorded none.'}, 'other_identifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'scheme'], 'properties': {'scheme': {'type': 'string', 'description': 'Identifier scheme (the issuing system).'}, 'identifier': {'type': 'string', 'description': 'Alternate identifier.'}}, 'description': 'Alternate identifier record.', 'additionalProperties': False}, 'description': 'Cross-system identifiers when include=other_identifiers is requested.'}}, 'description': 'Legislator record.', 'additionalProperties': False}, 'description': 'Legislators matching the search criteria.'}, 'pagination': {'type': 'object', 'required': ['page', 'per_page', 'max_page', 'total_items'], 'properties': {'page': {'type': 'number', 'description': 'Current page.'}, 'max_page': {'type': 'number', 'description': 'Total pages.'}, 'per_page': {'type': 'number', 'description': 'Results per page.'}, 'total_items': {'type': 'number', 'description': 'Total matching legislators.'}}, 'description': 'Pagination metadata.', 'additionalProperties': False}, 'totalCount': {'type': 'number', 'description': 'Total legislators matching the query across all pages.'}, 'appliedFilters': {'type': 'object', 'required': ['page', 'per_page'], 'properties': {'id': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Person IDs filtered on, as received. Absent when none were supplied.'}, 'name': {'type': 'string', 'description': 'Name filter as received.'}, 'page': {'type': 'number', 'description': 'Page number requested.'}, 'district': {'type': 'string', 'description': 'District filter as received.'}, 'per_page': {'type': 'number', 'description': 'Results per page requested.'}, 'jurisdiction': {'type': 'string', 'description': 'Jurisdiction filter as received.'}, 'org_classification': {'type': 'string', 'description': 'Role-type filter as received.'}}, 'description': 'Filters applied to this query as the server received them, for agent self-verification of zero or unexpected results.', 'additionalProperties': False}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
BNM Data Shop
Sells access to cached official reports, enforcement orders, regulatory documents, inspection records, and other public-source te…
Dados Abertos Senado BR MCP
Searches and retrieves Brazilian Federal Senate legislative, administrative, budgetary, contracting, speech, committee, and e-Cid…
OpenHelvetia Gateway
Provides sourced access to Swiss federal legislation and political data, including law metadata, versions, amendments, citations,…
GleanMark Trademark Search
Searches and analyzes USPTO trademark records, including conflicts, prosecution histories, TTAB proceedings, ownership chains, de…
editalmd
Searches Brazilian public procurement opportunities and documents, tracks deadlines and alerts, and supports tender document acce…
DataNexus MCP
Enables public-data research across domains, patents, government contracts, nonprofits, compliance registries, and software secur…
agentdata-nl
Provides paid company, insolvency, sanctions, regulatory, crypto-market, news, payment-counterparty, and structured web research …
FDA Data MCP
Searches and analyzes FDA data covering drugs, devices, facilities, inspections, recalls, approvals, shortages, enforcement, and …