@aborruso/ckan-mcp-server 0.4.11 → 0.4.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +7 -7
- package/LOG.md +66 -0
- package/NOTICE.md +77 -0
- package/PRD.md +6 -6
- package/README.md +48 -20
- package/dist/index.js +150 -3
- package/dist/worker.js +60 -56
- package/examples/langgraph/01_basic_workflow.py +277 -0
- package/examples/langgraph/02_data_exploration.py +366 -0
- package/examples/langgraph/README.md +719 -0
- package/examples/langgraph/metadata_quality.py +299 -0
- package/examples/langgraph/requirements.txt +12 -0
- package/examples/langgraph/setup.sh +32 -0
- package/examples/langgraph/test_setup.py +106 -0
- package/openspec/changes/add-ckan-host-allowlist-env/design.md +38 -0
- package/openspec/changes/add-ckan-host-allowlist-env/proposal.md +16 -0
- package/openspec/changes/add-ckan-host-allowlist-env/specs/ckan-request-allowlist/spec.md +15 -0
- package/openspec/changes/add-ckan-host-allowlist-env/specs/cloudflare-deployment/spec.md +11 -0
- package/openspec/changes/add-ckan-host-allowlist-env/tasks.md +12 -0
- package/openspec/changes/add-escape-text-query/proposal.md +12 -0
- package/openspec/changes/add-escape-text-query/specs/ckan-search/spec.md +11 -0
- package/openspec/changes/add-escape-text-query/tasks.md +8 -0
- package/openspec/changes/archive/2026-01-15-add-mcp-resource-filters/proposal.md +13 -0
- package/openspec/changes/archive/2026-01-15-add-mcp-resource-filters/specs/mcp-resources/spec.md +38 -0
- package/openspec/changes/archive/2026-01-15-add-mcp-resource-filters/tasks.md +10 -0
- package/openspec/changes/archive/2026-01-19-update-repo-owner-ondata/proposal.md +13 -0
- package/openspec/changes/archive/2026-01-19-update-repo-owner-ondata/specs/repository-metadata/spec.md +14 -0
- package/openspec/changes/archive/2026-01-19-update-repo-owner-ondata/tasks.md +12 -0
- package/openspec/specs/ckan-insights/spec.md +5 -1
- package/openspec/specs/ckan-search/spec.md +16 -0
- package/openspec/specs/mcp-prompts/spec.md +26 -0
- package/openspec/specs/mcp-resources/spec.md +30 -4
- package/openspec/specs/repository-metadata/spec.md +19 -0
- package/package.json +1 -1
- package/private/commenti-privati.yaml +14 -0
- /package/openspec/changes/{add-mcp-prompts → archive/2026-01-15-add-mcp-prompts}/proposal.md +0 -0
- /package/openspec/changes/{add-mcp-prompts → archive/2026-01-15-add-mcp-prompts}/specs/mcp-prompts/spec.md +0 -0
- /package/openspec/changes/{add-mcp-prompts → archive/2026-01-15-add-mcp-prompts}/tasks.md +0 -0
- /package/openspec/changes/{update-search-parser-config → archive/2026-01-19-update-search-parser-config}/proposal.md +0 -0
- /package/openspec/changes/{update-search-parser-config → archive/2026-01-19-update-search-parser-config}/specs/ckan-insights/spec.md +0 -0
- /package/openspec/changes/{update-search-parser-config → archive/2026-01-19-update-search-parser-config}/specs/ckan-search/spec.md +0 -0
- /package/openspec/changes/{update-search-parser-config → archive/2026-01-19-update-search-parser-config}/tasks.md +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## 1. Documentation and Links
|
|
2
|
+
- [x] 1.1 Inventory repo URL references (README, docs, issue templates, web GUI).
|
|
3
|
+
- [x] 1.2 Update GitHub repository links to the ondata org.
|
|
4
|
+
- [x] 1.3 Update any badges and external links that embed the old owner.
|
|
5
|
+
|
|
6
|
+
## 2. Deployment Guidance
|
|
7
|
+
- [x] 2.1 Update deployment docs that reference the old GitHub repo.
|
|
8
|
+
- [x] 2.2 Validate GitHub Pages URL references where applicable.
|
|
9
|
+
|
|
10
|
+
## 3. Verification
|
|
11
|
+
- [x] 3.1 Confirm npm scope and publish instructions remain unchanged.
|
|
12
|
+
- [x] 3.2 Run openspec validation and address any issues.
|
|
@@ -11,9 +11,13 @@ The system SHALL maintain this specification to document dataset insight tools w
|
|
|
11
11
|
- **THEN** their requirements are captured in this specification
|
|
12
12
|
|
|
13
13
|
### Requirement: Find relevant datasets
|
|
14
|
-
The system SHALL provide a `ckan_find_relevant_datasets` tool that accepts `server_url`, `query`, `limit`,
|
|
14
|
+
The system SHALL provide a `ckan_find_relevant_datasets` tool that accepts `server_url`, `query`, `limit`, optional weights for title, notes, tags, and organization, and an optional search parser override, and returns the top N datasets ranked by score with a per-field score breakdown.
|
|
15
15
|
|
|
16
16
|
#### Scenario: Ranked results returned
|
|
17
17
|
- **WHEN** the tool is invoked with a query and limit
|
|
18
18
|
- **THEN** the system uses `package_search` results to return the top N datasets with numeric scores and field contributions
|
|
19
19
|
|
|
20
|
+
#### Scenario: Search parser override applied
|
|
21
|
+
- **WHEN** the tool is invoked with a search parser override
|
|
22
|
+
- **THEN** the system applies the override to the underlying `package_search` query
|
|
23
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# ckan-search Specification
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
TBD - created by archiving change update-search-parser-config. Update Purpose after archive.
|
|
5
|
+
## Requirements
|
|
6
|
+
### Requirement: Package search parser override
|
|
7
|
+
The system SHALL support a per-portal default and a per-request override to force package search queries through the `text` field when needed.
|
|
8
|
+
|
|
9
|
+
#### Scenario: Portal default applies
|
|
10
|
+
- **WHEN** a portal is configured to force the text-field parser
|
|
11
|
+
- **THEN** `ckan_package_search` uses `text:(...)` for non-fielded queries by default
|
|
12
|
+
|
|
13
|
+
#### Scenario: Request override applies
|
|
14
|
+
- **WHEN** a client explicitly requests the text-field parser
|
|
15
|
+
- **THEN** `ckan_package_search` uses `text:(...)` regardless of portal defaults
|
|
16
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# mcp-prompts Specification
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
TBD - created by archiving change add-mcp-prompts. Update Purpose after archive.
|
|
5
|
+
## Requirements
|
|
6
|
+
### Requirement: Guided prompts are available
|
|
7
|
+
The system SHALL expose a set of guided MCP prompts for common CKAN discovery workflows.
|
|
8
|
+
|
|
9
|
+
#### Scenario: User requests a guided search prompt
|
|
10
|
+
- **WHEN** a client lists MCP prompts
|
|
11
|
+
- **THEN** the guided prompts are returned with name, description, and parameters
|
|
12
|
+
|
|
13
|
+
### Requirement: Prompt output includes tool usage instructions
|
|
14
|
+
Each guided prompt SHALL produce instructions that reference the appropriate CKAN tools and parameters.
|
|
15
|
+
|
|
16
|
+
#### Scenario: Prompt generation for thematic search
|
|
17
|
+
- **WHEN** the user generates a prompt for a specific theme and format
|
|
18
|
+
- **THEN** the output includes the correct tool name and required parameters
|
|
19
|
+
|
|
20
|
+
### Requirement: Prompt content is localized and consistent
|
|
21
|
+
Guided prompts SHALL use consistent language and parameter naming aligned with CKAN tool schemas.
|
|
22
|
+
|
|
23
|
+
#### Scenario: Prompt content consistency
|
|
24
|
+
- **WHEN** a prompt is generated
|
|
25
|
+
- **THEN** parameter names match the tool schema (e.g., `server_url`, `q`, `fq`, `rows`)
|
|
26
|
+
|
|
@@ -84,11 +84,37 @@ The system SHALL return resource content as JSON with standard MCP resource resp
|
|
|
84
84
|
- **THEN** response is truncated to CHARACTER_LIMIT with truncation indicator
|
|
85
85
|
|
|
86
86
|
### Requirement: Resource Discovery
|
|
87
|
-
|
|
88
|
-
The system SHALL list available resource templates when client requests resource list.
|
|
87
|
+
The system SHALL list available resource templates when client requests resource list, including dataset, resource, organization, and dataset filter templates (group, organization, tag, format).
|
|
89
88
|
|
|
90
89
|
#### Scenario: List resource templates
|
|
91
|
-
|
|
92
90
|
- **WHEN** client calls `resources/listTemplates`
|
|
93
|
-
- **THEN** server returns list of available URI templates with descriptions
|
|
91
|
+
- **THEN** server returns list of available URI templates with descriptions, including the dataset filter templates
|
|
92
|
+
|
|
93
|
+
### Requirement: Group Datasets Resource Template
|
|
94
|
+
The system SHALL expose a resource template for accessing CKAN datasets by group via the URI pattern `ckan://{server}/group/{name}/datasets`.
|
|
95
|
+
|
|
96
|
+
#### Scenario: Read datasets by group
|
|
97
|
+
- **WHEN** client reads `ckan://dati.gov.it/group/governo/datasets`
|
|
98
|
+
- **THEN** server returns JSON with the matching datasets from `package_search`
|
|
99
|
+
|
|
100
|
+
### Requirement: Organization Datasets Resource Template
|
|
101
|
+
The system SHALL expose a resource template for accessing CKAN datasets by organization via the URI pattern `ckan://{server}/organization/{name}/datasets`.
|
|
102
|
+
|
|
103
|
+
#### Scenario: Read datasets by organization
|
|
104
|
+
- **WHEN** client reads `ckan://dati.gov.it/organization/regione-toscana/datasets`
|
|
105
|
+
- **THEN** server returns JSON with the matching datasets from `package_search`
|
|
106
|
+
|
|
107
|
+
### Requirement: Tag Datasets Resource Template
|
|
108
|
+
The system SHALL expose a resource template for accessing CKAN datasets by tag via the URI pattern `ckan://{server}/tag/{name}/datasets`.
|
|
109
|
+
|
|
110
|
+
#### Scenario: Read datasets by tag
|
|
111
|
+
- **WHEN** client reads `ckan://dati.gov.it/tag/turismo/datasets`
|
|
112
|
+
- **THEN** server returns JSON with the matching datasets from `package_search`
|
|
113
|
+
|
|
114
|
+
### Requirement: Format Datasets Resource Template
|
|
115
|
+
The system SHALL expose a resource template for accessing CKAN datasets by resource format via the URI pattern `ckan://{server}/format/{format}/datasets`.
|
|
116
|
+
|
|
117
|
+
#### Scenario: Read datasets by format
|
|
118
|
+
- **WHEN** client reads `ckan://dati.gov.it/format/csv/datasets`
|
|
119
|
+
- **THEN** server returns JSON with the matching datasets from `package_search` filtered by resource format
|
|
94
120
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# repository-metadata Specification
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
TBD - created by archiving change update-repo-owner-ondata. Update Purpose after archive.
|
|
5
|
+
## Requirements
|
|
6
|
+
### Requirement: Canonical repository ownership references
|
|
7
|
+
The project documentation and UI MUST reference the canonical repository under the ondata organization once the repository is migrated.
|
|
8
|
+
|
|
9
|
+
#### Scenario: Repository references updated
|
|
10
|
+
- **WHEN** a user follows documentation or UI links to the repository
|
|
11
|
+
- **THEN** the links point to the ondata organization repository URL
|
|
12
|
+
|
|
13
|
+
### Requirement: NPM package ownership remains personal
|
|
14
|
+
The project MUST continue to document the npm package under the @aborruso scope unless an explicit npm ownership change is approved.
|
|
15
|
+
|
|
16
|
+
#### Scenario: npm install instructions unchanged
|
|
17
|
+
- **WHEN** a user follows installation instructions
|
|
18
|
+
- **THEN** the package name remains @aborruso/ckan-mcp-server
|
|
19
|
+
|
package/package.json
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# File YAML per commenti privati su ckan-mcp-server
|
|
2
|
+
# Ogni elemento rappresenta un commento ricevuto
|
|
3
|
+
- autore: Giovanni Pirrotta
|
|
4
|
+
data: 2026-01-19
|
|
5
|
+
modalità: telegram
|
|
6
|
+
testo: >
|
|
7
|
+
Ciao Andy, se non lo hai già fatto secondo me dovresti contattare AGID. È uno strumento così potente da meritare massima visibilità, non solo per le PA, ma soprattutto per chi oggi fa fatica a trovare dati o a interagire con i portali opendata. Vedo grandissime potenzialità!!
|
|
8
|
+
- autore: Matteo Fortini
|
|
9
|
+
data: 2026-01-18
|
|
10
|
+
modalità: call
|
|
11
|
+
testo: |
|
|
12
|
+
Ho visto il video, molto interessante, lo proverò e lo racconterò.
|
|
13
|
+
Ti confesso che quando vedo queste cose mi chiedo se si possa implementare un meccanismo di feedback per ottenere lo stesso risultato con meno risorse. Intendo "come miglioreresti questo sito/API per renderlo più efficiente per queste cose?"
|
|
14
|
+
In generale a me piacerebbe che la IA pian piano venisse usata per "oliare" le interazioni, adesso la stiamo usando come una schiava per fare le cose scomode
|
/package/openspec/changes/{add-mcp-prompts → archive/2026-01-15-add-mcp-prompts}/proposal.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|