@aborruso/ckan-mcp-server 0.4.90 → 0.4.92
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 +10 -0
- package/dist/index.js +107 -103
- package/dist/worker.js +87 -87
- package/package.json +1 -1
package/LOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# LOG
|
|
2
2
|
|
|
3
|
+
## 2026-03-23
|
|
4
|
+
|
|
5
|
+
### v0.4.92
|
|
6
|
+
|
|
7
|
+
- fix(http): create server + transport per request — SDK 1.26.0 security fix enforces stateless transport cannot be reused across requests
|
|
8
|
+
|
|
9
|
+
### v0.4.91
|
|
10
|
+
|
|
11
|
+
- fix(worker): create server + transport per request — SDK 1.27.1 enforces stateless transport cannot be reused across requests
|
|
12
|
+
|
|
3
13
|
## 2026-03-22
|
|
4
14
|
|
|
5
15
|
### v0.4.90
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,9 @@ var portals_default = {
|
|
|
29
29
|
api_url_aliases: [
|
|
30
30
|
"https://dati.gov.it/opendata",
|
|
31
31
|
"http://www.dati.gov.it/opendata",
|
|
32
|
-
"http://dati.gov.it/opendata"
|
|
32
|
+
"http://dati.gov.it/opendata",
|
|
33
|
+
"https://dati.gov.it",
|
|
34
|
+
"https://www.dati.gov.it"
|
|
33
35
|
],
|
|
34
36
|
search: {
|
|
35
37
|
force_text_field: true
|
|
@@ -1092,8 +1094,8 @@ function compactPackageShow(result, serverUrl) {
|
|
|
1092
1094
|
} : {}
|
|
1093
1095
|
};
|
|
1094
1096
|
}
|
|
1095
|
-
function registerPackageTools(
|
|
1096
|
-
|
|
1097
|
+
function registerPackageTools(server) {
|
|
1098
|
+
server.registerTool(
|
|
1097
1099
|
"ckan_package_search",
|
|
1098
1100
|
{
|
|
1099
1101
|
title: "Search CKAN Datasets",
|
|
@@ -1446,7 +1448,7 @@ Note: showing top ${sorted.length} only. Use \`response_format: json\` for full
|
|
|
1446
1448
|
}
|
|
1447
1449
|
}
|
|
1448
1450
|
);
|
|
1449
|
-
|
|
1451
|
+
server.registerTool(
|
|
1450
1452
|
"ckan_find_relevant_datasets",
|
|
1451
1453
|
{
|
|
1452
1454
|
title: "Find Relevant CKAN Datasets",
|
|
@@ -1634,7 +1636,7 @@ Typical workflow: ckan_find_relevant_datasets \u2192 ckan_package_show (inspect
|
|
|
1634
1636
|
}
|
|
1635
1637
|
}
|
|
1636
1638
|
);
|
|
1637
|
-
|
|
1639
|
+
server.registerTool(
|
|
1638
1640
|
"ckan_package_show",
|
|
1639
1641
|
{
|
|
1640
1642
|
title: "Show CKAN Dataset Details",
|
|
@@ -1713,7 +1715,7 @@ Typical workflow: ckan_package_show \u2192 pick a resource with datastore_active
|
|
|
1713
1715
|
}
|
|
1714
1716
|
}
|
|
1715
1717
|
);
|
|
1716
|
-
|
|
1718
|
+
server.registerTool(
|
|
1717
1719
|
"ckan_list_resources",
|
|
1718
1720
|
{
|
|
1719
1721
|
title: "List CKAN Dataset Resources",
|
|
@@ -1937,8 +1939,8 @@ function compactOrganizationShow(result, serverUrl) {
|
|
|
1937
1939
|
}))
|
|
1938
1940
|
};
|
|
1939
1941
|
}
|
|
1940
|
-
function registerOrganizationTools(
|
|
1941
|
-
|
|
1942
|
+
function registerOrganizationTools(server) {
|
|
1943
|
+
server.registerTool(
|
|
1942
1944
|
"ckan_organization_list",
|
|
1943
1945
|
{
|
|
1944
1946
|
title: "List CKAN Organizations",
|
|
@@ -2132,7 +2134,7 @@ Note: organization_list returned 500; using package_search facets.
|
|
|
2132
2134
|
}
|
|
2133
2135
|
}
|
|
2134
2136
|
);
|
|
2135
|
-
|
|
2137
|
+
server.registerTool(
|
|
2136
2138
|
"ckan_organization_show",
|
|
2137
2139
|
{
|
|
2138
2140
|
title: "Show CKAN Organization Details",
|
|
@@ -2196,7 +2198,7 @@ Typical workflow: ckan_organization_show \u2192 ckan_package_show (inspect a dat
|
|
|
2196
2198
|
}
|
|
2197
2199
|
}
|
|
2198
2200
|
);
|
|
2199
|
-
|
|
2201
|
+
server.registerTool(
|
|
2200
2202
|
"ckan_organization_search",
|
|
2201
2203
|
{
|
|
2202
2204
|
title: "Search CKAN Organizations by Name",
|
|
@@ -2430,8 +2432,8 @@ function compactDatastoreResult(result) {
|
|
|
2430
2432
|
total: result.total ?? 0
|
|
2431
2433
|
};
|
|
2432
2434
|
}
|
|
2433
|
-
function registerDatastoreTools(
|
|
2434
|
-
|
|
2435
|
+
function registerDatastoreTools(server) {
|
|
2436
|
+
server.registerTool(
|
|
2435
2437
|
"ckan_datastore_search",
|
|
2436
2438
|
{
|
|
2437
2439
|
title: "Search CKAN DataStore",
|
|
@@ -2522,7 +2524,7 @@ Typical workflow: ckan_package_search \u2192 ckan_package_show (find resource_id
|
|
|
2522
2524
|
}
|
|
2523
2525
|
}
|
|
2524
2526
|
);
|
|
2525
|
-
|
|
2527
|
+
server.registerTool(
|
|
2526
2528
|
"ckan_datastore_search_sql",
|
|
2527
2529
|
{
|
|
2528
2530
|
title: "Search CKAN DataStore with SQL",
|
|
@@ -2605,8 +2607,8 @@ function formatStatusMarkdown(result, serverUrl, hvdCount) {
|
|
|
2605
2607
|
**Site URL**: ${result.site_url || "N/A"}
|
|
2606
2608
|
` + sparqlLine + hvdLine;
|
|
2607
2609
|
}
|
|
2608
|
-
function registerStatusTools(
|
|
2609
|
-
|
|
2610
|
+
function registerStatusTools(server) {
|
|
2611
|
+
server.registerTool(
|
|
2610
2612
|
"ckan_status_show",
|
|
2611
2613
|
{
|
|
2612
2614
|
title: "Check CKAN Server Status",
|
|
@@ -2691,8 +2693,8 @@ function normalizeTagFacets(result) {
|
|
|
2691
2693
|
}
|
|
2692
2694
|
return [];
|
|
2693
2695
|
}
|
|
2694
|
-
function registerTagTools(
|
|
2695
|
-
|
|
2696
|
+
function registerTagTools(server) {
|
|
2697
|
+
server.registerTool(
|
|
2696
2698
|
"ckan_tag_list",
|
|
2697
2699
|
{
|
|
2698
2700
|
title: "List CKAN Tags",
|
|
@@ -2912,8 +2914,8 @@ function compactGroupShow(result) {
|
|
|
2912
2914
|
}))
|
|
2913
2915
|
};
|
|
2914
2916
|
}
|
|
2915
|
-
function registerGroupTools(
|
|
2916
|
-
|
|
2917
|
+
function registerGroupTools(server) {
|
|
2918
|
+
server.registerTool(
|
|
2917
2919
|
"ckan_group_list",
|
|
2918
2920
|
{
|
|
2919
2921
|
title: "List CKAN Groups",
|
|
@@ -3039,7 +3041,7 @@ Typical workflow: ckan_group_list \u2192 ckan_group_show (inspect one) \u2192 ck
|
|
|
3039
3041
|
}
|
|
3040
3042
|
}
|
|
3041
3043
|
);
|
|
3042
|
-
|
|
3044
|
+
server.registerTool(
|
|
3043
3045
|
"ckan_group_show",
|
|
3044
3046
|
{
|
|
3045
3047
|
title: "Show CKAN Group Details",
|
|
@@ -3100,7 +3102,7 @@ Typical workflow: ckan_group_show \u2192 ckan_package_show (inspect a dataset) \
|
|
|
3100
3102
|
}
|
|
3101
3103
|
}
|
|
3102
3104
|
);
|
|
3103
|
-
|
|
3105
|
+
server.registerTool(
|
|
3104
3106
|
"ckan_group_search",
|
|
3105
3107
|
{
|
|
3106
3108
|
title: "Search CKAN Groups by Name",
|
|
@@ -3828,8 +3830,8 @@ function formatQualityDetailsMarkdown(data, datasetId) {
|
|
|
3828
3830
|
lines.push(`Metrics endpoint: ${breakdown.metricsUrl || `${MQA_METRICS_BASE}/${portalId}/metrics`}`);
|
|
3829
3831
|
return lines.join("\n");
|
|
3830
3832
|
}
|
|
3831
|
-
function registerQualityTools(
|
|
3832
|
-
|
|
3833
|
+
function registerQualityTools(server) {
|
|
3834
|
+
server.registerTool(
|
|
3833
3835
|
"ckan_get_mqa_quality",
|
|
3834
3836
|
{
|
|
3835
3837
|
title: "Get MQA Quality Score",
|
|
@@ -3878,7 +3880,7 @@ The MQA (Metadata Quality Assurance) system is operated by data.europa.eu and on
|
|
|
3878
3880
|
}
|
|
3879
3881
|
}
|
|
3880
3882
|
);
|
|
3881
|
-
|
|
3883
|
+
server.registerTool(
|
|
3882
3884
|
"ckan_get_mqa_quality_details",
|
|
3883
3885
|
{
|
|
3884
3886
|
title: "Get MQA Quality Details",
|
|
@@ -4013,8 +4015,8 @@ function formatAnalyzeDatasetsMarkdown(serverUrl, query, total, datasets) {
|
|
|
4013
4015
|
}
|
|
4014
4016
|
return md;
|
|
4015
4017
|
}
|
|
4016
|
-
function registerAnalyzeTools(
|
|
4017
|
-
|
|
4018
|
+
function registerAnalyzeTools(server) {
|
|
4019
|
+
server.registerTool(
|
|
4018
4020
|
"ckan_analyze_datasets",
|
|
4019
4021
|
{
|
|
4020
4022
|
title: "Analyze CKAN Datasets and DataStore Schema",
|
|
@@ -4140,8 +4142,8 @@ function formatCatalogStatsMarkdown(serverUrl, total, facets) {
|
|
|
4140
4142
|
}
|
|
4141
4143
|
return md;
|
|
4142
4144
|
}
|
|
4143
|
-
function registerCatalogStatsTools(
|
|
4144
|
-
|
|
4145
|
+
function registerCatalogStatsTools(server) {
|
|
4146
|
+
server.registerTool(
|
|
4145
4147
|
"ckan_catalog_stats",
|
|
4146
4148
|
{
|
|
4147
4149
|
title: "Get CKAN Portal Statistics",
|
|
@@ -4309,8 +4311,8 @@ function formatSparqlJson(data) {
|
|
|
4309
4311
|
});
|
|
4310
4312
|
return { count: rows.length, columns: vars, rows };
|
|
4311
4313
|
}
|
|
4312
|
-
function registerSparqlTools(
|
|
4313
|
-
|
|
4314
|
+
function registerSparqlTools(server) {
|
|
4315
|
+
server.registerTool(
|
|
4314
4316
|
"sparql_query",
|
|
4315
4317
|
{
|
|
4316
4318
|
title: "SPARQL Query",
|
|
@@ -4433,8 +4435,8 @@ ${rows}
|
|
|
4433
4435
|
---
|
|
4434
4436
|
\u{1F4A1} Use the portal URL as \`server_url\` in any CKAN tool.`;
|
|
4435
4437
|
}
|
|
4436
|
-
function registerPortalDiscoveryTools(
|
|
4437
|
-
|
|
4438
|
+
function registerPortalDiscoveryTools(server) {
|
|
4439
|
+
server.registerTool(
|
|
4438
4440
|
"ckan_find_portals",
|
|
4439
4441
|
{
|
|
4440
4442
|
title: "Find CKAN Portals",
|
|
@@ -4533,13 +4535,13 @@ function parseCkanUri(uri) {
|
|
|
4533
4535
|
if (!type || !id) {
|
|
4534
4536
|
throw new Error("Invalid ckan:// URI: missing type or id");
|
|
4535
4537
|
}
|
|
4536
|
-
const
|
|
4537
|
-
return { server
|
|
4538
|
+
const server = getPortalApiUrlForHostname(hostname) || `https://${hostname}`;
|
|
4539
|
+
return { server, type, id };
|
|
4538
4540
|
}
|
|
4539
4541
|
|
|
4540
4542
|
// src/resources/dataset.ts
|
|
4541
|
-
function registerDatasetResource(
|
|
4542
|
-
|
|
4543
|
+
function registerDatasetResource(server) {
|
|
4544
|
+
server.registerResource(
|
|
4543
4545
|
"ckan-dataset",
|
|
4544
4546
|
new ResourceTemplate("ckan://{server}/dataset/{id}", { list: void 0 }),
|
|
4545
4547
|
{
|
|
@@ -4582,8 +4584,8 @@ function registerDatasetResource(server2) {
|
|
|
4582
4584
|
|
|
4583
4585
|
// src/resources/resource.ts
|
|
4584
4586
|
import { ResourceTemplate as ResourceTemplate2 } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4585
|
-
function registerResourceResource(
|
|
4586
|
-
|
|
4587
|
+
function registerResourceResource(server) {
|
|
4588
|
+
server.registerResource(
|
|
4587
4589
|
"ckan-resource",
|
|
4588
4590
|
new ResourceTemplate2("ckan://{server}/resource/{id}", { list: void 0 }),
|
|
4589
4591
|
{
|
|
@@ -4626,8 +4628,8 @@ function registerResourceResource(server2) {
|
|
|
4626
4628
|
|
|
4627
4629
|
// src/resources/organization.ts
|
|
4628
4630
|
import { ResourceTemplate as ResourceTemplate3 } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4629
|
-
function registerOrganizationResource(
|
|
4630
|
-
|
|
4631
|
+
function registerOrganizationResource(server) {
|
|
4632
|
+
server.registerResource(
|
|
4631
4633
|
"ckan-organization",
|
|
4632
4634
|
new ResourceTemplate3("ckan://{server}/organization/{name}", {
|
|
4633
4635
|
list: void 0
|
|
@@ -4691,8 +4693,8 @@ var buildFormatFilter = (rawFormat) => {
|
|
|
4691
4693
|
);
|
|
4692
4694
|
return `(${clauses.join(" OR ")})`;
|
|
4693
4695
|
};
|
|
4694
|
-
var registerDatasetFilterResource = (
|
|
4695
|
-
|
|
4696
|
+
var registerDatasetFilterResource = (server, config) => {
|
|
4697
|
+
server.registerResource(
|
|
4696
4698
|
config.name,
|
|
4697
4699
|
new ResourceTemplate4(config.template, { list: void 0 }),
|
|
4698
4700
|
{
|
|
@@ -4733,8 +4735,8 @@ var registerDatasetFilterResource = (server2, config) => {
|
|
|
4733
4735
|
}
|
|
4734
4736
|
);
|
|
4735
4737
|
};
|
|
4736
|
-
function registerGroupDatasetsResource(
|
|
4737
|
-
registerDatasetFilterResource(
|
|
4738
|
+
function registerGroupDatasetsResource(server) {
|
|
4739
|
+
registerDatasetFilterResource(server, {
|
|
4738
4740
|
name: "ckan-group-datasets",
|
|
4739
4741
|
template: "ckan://{server}/group/{name}/datasets",
|
|
4740
4742
|
title: "CKAN Group Datasets",
|
|
@@ -4742,8 +4744,8 @@ function registerGroupDatasetsResource(server2) {
|
|
|
4742
4744
|
buildFq: (variables) => `groups:"${escapeSolrTerm(variables.name)}"`
|
|
4743
4745
|
});
|
|
4744
4746
|
}
|
|
4745
|
-
function registerOrganizationDatasetsResource(
|
|
4746
|
-
registerDatasetFilterResource(
|
|
4747
|
+
function registerOrganizationDatasetsResource(server) {
|
|
4748
|
+
registerDatasetFilterResource(server, {
|
|
4747
4749
|
name: "ckan-organization-datasets",
|
|
4748
4750
|
template: "ckan://{server}/organization/{name}/datasets",
|
|
4749
4751
|
title: "CKAN Organization Datasets",
|
|
@@ -4751,8 +4753,8 @@ function registerOrganizationDatasetsResource(server2) {
|
|
|
4751
4753
|
buildFq: (variables) => `organization:"${escapeSolrTerm(variables.name)}"`
|
|
4752
4754
|
});
|
|
4753
4755
|
}
|
|
4754
|
-
function registerTagDatasetsResource(
|
|
4755
|
-
registerDatasetFilterResource(
|
|
4756
|
+
function registerTagDatasetsResource(server) {
|
|
4757
|
+
registerDatasetFilterResource(server, {
|
|
4756
4758
|
name: "ckan-tag-datasets",
|
|
4757
4759
|
template: "ckan://{server}/tag/{name}/datasets",
|
|
4758
4760
|
title: "CKAN Tag Datasets",
|
|
@@ -4760,8 +4762,8 @@ function registerTagDatasetsResource(server2) {
|
|
|
4760
4762
|
buildFq: (variables) => `tags:"${escapeSolrTerm(variables.name)}"`
|
|
4761
4763
|
});
|
|
4762
4764
|
}
|
|
4763
|
-
function registerFormatDatasetsResource(
|
|
4764
|
-
registerDatasetFilterResource(
|
|
4765
|
+
function registerFormatDatasetsResource(server) {
|
|
4766
|
+
registerDatasetFilterResource(server, {
|
|
4765
4767
|
name: "ckan-format-datasets",
|
|
4766
4768
|
template: "ckan://{server}/format/{format}/datasets",
|
|
4767
4769
|
title: "CKAN Format Datasets",
|
|
@@ -4771,14 +4773,14 @@ function registerFormatDatasetsResource(server2) {
|
|
|
4771
4773
|
}
|
|
4772
4774
|
|
|
4773
4775
|
// src/resources/index.ts
|
|
4774
|
-
function registerAllResources(
|
|
4775
|
-
registerDatasetResource(
|
|
4776
|
-
registerResourceResource(
|
|
4777
|
-
registerOrganizationResource(
|
|
4778
|
-
registerGroupDatasetsResource(
|
|
4779
|
-
registerOrganizationDatasetsResource(
|
|
4780
|
-
registerTagDatasetsResource(
|
|
4781
|
-
registerFormatDatasetsResource(
|
|
4776
|
+
function registerAllResources(server) {
|
|
4777
|
+
registerDatasetResource(server);
|
|
4778
|
+
registerResourceResource(server);
|
|
4779
|
+
registerOrganizationResource(server);
|
|
4780
|
+
registerGroupDatasetsResource(server);
|
|
4781
|
+
registerOrganizationDatasetsResource(server);
|
|
4782
|
+
registerTagDatasetsResource(server);
|
|
4783
|
+
registerFormatDatasetsResource(server);
|
|
4782
4784
|
}
|
|
4783
4785
|
|
|
4784
4786
|
// src/prompts/theme.ts
|
|
@@ -4836,8 +4838,8 @@ ckan_package_search({
|
|
|
4836
4838
|
Note: metadata_modified is a CKAN record timestamp (publish time on source portals,
|
|
4837
4839
|
harvest time on aggregators). If the user asks for
|
|
4838
4840
|
content publication dates, prefer issued (or modified) with explicit ISO ranges.`;
|
|
4839
|
-
var registerThemePrompt = (
|
|
4840
|
-
|
|
4841
|
+
var registerThemePrompt = (server) => {
|
|
4842
|
+
server.registerPrompt(
|
|
4841
4843
|
THEME_PROMPT_NAME,
|
|
4842
4844
|
{
|
|
4843
4845
|
title: "Search datasets by theme",
|
|
@@ -4881,8 +4883,8 @@ ckan_package_search({
|
|
|
4881
4883
|
Note: metadata_modified is a CKAN record timestamp (publish time on source portals,
|
|
4882
4884
|
harvest time on aggregators). If the user asks for
|
|
4883
4885
|
content publication dates, prefer issued (or modified) with explicit ISO ranges.`;
|
|
4884
|
-
var registerOrganizationPrompt = (
|
|
4885
|
-
|
|
4886
|
+
var registerOrganizationPrompt = (server) => {
|
|
4887
|
+
server.registerPrompt(
|
|
4886
4888
|
ORGANIZATION_PROMPT_NAME,
|
|
4887
4889
|
{
|
|
4888
4890
|
title: "Search datasets by organization",
|
|
@@ -4915,8 +4917,8 @@ Tip: try uppercase (CSV/JSON) or common variants if results are sparse.
|
|
|
4915
4917
|
Note: metadata_modified is a CKAN record timestamp (publish time on source portals,
|
|
4916
4918
|
harvest time on aggregators). If the user asks for
|
|
4917
4919
|
content publication dates, prefer issued (or modified) with explicit ISO ranges.`;
|
|
4918
|
-
var registerFormatPrompt = (
|
|
4919
|
-
|
|
4920
|
+
var registerFormatPrompt = (server) => {
|
|
4921
|
+
server.registerPrompt(
|
|
4920
4922
|
FORMAT_PROMPT_NAME,
|
|
4921
4923
|
{
|
|
4922
4924
|
title: "Search datasets by resource format",
|
|
@@ -4973,8 +4975,8 @@ ckan_package_search({
|
|
|
4973
4975
|
content_recent_days: 30,
|
|
4974
4976
|
rows: ${rows}
|
|
4975
4977
|
})`;
|
|
4976
|
-
var registerRecentPrompt = (
|
|
4977
|
-
|
|
4978
|
+
var registerRecentPrompt = (server) => {
|
|
4979
|
+
server.registerPrompt(
|
|
4978
4980
|
RECENT_PROMPT_NAME,
|
|
4979
4981
|
{
|
|
4980
4982
|
title: "Find recently updated datasets",
|
|
@@ -5024,8 +5026,8 @@ ckan_datastore_search_sql({
|
|
|
5024
5026
|
server_url: "${serverUrl}",
|
|
5025
5027
|
sql: "SELECT * FROM "<resource-id>" LIMIT 10"
|
|
5026
5028
|
})`;
|
|
5027
|
-
var registerDatasetAnalysisPrompt = (
|
|
5028
|
-
|
|
5029
|
+
var registerDatasetAnalysisPrompt = (server) => {
|
|
5030
|
+
server.registerPrompt(
|
|
5029
5031
|
DATASET_ANALYSIS_PROMPT_NAME,
|
|
5030
5032
|
{
|
|
5031
5033
|
title: "Analyze a dataset",
|
|
@@ -5095,8 +5097,8 @@ Note: HVD categories are defined by EU regulation. Common ones on Italian portal
|
|
|
5095
5097
|
- Statistical: \`http://data.europa.eu/bna/c_e1da4e07\`
|
|
5096
5098
|
- Meteorological: \`http://data.europa.eu/bna/c_164e0bf5\``;
|
|
5097
5099
|
};
|
|
5098
|
-
var registerHvdPrompt = (
|
|
5099
|
-
|
|
5100
|
+
var registerHvdPrompt = (server) => {
|
|
5101
|
+
server.registerPrompt(
|
|
5100
5102
|
HVD_PROMPT_NAME,
|
|
5101
5103
|
{
|
|
5102
5104
|
title: "Search High-Value Datasets (HVD)",
|
|
@@ -5114,61 +5116,63 @@ var registerHvdPrompt = (server2) => {
|
|
|
5114
5116
|
};
|
|
5115
5117
|
|
|
5116
5118
|
// src/prompts/index.ts
|
|
5117
|
-
var registerAllPrompts = (
|
|
5118
|
-
registerThemePrompt(
|
|
5119
|
-
registerOrganizationPrompt(
|
|
5120
|
-
registerFormatPrompt(
|
|
5121
|
-
registerRecentPrompt(
|
|
5122
|
-
registerDatasetAnalysisPrompt(
|
|
5123
|
-
registerHvdPrompt(
|
|
5119
|
+
var registerAllPrompts = (server) => {
|
|
5120
|
+
registerThemePrompt(server);
|
|
5121
|
+
registerOrganizationPrompt(server);
|
|
5122
|
+
registerFormatPrompt(server);
|
|
5123
|
+
registerRecentPrompt(server);
|
|
5124
|
+
registerDatasetAnalysisPrompt(server);
|
|
5125
|
+
registerHvdPrompt(server);
|
|
5124
5126
|
};
|
|
5125
5127
|
|
|
5126
5128
|
// src/server.ts
|
|
5127
5129
|
function createServer() {
|
|
5128
5130
|
return new McpServer({
|
|
5129
5131
|
name: "ckan-mcp-server",
|
|
5130
|
-
version: "0.4.
|
|
5132
|
+
version: "0.4.92"
|
|
5131
5133
|
});
|
|
5132
5134
|
}
|
|
5133
|
-
function registerAll(
|
|
5134
|
-
registerPackageTools(
|
|
5135
|
-
registerOrganizationTools(
|
|
5136
|
-
registerDatastoreTools(
|
|
5137
|
-
registerStatusTools(
|
|
5138
|
-
registerTagTools(
|
|
5139
|
-
registerGroupTools(
|
|
5140
|
-
registerQualityTools(
|
|
5141
|
-
registerAnalyzeTools(
|
|
5142
|
-
registerCatalogStatsTools(
|
|
5143
|
-
registerSparqlTools(
|
|
5144
|
-
registerPortalDiscoveryTools(
|
|
5145
|
-
registerAllResources(
|
|
5146
|
-
registerAllPrompts(
|
|
5135
|
+
function registerAll(server) {
|
|
5136
|
+
registerPackageTools(server);
|
|
5137
|
+
registerOrganizationTools(server);
|
|
5138
|
+
registerDatastoreTools(server);
|
|
5139
|
+
registerStatusTools(server);
|
|
5140
|
+
registerTagTools(server);
|
|
5141
|
+
registerGroupTools(server);
|
|
5142
|
+
registerQualityTools(server);
|
|
5143
|
+
registerAnalyzeTools(server);
|
|
5144
|
+
registerCatalogStatsTools(server);
|
|
5145
|
+
registerSparqlTools(server);
|
|
5146
|
+
registerPortalDiscoveryTools(server);
|
|
5147
|
+
registerAllResources(server);
|
|
5148
|
+
registerAllPrompts(server);
|
|
5147
5149
|
}
|
|
5148
5150
|
|
|
5149
5151
|
// src/transport/stdio.ts
|
|
5150
5152
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5151
|
-
async function runStdio(
|
|
5153
|
+
async function runStdio(server) {
|
|
5152
5154
|
const transport2 = new StdioServerTransport();
|
|
5153
|
-
await
|
|
5155
|
+
await server.connect(transport2);
|
|
5154
5156
|
console.error("CKAN MCP server running on stdio");
|
|
5155
5157
|
}
|
|
5156
5158
|
|
|
5157
5159
|
// src/transport/http.ts
|
|
5158
5160
|
import express from "express";
|
|
5159
5161
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
5160
|
-
async function runHTTP(
|
|
5162
|
+
async function runHTTP() {
|
|
5161
5163
|
const app = express();
|
|
5162
5164
|
app.use(express.json());
|
|
5163
|
-
const transport2 = new StreamableHTTPServerTransport({
|
|
5164
|
-
sessionIdGenerator: void 0,
|
|
5165
|
-
enableJsonResponse: true
|
|
5166
|
-
});
|
|
5167
|
-
await server2.connect(transport2);
|
|
5168
5165
|
app.get("/.well-known/oauth-authorization-server", (_req, res) => {
|
|
5169
5166
|
res.status(404).json({ error: "authorization_not_supported", error_description: "This server does not require authentication" });
|
|
5170
5167
|
});
|
|
5171
5168
|
app.post("/mcp", async (req, res) => {
|
|
5169
|
+
const server = createServer();
|
|
5170
|
+
registerAll(server);
|
|
5171
|
+
const transport2 = new StreamableHTTPServerTransport({
|
|
5172
|
+
sessionIdGenerator: void 0,
|
|
5173
|
+
enableJsonResponse: true
|
|
5174
|
+
});
|
|
5175
|
+
await server.connect(transport2);
|
|
5172
5176
|
await transport2.handleRequest(req, res, req.body);
|
|
5173
5177
|
});
|
|
5174
5178
|
const port = parseInt(process.env.PORT || "3000");
|
|
@@ -5178,15 +5182,15 @@ async function runHTTP(server2) {
|
|
|
5178
5182
|
}
|
|
5179
5183
|
|
|
5180
5184
|
// src/index.ts
|
|
5181
|
-
var server = createServer();
|
|
5182
|
-
registerAll(server);
|
|
5183
5185
|
var transport = process.env.TRANSPORT || "stdio";
|
|
5184
5186
|
if (transport === "http") {
|
|
5185
|
-
runHTTP(
|
|
5187
|
+
runHTTP().catch((error) => {
|
|
5186
5188
|
console.error("Server error:", error);
|
|
5187
5189
|
process.exit(1);
|
|
5188
5190
|
});
|
|
5189
5191
|
} else {
|
|
5192
|
+
const server = createServer();
|
|
5193
|
+
registerAll(server);
|
|
5190
5194
|
runStdio(server).catch((error) => {
|
|
5191
5195
|
console.error("Server error:", error);
|
|
5192
5196
|
process.exit(1);
|