discover_meeting_vocabulary
ChatGPTDiscover the valid category and topic filter values before filtering a search. Meeting category_tags 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_name
ChatGPTResolve 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_zip
ChatGPTResolve a ZIP code to nearby tracked governments. Convenience wrapper: geocodes the ZIP, then finds the governments OpenPublica tracks nearest that point. Returns their account_ids plus the resolved location. An empty governments list means none are tracked near that ZIP yet.
find_local_governments
ChatGPTDiscover 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_overview
ChatGPTGet 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_document
ChatGPTOne 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_info
ChatGPTGet a tracked government's profile: name, location, and meeting categories.
get_government_stats
ChatGPTGet 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_meeting
ChatGPTGet 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_documents
ChatGPTList 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_meetings
ChatGPTBrowse 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_pages
ChatGPTRead 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_documents
ChatGPTSearch 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_content
ChatGPTSearch 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_meeting_transcript
ChatGPTUse 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.
search_meetings_semantic
ChatGPTFind 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.