@opendata.cat/mcp-server 0.0.2 → 0.0.3
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/dist/api.d.ts +1 -1
- package/dist/clients/diba.d.ts +10 -0
- package/dist/clients/diba.js +29 -0
- package/dist/index.js +6 -1
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consulta l'API REST de la Diputació de Barcelona (do.diba.cat).
|
|
3
|
+
* Format: /api/dataset/{name}/format/json/pag-ini/{start}/pag-fi/{end}
|
|
4
|
+
* Filtres: /camp-filtre/{field}/valor-filtre/{value}
|
|
5
|
+
* Relacions: /camp-rel/{field}/valor-rel/{value}
|
|
6
|
+
*/
|
|
7
|
+
export declare function queryDiba(endpoint: string, filters?: Record<string, string>, search?: string, limit?: number, offset?: number): Promise<{
|
|
8
|
+
elements: Record<string, unknown>[];
|
|
9
|
+
total: number;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consulta l'API REST de la Diputació de Barcelona (do.diba.cat).
|
|
3
|
+
* Format: /api/dataset/{name}/format/json/pag-ini/{start}/pag-fi/{end}
|
|
4
|
+
* Filtres: /camp-filtre/{field}/valor-filtre/{value}
|
|
5
|
+
* Relacions: /camp-rel/{field}/valor-rel/{value}
|
|
6
|
+
*/
|
|
7
|
+
export async function queryDiba(endpoint, filters, search, limit = 20, offset = 0) {
|
|
8
|
+
let url = endpoint;
|
|
9
|
+
// Assegurar format JSON
|
|
10
|
+
if (!url.includes("/format/")) {
|
|
11
|
+
url += "/format/json";
|
|
12
|
+
}
|
|
13
|
+
// Paginació
|
|
14
|
+
url += `/pag-ini/${offset}/pag-fi/${offset + limit}`;
|
|
15
|
+
// Filtres
|
|
16
|
+
if (filters) {
|
|
17
|
+
for (const [key, value] of Object.entries(filters)) {
|
|
18
|
+
url += `/camp-filtre/${encodeURIComponent(key)}/valor-filtre/${encodeURIComponent(value)}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const resp = await fetch(url);
|
|
22
|
+
if (!resp.ok)
|
|
23
|
+
throw new Error(`Diba error ${resp.status}: ${resp.statusText}`);
|
|
24
|
+
const data = await resp.json();
|
|
25
|
+
return {
|
|
26
|
+
elements: data.elements ?? [],
|
|
27
|
+
total: data.entitats ?? 0,
|
|
28
|
+
};
|
|
29
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,10 @@ import { z } from "zod";
|
|
|
5
5
|
import { searchDatasets, getDatasetInfo, getCategories } from "./api.js";
|
|
6
6
|
import { querySocrata } from "./clients/socrata.js";
|
|
7
7
|
import { queryCkan } from "./clients/ckan.js";
|
|
8
|
+
import { queryDiba } from "./clients/diba.js";
|
|
8
9
|
const server = new McpServer({
|
|
9
10
|
name: "opendata-cat",
|
|
10
|
-
version: "0.0.
|
|
11
|
+
version: "0.0.3",
|
|
11
12
|
});
|
|
12
13
|
// Tool 1: search_datasets
|
|
13
14
|
server.tool("search_datasets", "Cerca datasets de dades obertes catalanes per text lliure. Retorna nom, descripció, portal i formats.", {
|
|
@@ -61,6 +62,10 @@ server.tool("query_dataset", "Executa una consulta contra un dataset i retorna f
|
|
|
61
62
|
if (dataset.api_type === "socrata") {
|
|
62
63
|
results = await querySocrata(dataset.api_endpoint, filters, search, limit, offset);
|
|
63
64
|
}
|
|
65
|
+
else if (dataset.api_type === "diba") {
|
|
66
|
+
const data = await queryDiba(dataset.api_endpoint, filters, search, limit, offset);
|
|
67
|
+
results = data.elements;
|
|
68
|
+
}
|
|
64
69
|
else {
|
|
65
70
|
const data = await queryCkan(dataset.api_endpoint, filters, search, limit, offset);
|
|
66
71
|
results = data.records;
|