protogrid

Search / com.openpublica/civic-meetings

OpenPublica

R0· no sign-in

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

v1.0.0 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality69needs work
Trust80of 100
Uptime, 30 days100%
Latency p50424 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "civic-meetings": {
      "type": "http",
      "url": "https://api.openpublica.com/mcp"
    }
  }
}
claude mcp add --transport http civic-meetings https://api.openpublica.com/mcp
[mcp_servers.civic-meetings]
url = "https://api.openpublica.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "civic-meetings": {
      "type": "remote",
      "url": "https://api.openpublica.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "civic-meetings": {
      "type": "http",
      "url": "https://api.openpublica.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=civic-meetings&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLm9wZW5wdWJsaWNhLmNvbS9tY3AifQ%3D%3D"
}
{
  "servers": {
    "civic-meetings": {
      "type": "http",
      "url": "https://api.openpublica.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "civic-meetings": {
      "httpUrl": "https://api.openpublica.com/mcp"
    }
  }
}
extensions:
  "civic-meetings":
    enabled: true
    name: "civic-meetings"
    type: streamable_http
    uri: "https://api.openpublica.com/mcp"
    timeout: 300

Quality 69 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations16 of 16 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_meeting_content (idempotentHint); get_meeting (idempotentHint); find_local_governments (idempotentHint); …
  • pass
    tools.token_costabout 4,335 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes22 tool changes in 30 days
  • fail
    stability.rug_pull3 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

16 tools, about 4,335 tokens to load them all · tool set f25811b97e34 · tools last changed 2026-10-18 · checked 2026-10-19 10:52 UTC

Tool changes

  • get_coverage_overviewchangeddescription, annotationsmeaning changed
    before

    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".

    after · 24% of words in common

    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`.

  • search_documentschangedannotations
  • read_document_pageschangedannotations
  • get_documentchangedannotations
  • list_government_documentschangedannotations
  • discover_meeting_vocabularychangedannotations
  • get_government_statschangedannotations
  • get_government_infochangedannotations
  • find_governments_by_zipchangedannotations
  • find_governments_by_namechangedannotations

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 80 / 100

no-repository
provenance55
liveness100
freshness85
hygiene80

+dns-namespace +website +reachable +uptime-100% ~updated-52d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://api.openpublica.com/mcp streamable-httpnoneyes100%424 ms2025-06-182026-10-19

Tools (16)

discover_meeting_vocabularyread-onlyDiscover 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`).
find_governments_by_nameread-onlyResolve 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-onlyResolve 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.
find_local_governmentsread-onlyDiscover 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.
get_coverage_overviewread-onlyGet 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`.
get_documentread-onlyOne 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.
get_government_inforead-onlyGet a tracked government's profile: name, location, and meeting categories.
get_government_statsread-onlyGet 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.
get_meetingread-onlyGet 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.
list_government_documentsread-onlyList 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.
list_recent_meetingsread-onlyBrowse 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`.
read_document_pagesread-onlyRead 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`.
search_documentsread-onlySearch 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.
search_meeting_contentread-onlySearch 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.
search_meetings_semanticread-onlyFind 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.
search_meeting_transcriptread-onlyUse 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.openpublica/civic-meetings",
  "icons": [
    {
      "src": "https://www.openpublica.com/icon.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "OpenPublica",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://api.openpublica.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.0",
  "websiteUrl": "https://www.openpublica.com/api-docs",
  "description": "Search US local-government meetings: AI summaries, transcripts, and adopted plan documents."
}