MyTown MCP server
An MCP server that gives an AI assistant grounded, source-linked access to US & Canadian local-government meetings — what your city council, county board, or school board has coming up and recently decided, in plain English, plus place context (demographics, home-value trends, federal awards, permits, campaign finance, EPA/nonprofit ties). Every record links back to the official primary source.
Data comes from MyTown's public, keyless HTTP API, so this server needs no API key and no local database — it works out of the box for anyone. Coverage: ~7,000 places (6,616 US + 428 Canadian jurisdictions publishing meetings), 2.06M meeting records, refreshed daily. Coverage is not uniform — it follows what each government publishes; see /coverage/ for every place and every gap.
Tools
Per-city (great for "what's happening in my town"):
| tool | what it does |
|---|---|
list_cities(query, state, country, limit) |
find covered cities; resolve a place name → the slug the other tools need |
get_city_meetings(slug) |
upcoming + recent meetings: date, body, plain-English headline/summary, agenda/minutes/source links |
get_city_context(slug) |
everything for a city: meetings plus demographics, home-value trend, federal awards, permits, campaign-finance summary, and per-decision EPA/nonprofit context |
Search (new in 0.1.2):
| tool | what it does |
|---|---|
search_meetings(query, limit, state, kind) |
full-text search across every briefed meeting in the corpus, filterable by state and by kind (city / county / school / district) |
Whole-dataset (cross-city — every table, no download; backed by HuggingFace's hosted dataset-viewer API):
| tool | what it does |
|---|---|
dataset_tables() |
the 77 published tables, their columns, and join keys — so you know what to search/filter |
search_dataset(query, table, limit) |
full-text search across all cities in a table (e.g. every decisions row mentioning "rent control") |
filter_dataset(table, where, order_by, descending, limit) |
structured SQL-style filter (e.g. federal_awards where "amount" > 5000000, sorted) |
dataset_info() |
coverage counts, what layers exist (audits, findings, lobbying, disclosures, permits, roll-call votes, financials, transcripts), provenance, and pointers to bulk Parquet / full SQLite |
Typical flows: list_cities("palo alto") → get_city_context(slug) for one place; or
dataset_tables() → search_dataset("police budget", "decisions") to sweep the whole country.
What's in the corpus
Beyond meetings and AI briefs, the published dataset carries layers most local-government tools do not, each matched to a municipality and each linked to its primary source:
fac_audits/fac_findings— the Federal Audit Clearinghouse local-government universe, 170,366 single audits and 50,626 findings including material weaknesses and repeat findings with the auditor's verbatim narrativemember_votes/people— per-official roll calls, and the officials who cast themlobbying_registrations/lobbying_expenditures/official_disclosures— who is paid to influence local government, and what officials disclosedcivic_records— permits, licences and code cases where the jurisdiction publishes themmuni_financials/debt_issues/gov_payments— budgets, bond issues, vendor paymentstranscripts— meeting-video text where published
Call dataset_tables() for the authoritative live list.
Provenance, for anyone citing this
Every brief records which model wrote it (briefs.model) and when
(briefs.created_at). The prompts are published verbatim and versioned by content hash at
/methodology/. Summaries are AI-generated
from official documents — always verify against the linked primary source. Figures and vote
tallies are covered by a numeric grounding audit; wording and emphasis are not.
Install & configure
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"mytown": {
"command": "uvx",
"args": ["mytown-mcp"]
}
}
}
Or run from a local checkout (no publish needed):
{
"mcpServers": {
"mytown": {
"command": "/absolute/path/to/mcp-server/.venv/bin/python",
"args": ["-m", "mytown_mcp.server"]
}
}
}
Claude Code
# from a local checkout:
claude mcp add mytown -- /absolute/path/to/mcp-server/.venv/bin/python -m mytown_mcp.server
# or, once published:
claude mcp add mytown -- uvx mytown-mcp
From source
python -m venv .venv && .venv/bin/pip install mcp httpx
.venv/bin/python -m mytown_mcp.server # speaks MCP over stdio
Example questions it can answer
- "What's the Palo Alto city council deciding this month?"
- "Show recent school-board meetings for the Palo Alto Unified School District."
- "For Lake Forest, CA — pull demographics, home-value trend, and any federal awards."
- "Across the whole country, which towns passed rent-control decisions this year?" (search_dataset)
- "Show the largest federal awards in the dataset, over $1B." (filter_dataset)
- "Find meetings tied to EPA facilities with an identified violation." (filter_dataset on
decision_echo)
Notes
- Meeting/decision summaries are AI-generated from official documents — always verify against the linked primary source before relying on a detail.
- License: CC BY 4.0 (attribution: mytown.theboringparts.com).
- For research spanning many cities (training, full-text search, bulk stats), use the open dataset rather than looping these tools.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mytown_mcp-0.1.3.tar.gz.
File metadata
- Download URL: mytown_mcp-0.1.3.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a000b95b05d6971c80a45935c0d0aa8b0ce17b4c9717355c61dcb67a332aeb0
|
|
| MD5 |
3eb93feebc569f84bd9e20a72d5ba381
|
|
| BLAKE2b-256 |
97a52816a9865b568035ff3bb939736efde0a866da54ebb277b94c1bc0449fe6
|
File details
Details for the file mytown_mcp-0.1.3-py3-none-any.whl.
File metadata
- Download URL: mytown_mcp-0.1.3-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad788a97604520ace2ac476e11734b56f73c77edaf647a930de909503e4b66e4
|
|
| MD5 |
50260e96754cd829988daad29bcb4be4
|
|
| BLAKE2b-256 |
76904f1be859ec1e09344fda83a1045f6af669e25b2030a5f65c0299282b0a7e
|