seattle-open-data
A read-only MCP server for exploring and querying Seattle Open Data (Socrata SODA2) via four tools.
Search datasets (
seattle_data_search_datasets): find datasets by keyword or exact category, paged, with match evidence, optional descriptions, and up to 3 external (non-queryable) matches.Describe a dataset (
seattle_data_describe_dataset): columns and types, live row count, actual data coverage/time range, place fields (neighborhood, precinct, zip, council district, etc.) with reliability ratings, geo columns for proximity searches, sample rows, and example queries.Query a dataset (
seattle_data_query_dataset): bounded reads and aggregates — filters,count(*)withgroup_by/having, ordering, full-text search, radius (near) queries, raw SoQL, cursor paging up to 10,000 rows, plus query/download URLs.Get reference (
seattle_data_get_reference): capability summary, SoQL help, curated guides for flagship datasets, and the full error catalog.Optional Socrata app token via
SOCRATA_APP_TOKENfor higher rate limits.Note: the project is deprecated (0.2.1) in favor of
opendata-atlas.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@seattle-open-data how many 311 requests were reported in Ballard last month?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
seattle-open-data
An agent-friendly MCP server for Seattle Open Data (Socrata SODA2).
This project is deprecated and no longer maintained. It has been superseded by opendata-atlas, which covers Seattle Open Data and other Socrata portals. Please switch to it. 0.2.1 is the final release.
Status: deprecated (0.2.1). All four tools work against the live portal, with curated guides for seven flagship datasets. See evals/results for the agent evaluation.
Tools
Tool | Purpose |
| Find datasets by topic |
| Columns, row count, time coverage, place fields, geo columns |
| Bounded reads and aggregates (SoQL clauses or raw SoQL) |
| Capability summary, SoQL help, guides, error catalog |
Related MCP server: data-seattle
Install
The server runs over stdio. The uvx commands below need uv.
Claude Desktop: download seattle-open-data-<version>.mcpb from the latest release and open it with Claude Desktop.
Claude Code:
claude mcp add seattle-open-data -- uvx seattle-open-dataCodex:
codex mcp add seattle-open-data -- uvx seattle-open-dataAny other MCP client: run uvx seattle-open-data as a stdio server:
{
"mcpServers": {
"seattle-open-data": { "command": "uvx", "args": ["seattle-open-data"] }
}
}Optional app token: set SOCRATA_APP_TOKEN to use a Socrata application token, for example claude mcp add seattle-open-data -e SOCRATA_APP_TOKEN=... -- uvx seattle-open-data. The bundle asks for it in Claude Desktop's settings. A rejected token is reported as app_token_rejected, never silently dropped.
Develop
From a checkout:
uv sync
uv run seattle-open-data # run the server over stdio
uv run pytest
uv run ruff check && uv run ruff format --check && uv run ty check
UPDATE_SNAPSHOTS=1 uv run pytest tests/test_contract.py # after an intended tool-surface change
uv run pytest --run-integration -m integration # live tests against data.seattle.gov
uv run python evals/run.py [--host claude|codex] <out_dir> [task_id ...]
uv run python evals/report.py <out_dir> --answersTo build the MCPB bundle locally (needs the mcpb CLI): make mcpb.
Release
Tag vX.Y.Z after bumping the version: the release workflow builds and smoke-tests the wheel, sdist, and .mcpb, publishes to PyPI after maintainer approval, and attaches all three to a GitHub Release. See docs/releasing.md for the steps, the TestPyPI rehearsal, and one-time setup.
License
MIT
Available Tools
4 toolsseattle_data_describe_datasetSeattle Data Describe DatasetARead-only
Decide whether and how to query a dataset: columns, live row count, data_coverage
(actual time range), place fields for "in " questions (with reliability),
and geo columns for near.
Call before querying a dataset whose columns you do not know.
For area questions, use detail="full".
Filter a place field on its value, never its label; an area may span several values.
Example: {"dataset_id": "kzjm-xkqj", "detail": "full"}.
Typically 1-3 s; fails with query_timeout after 30 s.
Inputs: dataset_id (required), detail, sample_rows, column_query. Returns: title, source, columns, guide_uri, +11 more
seattle_data_get_referenceSeattle Data Get ReferenceARead-only
Read the server's reference: capability summary, SoQL help, dataset guides, and the full error catalog. Call with no arguments for the index.
Example: {"topic": "soql", "item_id": "dates"}.
Inputs: topic, item_id. Returns: uri, body, title, topic, +4 more
seattle_data_query_datasetSeattle Data Query DatasetARead-only
Run a bounded read or aggregate on one dataset; paging stops at 10,000 rows.
For counts and breakdowns, use count() with group_by, not row paging. With cursor, send only dataset_id, cursor, and optionally page_size or detail. For all rows, give the user download_url (detail="full") instead of paging. Example: {"dataset_id": "kzjm-xkqj", "select": ["type", "count() AS n"], "group_by": ["type"], "order_by": ["n DESC"]}. Typically 1-5 s; fails with query_timeout after 30 s.
Inputs: dataset_id (required), mode, near, soql, +9 more. Returns: rows, source, columns, has_more, +13 more
seattle_data_search_datasetsSeattle Data Search DatasetsARead-only
Find Seattle datasets by topic. Call first when you lack a dataset id.
Results are candidates: match_evidence lists the query words each one's metadata lacks. Only queryability "supported" can be described or queried; a tabular search also returns up to 3 external_matches, which cannot. Example: {"query": "fire 911"}. Typically 1-3 s.
Inputs: query, cursor, detail, category, +2 more. Returns: source, datasets, has_more, suggestion, +4 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: search for datasets, describe a specific dataset's metadata, access server-wide reference documentation, and query a dataset. The descriptions clearly delineate when to use each, with no overlapping functionality.
All tools follow the consistent pattern seattle_data_<verb>_<noun> (search_datasets, describe_dataset, get_reference, query_dataset). The verbs are distinct but appropriate, and the naming is predictable and readable.
Four tools are well-scoped for a read-only open data query service, covering discovery, metadata inspection, reference, and query execution without redundancy. Each tool earns its place.
The toolset covers the core workflow: search datasets, describe schema, query data, and access reference help. A minor gap is the lack of a tool to list all datasets without a topic query, but this is a minor limitation in an otherwise complete surface for the domain.
Maintenance
Related MCP Connectors
DataSeattle MCP — Seattle open data (data.seattle.gov, Socrata SODA API).
Search and query government open-data portals (Socrata SODA API).
Provides access to Civic Plus - See Click Fix, allowing you to interact with your data via an LLM.…
Query and explore Nova Scotia open datasets via the Socrata SODA API.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query and retrieve San Francisco open data from data.sfgov.org via the Socrata SODA API.164 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying Seattle open data from data.seattle.gov via the Socrata SODA API.154 npmMIT
- AlicenseNot gradedqualityBmaintenanceProvides access to Cincinnati open data via the Socrata SODA API, allowing users to query datasets using natural language or direct tool calls.153 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and querying Orlando Open Data datasets via Socrata SoQL, providing access to metadata and data rows through natural language or direct tool calls.147 npmMIT