Skip to main content
Glama
jcscocca

socrata-mcp

by jcscocca

socrata-mcp

An MCP server that gives LLM agents typed, cached access to civic open-data portals. Speaks Socrata (SODA 2.1 + Discovery API) today; the provider layer is a thin interface so CKAN can be added later without touching the tool surface.

Highlights:

  • Server-side profiling — null rates, distinct counts, min/max, top values computed via aggregate SoQL; the dataset is never downloaded.

  • Hard row caps with honest truncation — every query result carries a truncated flag; paging uses a stable :id order.

  • Disk cache under ~/.socrata-mcp/cache keyed by query hash, with short TTLs for metadata and configurable TTLs for query results.

  • Polite by default — request throttling, retries with backoff that honor Retry-After, optional SOCRATA_APP_TOKEN sent as X-App-Token.

  • Loud failures — the portal's actual error message is surfaced to the agent, never swallowed.

  • Tableau-ready CSV export — streamed, paged download designed to chain into vizforge's csv_to_dashboard.

Install

git clone <this repo> && cd socrata-mcp
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"

Register with your MCP client (see .mcp.json.example):

{
  "mcpServers": {
    "socrata": {
      "command": "/absolute/path/to/socrata-mcp/.venv/bin/python",
      "args": ["-m", "socrata_mcp"],
      "env": { "SOCRATA_APP_TOKEN": "optional-app-token" }
    }
  }
}

Related MCP server: ontario-data-mcp

Tools

Tool

What it does

search_datasets(query, domain?, category?, limit?, offset?)

Full-text catalog search via the Socrata Discovery API.

get_dataset(domain, dataset_id)

Columns with types, row count, update cadence, license, attribution.

query(domain, dataset_id, …)

Structured SoQL (select/where/group/order/limit/offset, within_circle, within_box) or raw soql. Validated, paged, row-capped, truncated flag.

profile_dataset(domain, dataset_id)

Per-column null rates, distinct counts, min/max for dates/numbers, top values for categoricals — all portal-side.

sample(domain, dataset_id, n?)

First n rows (capped at 100) to see real values.

export_csv(domain, dataset_id, out_path, …)

Streamed, paged CSV export of any query.

report(domain, dataset_id, out_path, where?, title?)

One-call HTML report: auto-detected trend chart, top-category charts, numeric summary, data-quality flags. Self-contained file, no JS, no external requests. Also available without MCP: socrata-mcp-report data.seattle.gov tazs-3rd5.

Example agent flow:

search_datasets("crime", domain="data.seattle.gov")
get_dataset("data.seattle.gov", "tazs-3rd5")
profile_dataset("data.seattle.gov", "tazs-3rd5")
query("data.seattle.gov", "tazs-3rd5",
      where="offense_date > '2026-06-10T00:00:00'",
      order="offense_date DESC", limit=100)
export_csv("data.seattle.gov", "tazs-3rd5", "out/spd_30d.csv",
           where="offense_date > '2026-06-10T00:00:00'")
# → vizforge: csv_to_dashboard("out/spd_30d.csv", ...)

Configuration

All optional, via environment variables:

Variable

Default

Meaning

SOCRATA_APP_TOKEN

unset

Sent as X-App-Token; raises portal rate limits.

SOCRATA_MCP_CACHE_DIR

~/.socrata-mcp/cache

Disk cache root.

SOCRATA_MCP_METADATA_TTL

300

Seconds to cache dataset metadata.

SOCRATA_MCP_CATALOG_TTL

300

Seconds to cache catalog searches.

SOCRATA_MCP_QUERY_TTL

3600

Seconds to cache query/profile results (0 disables).

SOCRATA_MCP_DEFAULT_LIMIT

100

Rows returned when a query gives no limit.

SOCRATA_MCP_MAX_ROWS

5000

Hard row cap for inline query results.

SOCRATA_MCP_MAX_EXPORT_ROWS

1000000

Hard row cap for CSV exports.

SOCRATA_MCP_PAGE_SIZE

1000

Rows fetched per HTTP request.

SOCRATA_MCP_THROTTLE_INTERVAL

0.2

Minimum seconds between portal requests.

SOCRATA_MCP_TIMEOUT

30

Per-request timeout in seconds.

Cache layout: cache/<kind>/<sha256>.json (kind ∈ catalog, metadata, query, profile), each file {"cached_at": <epoch>, "data": …}. Deleting the directory is always safe.

Notes:

  • Discovery searches use the US endpoint (api.us.socrata.com); EU-hosted portals are still directly queryable via get_dataset/query on their domain.

  • Raw soql exports run as a single request, so give them an explicit LIMIT (default cap 50,000); structured exports page automatically.

Development

.venv/bin/pytest              # unit tests (all HTTP mocked)
.venv/bin/pytest -m network   # live smoke tests against data.seattle.gov

Architecture: deterministic core (soql.py, cache.py, http_client.py, profile.py, export.py) with the MCP layer (socrata_mcp/mcp/) as thin wrappers over a Provider interface (providers/base.py). To add CKAN, implement Provider in providers/ckan.py — the tool surface stays unchanged.

License

MIT — see LICENSE.

Available Tools

6 tools
export_csvA

Export query results to a Tableau-ready CSV via streamed, paged download.

Accepts the same query parameters as query (structured or raw soql) and writes matching rows to out_path. Designed to chain into vizforge's csv_to_dashboard. Point/location values are serialized as JSON strings.

Args: domain: Portal hostname, e.g. "data.seattle.gov". dataset_id: Socrata 4x4 id, e.g. "tazs-3rd5". out_path: Destination .csv path (parent directories are created). select/where/group/order/limit/soql/within_circle/within_box: as in query. max_rows: Safety cap for this export (default 1,000,000).

Returns: {path, rows_written, truncated, columns, notes}.

ParametersJSON Schema
NameRequiredDescriptionDefault
soqlNo
groupNo
limitNo
orderNo
whereNo
domainYes
selectNo
max_rowsNo
out_pathYes
dataset_idYes
within_boxNo
within_circleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses details: streamed/paged download, writes to out_path, parent directories created, max_rows safety cap (default 1M), and point/location serialization as JSON strings. The return value structure is also described, providing complete behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose and is fairly concise. The Args section is a bit verbose but still functional. Every sentence adds value, though the parameter list could be more succinct by relying on the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 params, 0% schema coverage, no annotations, but an output schema exists), the description covers purpose, usage, behavioral traits, and return structure. It references another tool for query parameters, which is acceptable but requires the agent to understand `query`. Overall, it is complete enough for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists parameters and refers to `query` for most, but provides no individual descriptions or syntax beyond examples (e.g., domain and dataset_id examples). This is insufficient for an agent to understand parameter meanings without prior knowledge.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports query results to a Tableau-ready CSV via streamed download, distinguishing it from sibling tools like `query` which likely returns JSON. It specifies the output is a file and mentions chaining into vizforge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates that the tool accepts the same query parameters as `query` and is designed for chaining into `csv_to_dashboard`, which provides context on when to use it. However, it does not explicitly state when not to use or provide alternatives, though the sibling list and purpose imply differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_datasetA

Dataset metadata: columns with types, row count, update cadence, license.

Args: domain: Portal hostname, e.g. "data.seattle.gov". dataset_id: Socrata 4x4 id, e.g. "tazs-3rd5".

Returns: {name, description, columns: [{field_name, name, type, description}], row_count, license, attribution, created_at, data_updated_at, update_frequency, tags, source_url}. Use columns' field_name values in query/profile calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the return structure truthfully, implying a read-only operation with no side effects. It could mention authentication requirements, but the omission is acceptable for a simple metadata tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a concise summary, then structured into Args and Returns sections. Every sentence adds value; no tautology or verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description still elaborates return fields and ties them to sibling tools ('Use columns field_name values in query/profile calls'). This fully informs the agent of the tool's role within the suite.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds essential meaning: it gives concrete examples for both domain and dataset_id, explains their format, and provides full context beyond the schema's type-only definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Dataset metadata: columns with types, row count, update cadence, license,' specifying the verb and resource. It implicitly distinguishes from siblings by focusing on metadata retrieval, not exporting, profiling, querying, sampling, or searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides parameter examples and notes to use column field_names in query/profile calls, guiding usage. However, it does not explicitly state when to choose this tool over siblings, though context is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profile_datasetA

Profile every column: null rate, distinct count, min/max, top values.

Computed portal-side via aggregate SoQL — the dataset is never downloaded. Dates and numbers get min/max (numbers also avg); low-cardinality text columns get their top 10 values with counts.

Args: domain: Portal hostname, e.g. "data.seattle.gov". dataset_id: Socrata 4x4 id, e.g. "tazs-3rd5".

Returns: {row_count, columns: [{field_name, type, null_rate, non_null_count, distinct_count, min?, max?, avg?, top_values?, error?}], notes}.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: computation method (aggregate SoQL), which columns get min/max/avg, and that low-cardinality text gets top 10 values. It also describes return structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with separate paragraphs for purpose, notes, args, and returns, but it is slightly verbose. However, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (not shown but noted), the description adequately details what is returned (row_count, columns array with field details). It covers key behaviors without gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description provides all parameter meaning. It clearly defines both parameters with examples (domain hostname and Socrata 4x4 id), adding context beyond the schema type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool profiles every column with null rate, distinct count, min/max, and top values, clearly distinguishing it from sibling tools like query or export_csv by noting it uses aggregate SoQL and never downloads the dataset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for data profiling but does not explicitly state when to use versus alternatives or provide exclusions. It lacks guidance on prerequisites or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

queryA

Query a dataset with structured SoQL parameters OR one raw SoQL string.

Structured mode (recommended): pass any of select/where/group/order/ limit/offset plus optional geo filters. Raw mode: pass soql only (e.g. "SELECT offense, count(*) GROUP BY offense LIMIT 50").

Args: domain: Portal hostname, e.g. "data.seattle.gov". dataset_id: Socrata 4x4 id, e.g. "tazs-3rd5". select: Columns/expressions, e.g. ["offense", "count(*) as n"]. where: SoQL filter, e.g. "offense_date > '2026-06-01T00:00:00'". group: GROUP BY columns (pair with aggregate select expressions). order: e.g. "offense_date DESC". Defaults to ":id" for stable paging. limit: Max rows returned (default 100, hard cap applies). offset: Row offset for pagination. soql: Raw SoQL query — mutually exclusive with all structured params. within_circle: {field, lat, lon, radius_m} geo filter on a point column. within_box: {field, nw_lat, nw_lon, se_lat, se_lon} geo filter.

Returns: {rows, row_count, truncated, query: {params, effective_limit, clamped}}. truncated: true means more rows matched than were returned — narrow the query or use export_csv for bulk extraction.

ParametersJSON Schema
NameRequiredDescriptionDefault
soqlNo
groupNo
limitNo
orderNo
whereNo
domainYes
offsetNo
selectNo
dataset_idYes
within_boxNo
within_circleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses truncation behavior, default ordering for stable paging, mutual exclusivity of soql and structured params, hard cap on limit, and return format. This is comprehensive for behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly long but well-structured: intro, two modes, parameter list, return format. It is front-loaded and each sentence adds value. Slightly verbose but justified due to 11 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no annotations, and an output schema, the description covers input and output comprehensively. It explains pagination, truncation, default ordering, and mutual exclusion, leaving no obvious gaps for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides detailed explanations and examples for each parameter (e.g., domain with example domain, select with example expressions). This adds significant meaning beyond the schema's property titles, fully compensating for lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool queries a dataset using either structured SoQL parameters or a raw SoQL string. It specifies the verb 'Query' and the resource 'dataset', and distinguishes two modes. This is specific and helpful.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description recommends structured mode and explains when to use raw mode. It also suggests using export_csv for bulk extraction when truncated. However, it does not explicitly contrast with other sibling tools like sample or get_dataset, which would provide clearer usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sampleA

Fetch the first n rows of a dataset (n capped at 100).

Args: domain: Portal hostname, e.g. "data.seattle.gov". dataset_id: Socrata 4x4 id, e.g. "tazs-3rd5". n: Number of rows (default 10, max 100).

Returns: {rows, row_count, note}. Rows are in :id order — a peek at real values, not a random sample.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
domainYes
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, description discloses key behaviors: max rows, ordering, return shape, and that result is not a random sample. Lacks mention of read-only nature, but fetch implies it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single-line summary, structured Args and Returns sections, no redundant information. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main concerns for a simple fetch tool: parameter details, return shape, ordering, cap. Sibling tool differentiation absent but not critical for completeness here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Each parameter is explained with examples and constraints (domain format, dataset id format, default/max for n), fully compensating for 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'fetch', resource 'first n rows of a dataset', and constraint 'capped at 100'. Distinguishes from random sample by noting rows are in id order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for a quick peek via return description, but does not explicitly contrast with sibling tools like 'query' or 'get_dataset'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_datasetsA

Search open-data catalogs for datasets (Socrata Discovery API).

Args: query: Full-text search, e.g. "crime reports" or "building permits". domain: Restrict to one portal, e.g. "data.seattle.gov". category: Portal category, e.g. "Public Safety". limit: Max results (default 20, cap 100). offset: Pagination offset into the result set.

Returns: {results: [{id, name, domain, description, updated_at, category, permalink}], count, total, offset}. Use each result's domain + id with the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
domainNo
offsetNo
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only implies a read operation, but does not explicitly state whether the tool is read-only, destructive, or requires authentication. It lacks details on side effects, rate limits, or authorization needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first-line summary, followed by an Args list with parameter names and descriptions, and a Returns section. Every sentence is informative and no unnecessary words. It is concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (1 required), no annotations, and an output schema, the description covers the tool's purpose, all parameters with examples, and the return format including hints for further use with sibling tools. It provides sufficient context for an agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% coverage (only titles and types), but the description provides detailed semantics for all parameters: e.g., 'Full-text search, e.g. 'crime reports'', 'Restrict to one portal, e.g. 'data.seattle.gov''. This adds significant meaning beyond the schema, helping the agent understand how to use each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search open-data catalogs for datasets (Socrata Discovery API)', specifying the verb 'search', resource 'datasets', and the API used. It distinguishes the tool from siblings like export_csv, get_dataset, etc., which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to search datasets) and provides guidance: 'Use each result's domain + id with the other tools.' It does not explicitly exclude alternative uses, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedexport_csv
    • First observedget_dataset
    • First observedprofile_dataset
    • First observedquery
    • First observedsample
    • First observedsearch_datasets

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct operation: search_datasets for discovery, get_dataset for metadata, profile_dataset for column profiling, query for flexible querying, sample for quick peeks, and export_csv for bulk download. No functional overlap.

Naming Consistency4/5

Most tools follow verb_noun pattern (export_csv, get_dataset, profile_dataset, search_datasets). 'query' and 'sample' are single verbs but remain clear and consistent with the style; minor deviation from the full pattern.

Tool Count5/5

6 tools is well-scoped for a read-only Socrata data exploration server. Each tool addresses a distinct need without bloat, and the count feels appropriate for the domain.

Completeness5/5

The tool surface covers the full lifecycle of data exploration: search for datasets, inspect metadata, profile columns, query data, sample rows, and export. No obvious gaps for the intended purpose of querying and exporting open data.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides tools for intelligently querying, analyzing, and retrieving datasets from Toronto's CKAN-powered open data portal. It enables AI assistants to perform natural language searches, inspect data structures, and track dataset update frequencies across the city's open data catalog.
    12
    -
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for discovering, downloading, querying, and analyzing datasets from Ontario's open data portals, allowing natural language questions and high-performance analytics via DuckDB.
    23
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query U.S. government datasets via the Data.gov CKAN API, wrapped as an MCP server.
    15
    MIT