Skip to content

OpenPublica

by openpublica.com · remote · no sign-in to list tools · v1.0.0 · published by com.openpublica

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

Changes · 1

16 tools: 1 change things and 15 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http civic-meetings https://api.openpublica.com/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

16 tools

Changes things 1Claude Code: ask
  • discover_meeting_vocabularyDiscover the valid category and topic filter values before filtering a search.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 and/or date range; calls without explicit dates default to a recent window (returned as `default_window_days`).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
Only reads 15Claude Code: allow
  • find_governments_by_nameResolve a place *name* to the governments OpenPublica tracks there.No findings

    Why it is in this group

    • The name "find_governments_by_name" says "find": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • find_governments_by_zipResolve a ZIP code to nearby tracked governments.No findings

    Why it is in this group

    • The name "find_governments_by_zip" says "find": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • find_local_governmentsDiscover which governments OpenPublica tracks near a coordinate.No findings

    Why it is in this group

    • The name "find_local_governments" says "find": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_coverage_overviewGet estimated stored-record totals, not publication-filtered coverage.No findings

    Why it is in this group

    • The name "get_coverage_overview" says "get": a word for reading.
    Description, as the server wrote it
    Get 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`.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_documentOne document's metadata.No findings

    Why it is in this group

    • The name "get_document" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_government_infoGet a tracked government's profile: name, location, and meeting categories.No findings

    Why it is in this group

    • The name "get_government_info" says "get": a word for reading.
    Description, as the server wrote it
    Get a tracked government's profile: name, location, and meeting categories.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_government_statsGet meeting-activity stats for a government over a recent window.No findings

    Why it is in this group

    • The name "get_government_stats" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_meetingGet a single meeting's full AI summary and topics.No findings

    Why it is in this group

    • The name "get_meeting" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_government_documentsList a government's adopted plan and budget documents.No findings

    Why it is in this group

    • The name "list_government_documents" says "list": a word for reading.
    Description, as the server wrote it
    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 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_recent_meetingsBrowse meetings newest-first, optionally filtered by government, type, topic, or date.No findings

    Why it is in this group

    • The name "list_recent_meetings" says "list": a word for reading.
    Description, as the server wrote it
    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`.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • read_document_pagesRead a page range of a document as markdown.No findings

    Why it is in this group

    • The name "read_document_pages" says "read": a word for reading.
    Description, as the server wrote it
    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 asked for; cite the page numbers in `covered`, not `requested`.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_documentsSearch adopted plan and budget documents, returning page-cited excerpts.No findings

    Why it is in this group

    • The name "search_documents" says "search": a word for reading.
    Description, as the server wrote it
    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 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_meeting_contentSearch public meetings once across metadata and stored transcript text.No findings

    Why it is in this group

    • The name "search_meeting_content" says "search": a word for reading.
    Description, as the server wrote it
    Search 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_meeting_transcriptUse unified stored-text search inside one currently public meeting.No findings

    Why it is in this group

    • The name "search_meeting_transcript" says "search": a word for reading.
    Description, as the server wrote it
    Use 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_meetings_semanticFind AI summaries by meaning; use search_meeting_content for stored words.No findings

    Why it is in this group

    • The name "search_meetings_semantic" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http civic-meetings https://api.openpublica.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__civic-meetings__search_meeting_content",
      "mcp__civic-meetings__search_meetings_semantic",
      "mcp__civic-meetings__list_recent_meetings",
      "mcp__civic-meetings__get_meeting",
      "mcp__civic-meetings__search_meeting_transcript",
      "mcp__civic-meetings__find_local_governments",
      "mcp__civic-meetings__find_governments_by_name",
      "mcp__civic-meetings__find_governments_by_zip",
      "mcp__civic-meetings__get_government_info",
      "mcp__civic-meetings__get_government_stats",
      "mcp__civic-meetings__list_government_documents",
      "mcp__civic-meetings__get_document",
      "mcp__civic-meetings__read_document_pages",
      "mcp__civic-meetings__search_documents",
      "mcp__civic-meetings__get_coverage_overview"
    ],
    "ask": [
      "mcp__civic-meetings__discover_meeting_vocabulary"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as civic-meetings. Review it before you use it.