MCP server for MyTown — US & Canadian local-government meetings, decisions, and place context, grounded in official sources.
Project description
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: ~2,400 municipalities (US + Canada), refreshed daily.
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 |
Whole-dataset (cross-city — every table, no download; backed by HuggingFace's hosted dataset-viewer API):
| tool | what it does |
|---|---|
dataset_tables() |
the 17 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 + pointers to bulk Parquet / full SQLite for heavy analysis |
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.
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.
Project details
Release history Release notifications | RSS feed
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.0.tar.gz.
File metadata
- Download URL: mytown_mcp-0.1.0.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ae70b1c35888463bfc8f8d01549d79a6e0fbac3b984c556fc6f5112aca9a7ac
|
|
| MD5 |
8095de64e3ac2f4cf11f8a56f257b82d
|
|
| BLAKE2b-256 |
cab1f2e9e2ed22a47184d48fd0c70368f59530abab0a30f88e63e389b4b22428
|
File details
Details for the file mytown_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mytown_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
551c505cdaf62949f477ee4d2dad1888db8eab8ea100f8eb2a5efa39037eaf68
|
|
| MD5 |
8ebd805ca23e2916c86be754bec08819
|
|
| BLAKE2b-256 |
57707fc04e3c872f615a64f7562efddfce2bad43ef54f771f50ab2ad8c570d9e
|