OpenPublica

com.openpublica/civic-meetings

Search US local-government meetings: AI summaries, transcripts, and adopted plan documents.

Yes, your AI can use this right now.Answered a live MCP handshake in 668 ms with no sign-in needed and exposes 16 tools.

Connect it

Settings → Connectors → Add custom connector
URL: https://api.openpublica.com/mcp

16 tools, verified live

Pulled straight from the server with tools/list on 2026-10-17.
search_meeting_contentread-only

Search public meetings once across metadata and stored transcript text. Returns one card per meeting and native pagination metadata, without a total. Citations independently verify immutable timed runs and can be absent. Flat text relevance can lag updates or match across boundaries that cannot be cited. Source transcripts searches stored text, including meetings without timed pro

search_meetings_semanticread-only

Find AI summaries by meaning; use search_meeting_content for stored words. Results carry relevance_score and a summary preview. Narrow with government, category_tag, topic or dates; get_meeting retrieves the full summary.

list_recent_meetingsread-only

Browse meetings newest-first, optionally filtered by government, type, topic, or date. Use this for "what are the most recent meetings" or to page through a government's history. For topical questions, prefer `search_meetings_semantic`.

get_meetingread-only

Get a single meeting's full AI summary and topics. Set `include_transcript=true` to also retrieve the complete transcript text for direct quotation. Returns an error object if the meeting is not found.

search_meeting_transcriptread-only

Use unified stored-text search inside one currently public meeting. Returns at most one independently verified timed excerpt. A text match can lack timed evidence; use get_meeting(include_transcript=true) for full source retrieval. This does not run a separate local scan or fuzzy passage ranking.

find_local_governmentsread-only

Discover which governments OpenPublica tracks near a coordinate. Returns nearby governments with their `account_id`, which you can pass to the other tools to scope results to a specific city or board. Note OpenPublica only covers a limited set of US localities; an empty result means none are tracked near that point yet.

find_governments_by_nameread-only

Resolve a place *name* to the governments OpenPublica tracks there. Use this when you know a city/state name but not its coordinates — it returns matching governments with their `account_id` (prefix matches first), which you then pass to the search/list tools. Prefer this over `find_local_governments` when starting from a name rather than a latitude/longitude.

find_governments_by_zipread-only

Resolve a ZIP code to nearby tracked governments. Convenience wrapper: geocodes the ZIP, then finds the governments OpenPublica tracks nearest that point. Returns their `account_id`s plus the resolved location. An empty `governments` list means none are tracked near that ZIP yet.

get_government_inforead-only

Get a tracked government's profile: name, location, and meeting categories.

get_government_statsread-only

Get meeting-activity stats for a government over a recent window. Returns total meeting count, a per-day activity map, and a breakdown of meeting categories — useful for "how active has X been lately?" questions.

discover_meeting_vocabularyread-only

Discover the valid category and topic filter values before filtering a search. Meeting `category_tag`s are opaque UUIDs and topics have no fixed list, so you cannot guess them. Call this first to get the real values, then pass a returned `category_tag` (from `categories[].tags`) or `topic` string into `search_meetings_semantic` / `list_recent_meetings`. Scope with a government

list_government_documentsread-only

List a government's adopted plan and budget documents. Each entry carries `covers` — every general-plan element that document answers for. A city that publishes one bound general plan satisfies all eight with the same PDF, so do not conclude an element is unpublished because no entry is named after it. `status` says what the entry offers: `converted` is searchable and readabl

get_documentread-only

One document's metadata. Use read_document_pages to read it. If an `availability` key is present, read it before quoting figures: its `problems` are transcription-lint findings, most often a footnote marker that may have been merged into the number it annotates. No such key means the document transcribed cleanly.

read_document_pagesread-only

Read a page range of a document as markdown. Pages are transcribed from rendered pixels, so tables and scanned text come through as text. A page that could not be transcribed appears as a marked hole rather than being silently dropped — if you see one, say so instead of reading past it. Text is assembled from page windows, so `covered` may be slightly wider than what you

search_documentsread-only

Search adopted plan and budget documents, returning page-cited excerpts. Each hit's `text` is a short passage around the match, not the full page — call read_document_pages with the hit's `first_page` to read it in context. Every hit carries `first_page`/`last_page` and `source_url`. Quote those when citing: the page number is what makes the claim checkable against the city's

get_coverage_overviewread-only

Get OpenPublica's overall coverage: total governments, states, and meetings indexed. DC is tracked but is not a state, so it is reported separately as `includes_dc` — read the pair as "N states and DC".

Alternatives in Search & Research

Compare →
Try “Notion”, “Stripe”, “create invoice”, “browser”