←
Technical demo · Opendata Explorer MCP Connector

Analysis of Maggioli open data portals via the Opendata Explorer connector

A practical demonstration of how Claude, through the Opendata Explorer MCP connector, can autonomously query, analyse and visualise the entire open data catalogue of a CKAN portal.

Portal analysed: opendata.maggioli.cloud Technology: CKAN 2.10.3 Analysis date: 17 May 2026
§ 01 — Architecture

The Opendata Explorer connector

Opendata Explorer is an MCP (Model Context Protocol) server that exposes to Claude a set of tools to query any CKAN portal and public SPARQL endpoint, without the user needing to know the underlying APIs.

👤 User
→
Claude (AI)
→
MCP: Opendata Explorer
→
CKAN REST API
→
opendata.maggioli.cloud

Claude receives the request in natural language, autonomously selects which tool to call, builds the correct parameters and interprets the response for the user.

Available tools in the connector

Tool Description Used in this demo
ckan_catalog_statsGlobal portal statistics: total datasets, distribution by format, category, organization✓ Step 2
ckan_organization_listLists all organizations on a portal with dataset count, sorting and pagination✓ Step 3
ckan_organization_showDetail of a single organization with published datasets and users
ckan_organization_searchSearch organizations by name pattern (with automatic wildcards)
ckan_package_searchFull-text dataset search with Solr filters (format, organization, tag, date)
ckan_package_showComplete metadata for a single dataset (resources, licence, author, dates)
ckan_datastore_searchTabular query on a CKAN DataStore resource (SELECT equivalent with filters)✓ Use case
ckan_datastore_search_sqlArbitrary SQL query on a DataStore resource
ckan_analyze_datasetsSearches datasets and inspects the DataStore schema of queryable resources
ckan_find_portalsSearch the global datashades.info registry (~950 CKAN portals worldwide)
ckan_find_relevant_datasetsFinds and ranks datasets by semantic relevance to a query✓ Use case
ckan_list_resourcesLists all resources in a dataset with format, URL, size✓ Use case
ckan_group_list / _show / _searchNavigation of a portal's thematic groups
ckan_get_mqa_qualityMQA (Metadata Quality Assurance) quality metrics for datasets on dati.gov.it
sparql_queryExecutes SPARQL SELECT queries on any public HTTPS endpoint (Wikidata, data.europa.eu, etc.)
§ 02 — Step 1

Portal discovery and identification

First call: fetch of the homepage to verify the portal type and CKAN version exposed in the HTML header.

Tool used
web_fetch (built-in Claude)

No Opendata Explorer tool was needed in this step. Claude performed a direct HTTP fetch of the homepage to read the HTML metatags.

GET https://www.opendata.maggioli.cloud/
Relevant extracted header: meta[name="generator"] = "ckan 2.10.3"
Output — Portal identification
TypeMulti-entity CKAN aggregator portal
CKAN version2.10.3 (rebuilt by Piersoft)
URLopendata.maggioli.cloud
LanguageItaliano
Visible thematic groupsGoverno, Agricoltura, Cultura, Economia, Giustizia
§ 03 — Step 2

Global catalogue statistics

Call to the ckan_catalog_stats tool to obtain in a single API request the total dataset count and their distribution by format, category and organization.

Tool used
ckan_catalog_stats

Parameters passed to the tool: server_url = "https://www.opendata.maggioli.cloud", facet_limit = 10, response_format = "json"

→ Underlying CKAN endpoint called by the tool
GET https://www.opendata.maggioli.cloud/api/3/action/package_search
rows=0   facet=true   facet.field=["groups","res_format","organization"]   facet.limit=10
TOTAL DATASETS
5.990
across the whole portal
ORGANIZATIONS
181
Italian public bodies
SINGLE FORMAT
CSV
100% of datasets
DOMINANT GROUP
Governo
5.969 / 5.990 datasets
Distribution by thematic group
GroupDataset%
Governo5.96999.6%
Agricoltura110.18%
Cultura110.18%
Economia40.07%
Giustizia20.03%

Note: thematic classification is very incomplete — almost all datasets are generically catalogued as "Governo". This reflects a metadata gap on the part of the publishing entities.

§ 04 — Step 3

Mapping all 181 organizations

Call to the ckan_organization_list tool to retrieve the full list of public bodies on the portal, sorted by number of published datasets.

Tool used
ckan_organization_list

Parameters: server_url="https://www.opendata.maggioli.cloud", all_fields=true, limit=200, sort="package_count desc", response_format="json"

→ Underlying CKAN endpoint called by the tool
GET https://www.opendata.maggioli.cloud/api/3/action/organization_list
all_fields=true   limit=200   sort=package_count desc
Output — Entity type summary
MUNICIPALITIES
162
89.5% of total
PROVINCES
5
Lodi, Novara, Forlì-Cesena, Pescara, Foggia
METRO CITIES
1
Catania
OTHER BODIES
13
Unions, Consortia, Mountain communities
§ 05 — Visualizations

Graphical data analysis

Charts generated from the JSON response of ckan_organization_list (181 records). Entity type and geographic classification were inferred from the organization name.

Top 20 organizations by published datasets

Source: package_count field in ckan_organization_list response, desc sort.

Distribution by entity type

Source: classification inferred from title field (prefix "Comune di", "Provincia di", "Città Metropolitana", rest → Other).

Municipalities — 162 (89.5%)
Provinces — 5 (2.8%)
Metro Cities — 1 (0.6%)
Other — 13 (7.2%)

Datasets by geographic macro-area

Source: manual mapping municipality→region→macro-area (North, Centre, South, Islands) on title field.

§ 06 — Full data

Interactive table — 181 organizations

All records returned by ckan_organization_list. Filterable by name and type, sortable by column. The link leads to the organization's CKAN page.

181 entities
# Organization ↕ Type ↕ Datasets ↕
§ 07 — Raw API responses

Raw JSON returned by the calls

The original CKAN server responses, as received by the Opendata Explorer connector and passed to Claude.

ckan_catalog_stats — full JSON response
"total": 5990, "facets": { "groups": { "governo": 5969, "agricoltura": 11, "cultura": 11, "economia": 4, "giustizia": 2 }, "res_format": { "CSV": 5990 }, "organization": { "comune-di-fiorano-modenese": 86, "comune-di-formigine": 86, "comune-di-maranello": 86, "comune-di-sassuolo": 85, "provincia-di-lodi": 78, "comune-di-piacenza": 71, "comune-di-castelfranco-piandisco": 61, "comune-di-carovigno": 58, "comune-di-taranto": 58, "comune-di-santa-margherita-ligure": 56 } }
ckan_organization_list — first 5 records (sample)
"count": 181, "organizations": [ { "id": "comune-di-maranello", "title": "Comune di Maranello", "package_count": 86 }, { "id": "comune-di-formigine", "title": "Comune di Formigine", "package_count": 86 }, { "id": "comune-di-fiorano-modenese", "title": "Comune di Fiorano Modenese", "package_count": 86 }, { "id": "comune-di-sassuolo", "title": "Comune di Sassuolo", "package_count": 85 }, { "id": "provincia-di-lodi", "title": "Provincia di Lodi", "package_count": 78 } ... 176 records omitted ]
§ 08 — Multiportal use case

Road accidents — data extracted across portals

Of 181 organizations on the portal, 6 publish road accident datasets with data queryable via DataStore. Datasets were found with ckan_find_relevant_datasets (query: "incidenti", 116 total results, filtered by relevance), then real data was extracted with ckan_list_resources + ckan_datastore_search.

Portals with road accident data (6 of 181)

Search performed with ckan_find_relevant_datasets — query: "incidenti", weights: title=5, notes=2, tags=3. 116 results returned; the municipalities below have datasets with datastore_active: true, enabling direct API data queries.

Comune di Sassuolo 13 dataset Comune di Maranello 15+ dataset Comune di Formigine 10+ dataset Comune di Fiorano Modenese 5+ dataset Comune di Piacenza serie storica 2022-2024 Comune di Seriate 3.241 record 2000-2013

Note: many other municipalities have Local Police datasets tagged "Polizia Locale 2024/2025" containing accident data, but generically classified under "Governo". Keyword search on the title is the most effective discovery method.

Accident severity 2024 — Modena ceramic district

Tool: ckan_list_resources + ckan_datastore_search · Dataset: "Gravità incidenti 2024" · Fields: Tot.incidenti, Mortali, Con feriti, Senza feriti

Sassuolo · resource 2f5c8818 Maranello · resource 60b247bd Formigine · resource 511ff626 Fiorano M. · resource c9c4f7fe
Sassuolo
388
total accidents 2024
117with injured
268no injured
0fatal
3critical prognosis
Formigine
164 2 morti
total accidents 2024
59with injured
103no injured
2fatal
0critical prognosis
Fiorano Modenese
120
total accidents 2024
50with injured
68no injured
0fatal
2critical prognosis
Maranello
81
total accidents 2024
39with injured
42no injured
0fatal
0critical prognosis
Con feriti Senza feriti Mortali

Monthly accidents — Maranello 2024

Dataset: Incidenti per mese 2024 · resource 92131d66 · Tool: ckan_datastore_search

Historical series — Piacenza 2022–2024

Dataset: Dati Numero di Incidenti al 2024 · resource 4acff115 · Tool: ckan_datastore_search · Fields: ANNO, NUMERO INCIDENTI

Historical archive — Seriate 2000–2013

Dataset: Incidenti stradali 2000–2013 · resource 823e236e · Tool: ckan_datastore_search · 3,241 records · Fields: Anno, Natura Incidente, N Feriti, N Morti, Pedoni, Velocipedi…

Total records
3.241
2000–2013
Most frequent type
Side
collision
prevalent nature
Geo data
Partial
lat/lon from ~2009
ckan_datastore_search — Sassuolo severity 2024 (raw JSON)
"resource_id": "2f5c8818-d827-4613-ac9e-c0f427afe1dd", "total": 1, "fields": ["Comune", "Tot.incidenti", "Mortali", "Con feriti", "Senza feriti", ...], "records": [{ "Comune": "SASSUOLO", "Tot.incidenti": 388, "Mortali": 0, "Con feriti in prognosi riservata": 3, "Con feriti": 117, "Senza feriti": 268 }]
ckan_datastore_search — Piacenza historical series (raw JSON)
"resource_id": "4acff115-e8bd-4aab-8d6e-630daf026a08", "total": 3, "records": [ { "ANNO": "2022", "NUMERO INCIDENTI": 1048 }, { "ANNO": "2023", "NUMERO INCIDENTI": 1123 }, { "ANNO": "2024", "NUMERO INCIDENTI": 1251 } ]