Democracy Works integrationDemocracy Works logo

Democracy Works integration for AI agents.

Democracy Works integration for AI agents with secure authentication and server-side credential injection. Open Connector runs the OAuth, seals the token in an encrypted vault, and serves Democracy Works tools to your agent over MCP or a typed API — credentials injected server-side, every call audited, nothing leaving your infrastructure. Open source (AGPL-3.0) and self-hostable.

What your agents can do

Real Democracy Works actions, managed and audited.

Your user connects Democracy Works once; your agent can then retrieve election, authority, candidate, contest, endorsement, export, ballot measure, and voting location data — scoped to the OAuth permissions you grant and the tool allowlist you configure. Every action is least-privilege and written to a tamper-evident audit trail.

  1. 1

    Your user grants Democracy Works access once (OAuth) — the token lands in the vault.

  2. 2

    Your agent calls a tool over MCP or the typed API; Open Connector injects the credential server-side.

  3. 3

    Every routed call appends a hash-chained audit record — nothing leaves your infra.

Tools & triggers

Supported Democracy Works tools.

11 tools are generated from the published Democracy Works catalog. Descriptions are plain text; each action remains subject to its configured authentication and tool allowlist.

Showing 11 tools. All published catalog entries are included in this page's server-rendered HTML.

All authorities
This endpoint includes all statewide and local authorities that correspond to a given address or state parameter. The statewide authorities include evergreen information and guidance on how to register and vote in that state, as well as contact information for state election authorities. Local authorities provide contact information for the local election office. Authorities do not contain election-specific information such as dates, and while we closely monitor this data for changes and update when needed, Authorities information generally does not change from election to election. Authorities are returned sorted alphabetically by OCD-ID. Supports the following standard parameters: see __[Pagination](#section/Standard-Parameters/Pagination)__, __[Localization](#section/Standard-Parameters/Localization)__, and __[Content Formatting](#section/Standard-Parameters/Content-Formatting)__.
getauthorities
Ballot Measure
Information on the ballot measures on the ballot, including a summary and the full text of the ballot measure.
getballotmeasure
Candidate
This endpoint gets one candidate by `id`.
getcandidate
Contest
This endpoint gets one contest by `id`.
getcontest
Elections
This endpoint has election-specific dates and deadlines, URLs for voters to get more information and take action, and detailed guidance in both English and Spanish. The information included reflects the voter registration and voting methods available in the state for that election, such as online, in-person, and by-mail registration as well as by-mail, in-person, and early voting. The election also contains some information from the related state authority. The default is to return all elections, though you can limit the response to upcoming elections through the use of the start date parameter. Elections are returned sorted chronologically by election date. After an election is confirmed to be occurring, Democracy Works surfaces information about an election as details become available. An election’s guidance phase describes the state of the currently available guidance. A `past` election is an election whose election date is in the past. An `expected` election is an upcoming election that is expected to occur but for which Democracy Works has not yet published specific guidance for. A `not currently expected` election is an election that Democracy Works expect to happen but will not publish guidance for. An `active` election is an upcoming election for which Democracy Works has published specific guidance. Elections are returned sorted chronologically by election date. Supports the following standard parameters: see __[Pagination](#section/Standard-Parameters/Pagination)__, __[Localization](#section/Standard-Parameters/Localization)__, __[Content Formatting](#section/Standard-Parameters/Content-Formatting)__, and __[Fields](#section/Standard-Parameters/Fields)__. ### Ballot Measure Information Information about measures on the ballot will include: - All federal ballot measures - All statewide ballot measures - Local ballot measures in the top 100 cities by population Ballot measure information is not included in the default response for an election. For ballot measure information to be included with the response, include the `includeBallotData` parameter with a value of `true`. Ballot data is sourced from [Ballotpedia](https://ballotpedia.org/Election_coverage_approach_for_Ballotpedia). ### Candidate and Contest Information Information about contests and candidates on the ballot will include: - All federal contests and candidates, including senate and house of representatives - All state contests and candidates, including governor, treasurer, secretary of state, state legislative seats, state supreme court, district court, and court of appeals - Local contests and candidates including mayor, county judge, county clerk, commissioners, and city councils in the top 100 cities by population, plus school board elections in 475 districts - Note that local coverage may be limited by mapping constraints. Ballot data is sourced from [Ballotpedia](https://ballotpedia.org/Election_coverage_approach_for_Ballotpedia).
getelections
Endorsement
This endpoint gets one endorsement by `endorsement id`.
getendorsement
Endorsement Bulk
This endpoint a list of endorsements by ballot measure or candidate id. You may not provide an ballot measure and candidate id at the same time. No endorsement is associated with both a ballot measure & candidate. Supports the following standard parameters: see __[Pagination](#section/Standard-Parameters/Pagination)__.
getendorsementbulk
Exports
This endpoint serves presigned URLs to flat files on AWS S3. It supports no parameters. To set up a bulk data export, contact partnerships@democracy.works. Presigned URLs are temporary and expire after one hour. Download the file promptly after requesting a URL. If a URL expires before you can download your file, request a new one from this endpoint. Presigned URLs grant access to your data. Do not share these URLs with any party that should have access to this data. [Learn more about Working with presigned URLs on AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html).
getexports
Local authorities
This endpoint provides contact information for over 8,500 local election offices at the county and municipal levels. Authorities are returned sorted alphabetically by OCD-ID. Supports the following standard parameters: see __[Pagination](#section/Standard-Parameters/Pagination)__ and __[Localization](#section/Standard-Parameters/Localization)__.
getlocalauthorities
State authorities
This endpoint includes statewide evergreen information and instructions on how to register and vote for each state (and Washington, D.C.). It includes contact information for state election authorities, registration methods, voting methods, state-specific URLs to authoritative government websites, and more. Authorities do not contain election-specific information such as dates, and while we closely monitor this data for changes and update when needed, Authorities information generally does not change from election to election. Authorities are returned sorted alphabetically by OCD-ID. Supports standard the following parameters: see __[Pagination](#section/Standard-Parameters/Pagination)__, __[Localization](#section/Standard-Parameters/Localization)__, and __[Content Formatting](#section/Standard-Parameters/Content-Formatting)__.
getstateauthorities
Voting Locations
### Address arguments An address may be supplied in one of two ways: - **As a single string**, via `address`. - **As components**, via `addressStreet`, `addressCity`, `addressState`, and `addressZip`. All four component parameters must be present, and `addressUnitNumber` may optionally be added. All requests must include an address as single string or with all required components (preferred). ```bash # Address as a single string curl \ --get \ --header "X-API-KEY: $YOUR_API_KEY" \ --data-urlencode address="20 Jay Street Brooklyn NY 11201" \ --data-urlencode publishStatus=prepublished \ https://api.democracy.works/v2/voting-locations ``` ```bash # Address as components curl \ --get \ --header "X-API-KEY: $YOUR_API_KEY" \ --data-urlencode addressStreet="20 Jay Street" \ --data-urlencode addressCity=Brooklyn \ --data-urlencode addressState=NY \ --data-urlencode addressZip=11201 \ --data-urlencode addressUnitNumber="Unit 410" \ --data-urlencode publishStatus=prepublished \ https://api.democracy.works/v2/voting-locations ```
getvotinglocations
FAQ

Democracy Works integration, answered

How do AI agents use Democracy Works through Open Connector?
Your user connects Democracy Works once with one of its cataloged authentication methods. Open Connector stores the credential in an encrypted vault and exposes Democracy Works tools to your agent over MCP or a typed API, with credentials injected server-side on each call.
Is this a Democracy Works MCP server?
Yes. Open Connector can serve Democracy Works as a named MCP server with a scoped allowlist and a per-user connection URL, so any MCP client can call Democracy Works actions with credentials injected server-side.
Where do Democracy Works credentials live?
In your own infrastructure. Open Connector keeps credentials in its own vault and injects them at call time, so they never leave your environment.

Give your agents Democracy Works — keep the keys.

Open source, self-hostable, with Democracy Works credentials that never leave your infrastructure. Run it from source today.