@aborruso/ckan-mcp-server 0.4.10 → 0.4.11
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/LOG.md +5 -0
- package/dist/index.js +5 -5
- package/dist/worker.js +7 -7
- package/package.json +1 -1
package/LOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## 2026-01-15
|
|
4
4
|
|
|
5
|
+
### Version 0.4.11 - Prompt argument coercion
|
|
6
|
+
- **Fix**: Prompt arguments now coerce numeric strings (e.g., rows) for MCP prompt requests
|
|
7
|
+
- **Docs**: Updated evaluation notes for 0.4.11
|
|
8
|
+
- **No breaking changes**: Prompt names and outputs unchanged
|
|
9
|
+
|
|
5
10
|
### Version 0.4.10 - Guided MCP prompts
|
|
6
11
|
- **Feature**: Added 5 guided MCP prompts (theme, organization, format, recent datasets, dataset analysis)
|
|
7
12
|
- **Docs**: README and new `docs/prompts.md` updated with usage examples
|
package/dist/index.js
CHANGED
|
@@ -2282,7 +2282,7 @@ var registerThemePrompt = (server2) => {
|
|
|
2282
2282
|
argsSchema: {
|
|
2283
2283
|
server_url: z8.string().url().describe("Base URL of the CKAN server"),
|
|
2284
2284
|
theme: z8.string().min(1).describe("Theme or group name to search"),
|
|
2285
|
-
rows: z8.number().int().positive().default(10).describe("Max results to return")
|
|
2285
|
+
rows: z8.coerce.number().int().positive().default(10).describe("Max results to return")
|
|
2286
2286
|
}
|
|
2287
2287
|
},
|
|
2288
2288
|
async ({ server_url, theme, rows }) => createTextPrompt(buildThemePromptText(server_url, theme, rows))
|
|
@@ -2323,7 +2323,7 @@ var registerOrganizationPrompt = (server2) => {
|
|
|
2323
2323
|
argsSchema: {
|
|
2324
2324
|
server_url: z9.string().url().describe("Base URL of the CKAN server"),
|
|
2325
2325
|
organization: z9.string().min(1).describe("Organization name or keyword"),
|
|
2326
|
-
rows: z9.number().int().positive().default(10).describe("Max results to return")
|
|
2326
|
+
rows: z9.coerce.number().int().positive().default(10).describe("Max results to return")
|
|
2327
2327
|
}
|
|
2328
2328
|
},
|
|
2329
2329
|
async ({ server_url, organization, rows }) => createTextPrompt(buildOrganizationPromptText(server_url, organization, rows))
|
|
@@ -2354,7 +2354,7 @@ var registerFormatPrompt = (server2) => {
|
|
|
2354
2354
|
argsSchema: {
|
|
2355
2355
|
server_url: z10.string().url().describe("Base URL of the CKAN server"),
|
|
2356
2356
|
format: z10.string().min(1).describe("Resource format (e.g., CSV, JSON)"),
|
|
2357
|
-
rows: z10.number().int().positive().default(10).describe("Max results to return")
|
|
2357
|
+
rows: z10.coerce.number().int().positive().default(10).describe("Max results to return")
|
|
2358
2358
|
}
|
|
2359
2359
|
},
|
|
2360
2360
|
async ({ server_url, format, rows }) => createTextPrompt(buildFormatPromptText(server_url, format, rows))
|
|
@@ -2391,7 +2391,7 @@ var registerRecentPrompt = (server2) => {
|
|
|
2391
2391
|
description: "Guided prompt to list recently updated datasets on a CKAN portal.",
|
|
2392
2392
|
argsSchema: {
|
|
2393
2393
|
server_url: z11.string().url().describe("Base URL of the CKAN server"),
|
|
2394
|
-
rows: z11.number().int().positive().default(10).describe("Max results to return")
|
|
2394
|
+
rows: z11.coerce.number().int().positive().default(10).describe("Max results to return")
|
|
2395
2395
|
}
|
|
2396
2396
|
},
|
|
2397
2397
|
async ({ server_url, rows }) => createTextPrompt(buildRecentPromptText(server_url, rows))
|
|
@@ -2462,7 +2462,7 @@ var registerAllPrompts = (server2) => {
|
|
|
2462
2462
|
function createServer() {
|
|
2463
2463
|
return new McpServer({
|
|
2464
2464
|
name: "ckan-mcp-server",
|
|
2465
|
-
version: "0.4.
|
|
2465
|
+
version: "0.4.11"
|
|
2466
2466
|
});
|
|
2467
2467
|
}
|
|
2468
2468
|
function registerAll(server2) {
|
package/dist/worker.js
CHANGED
|
@@ -623,7 +623,7 @@ ckan_package_search({
|
|
|
623
623
|
q: "tags:${e}",
|
|
624
624
|
sort: "metadata_modified desc",
|
|
625
625
|
rows: ${r}
|
|
626
|
-
})`,$v=t=>{t.registerPrompt(rO,{title:"Search datasets by theme",description:"Guided prompt to discover a theme and search datasets under it.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),theme:$.string().min(1).describe("Theme or group name to search"),rows:$.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,theme:r,rows:n})=>jt(nO(e,r,n)))};var oO="ckan-search-by-organization",sO=(t,e,r)=>`# Guided search: datasets by organization
|
|
626
|
+
})`,$v=t=>{t.registerPrompt(rO,{title:"Search datasets by theme",description:"Guided prompt to discover a theme and search datasets under it.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),theme:$.string().min(1).describe("Theme or group name to search"),rows:$.coerce.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,theme:r,rows:n})=>jt(nO(e,r,n)))};var oO="ckan-search-by-organization",sO=(t,e,r)=>`# Guided search: datasets by organization
|
|
627
627
|
|
|
628
628
|
## Step 1: Discover matching organizations
|
|
629
629
|
Use \`ckan_package_search\` with an organization wildcard and facets:
|
|
@@ -644,7 +644,7 @@ ckan_package_search({
|
|
|
644
644
|
fq: "organization:<org-id>",
|
|
645
645
|
sort: "metadata_modified desc",
|
|
646
646
|
rows: ${r}
|
|
647
|
-
})`,Sv=t=>{t.registerPrompt(oO,{title:"Search datasets by organization",description:"Guided prompt to find a publisher and list its datasets.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),organization:$.string().min(1).describe("Organization name or keyword"),rows:$.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,organization:r,rows:n})=>jt(sO(e,r,n)))};var iO="ckan-search-by-format",aO=(t,e,r)=>`# Guided search: datasets by resource format
|
|
647
|
+
})`,Sv=t=>{t.registerPrompt(oO,{title:"Search datasets by organization",description:"Guided prompt to find a publisher and list its datasets.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),organization:$.string().min(1).describe("Organization name or keyword"),rows:$.coerce.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,organization:r,rows:n})=>jt(sO(e,r,n)))};var iO="ckan-search-by-format",aO=(t,e,r)=>`# Guided search: datasets by resource format
|
|
648
648
|
|
|
649
649
|
Use \`ckan_package_search\` with a format filter:
|
|
650
650
|
|
|
@@ -655,7 +655,7 @@ ckan_package_search({
|
|
|
655
655
|
rows: ${r}
|
|
656
656
|
})
|
|
657
657
|
|
|
658
|
-
Tip: try uppercase (CSV/JSON) or common variants if results are sparse.`,kv=t=>{t.registerPrompt(iO,{title:"Search datasets by resource format",description:"Guided prompt to find datasets with a given resource format.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),format:$.string().min(1).describe("Resource format (e.g., CSV, JSON)"),rows:$.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,format:r,rows:n})=>jt(aO(e,r,n)))};var cO="ckan-recent-datasets",uO=(t,e)=>`# Guided search: recent datasets
|
|
658
|
+
Tip: try uppercase (CSV/JSON) or common variants if results are sparse.`,kv=t=>{t.registerPrompt(iO,{title:"Search datasets by resource format",description:"Guided prompt to find datasets with a given resource format.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),format:$.string().min(1).describe("Resource format (e.g., CSV, JSON)"),rows:$.coerce.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,format:r,rows:n})=>jt(aO(e,r,n)))};var cO="ckan-recent-datasets",uO=(t,e)=>`# Guided search: recent datasets
|
|
659
659
|
|
|
660
660
|
Use \`ckan_package_search\` sorted by modification date:
|
|
661
661
|
|
|
@@ -673,7 +673,7 @@ ckan_package_search({
|
|
|
673
673
|
q: "metadata_modified:[NOW-30DAYS TO *]",
|
|
674
674
|
sort: "metadata_modified desc",
|
|
675
675
|
rows: ${e}
|
|
676
|
-
})`,zv=t=>{t.registerPrompt(cO,{title:"Find recently updated datasets",description:"Guided prompt to list recently updated datasets on a CKAN portal.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),rows:$.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,rows:r})=>jt(uO(e,r)))};var lO="ckan-analyze-dataset",dO=(t,e)=>`# Guided analysis: dataset
|
|
676
|
+
})`,zv=t=>{t.registerPrompt(cO,{title:"Find recently updated datasets",description:"Guided prompt to list recently updated datasets on a CKAN portal.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),rows:$.coerce.number().int().positive().default(10).describe("Max results to return")}},async({server_url:e,rows:r})=>jt(uO(e,r)))};var lO="ckan-analyze-dataset",dO=(t,e)=>`# Guided analysis: dataset
|
|
677
677
|
|
|
678
678
|
## Step 1: Get dataset metadata
|
|
679
679
|
Use \`ckan_package_show\` to load full metadata and resources:
|
|
@@ -705,7 +705,7 @@ For aggregates, use SQL:
|
|
|
705
705
|
ckan_datastore_search_sql({
|
|
706
706
|
server_url: "${t}",
|
|
707
707
|
sql: "SELECT * FROM "<resource-id>" LIMIT 10"
|
|
708
|
-
})`,Tv=t=>{t.registerPrompt(lO,{title:"Analyze a dataset",description:"Guided prompt to inspect dataset metadata and explore DataStore tables.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),id:$.string().min(1).describe("Dataset id or name (CKAN package id)")}},async({server_url:e,id:r})=>jt(dO(e,r)))};var Ev=t=>{$v(t),Sv(t),kv(t),zv(t),Tv(t)};function Rv(){return new na({name:"ckan-mcp-server",version:"0.4.
|
|
708
|
+
})`,Tv=t=>{t.registerPrompt(lO,{title:"Analyze a dataset",description:"Guided prompt to inspect dataset metadata and explore DataStore tables.",argsSchema:{server_url:$.string().url().describe("Base URL of the CKAN server"),id:$.string().min(1).describe("Dataset id or name (CKAN package id)")}},async({server_url:e,id:r})=>jt(dO(e,r)))};var Ev=t=>{$v(t),Sv(t),kv(t),zv(t),Tv(t)};function Rv(){return new na({name:"ckan-mcp-server",version:"0.4.11"})}function Pv(t){pv(t),fv(t),mv(t),hv(t),gv(t),_v(t),wv(t),Ev(t)}var wa=class{constructor(e={}){this._started=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=e.sessionIdGenerator,this._enableJsonResponse=e.enableJsonResponse??!1,this._eventStore=e.eventStore,this._onsessioninitialized=e.onsessioninitialized,this._onsessionclosed=e.onsessionclosed,this._allowedHosts=e.allowedHosts,this._allowedOrigins=e.allowedOrigins,this._enableDnsRebindingProtection=e.enableDnsRebindingProtection??!1,this._retryInterval=e.retryInterval}async start(){if(this._started)throw new Error("Transport already started");this._started=!0}createJsonErrorResponse(e,r,n,o){let s={code:r,message:n};return o?.data!==void 0&&(s.data=o.data),new Response(JSON.stringify({jsonrpc:"2.0",error:s,id:null}),{status:e,headers:{"Content-Type":"application/json",...o?.headers}})}validateRequestHeaders(e){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let r=e.headers.get("host");if(!r||!this._allowedHosts.includes(r)){let n=`Invalid Host header: ${r}`;return this.onerror?.(new Error(n)),this.createJsonErrorResponse(403,-32e3,n)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let r=e.headers.get("origin");if(r&&!this._allowedOrigins.includes(r)){let n=`Invalid Origin header: ${r}`;return this.onerror?.(new Error(n)),this.createJsonErrorResponse(403,-32e3,n)}}}}async handleRequest(e,r){let n=this.validateRequestHeaders(e);if(n)return n;switch(e.method){case"POST":return this.handlePostRequest(e,r);case"GET":return this.handleGetRequest(e);case"DELETE":return this.handleDeleteRequest(e);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(e,r,n,o){if(!this._eventStore||o<"2025-11-25")return;let s=await this._eventStore.storeEvent(n,{}),i=`id: ${s}
|
|
709
709
|
data:
|
|
710
710
|
|
|
711
711
|
`;this._retryInterval!==void 0&&(i=`id: ${s}
|
|
@@ -888,8 +888,8 @@ data:
|
|
|
888
888
|
<pre><code>curl ${e.origin}/health</code></pre>
|
|
889
889
|
|
|
890
890
|
<div class="footer">
|
|
891
|
-
Version 0.4.
|
|
891
|
+
Version 0.4.11 \u2022 Running on Cloudflare Workers \u2022 <a href="https://github.com/aborruso/ckan-mcp-server/blob/main/LICENSE.txt" target="_blank">MIT License</a>
|
|
892
892
|
</div>
|
|
893
893
|
</div>
|
|
894
894
|
</body>
|
|
895
|
-
</html>`,{headers:{"Content-Type":"text/html; charset=utf-8","Access-Control-Allow-Origin":"*"}});if(t.method==="GET"&&e.pathname==="/health")return new Response(JSON.stringify({status:"ok",version:"0.4.
|
|
895
|
+
</html>`,{headers:{"Content-Type":"text/html; charset=utf-8","Access-Control-Allow-Origin":"*"}});if(t.method==="GET"&&e.pathname==="/health")return new Response(JSON.stringify({status:"ok",version:"0.4.11",tools:13,resources:3,prompts:5,runtime:"cloudflare-workers"}),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}});if(e.pathname==="/mcp")try{let r=await Nv.handleRequest(t),n=new Headers(r.headers);return n.set("Access-Control-Allow-Origin","*"),new Response(r.body,{status:r.status,statusText:r.statusText,headers:n})}catch(r){return console.error("Worker error:",r),new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32603,message:"Internal error",data:r instanceof Error?r.message:String(r)},id:null}),{status:500,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}return new Response("Not Found",{status:404,headers:{"Access-Control-Allow-Origin":"*"}})}};export{mL as default};
|