# Open data, API, and MCP for developers and AI agents

Everything on Chicago Politics is public record, free to reuse with attribution (CC BY 4.0): please cite Chicago Politics and link to the page. No sign-up, key, or authentication is needed for anything below.

## MCP server

Add `https://www.chicagopolitics.org/mcp` to any Model Context Protocol client (Streamable HTTP, no authentication). Tools:

- **search_documents**: semantic search across archived City documents and meeting transcripts
- **search_legislation**: find ordinances, resolutions, and orders by title or record number, or by sponsor ward
- **get_alderperson**, **list_votes**, **find_ward**: a member's full record, how they voted, and which ward contains a location
- **get_legislation**, **get_meeting**, **list_meetings**, **get_committee**: full records
- **get_page**: any page of this site as Markdown
- **contribute_data**: share data, documents, sources, or corrections with us (reviewed by a person before use)

Server card: [/.well-known/mcp/server-card.json](https://www.chicagopolitics.org/.well-known/mcp/server-card.json). In the browser, the site also registers WebMCP tools for agents that support it.

## A2A agent

Other AI agents can talk to our agent over [A2A](https://a2a-protocol.org) (JSON-RPC, protocol 1.0 or 0.3) at `https://www.chicagopolitics.org/a2a`; see the [Agent Card](https://www.chicagopolitics.org/.well-known/agent-card.json). Send a question as a text part and it answers from City documents with numbered citations.

**We ask for data in return.** Each answer includes a request for data related to what you asked about, or anything else about Chicago politics: datasets, records, primary sources, corrections. Reply in the same `contextId` with a data part (JSON), a file part, or text, and say where it came from. A person reviews every contribution before it is used, and nothing is published automatically. Please don't send personal information about private individuals.

## Pages as Markdown

Add `.md` to any page URL (for example [/ward/1.md](https://www.chicagopolitics.org/ward/1.md); the home page is [/index.md](https://www.chicagopolitics.org/index.md)) or request it with `Accept: text/markdown`. [llms.txt](https://www.chicagopolitics.org/llms.txt) is a guide for language models, and [llms-full.txt](https://www.chicagopolitics.org/llms-full.txt) holds the key data in one file. Every page is listed in the [sitemap](https://www.chicagopolitics.org/sitemap.xml).

## JSON API

Described in [OpenAPI 3.1](https://www.chicagopolitics.org/api/openapi.json) and listed in the [API catalog](https://www.chicagopolitics.org/.well-known/api-catalog) (RFC 9727).

| Endpoint | Returns |
| --- | --- |
| `/api/alderpersons`, `/api/alderpersons/{ward}` | current members, vote totals, recent legislation |
| `/api/votes?ward=12&divided=1` | roll calls, with that member's vote |
| `/api/roll-calls/{matterId}` | one roll call with every vote |
| `/api/matters?q=budget&ward=12&key=1` | legislation search |
| `/api/matter/{id}` | live full record: timeline, documents, votes, AI summary |
| `/api/search?q=...&kind=matter|meeting&year=2026` | semantic search over documents and transcripts |
| `/api/calendar.ics[?committee=slug]` | meetings as a calendar feed |
| `/api/feeds/ward/{n}.rss` | a member's votes and legislation |
| `/api/health` | last data refresh |

## Bulk data

Refreshed daily from the Office of the City Clerk:

- [alderpersons.json](https://www.chicagopolitics.org/data/alderpersons.json): members keyed by ward, with contacts, voting stats, sponsorship, committees
- [legislation.json](https://www.chicagopolitics.org/data/legislation.json): every key roll call this term. `votes` is a 50-character string with one code per ward in order: Y yea, N nay, A absent, R recused, E excused, V not voting, - not in office
- [committees.json](https://www.chicagopolitics.org/data/committees.json), [meetings.json](https://www.chicagopolitics.org/data/meetings.json), [insights.json](https://www.chicagopolitics.org/data/insights.json), [network.json](https://www.chicagopolitics.org/data/network.json), [predictions.json](https://www.chicagopolitics.org/data/predictions.json)
- [wards.geojson](https://www.chicagopolitics.org/data/wards.geojson): ward boundaries (2023-)
- Per meeting: `/data/meeting_insights/{meeting id}.json` (AI notes); transcripts at `/files/transcripts/{vimeo id}.txt`
- Archived City documents: `/files/clerk/...` (linked from each page)

## Fair use

Cache what you can and keep request rates modest; semantic search runs a model on every request. For anything large, use the bulk files. Questions: hello@chicagopolitics.org

---
Source: https://www.chicagopolitics.org/developers · Chicago Politics, an independent, nonpartisan tracker of the Chicago City Council. Guide for agents: https://www.chicagopolitics.org/llms.txt
