Skip to main content

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 narrative
  • member_votes / people — per-official roll calls, and the officials who cast them
  • lobbying_registrations / lobbying_expenditures / official_disclosures — who is paid to influence local government, and what officials disclosed
  • civic_records — permits, licences and code cases where the jurisdiction publishes them
  • muni_financials / debt_issues / gov_payments — budgets, bond issues, vendor payments
  • transcripts — 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

mytown_mcp-0.1.3.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mytown_mcp-0.1.3-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

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

Hashes for mytown_mcp-0.1.3.tar.gz
Algorithm Hash digest
SHA256 8a000b95b05d6971c80a45935c0d0aa8b0ce17b4c9717355c61dcb67a332aeb0
MD5 3eb93feebc569f84bd9e20a72d5ba381
BLAKE2b-256 97a52816a9865b568035ff3bb939736efde0a866da54ebb277b94c1bc0449fe6

See more details on using hashes here.

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

Hashes for mytown_mcp-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ad788a97604520ace2ac476e11734b56f73c77edaf647a930de909503e4b66e4
MD5 50260e96754cd829988daad29bcb4be4
BLAKE2b-256 76904f1be859ec1e09344fda83a1045f6af669e25b2030a5f65c0299282b0a7e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page