@aborruso/ckan-mcp-server 0.3.1 → 0.4.0
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/settings.local.json +3 -1
- package/CLAUDE.md +81 -24
- package/LOG.md +73 -0
- package/README.md +138 -13
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +7 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/worker.js +387 -0
- package/openspec/changes/add-cloudflare-workers/design.md +734 -0
- package/openspec/changes/add-cloudflare-workers/proposal.md +183 -0
- package/openspec/changes/add-cloudflare-workers/specs/cloudflare-deployment/spec.md +389 -0
- package/openspec/changes/add-cloudflare-workers/tasks.md +519 -0
- package/package.json +9 -2
- package/wrangler.toml +6 -0
- package/test-urls.js +0 -18
package/CLAUDE.md
CHANGED
|
@@ -41,7 +41,7 @@ The server exposes MCP tools for:
|
|
|
41
41
|
# Build project (uses esbuild - fast and lightweight)
|
|
42
42
|
npm run build
|
|
43
43
|
|
|
44
|
-
# Run test suite (
|
|
44
|
+
# Run test suite (113 tests - unit + integration)
|
|
45
45
|
npm test
|
|
46
46
|
|
|
47
47
|
# Watch mode for tests during development
|
|
@@ -61,6 +61,11 @@ npm run watch
|
|
|
61
61
|
|
|
62
62
|
# Build + run
|
|
63
63
|
npm run dev
|
|
64
|
+
|
|
65
|
+
# Cloudflare Workers deployment (v0.4.0+)
|
|
66
|
+
npm run build:worker # Build for Workers
|
|
67
|
+
npm run dev:worker # Test locally with Wrangler
|
|
68
|
+
npm run deploy # Deploy to Cloudflare Workers
|
|
64
69
|
```
|
|
65
70
|
|
|
66
71
|
### Build System
|
|
@@ -112,7 +117,8 @@ The server is implemented with a modular structure to improve maintainability an
|
|
|
112
117
|
|
|
113
118
|
```
|
|
114
119
|
src/
|
|
115
|
-
├── index.ts # Entry point (42 lines)
|
|
120
|
+
├── index.ts # Entry point Node.js (42 lines)
|
|
121
|
+
├── worker.ts # Entry point Cloudflare Workers (95 lines) [v0.4.0+]
|
|
116
122
|
├── server.ts # MCP server setup (12 lines)
|
|
117
123
|
├── types.ts # Types & schemas (16 lines)
|
|
118
124
|
├── utils/
|
|
@@ -134,7 +140,9 @@ src/
|
|
|
134
140
|
└── http.ts # HTTP transport (27 lines)
|
|
135
141
|
```
|
|
136
142
|
|
|
137
|
-
**Total**: ~
|
|
143
|
+
**Total**: ~1445 lines (including Workers deployment)
|
|
144
|
+
|
|
145
|
+
**Note**: `worker.ts` (v0.4.0+) is an alternative entry point for Cloudflare Workers deployment. Tool handlers (`tools/*`) are shared between Node.js and Workers runtimes.
|
|
138
146
|
|
|
139
147
|
The server (`src/index.ts`):
|
|
140
148
|
|
|
@@ -178,10 +186,32 @@ The server (`src/index.ts`):
|
|
|
178
186
|
|
|
179
187
|
### Transport Modes
|
|
180
188
|
|
|
181
|
-
The server
|
|
189
|
+
The server supports three transport modes:
|
|
182
190
|
|
|
183
191
|
- **stdio** (default): for integration with Claude Desktop and other local MCP clients
|
|
184
192
|
- **http**: exposes POST `/mcp` endpoint on configurable port (default 3000)
|
|
193
|
+
- **Cloudflare Workers** (v0.4.0+): global edge deployment via `src/worker.ts`
|
|
194
|
+
|
|
195
|
+
### Cloudflare Workers Deployment
|
|
196
|
+
|
|
197
|
+
**Added in v0.4.0**. The server can be deployed to Cloudflare Workers for global HTTP access.
|
|
198
|
+
|
|
199
|
+
**Key files**:
|
|
200
|
+
- `src/worker.ts` - Workers entry point using Web Standards transport
|
|
201
|
+
- `wrangler.toml` - Cloudflare configuration
|
|
202
|
+
|
|
203
|
+
**Deployment workflow**:
|
|
204
|
+
1. `npm run dev:worker` - Test locally (http://localhost:8787)
|
|
205
|
+
2. `npm run deploy` - Deploy to Cloudflare
|
|
206
|
+
3. Access at: `https://ckan-mcp-server.<account>.workers.dev`
|
|
207
|
+
|
|
208
|
+
**Architecture**:
|
|
209
|
+
- Uses `WebStandardStreamableHTTPServerTransport` from MCP SDK
|
|
210
|
+
- Compatible with Workers runtime (no Node.js APIs)
|
|
211
|
+
- Stateless mode (no session management)
|
|
212
|
+
- All 7 tools and 3 resource templates work identically to Node.js version
|
|
213
|
+
|
|
214
|
+
See `docs/DEPLOYMENT.md` for complete deployment guide.
|
|
185
215
|
|
|
186
216
|
### CKAN API Integration
|
|
187
217
|
|
|
@@ -293,28 +323,55 @@ curl -X POST http://localhost:3000/mcp \
|
|
|
293
323
|
To test with Claude Desktop, add MCP configuration to config file.
|
|
294
324
|
To test with Claude Desktop, add the MCP configuration to the config file.
|
|
295
325
|
|
|
296
|
-
##
|
|
326
|
+
## Development Notes
|
|
327
|
+
|
|
328
|
+
### Version History
|
|
297
329
|
|
|
298
|
-
|
|
299
|
-
|
|
330
|
+
**v0.4.0 (2026-01-10)**: Cloudflare Workers deployment
|
|
331
|
+
- Added `src/worker.ts` for Workers runtime
|
|
332
|
+
- Global edge deployment support
|
|
333
|
+
- Web Standards transport integration
|
|
334
|
+
- See `docs/DEPLOYMENT.md` for deployment guide
|
|
300
335
|
|
|
301
|
-
**
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
- Testing isolato possibile
|
|
305
|
-
- Manutenzione semplificata
|
|
306
|
-
- Zero breaking changes
|
|
336
|
+
**v0.3.0 (2026-01-08)**: MCP Resource Templates
|
|
337
|
+
- Added `ckan://` URI scheme support
|
|
338
|
+
- Direct data access for datasets, resources, organizations
|
|
307
339
|
|
|
308
|
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
340
|
+
**v0.2.0 (2026-01-08)**: Comprehensive test suite
|
|
341
|
+
- 113 tests (unit + integration)
|
|
342
|
+
- 97%+ code coverage
|
|
343
|
+
|
|
344
|
+
**v0.1.0 (2026-01-08)**: Modular refactoring
|
|
345
|
+
- Restructured from monolithic file to 11 modules
|
|
346
|
+
- Improved maintainability and testability
|
|
347
|
+
|
|
348
|
+
### Known Limitations
|
|
349
|
+
|
|
350
|
+
- **Output limit**: 50,000 characters hardcoded in `types.ts` (could be configurable)
|
|
351
|
+
- **Date formatting**: Uses 'it-IT' locale in `utils/formatting.ts` (could be parameterized)
|
|
352
|
+
- **Read-only**: All tools are read-only (no data modification on CKAN)
|
|
353
|
+
- **No caching**: Every request makes fresh HTTP call to CKAN APIs
|
|
354
|
+
- **No authentication**: Uses only public CKAN endpoints
|
|
355
|
+
- **No WebSocket**: MCP over HTTP uses JSON responses (not SSE streaming in Workers)
|
|
315
356
|
|
|
316
357
|
### Adding New Tools
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
358
|
+
|
|
359
|
+
1. Create new file in `src/tools/`
|
|
360
|
+
2. Export `registerXxxTools(server: McpServer)` function
|
|
361
|
+
3. Import and call in both `src/index.ts` and `src/worker.ts`
|
|
362
|
+
4. Add tests in `tests/integration/`
|
|
363
|
+
5. Build and test: `npm run build && npm test`
|
|
364
|
+
|
|
365
|
+
### Release Workflow
|
|
366
|
+
|
|
367
|
+
When releasing a new version:
|
|
368
|
+
|
|
369
|
+
1. **Update version**: Edit `package.json` version field
|
|
370
|
+
2. **Update LOG.md**: Add entry with date and changes
|
|
371
|
+
3. **Commit changes**: `git add . && git commit -m "..."`
|
|
372
|
+
4. **Push to GitHub**: `git push origin main`
|
|
373
|
+
5. **Create tag**: `git tag -a v0.x.0 -m "..." && git push origin v0.x.0`
|
|
374
|
+
6. **Publish to npm** (optional): `npm publish`
|
|
375
|
+
7. **Deploy to Cloudflare** (if code changed): `npm run deploy`
|
|
376
|
+
|
|
377
|
+
See `docs/DEPLOYMENT.md` for detailed Cloudflare deployment instructions.
|
package/LOG.md
CHANGED
|
@@ -1,7 +1,80 @@
|
|
|
1
1
|
# LOG
|
|
2
2
|
|
|
3
|
+
## 2026-01-10
|
|
4
|
+
|
|
5
|
+
### Version 0.4.0 - Cloudflare Workers Deployment ⭐
|
|
6
|
+
|
|
7
|
+
- **Production deployment**: Server now live on Cloudflare Workers
|
|
8
|
+
- Public endpoint: `https://ckan-mcp-server.andy-pr.workers.dev`
|
|
9
|
+
- Global edge deployment (low latency worldwide)
|
|
10
|
+
- Free tier: 100,000 requests/day
|
|
11
|
+
- Bundle size: 398KB (minified: 130KB gzipped)
|
|
12
|
+
- Cold start time: 58ms
|
|
13
|
+
|
|
14
|
+
- **New files**:
|
|
15
|
+
- `src/worker.ts` (95 lines): Workers entry point using Web Standards transport
|
|
16
|
+
- `wrangler.toml` (5 lines): Cloudflare Workers configuration
|
|
17
|
+
|
|
18
|
+
- **New npm scripts**:
|
|
19
|
+
- `build:worker`: Compile for Workers (browser platform, ESM format)
|
|
20
|
+
- `dev:worker`: Local testing with wrangler dev
|
|
21
|
+
- `deploy`: Build and deploy to Cloudflare
|
|
22
|
+
|
|
23
|
+
- **Architecture**:
|
|
24
|
+
- Uses `WebStandardStreamableHTTPServerTransport` from MCP SDK
|
|
25
|
+
- Compatible with Workers runtime (no Node.js APIs)
|
|
26
|
+
- Stateless mode (no session management)
|
|
27
|
+
- JSON responses enabled for simplicity
|
|
28
|
+
- CORS enabled for browser access
|
|
29
|
+
|
|
30
|
+
- **Testing**: All 7 MCP tools verified in Workers environment
|
|
31
|
+
- Health check: ✅ Working
|
|
32
|
+
- tools/list: ✅ Returns all 7 tools
|
|
33
|
+
- ckan_status_show: ✅ External CKAN API calls working
|
|
34
|
+
- Response times: < 2s for typical queries
|
|
35
|
+
|
|
36
|
+
- **Documentation**:
|
|
37
|
+
- Updated README.md with "Deployment Options" section
|
|
38
|
+
- Added Option 4 to Claude Desktop config (Workers HTTP transport)
|
|
39
|
+
- Created OpenSpec proposal in `openspec/changes/add-cloudflare-workers/`
|
|
40
|
+
|
|
41
|
+
- **No breaking changes**: stdio and self-hosted HTTP modes still fully supported
|
|
42
|
+
- Dual build system: Node.js bundle unchanged
|
|
43
|
+
- Existing tests (113) all passing
|
|
44
|
+
- Version bumped to 0.4.0
|
|
45
|
+
|
|
3
46
|
## 2026-01-09
|
|
4
47
|
|
|
48
|
+
### Version 0.3.2 - npm Publication
|
|
49
|
+
- **npm Publication**: Published to npm registry as `@aborruso/ckan-mcp-server`
|
|
50
|
+
- Package size: 68.6 KB (236 KB unpacked)
|
|
51
|
+
- Public access configured
|
|
52
|
+
- Installation time: 5 min → 30 sec (90% faster)
|
|
53
|
+
- User actions: 6 steps → 2 steps (67% reduction)
|
|
54
|
+
- **Global Command Support**: Added `bin` field to package.json
|
|
55
|
+
- Direct command: `ckan-mcp-server` (no node path required)
|
|
56
|
+
- Works system-wide after global install
|
|
57
|
+
- **Documentation Enhancement**: Three installation options in README
|
|
58
|
+
- Option 1: Global installation (recommended)
|
|
59
|
+
- Option 2: Local project installation
|
|
60
|
+
- Option 3: From source (development)
|
|
61
|
+
- Platform-specific paths (macOS, Windows, Linux)
|
|
62
|
+
- **GitHub Release**: Tagged v0.3.2 with release notes
|
|
63
|
+
- **Impact**: Low barrier to entry, standard npm workflow, better discoverability
|
|
64
|
+
|
|
65
|
+
### Project Evaluation v0.3.2
|
|
66
|
+
- **Overall Rating**: 9.0/10 (local evidence; external distribution not verified)
|
|
67
|
+
- **Distribution readiness**: 9/10 (metadata and CLI entry point verified)
|
|
68
|
+
- **Testing**: 113 tests passing; coverage 97%+ (2026-01-09)
|
|
69
|
+
- **Status**: Packaging and docs production-ready; npm/GitHub release require external verification
|
|
70
|
+
- See `docs/evaluation-v0.3.2.md` for full assessment
|
|
71
|
+
|
|
72
|
+
### Tests & Coverage Update
|
|
73
|
+
- Added unit tests for HTTP error branches and URL generator org paths
|
|
74
|
+
- Tests: `tests/unit/http.test.ts`, `tests/unit/url-generator.test.ts`
|
|
75
|
+
- `npm test`: 113 tests passing
|
|
76
|
+
- `npm run test:coverage`: 97.01% statements, 89.36% branches, 100% functions, 96.87% lines
|
|
77
|
+
|
|
5
78
|
### README Enhancement - Real-World Advanced Examples
|
|
6
79
|
- **New Section**: "Advanced Query Examples" in README.md
|
|
7
80
|
- 4 real-world examples tested on dati.gov.it portal
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ MCP (Model Context Protocol) server for interacting with CKAN-based open data po
|
|
|
12
12
|
- 🎨 Output in Markdown or JSON format
|
|
13
13
|
- ⚡ Pagination and faceting support
|
|
14
14
|
- 📄 MCP Resource Templates for direct data access
|
|
15
|
-
- 🧪 Comprehensive test suite (
|
|
15
|
+
- 🧪 Comprehensive test suite (113 tests, 100% passing)
|
|
16
16
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
|
@@ -34,7 +34,7 @@ npm install
|
|
|
34
34
|
# Build with esbuild (fast, ~4ms)
|
|
35
35
|
npm run build
|
|
36
36
|
|
|
37
|
-
# Run tests (
|
|
37
|
+
# Run tests (113 tests)
|
|
38
38
|
npm test
|
|
39
39
|
```
|
|
40
40
|
|
|
@@ -54,24 +54,142 @@ TRANSPORT=http PORT=3000 npm start
|
|
|
54
54
|
|
|
55
55
|
The server will be available at `http://localhost:3000/mcp`
|
|
56
56
|
|
|
57
|
+
## Deployment Options
|
|
58
|
+
|
|
59
|
+
### Option 1: Local Installation (stdio mode)
|
|
60
|
+
|
|
61
|
+
**Best for**: Personal use with Claude Desktop
|
|
62
|
+
|
|
63
|
+
Install and run locally on your machine (see Installation section above).
|
|
64
|
+
|
|
65
|
+
### Option 2: Self-Hosted HTTP Server
|
|
66
|
+
|
|
67
|
+
**Best for**: Team use, custom infrastructure
|
|
68
|
+
|
|
69
|
+
Deploy on your own server using Node.js:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
TRANSPORT=http PORT=3000 npm start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Option 3: Cloudflare Workers ⭐ NEW
|
|
76
|
+
|
|
77
|
+
**Best for**: Global access, zero infrastructure, free hosting
|
|
78
|
+
|
|
79
|
+
Deploy to Cloudflare's edge network for worldwide low-latency access.
|
|
80
|
+
|
|
81
|
+
**Prerequisites**:
|
|
82
|
+
- Cloudflare account (free): https://dash.cloudflare.com/sign-up
|
|
83
|
+
- Wrangler CLI: `npm install -g wrangler`
|
|
84
|
+
|
|
85
|
+
**Quick Deploy**:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Clone repository
|
|
89
|
+
git clone https://github.com/aborruso/ckan-mcp-server.git
|
|
90
|
+
cd ckan-mcp-server
|
|
91
|
+
|
|
92
|
+
# Install dependencies
|
|
93
|
+
npm install
|
|
94
|
+
|
|
95
|
+
# Authenticate with Cloudflare
|
|
96
|
+
wrangler login
|
|
97
|
+
|
|
98
|
+
# Deploy to Workers
|
|
99
|
+
npm run deploy
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Your server will be live at: `https://ckan-mcp-server.<your-account>.workers.dev`
|
|
103
|
+
|
|
104
|
+
**Free tier includes**:
|
|
105
|
+
- 100,000 requests/day
|
|
106
|
+
- Global edge deployment
|
|
107
|
+
- Automatic HTTPS
|
|
108
|
+
- No cold starts
|
|
109
|
+
|
|
110
|
+
For detailed deployment instructions, see [DEPLOYMENT.md](docs/DEPLOYMENT.md).
|
|
111
|
+
|
|
57
112
|
## Claude Desktop Configuration
|
|
58
113
|
|
|
59
|
-
|
|
114
|
+
Configuration file location:
|
|
115
|
+
|
|
116
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
117
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
118
|
+
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
119
|
+
|
|
120
|
+
### Option 1: Global Installation (Recommended)
|
|
121
|
+
|
|
122
|
+
Install globally to use across all projects:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm install -g @aborruso/ckan-mcp-server
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Then add to `claude_desktop_config.json`:
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"mcpServers": {
|
|
133
|
+
"ckan": {
|
|
134
|
+
"command": "ckan-mcp-server"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Option 2: Local Installation
|
|
141
|
+
|
|
142
|
+
Install in a specific project:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm install @aborruso/ckan-mcp-server
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Then add to `claude_desktop_config.json`:
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"mcpServers": {
|
|
153
|
+
"ckan": {
|
|
154
|
+
"command": "node",
|
|
155
|
+
"args": ["/absolute/path/to/project/node_modules/@aborruso/ckan-mcp-server/dist/index.js"]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Replace `/absolute/path/to/project` with your actual project path.
|
|
162
|
+
|
|
163
|
+
### Option 3: From Source
|
|
164
|
+
|
|
165
|
+
If you cloned the repository:
|
|
60
166
|
|
|
61
167
|
```json
|
|
62
168
|
{
|
|
63
169
|
"mcpServers": {
|
|
64
170
|
"ckan": {
|
|
65
171
|
"command": "node",
|
|
66
|
-
"args": ["/path/to/ckan-mcp-server/dist/index.js"]
|
|
172
|
+
"args": ["/absolute/path/to/ckan-mcp-server/dist/index.js"]
|
|
67
173
|
}
|
|
68
174
|
}
|
|
69
175
|
}
|
|
70
176
|
```
|
|
71
177
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
178
|
+
### Option 4: Cloudflare Workers (HTTP transport)
|
|
179
|
+
|
|
180
|
+
Use the public Cloudflare Workers deployment (no local installation required):
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"mcpServers": {
|
|
185
|
+
"ckan": {
|
|
186
|
+
"url": "https://ckan-mcp-server.andy-pr.workers.dev/mcp"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Note**: This uses the public endpoint. You can also deploy your own Workers instance and use that URL instead.
|
|
75
193
|
|
|
76
194
|
## Available Tools
|
|
77
195
|
|
|
@@ -185,6 +303,7 @@ Some of the main compatible portals:
|
|
|
185
303
|
Some CKAN portals expose non-standard web URLs for viewing datasets or organizations. To support those cases, this project ships with `src/portals.json`, which maps known portal API URLs (and aliases) to custom view URL templates.
|
|
186
304
|
|
|
187
305
|
When generating a dataset or organization view link, the server:
|
|
306
|
+
|
|
188
307
|
- matches the `server_url` against `api_url` and `api_url_aliases` in `src/portals.json`
|
|
189
308
|
- uses the portal-specific `dataset_view_url` / `organization_view_url` template when available
|
|
190
309
|
- falls back to the generic defaults (`{server_url}/dataset/{name}` and `{server_url}/organization/{name}`)
|
|
@@ -238,6 +357,7 @@ ckan_package_search({
|
|
|
238
357
|
```
|
|
239
358
|
|
|
240
359
|
**Techniques used**:
|
|
360
|
+
|
|
241
361
|
- `sanità~2` - Fuzzy search with edit distance 2 (finds "sanita", "sanitá", minor typos)
|
|
242
362
|
- `^3` - Boosts title matches 3x higher in relevance scoring
|
|
243
363
|
- `NOW-6MONTHS` - Dynamic date math for rolling time windows
|
|
@@ -259,6 +379,7 @@ ckan_package_search({
|
|
|
259
379
|
```
|
|
260
380
|
|
|
261
381
|
**Techniques used**:
|
|
382
|
+
|
|
262
383
|
- `"inquinamento aria"~5` - Proximity search (words within 5 positions)
|
|
263
384
|
- `~3` - Tighter proximity for title matches
|
|
264
385
|
- `NOT (title:acqua OR title:mare)` - Exclude water/sea datasets
|
|
@@ -281,6 +402,7 @@ ckan_package_search({
|
|
|
281
402
|
```
|
|
282
403
|
|
|
283
404
|
**Techniques used**:
|
|
405
|
+
|
|
284
406
|
- `regione*` - Wildcard matches all regional organizations
|
|
285
407
|
- `[5 TO *]` - Inclusive range (5 or more resources)
|
|
286
408
|
- `res_format:*` - Field existence check (has at least one resource format)
|
|
@@ -303,6 +425,7 @@ ckan_package_search({
|
|
|
303
425
|
```
|
|
304
426
|
|
|
305
427
|
**Techniques used**:
|
|
428
|
+
|
|
306
429
|
- `{9 TO 51}` - Exclusive bounds (10-50 resources, excluding 9 and 51)
|
|
307
430
|
- `[2025-07-01T00:00:00Z TO 2025-12-31T23:59:59Z]` - Explicit date range
|
|
308
431
|
- Combined organization wildcard with title search
|
|
@@ -318,9 +441,11 @@ ckan_package_search({
|
|
|
318
441
|
**Proximity**: `"phrase"~N` (words within N positions)
|
|
319
442
|
**Boosting**: `^N` (relevance multiplier), e.g., `title:water^2`
|
|
320
443
|
**Ranges**:
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
444
|
+
|
|
445
|
+
- Inclusive: `[a TO b]`, e.g., `num_resources:[5 TO 10]`
|
|
446
|
+
- Exclusive: `{a TO b}`, e.g., `num_resources:{0 TO 100}`
|
|
447
|
+
- Open-ended: `[2024-01-01T00:00:00Z TO *]`
|
|
448
|
+
|
|
324
449
|
**Date Math**: `NOW`, `NOW-1YEAR`, `NOW-6MONTHS`, `NOW-7DAYS`, `NOW/DAY`
|
|
325
450
|
**Field Existence**: `field:*` (field exists), `NOT field:*` (field missing)
|
|
326
451
|
|
|
@@ -349,7 +474,7 @@ ckan-mcp-server/
|
|
|
349
474
|
│ └── transport/
|
|
350
475
|
│ ├── stdio.ts # Stdio transport
|
|
351
476
|
│ └── http.ts # HTTP transport
|
|
352
|
-
├── tests/ # Test suite (
|
|
477
|
+
├── tests/ # Test suite (113 tests)
|
|
353
478
|
├── dist/ # Compiled files (generated)
|
|
354
479
|
├── package.json
|
|
355
480
|
└── README.md
|
|
@@ -373,6 +498,7 @@ npm run test:coverage
|
|
|
373
498
|
```
|
|
374
499
|
|
|
375
500
|
Test coverage target is 80%. Current test suite includes:
|
|
501
|
+
|
|
376
502
|
- Unit tests for utility functions (formatting, HTTP)
|
|
377
503
|
- Integration tests for MCP tools with mocked CKAN API responses
|
|
378
504
|
- Mock fixtures for CKAN API success and error scenarios
|
|
@@ -454,12 +580,11 @@ MIT License - See LICENSE.txt file for complete details.
|
|
|
454
580
|
- **CKAN**: https://ckan.org/
|
|
455
581
|
- **CKAN API Documentation**: https://docs.ckan.org/en/latest/api/
|
|
456
582
|
- **MCP Protocol**: https://modelcontextprotocol.io/
|
|
457
|
-
- **onData**: https://www.ondata.it/
|
|
458
|
-
- **dati.gov.it**: https://www.dati.gov.it/opendata/
|
|
459
583
|
|
|
460
584
|
## Support
|
|
461
585
|
|
|
462
586
|
For issues or questions:
|
|
587
|
+
|
|
463
588
|
- Open an issue on GitHub
|
|
464
589
|
- Contact onData: https://www.ondata.it/
|
|
465
590
|
|