_ registry / mcp streamable-http · checked 52m ago

OpenPublica

https://api.openpublica.com

Registry code: e9d247e09692a29b

api record

OpenPublica makes US local-government meetings searchable. It tracks city

councils and boards (Sacramento, San Francisco, Los Angeles, Minneapolis, and

endpoint
https://api.openpublica.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is OpenPublica live?
Yes — it answered the hub's last check (checked 52m ago). It answered 99% of checks over the last 30 days.
Is OpenPublica free to use?
Yes — the hub reached it with no key and no payment.
What tools does OpenPublica have?
15 tools: get_meeting, list_government_documents, find_governments_by_zip, get_document, search_meeting_transcript, get_government_info, get_government_stats, read_document_pages, ….
Is OpenPublica safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.2%

90 days 99.3%· all time 99.3%

latency
566ms

last good check

priced tools
0

of 15 tools

_ answered our checks, 90 days 557 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • search local government meeting summaries
  • find governments by name or zip
  • read a meeting transcript
  • search adopted plan and budget documents
takes → gives
text → data, text
tools
15 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 15 tools
3 open 12 never probed 3 of 15 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • discover_meeting_vocabulary reads open 14h ago

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

    mcp-tool

    {
      "type": "object",
      "title": "discover_meeting_vocabularyArguments",
      "properties": {
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "End Date",
          "default": null,
          "description": "Optional latest date, MM-DD-YYYY."
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start Date",
          "default": null,
          "description": "Optional earliest date, MM-DD-YYYY."
        },
        "topic_limit": {
          "type": "integer",
          "title": "Topic Limit",
          "default": 50,
          "maximum": 200,
          "minimum": 1,
          "description": "Max topics to return, most common first (1-200)."
        },
        "government_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Id",
          "default": null,
          "description": "Optional account_id to scope the vocabulary to one government."
        },
        "government_ids": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Ids",
          "default": null,
          "description": "Optional list of account_ids to scope to several governments. Overrides government_id."
        }
      }
    }
    arguments 69 lines
  • get_coverage_overview reads open 14h ago

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

    mcp-tool

    {
      "type": "object",
      "title": "get_coverage_overviewArguments",
      "properties": {}
    }
    arguments 5 lines
  • list_recent_meetings reads open 14h ago

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

    mcp-tool

    {
      "type": "object",
      "title": "list_recent_meetingsArguments",
      "properties": {
        "page": {
          "type": "integer",
          "title": "Page",
          "default": 1,
          "minimum": 1,
          "description": "1-based page number for older results."
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 25,
          "minimum": 1,
          "description": "Meetings per page (1-25)."
        },
        "topic": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Topic",
          "default": null,
          "description": "Optional topic filter — a topic name from discover_meeting_vocabulary, e.g. 'Affordable Housing'."
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "End Date",
          "default": null,
          "description": "Optional latest date, MM-DD-YYYY."
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start Date",
          "default": null,
          "description": "Optional earliest date, MM-DD-YYYY."
        },
        "category_tag": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Category Tag",
          "default": null,
          "description": "Optional meeting-type filter — an opaque category_tag from discover_meeting_vocabulary (not a guessable slug; don't invent it)."
        },
        "government_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Id",
          "default": null,
          "description": "account_id to list meetings for (from find_local_governments). Omit to list across all governments."
        }
      }
    }
    arguments 86 lines
  • get_meeting reads unknown 52m ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "get_meetingArguments",
      "required": [
        "meeting_id"
      ],
      "properties": {
        "meeting_id": {
          "type": "string",
          "title": "Meeting Id",
          "description": "The meeting_id returned by a search/list tool."
        },
        "include_transcript": {
          "type": "boolean",
          "title": "Include Transcript",
          "default": false,
          "description": "If true, also fetch the full meeting transcript (can be long). Default false."
        }
      }
    }
    arguments 20 lines
  • list_government_documents reads unknown 52m ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "list_government_documentsArguments",
      "required": [
        "government_id"
      ],
      "properties": {
        "government_id": {
          "type": "string",
          "title": "Government Id",
          "description": "account_id from find_local_governments."
        },
        "include_superseded": {
          "type": "boolean",
          "title": "Include Superseded",
          "default": false,
          "description": "Also include prior editions retired by a newer document."
        }
      }
    }
    arguments 20 lines
  • find_governments_by_zip reads unknown 7h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "find_governments_by_zipArguments",
      "required": [
        "postal_code"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Max governments to return (1-50)."
        },
        "postal_code": {
          "type": "string",
          "title": "Postal Code",
          "description": "A US ZIP code, e.g. '95814'."
        }
      }
    }
    arguments 22 lines
  • get_document reads unknown 4h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "get_documentArguments",
      "required": [
        "document_id"
      ],
      "properties": {
        "document_id": {
          "type": "string",
          "title": "Document Id",
          "description": "Document id from list_government_documents or search_documents."
        }
      }
    }
    arguments 14 lines
  • search_meeting_transcript reads unknown 11h ago

    Find exact quotes/passages inside one meeting's transcript. Use this to pull direct quotations without loading a whole (often very long) transcript: it fetches the transcript server-side, scans it, and returns only the matching passages with approximate `start`/`end` timecodes when available. Exact matches rank first, with a fuzzy fallback. Prefer this over `get_meeting(include_transcript=true)` when you only need specific quotes.

    mcp-tool

    {
      "type": "object",
      "title": "search_meeting_transcriptArguments",
      "required": [
        "meeting_id",
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "title": "Query",
          "description": "The phrase or terms to find in the transcript, e.g. 'rent stabilization' or a speaker's exact words."
        },
        "meeting_id": {
          "type": "string",
          "title": "Meeting Id",
          "description": "The meeting_id (from a search/list tool) whose transcript to search."
        },
        "max_passages": {
          "type": "integer",
          "title": "Max Passages",
          "default": 5,
          "maximum": 20,
          "minimum": 1,
          "description": "Max matched passages to return (1-20)."
        },
        "context_chars": {
          "type": "integer",
          "title": "Context Chars",
          "default": 300,
          "maximum": 2000,
          "minimum": 0,
          "description": "Characters of surrounding context per side of a match (0-2000)."
        }
      }
    }
    arguments 36 lines
  • get_government_info reads unknown 4h ago

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

    mcp-tool

    {
      "type": "object",
      "title": "get_government_infoArguments",
      "required": [
        "government_id"
      ],
      "properties": {
        "government_id": {
          "type": "string",
          "title": "Government Id",
          "description": "The account_id of the government."
        },
        "include_weekly_summary": {
          "type": "boolean",
          "title": "Include Weekly Summary",
          "default": false,
          "description": "If true, include the AI-generated weekly digest (markdown). Default false."
        }
      }
    }
    arguments 20 lines
  • get_government_stats reads unknown 4h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "get_government_statsArguments",
      "required": [
        "government_id"
      ],
      "properties": {
        "days": {
          "type": "integer",
          "title": "Days",
          "default": 30,
          "maximum": 365,
          "minimum": 1,
          "description": "Look-back window in days (1-365)."
        },
        "government_id": {
          "type": "string",
          "title": "Government Id",
          "description": "account_id of the government, or 'all' for corpus-wide stats."
        }
      }
    }
    arguments 22 lines
  • read_document_pages reads unknown 52m ago

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

    mcp-tool

    {
      "type": "object",
      "title": "read_document_pagesArguments",
      "required": [
        "document_id",
        "first_page",
        "last_page"
      ],
      "properties": {
        "last_page": {
          "type": "integer",
          "title": "Last Page",
          "minimum": 1,
          "description": "Last page to read. Spans longer than 40 pages are clamped to 40 from first_page."
        },
        "first_page": {
          "type": "integer",
          "title": "First Page",
          "minimum": 1,
          "description": "First page to read (1-based, as the PDF renders)."
        },
        "document_id": {
          "type": "string",
          "title": "Document Id",
          "description": "Document id from list_government_documents or search_documents."
        }
      }
    }
    arguments 28 lines
  • find_governments_by_name reads unknown 7h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "find_governments_by_nameArguments",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Max governments to return (1-50)."
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "A place name to search for, e.g. 'Sacramento', 'San Francisco, CA', or a state like 'Texas'."
        }
      }
    }
    arguments 22 lines
  • find_local_governments reads unknown 7h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "find_local_governmentsArguments",
      "required": [
        "longitude",
        "latitude"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Max governments to return (1-50)."
        },
        "latitude": {
          "type": "number",
          "title": "Latitude",
          "maximum": 90,
          "minimum": -90,
          "description": "Latitude of the location of interest."
        },
        "longitude": {
          "type": "number",
          "title": "Longitude",
          "maximum": 180,
          "minimum": -180,
          "description": "Longitude of the location of interest."
        }
      }
    }
    arguments 32 lines
  • search_documents reads unknown 11h ago

    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.

    mcp-tool

    {
      "type": "object",
      "title": "search_documentsArguments",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Maximum excerpts to return."
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "Words to find in plan and budget text, e.g. 'accessory dwelling unit parking'."
        },
        "government_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Id",
          "default": null,
          "description": "Optional account_id to restrict the search to one government."
        }
      }
    }
    arguments 35 lines
  • search_meetings_semantic reads unknown 11h ago

    Search OpenPublica meeting metadata by meaning, analyzed words, or both. The best default tool for "what has been said/decided about X" questions. Results carry a `relevance_score` (semantic, 0-1) and/or `keyword_score` (BM25) plus `highlights`, so you can triage matches by confidence. If the response sets `degraded_to_vector`, the hybrid keyword query failed and results are semantic-only. Keyword query failures return an error. Narrow with `category_tag`/`topic` (get valid values from `discover_meeting_vocabulary`), a date range, or one or more governments. Returns a summary preview; call `get_meeting` with a returned `meeting_id` for the full summary or transcript.

    mcp-tool

    {
      "type": "object",
      "title": "search_meetings_semanticArguments",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 10,
          "maximum": 25,
          "minimum": 1,
          "description": "Max meetings to return (1-25)."
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "What to search for in plain language, e.g. 'short-term rental regulations' or 'police budget overtime'."
        },
        "topic": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Topic",
          "default": null,
          "description": "Optional topic filter — a topic name from discover_meeting_vocabulary, e.g. 'Affordable Housing'. Restricts to meetings that discussed it."
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "End Date",
          "default": null,
          "description": "Optional latest meeting date, MM-DD-YYYY."
        },
        "min_score": {
          "anyOf": [
            {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "title": "Min Score",
          "default": null,
          "description": "Optional semantic relevance floor 0-1 (default 0.4). Raise to return only strong matches; lower to widen recall. Applies to semantic matching only — keyword (BM25) hits are not filtered by it."
        },
        "match_type": {
          "anyOf": [
            {
              "enum": [
                "semantic",
                "keyword",
                "hybrid"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Match Type",
          "default": null,
          "description": "How to match: 'semantic' (default, by meaning — best for concepts/paraphrases), 'keyword' (analyzed words in titles, summaries and topics), or 'hybrid' (both, rank-fused). Neither searches literal transcript phrases."
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start Date",
          "default": null,
          "description": "Optional earliest meeting date, MM-DD-YYYY."
        },
        "category_tag": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Category Tag",
          "default": null,
          "description": "Optional meeting-type filter — an opaque category_tag from discover_meeting_vocabulary (not a guessable slug)."
        },
        "government_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Id",
          "default": null,
          "description": "Optional account_id (from find_local_governments) to restrict the search to one government."
        },
        "government_ids": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Ids",
          "default": null,
          "description": "Optional list of account_ids to search across several governments at once (e.g. to compare cities). Overrides government_id."
        }
      }
    }
    arguments 136 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id e9d247e09692a29b.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/e9d247e09692a29b/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/e9d247e09692a29b/badge.svg)](https://brick.blue/agent/e9d247e09692a29b?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.