OpenPublica
com.openpublica/civic-meetingsVersion 1.0.0Search US local-government meetings: AI summaries, transcripts, and adopted plan documents.
Status
Responds597 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:08 UTC
- Latency
- 597 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://api.openpublica.com/mcpResponds597 msNo sign-in
Claude Code
claude mcp add --transport http civic-meetings https://api.openpublica.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: civic-meetings
Remote MCP server URL: https://api.openpublica.com/mcpCursor
{
"mcpServers": {
"civic-meetings": {
"url": "https://api.openpublica.com/mcp"
}
}
}VS Code
code --add-mcp '{"name":"civic-meetings","type":"http","url":"https://api.openpublica.com/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
16 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
discover_meeting_vocabularyDiscover 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
and/or date range; calls without explicit dates default to a recent window
(returned as `default_window_days`).
| No | Yes | Not declared | Yes |
find_governments_by_nameResolve 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.
| No | Yes | Not declared | Yes |
find_governments_by_zipResolve 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.
| No | Yes | Not declared | Yes |
find_local_governmentsDiscover 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.
| No | Yes | Not declared | Yes |
get_coverage_overviewGet estimated stored-record totals, not publication-filtered coverage.
Counts do not establish completeness, searchability or freshness. DC is
reported separately from states as `includes_dc`.
| No | Yes | Not declared | Yes |
get_documentOne 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.
| No | Yes | Not declared | Yes |
get_government_infoGet a tracked government's profile: name, location, and meeting categories. | No | Yes | Not declared | Yes |
get_government_statsGet 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.
| No | Yes | Not declared | Yes |
get_meetingGet 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.
| No | Yes | Not declared | Yes |
list_government_documentsList 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 readable;
`superseded` is a retired edition, still stored but not searchable; and
**`failed` means we hold this document and could not read it — it is not
evidence the city published nothing.** Cite `source_url` in that case; it is
always the city's own copy.
An `availability` block appears ONLY when something is wrong with a
document, and `availability.reason` says what. No `availability` key means
there is nothing to report.
| No | Yes | Not declared | Yes |
list_recent_meetingsBrowse 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`.
| No | Yes | Not declared | Yes |
read_document_pagesRead 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 asked for; cite the page numbers in `covered`, not `requested`.
| No | Yes | Not declared | Yes |
search_documentsSearch 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 own copy.
This is word matching, not semantic search — try the terms a plan would
actually use. Only currently-served documents are searchable, so an empty
result is not evidence the government has no such policy; check
list_government_documents for what is held and what could not be read.
A hit with `document_complete: false` comes from a document with
transcription findings. Verify it against `source_url` before quoting a
number from it.
| No | Yes | Not declared | Yes |
search_meeting_contentSearch public meetings once across metadata and stored transcript text.
Returns one card per meeting and native pagination metadata, without a total.
Small current-text previews can be absent and do not establish timestamps.
Text relevance can lag updates or match across untimed boundaries.
Source transcripts searches stored text, including meetings without timed proof.
| No | Yes | Not declared | Yes |
search_meeting_transcriptUse unified stored-text search inside one currently public meeting.
Returns an optional current-text preview, without resolving timing. A text match
can lack a literal preview; use get_meeting(include_transcript=true) for full source
retrieval. This does not run a separate local scan or fuzzy passage ranking.
| No | Yes | Not declared | Yes |
search_meetings_semanticFind 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.
| No | Yes | Not declared | Yes |
Details
- Registry status
- Active
- Published
- Aug 28, 2026
- Updated
- Aug 28, 2026
- Repository
- Not given
- Categories (suggested)
- CommunicationSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared