lt-open-data-sdk 1.1.3 → 1.1.5
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/README.md +48 -0
- package/dist/cli/index.js +13 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/client/SpintaClient.d.ts +1 -0
- package/dist/client/SpintaClient.d.ts.map +1 -1
- package/dist/client/SpintaClient.js +1 -0
- package/dist/client/SpintaClient.js.map +1 -1
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +34 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/codegenTools.d.ts +8 -0
- package/dist/mcp/tools/codegenTools.d.ts.map +1 -0
- package/dist/mcp/tools/codegenTools.js +97 -0
- package/dist/mcp/tools/codegenTools.js.map +1 -0
- package/dist/mcp/tools/dataTools.d.ts +8 -0
- package/dist/mcp/tools/dataTools.d.ts.map +1 -0
- package/dist/mcp/tools/dataTools.js +171 -0
- package/dist/mcp/tools/dataTools.js.map +1 -0
- package/dist/mcp/tools/metadataTools.d.ts +8 -0
- package/dist/mcp/tools/metadataTools.d.ts.map +1 -0
- package/dist/mcp/tools/metadataTools.js +245 -0
- package/dist/mcp/tools/metadataTools.js.map +1 -0
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -397,6 +397,54 @@ The SDK handles token caching and automatic refresh.
|
|
|
397
397
|
|
|
398
398
|
---
|
|
399
399
|
|
|
400
|
+
## MCP Server (AI Agent Integration)
|
|
401
|
+
|
|
402
|
+
This SDK exposes a **Model Context Protocol (MCP)** server, allowing AI agents (like Claude Desktop, Cursor, or other MCP clients) to directly access Lithuanian Open Data.
|
|
403
|
+
|
|
404
|
+
### Setup
|
|
405
|
+
|
|
406
|
+
Add this to your MCP configuration file (`claude_desktop_config.json` or similar):
|
|
407
|
+
|
|
408
|
+
```json
|
|
409
|
+
{
|
|
410
|
+
"mcpServers": {
|
|
411
|
+
"lt-open-data": {
|
|
412
|
+
"command": "npx",
|
|
413
|
+
"args": ["-y", "lt-open-data-sdk", "--mcp"]
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Available Tools
|
|
420
|
+
|
|
421
|
+
| Tool | Description |
|
|
422
|
+
| ---------------------- | -------------------------------------------------------- |
|
|
423
|
+
| **Metadata** | |
|
|
424
|
+
| `list_namespace` | Browse dataset hierarchy (Start here!) |
|
|
425
|
+
| `search_datasets` | Find datasets by keyword (returns titles & descriptions) |
|
|
426
|
+
| `describe_model` | Get schema/fields for a dataset (auto-infers if needed) |
|
|
427
|
+
| `get_last_updated` | Check when a dataset was last modified |
|
|
428
|
+
| **Data Access** | |
|
|
429
|
+
| `query_data` | Query records with filtering, sorting, pagination |
|
|
430
|
+
| `count_records` | Count records matching a filter |
|
|
431
|
+
| `get_record` | Fetch a single record by ID |
|
|
432
|
+
| `get_sample_data` | Get a small sample to inspect data structure |
|
|
433
|
+
| **Analysis** | |
|
|
434
|
+
| `get_summary` | Get distribution histograms for numeric fields |
|
|
435
|
+
| `analyze_distribution` | Estimate field distribution via sampling (for strings) |
|
|
436
|
+
| `generate_types` | Generate TypeScript interfaces for a dataset |
|
|
437
|
+
|
|
438
|
+
### Example Agent Workflow
|
|
439
|
+
|
|
440
|
+
1. **User:** "Find datasets about population in Vilnius"
|
|
441
|
+
2. **Agent:**
|
|
442
|
+
- `search_datasets("population Vilnius")` → Finds `dataset/path`
|
|
443
|
+
- `describe_model("dataset/path")` → Sees fields `year`, `count`, `district`
|
|
444
|
+
- `query_data("dataset/path", filter="year=2024")` → Returns data
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
400
448
|
## License
|
|
401
449
|
|
|
402
450
|
MIT
|
package/dist/cli/index.js
CHANGED
|
@@ -21,12 +21,14 @@ import { SpintaClient } from '../client/SpintaClient.js';
|
|
|
21
21
|
import { crawlNamespace, fetchAllModelsMetadata } from './crawler.js';
|
|
22
22
|
import { generateDeclarationFile } from './generator.js';
|
|
23
23
|
import { modelPathToInterfaceName } from './typeMapper.js';
|
|
24
|
+
import { startMcpServer } from '../mcp/server.js';
|
|
24
25
|
function parseArgs(args) {
|
|
25
26
|
const options = {
|
|
26
27
|
namespace: '',
|
|
27
28
|
output: undefined,
|
|
28
29
|
baseUrl: 'https://get.data.gov.lt',
|
|
29
30
|
help: false,
|
|
31
|
+
mcp: false,
|
|
30
32
|
};
|
|
31
33
|
let skipNext = false;
|
|
32
34
|
for (const [index, arg] of args.entries()) {
|
|
@@ -37,6 +39,9 @@ function parseArgs(args) {
|
|
|
37
39
|
if (arg === '--help' || arg === '-h') {
|
|
38
40
|
options.help = true;
|
|
39
41
|
}
|
|
42
|
+
else if (arg === '--mcp') {
|
|
43
|
+
options.mcp = true;
|
|
44
|
+
}
|
|
40
45
|
else if (arg === '--output' || arg === '-o') {
|
|
41
46
|
const nextArg = args[index + 1];
|
|
42
47
|
if (nextArg !== undefined) {
|
|
@@ -70,17 +75,24 @@ Arguments:
|
|
|
70
75
|
Options:
|
|
71
76
|
--output, -o Output file path (default: stdout)
|
|
72
77
|
--base-url Base URL for the API (default: https://get.data.gov.lt)
|
|
78
|
+
--mcp Start MCP server for AI agent integration
|
|
73
79
|
--help, -h Show this help message
|
|
74
80
|
|
|
75
81
|
Examples:
|
|
76
82
|
lt-gen datasets/gov/ivpk/adk
|
|
77
83
|
lt-gen datasets/gov/ivpk/adk -o ./types/adk.d.ts
|
|
78
|
-
lt-gen
|
|
84
|
+
lt-gen --mcp # Start MCP server for AI agents
|
|
79
85
|
`);
|
|
80
86
|
}
|
|
81
87
|
async function main() {
|
|
82
88
|
const args = process.argv.slice(2);
|
|
83
89
|
const options = parseArgs(args);
|
|
90
|
+
// Handle MCP server mode
|
|
91
|
+
if (options.mcp) {
|
|
92
|
+
console.error('🚀 Starting MCP server...');
|
|
93
|
+
await startMcpServer();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
84
96
|
if (options.help || options.namespace === '') {
|
|
85
97
|
showHelp();
|
|
86
98
|
process.exit(options.help ? 0 : 1);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpintaClient.d.ts","sourceRoot":"","sources":["../../src/client/SpintaClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EAEd,WAAW,EAEX,UAAU,EAEX,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAY/D,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAEnC,MAAM,GAAE,YAAiB;IAgBrC;;;OAGG;YACW,UAAU;IAaxB;;OAEG;YACW,OAAO;IAarB;;;;;;;;;OASG;IACG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC;IAKrE;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;IAKhC;;;;;;;;OAQG;IACG,SAAS,CAAC,CAAC,EACf,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAM7B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,MAAM,CAAC,CAAC,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,cAAc,CAAC,CAAC,GAAG,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC;IA0BpD;;;;;;;;;;OAUG;IACG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAcvE;;;;;;;;;;;;;;;OAeG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SpintaClient.d.ts","sourceRoot":"","sources":["../../src/client/SpintaClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpintaClient.js","sourceRoot":"","sources":["../../src/client/SpintaClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAYH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,mCAAmC;AACnC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AACnD,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AACnD,MAAM,cAAc,GAAsB;IACxC,eAAe;IACf,eAAe;IACf,eAAe;IACf,gBAAgB;CACR,CAAC;AAEX,MAAM,OAAO,YAAY;IACN,OAAO,CAAS;IAChB,UAAU,CAAoB;IAE/C,YAAY,SAAuB,EAAE;QACnC,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEvE,0DAA0D;QAC1D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAC9B,MAAM,CAAC,OAAO,IAAI,gBAAgB,EAClC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,MAAM,IAAI,cAAc,CAChC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,UAAU;QACtB,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC/C,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,KAAK,GAAG,EAAE;QAC/C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAI,KAAa,EAAE,EAAU;QACvC,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAmB,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,MAAM,CACV,KAAa,EACb,KAAuB;QAEvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,CACb,KAAa,EACb,KAAuB;QAEvB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,OAAO,CAAoB,IAAI,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,CAAC,MAAM,CACX,KAAa,EACb,KAAuB;QAEvB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,SAA6B,CAAC;QAElC,GAAG,CAAC;YACF,6CAA6C;YAC7C,IAAI,WAAW,GAAG,SAAS,CAAC;YAC5B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/C,WAAW,GAAG,GAAG,SAAS,GAAG,SAAS,SAAS,SAAS,IAAI,CAAC;YAC/D,CAAC;YAED,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoB,IAAI,EAAE,WAAW,CAAC,CAAC;YAE1E,kBAAkB;YAClB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC;YACb,CAAC;YAED,sBAAsB;YACtB,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC,CAAC,QAAQ,SAAS,KAAK,SAAS,EAAE;IACpC,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,CAAI,KAAa,EAAE,KAAuB;QACnD,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAEzB,oBAAoB;QACpB,IAAI,WAAW,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,WAAW,GAAG,GAAG,WAAW,GAAG,SAAS,SAAS,CAAC;QAElD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAgB,IAAI,EAAE,WAAW,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,IAAI,GAAG,IAAI,SAAS,MAAM,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAuB,IAAI,CAAC,CAAC;QAEhE,iDAAiD;QACjD,wEAAwE;QACxE,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAiB,EAAE;YAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,WAAW;gBAC3B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB;gBAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAEd,OAAO;gBACL,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"SpintaClient.js","sourceRoot":"","sources":["../../src/client/SpintaClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server for lt-open-data-sdk
|
|
3
|
+
*
|
|
4
|
+
* Exposes Lithuanian Open Data as tools for AI agents (Claude, Cursor, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create and configure the MCP server with all tools
|
|
9
|
+
*/
|
|
10
|
+
export declare function createMcpServer(): McpServer;
|
|
11
|
+
/**
|
|
12
|
+
* Start the MCP server with stdio transport
|
|
13
|
+
* Used when running via CLI: npx lt-open-data-sdk --mcp
|
|
14
|
+
*/
|
|
15
|
+
export declare function startMcpServer(): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAY3C;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server for lt-open-data-sdk
|
|
3
|
+
*
|
|
4
|
+
* Exposes Lithuanian Open Data as tools for AI agents (Claude, Cursor, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { registerDataTools } from './tools/dataTools.js';
|
|
9
|
+
import { registerMetadataTools } from './tools/metadataTools.js';
|
|
10
|
+
import { registerCodegenTools } from './tools/codegenTools.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create and configure the MCP server with all tools
|
|
13
|
+
*/
|
|
14
|
+
export function createMcpServer() {
|
|
15
|
+
const server = new McpServer({
|
|
16
|
+
name: 'lt-open-data',
|
|
17
|
+
version: '1.0.0',
|
|
18
|
+
});
|
|
19
|
+
// Register all tool groups
|
|
20
|
+
registerDataTools(server);
|
|
21
|
+
registerMetadataTools(server);
|
|
22
|
+
registerCodegenTools(server);
|
|
23
|
+
return server;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Start the MCP server with stdio transport
|
|
27
|
+
* Used when running via CLI: npx lt-open-data-sdk --mcp
|
|
28
|
+
*/
|
|
29
|
+
export async function startMcpServer() {
|
|
30
|
+
const server = createMcpServer();
|
|
31
|
+
const transport = new StdioServerTransport();
|
|
32
|
+
await server.connect(transport);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generation tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript interfaces from dataset schemas.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
export declare function registerCodegenTools(server: McpServer): void;
|
|
8
|
+
//# sourceMappingURL=codegenTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegenTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/codegenTools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwE5D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generation tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript interfaces from dataset schemas.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { SpintaClient } from '../../client/SpintaClient.js';
|
|
8
|
+
import { fetchModelMetadata } from '../../cli/crawler.js';
|
|
9
|
+
const client = new SpintaClient();
|
|
10
|
+
export function registerCodegenTools(server) {
|
|
11
|
+
// generate_types - Generate TypeScript interfaces from actual data
|
|
12
|
+
server.registerTool('generate_types', {
|
|
13
|
+
description: 'Generate TypeScript interfaces for a dataset. ' +
|
|
14
|
+
'Infers types from actual data samples, not just metadata. ' +
|
|
15
|
+
'Returns .d.ts content ready to use in TypeScript projects.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
namespace: z.string().describe('Namespace or model path'),
|
|
18
|
+
recursive: z.boolean().default(false).describe('Include nested namespaces (slower)'),
|
|
19
|
+
},
|
|
20
|
+
}, async ({ namespace, recursive }) => {
|
|
21
|
+
// Discover models in namespace
|
|
22
|
+
const models = recursive
|
|
23
|
+
? await client.discoverModels(namespace)
|
|
24
|
+
: [{ path: namespace, title: undefined }];
|
|
25
|
+
if (models.length === 0) {
|
|
26
|
+
return { content: [{ type: 'text', text: 'No models found in this namespace.' }] };
|
|
27
|
+
}
|
|
28
|
+
// Limit to avoid timeout
|
|
29
|
+
const toProcess = models.slice(0, 5);
|
|
30
|
+
const interfaces = [];
|
|
31
|
+
const errors = [];
|
|
32
|
+
for (const model of toProcess) {
|
|
33
|
+
try {
|
|
34
|
+
const metadata = await fetchModelMetadata(client, model.path);
|
|
35
|
+
if (metadata.properties.length === 0) {
|
|
36
|
+
errors.push(`${model.path}: no fields found`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
// Generate interface
|
|
40
|
+
const name = model.path.split('/').pop() ?? 'Unknown';
|
|
41
|
+
const fields = metadata.properties.map(p => {
|
|
42
|
+
const tsType = mapToTsType(p.type);
|
|
43
|
+
return ` ${p.name}?: ${tsType};`;
|
|
44
|
+
});
|
|
45
|
+
interfaces.push([
|
|
46
|
+
`/** ${model.path} */`,
|
|
47
|
+
`export interface ${name} {`,
|
|
48
|
+
' _id: string;',
|
|
49
|
+
...fields,
|
|
50
|
+
'}'
|
|
51
|
+
].join('\n'));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
errors.push(`${model.path}: fetch failed`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (interfaces.length === 0) {
|
|
58
|
+
return { content: [{ type: 'text', text: 'Could not generate interfaces. ' + errors.join(', ') }] };
|
|
59
|
+
}
|
|
60
|
+
let result = interfaces.join('\n\n');
|
|
61
|
+
if (models.length > 5) {
|
|
62
|
+
result += `\n\n// Note: Only first 5 of ${String(models.length)} models shown.`;
|
|
63
|
+
}
|
|
64
|
+
if (errors.length > 0) {
|
|
65
|
+
result += `\n\n// Errors: ${errors.join(', ')}`;
|
|
66
|
+
}
|
|
67
|
+
return { content: [{ type: 'text', text: result }] };
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Map inferred type to TypeScript type
|
|
72
|
+
*/
|
|
73
|
+
function mapToTsType(type) {
|
|
74
|
+
switch (type) {
|
|
75
|
+
case 'string':
|
|
76
|
+
case 'text':
|
|
77
|
+
case 'url':
|
|
78
|
+
return 'string';
|
|
79
|
+
case 'integer':
|
|
80
|
+
case 'number':
|
|
81
|
+
return 'number';
|
|
82
|
+
case 'boolean':
|
|
83
|
+
return 'boolean';
|
|
84
|
+
case 'date':
|
|
85
|
+
case 'datetime':
|
|
86
|
+
return 'string'; // ISO date string
|
|
87
|
+
case 'ref':
|
|
88
|
+
return '{ _id: string }';
|
|
89
|
+
case 'geometry':
|
|
90
|
+
return 'string'; // WKT
|
|
91
|
+
case 'file':
|
|
92
|
+
return '{ _id: string; _content_type?: string }';
|
|
93
|
+
default:
|
|
94
|
+
return 'unknown';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=codegenTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegenTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/codegenTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data access tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Core tools for querying Lithuanian open data.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
export declare function registerDataTools(server: McpServer): void;
|
|
8
|
+
//# sourceMappingURL=dataTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/dataTools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0FzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyGzD"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data access tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Core tools for querying Lithuanian open data.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { SpintaClient } from '../../client/SpintaClient.js';
|
|
8
|
+
import { QueryBuilder } from '../../builder/QueryBuilder.js';
|
|
9
|
+
const client = new SpintaClient();
|
|
10
|
+
/**
|
|
11
|
+
* Parse a simple filter string into QueryBuilder operations
|
|
12
|
+
* Returns error message if filter is invalid
|
|
13
|
+
*/
|
|
14
|
+
function parseFilter(query, filterStr) {
|
|
15
|
+
// Handle contains
|
|
16
|
+
const containsMatch = /^(\w+)\.contains\("(.+)"\)$/.exec(filterStr);
|
|
17
|
+
if (containsMatch !== null) {
|
|
18
|
+
const field = containsMatch[1];
|
|
19
|
+
const value = containsMatch[2];
|
|
20
|
+
if (field !== undefined && value !== undefined) {
|
|
21
|
+
return { query: query.filter(f => f.field(field).contains(value)) };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Handle startswith
|
|
25
|
+
const startsMatch = /^(\w+)\.startswith\("(.+)"\)$/.exec(filterStr);
|
|
26
|
+
if (startsMatch !== null) {
|
|
27
|
+
const field = startsMatch[1];
|
|
28
|
+
const value = startsMatch[2];
|
|
29
|
+
if (field !== undefined && value !== undefined) {
|
|
30
|
+
return { query: query.filter(f => f.field(field).startswith(value)) };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Handle comparison operators
|
|
34
|
+
const compMatch = /^(\w+)(>=|<=|>|<|!=|=)(.+)$/.exec(filterStr);
|
|
35
|
+
if (compMatch !== null) {
|
|
36
|
+
const field = compMatch[1];
|
|
37
|
+
const op = compMatch[2];
|
|
38
|
+
const rawValue = compMatch[3];
|
|
39
|
+
if (field === undefined || op === undefined || rawValue === undefined) {
|
|
40
|
+
return { query, error: `Could not parse filter "${filterStr}"` };
|
|
41
|
+
}
|
|
42
|
+
// Parse value
|
|
43
|
+
let value;
|
|
44
|
+
if (rawValue.startsWith('"') && rawValue.endsWith('"')) {
|
|
45
|
+
value = rawValue.slice(1, -1);
|
|
46
|
+
}
|
|
47
|
+
else if (!isNaN(Number(rawValue))) {
|
|
48
|
+
value = Number(rawValue);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return {
|
|
52
|
+
query,
|
|
53
|
+
error: `Invalid filter value "${rawValue}". Use quotes for strings: ${field}${op}"${rawValue}"`
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
query: query.filter(f => {
|
|
58
|
+
const fieldFilter = f.field(field);
|
|
59
|
+
switch (op) {
|
|
60
|
+
case '=': return fieldFilter.eq(value);
|
|
61
|
+
case '!=': return fieldFilter.ne(value);
|
|
62
|
+
case '>': return fieldFilter.gt(value);
|
|
63
|
+
case '>=': return fieldFilter.ge(value);
|
|
64
|
+
case '<': return fieldFilter.lt(value);
|
|
65
|
+
case '<=': return fieldFilter.le(value);
|
|
66
|
+
default: return fieldFilter.eq(value);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
query,
|
|
73
|
+
error: `Could not parse filter "${filterStr}". Examples: field=123, field>"text", field.contains("text")`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Strip Spinta metadata from records for cleaner output
|
|
78
|
+
*/
|
|
79
|
+
function compactRecord(record) {
|
|
80
|
+
const result = {};
|
|
81
|
+
for (const [key, value] of Object.entries(record)) {
|
|
82
|
+
if (key === '_id' || !key.startsWith('_')) {
|
|
83
|
+
result[key] = value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
export function registerDataTools(server) {
|
|
89
|
+
// query_data - Main query tool
|
|
90
|
+
server.registerTool('query_data', {
|
|
91
|
+
description: 'Query a Lithuanian open data dataset with filtering, sorting, and pagination. ' +
|
|
92
|
+
'IMPORTANT: First use describe_model to see available fields. ' +
|
|
93
|
+
'Filter syntax: field=value, field>100, field.contains("text"). ' +
|
|
94
|
+
'Sort: field or -field for descending. ' +
|
|
95
|
+
'Example: query_data({ model: "datasets/gov/rc/ar/savivaldybe/Savivaldybe", filter: "sav_kodas>50", limit: 5 })',
|
|
96
|
+
inputSchema: {
|
|
97
|
+
model: z.string().describe('Full dataset path like "datasets/gov/rc/ar/savivaldybe/Savivaldybe"'),
|
|
98
|
+
filter: z.string().optional().describe('Filter: "population>50000" or "name.contains(\\"Vilnius\\")"'),
|
|
99
|
+
sort: z.string().optional().describe('Sort field, prefix with - for descending'),
|
|
100
|
+
limit: z.number().default(20).describe('Max records (default 20, max 1000)'),
|
|
101
|
+
compact: z.boolean().default(true).describe('Strip metadata fields for cleaner output'),
|
|
102
|
+
},
|
|
103
|
+
}, async ({ model, filter, sort, limit, compact }) => {
|
|
104
|
+
let query = new QueryBuilder().limit(Math.min(limit, 1000));
|
|
105
|
+
if (filter !== undefined && filter !== '') {
|
|
106
|
+
const result = parseFilter(query, filter);
|
|
107
|
+
if (result.error !== undefined) {
|
|
108
|
+
return { content: [{ type: 'text', text: `Filter error: ${result.error}` }] };
|
|
109
|
+
}
|
|
110
|
+
query = result.query;
|
|
111
|
+
}
|
|
112
|
+
if (sort !== undefined && sort !== '') {
|
|
113
|
+
if (sort.startsWith('-')) {
|
|
114
|
+
query = query.sortDesc(sort.slice(1));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
query = query.sort(sort);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const data = await client.getAll(model, query);
|
|
121
|
+
const output = compact ? data.map(r => compactRecord(r)) : data;
|
|
122
|
+
return { content: [{ type: 'text', text: JSON.stringify(output, null, 2) }] };
|
|
123
|
+
});
|
|
124
|
+
// get_record - Fetch single record
|
|
125
|
+
server.registerTool('get_record', {
|
|
126
|
+
description: 'Fetch a single record by its ID. Use _id value from query_data results.',
|
|
127
|
+
inputSchema: {
|
|
128
|
+
model: z.string().describe('Full dataset path'),
|
|
129
|
+
id: z.string().describe('Record ID (_id field value)'),
|
|
130
|
+
compact: z.boolean().default(true).describe('Strip metadata fields'),
|
|
131
|
+
},
|
|
132
|
+
}, async ({ model, id, compact }) => {
|
|
133
|
+
const record = await client.getOne(model, id);
|
|
134
|
+
const output = compact ? compactRecord(record) : record;
|
|
135
|
+
return { content: [{ type: 'text', text: JSON.stringify(output, null, 2) }] };
|
|
136
|
+
});
|
|
137
|
+
// count_records - Count matching records
|
|
138
|
+
server.registerTool('count_records', {
|
|
139
|
+
description: 'Count records in a dataset, optionally with a filter. Fast way to check dataset size.',
|
|
140
|
+
inputSchema: {
|
|
141
|
+
model: z.string().describe('Full dataset path'),
|
|
142
|
+
filter: z.string().optional().describe('Optional filter expression'),
|
|
143
|
+
},
|
|
144
|
+
}, async ({ model, filter }) => {
|
|
145
|
+
let query = new QueryBuilder();
|
|
146
|
+
if (filter !== undefined && filter !== '') {
|
|
147
|
+
const result = parseFilter(query, filter);
|
|
148
|
+
if (result.error !== undefined) {
|
|
149
|
+
return { content: [{ type: 'text', text: `Filter error: ${result.error}` }] };
|
|
150
|
+
}
|
|
151
|
+
query = result.query;
|
|
152
|
+
}
|
|
153
|
+
const count = await client.count(model, query);
|
|
154
|
+
return { content: [{ type: 'text', text: `Total records: ${String(count)}` }] };
|
|
155
|
+
});
|
|
156
|
+
// get_sample_data - Get sample from dataset
|
|
157
|
+
server.registerTool('get_sample_data', {
|
|
158
|
+
description: 'Get a sample of records from a dataset. Useful for understanding data structure when describe_model is not enough.',
|
|
159
|
+
inputSchema: {
|
|
160
|
+
model: z.string().describe('Full dataset path'),
|
|
161
|
+
count: z.number().default(10).describe('Number of sample records (max 100)'),
|
|
162
|
+
},
|
|
163
|
+
}, async ({ model, count }) => {
|
|
164
|
+
const sampleSize = Math.min(count, 100);
|
|
165
|
+
const query = new QueryBuilder().limit(sampleSize);
|
|
166
|
+
const data = await client.getAll(model, query);
|
|
167
|
+
const output = data.map(r => compactRecord(r));
|
|
168
|
+
return { content: [{ type: 'text', text: JSON.stringify(output, null, 2) }] };
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=dataTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/dataTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Tools for discovering and understanding datasets before querying.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
export declare function registerMetadataTools(server: McpServer): void;
|
|
8
|
+
//# sourceMappingURL=metadataTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/metadataTools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoS7D"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Tools for discovering and understanding datasets before querying.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { SpintaClient } from '../../client/SpintaClient.js';
|
|
8
|
+
import { fetchModelMetadata } from '../../cli/crawler.js';
|
|
9
|
+
import { QueryBuilder } from '../../builder/QueryBuilder.js';
|
|
10
|
+
const client = new SpintaClient();
|
|
11
|
+
export function registerMetadataTools(server) {
|
|
12
|
+
// list_namespace - Browse dataset hierarchy (ENTRY POINT)
|
|
13
|
+
server.registerTool('list_namespace', {
|
|
14
|
+
description: 'START HERE: List namespaces and datasets within a path. ' +
|
|
15
|
+
'Begin with "datasets/gov" to see all government data providers. ' +
|
|
16
|
+
'Drill down through namespaces until you find a "model" (actual dataset). ' +
|
|
17
|
+
'Example flow: list_namespace("datasets/gov") → list_namespace("datasets/gov/rc") → find models',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
namespace: z.string().default('datasets/gov').describe('Namespace path. Start with "datasets/gov"'),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ namespace }) => {
|
|
22
|
+
const items = await client.listNamespace(namespace);
|
|
23
|
+
// Format with titles and descriptions for better context
|
|
24
|
+
const lines = items.map(item => {
|
|
25
|
+
const typeLabel = item._type === 'ns' ? '📁' : '📊';
|
|
26
|
+
const title = item.title !== undefined && item.title !== '' ? ` - ${item.title}` : '';
|
|
27
|
+
const desc = item.description !== undefined && item.description !== ''
|
|
28
|
+
? `\n ${item.description}`
|
|
29
|
+
: '';
|
|
30
|
+
return `${typeLabel} ${item._id}${title}${desc}`;
|
|
31
|
+
});
|
|
32
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
33
|
+
});
|
|
34
|
+
// search_datasets - Find datasets by keyword
|
|
35
|
+
server.registerTool('search_datasets', {
|
|
36
|
+
description: 'Search for datasets by keyword. Returns paths with titles and descriptions. ' +
|
|
37
|
+
'Use this to find relevant datasets before querying. ' +
|
|
38
|
+
'After finding a dataset, use describe_model to see its fields.',
|
|
39
|
+
inputSchema: {
|
|
40
|
+
query: z.string().describe('Search keyword (matches path, title, or description)'),
|
|
41
|
+
namespace: z.string().default('datasets/gov').describe('Starting namespace'),
|
|
42
|
+
max_results: z.number().default(20).describe('Maximum results'),
|
|
43
|
+
},
|
|
44
|
+
}, async ({ query, namespace, max_results }) => {
|
|
45
|
+
const models = await client.discoverModels(namespace);
|
|
46
|
+
const queryLower = query.toLowerCase();
|
|
47
|
+
const matches = models
|
|
48
|
+
.filter(m => m.path.toLowerCase().includes(queryLower) ||
|
|
49
|
+
(m.title?.toLowerCase().includes(queryLower) ?? false))
|
|
50
|
+
.slice(0, max_results);
|
|
51
|
+
if (matches.length === 0) {
|
|
52
|
+
return { content: [{ type: 'text', text: 'No matching datasets found.' }] };
|
|
53
|
+
}
|
|
54
|
+
const lines = matches.map(m => {
|
|
55
|
+
const title = m.title ?? '(no title)';
|
|
56
|
+
return `${m.path}\n → ${title}`;
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
content: [{
|
|
60
|
+
type: 'text',
|
|
61
|
+
text: `Found ${String(matches.length)} datasets:\n\n${lines.join('\n\n')}`
|
|
62
|
+
}]
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
// describe_model - Get schema with auto-fallback to sampling
|
|
66
|
+
server.registerTool('describe_model', {
|
|
67
|
+
description: 'IMPORTANT: Use this before query_data to understand the schema. ' +
|
|
68
|
+
'Returns field names and their types (string, integer, date, ref, etc). ' +
|
|
69
|
+
'This helps you write correct filters and know what data to expect.',
|
|
70
|
+
inputSchema: {
|
|
71
|
+
model: z.string().describe('Full dataset path, e.g. "datasets/gov/rc/ar/savivaldybe/Savivaldybe"'),
|
|
72
|
+
},
|
|
73
|
+
}, async ({ model }) => {
|
|
74
|
+
const metadata = await fetchModelMetadata(client, model);
|
|
75
|
+
// If no properties found from metadata, try sampling
|
|
76
|
+
if (metadata.properties.length === 0) {
|
|
77
|
+
// Fallback: sample data and infer fields
|
|
78
|
+
try {
|
|
79
|
+
const query = new QueryBuilder().limit(5);
|
|
80
|
+
const samples = await client.getAll(model, query);
|
|
81
|
+
if (samples.length === 0) {
|
|
82
|
+
return {
|
|
83
|
+
content: [{
|
|
84
|
+
type: 'text',
|
|
85
|
+
text: `Model: ${model}\n\nNo data available in this dataset.`
|
|
86
|
+
}]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Infer fields from sample
|
|
90
|
+
const fieldTypes = new Map();
|
|
91
|
+
for (const record of samples) {
|
|
92
|
+
for (const [key, value] of Object.entries(record)) {
|
|
93
|
+
if (!key.startsWith('_') && !fieldTypes.has(key)) {
|
|
94
|
+
fieldTypes.set(key, typeof value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const fields = Array.from(fieldTypes.entries())
|
|
99
|
+
.map(([name, type]) => ` - ${name}: ${type}`);
|
|
100
|
+
return {
|
|
101
|
+
content: [{
|
|
102
|
+
type: 'text',
|
|
103
|
+
text: `Model: ${model}\n\nFields (inferred from data):\n${fields.join('\n')}`
|
|
104
|
+
}]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return {
|
|
109
|
+
content: [{
|
|
110
|
+
type: 'text',
|
|
111
|
+
text: `Model: ${model}\n\nCould not determine schema or sample data.`
|
|
112
|
+
}]
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const lines = [
|
|
117
|
+
`Model: ${model}`,
|
|
118
|
+
metadata.title !== undefined && metadata.title !== '' ? `Title: ${metadata.title}` : null,
|
|
119
|
+
metadata.description !== undefined && metadata.description !== '' ? `Description: ${metadata.description}` : null,
|
|
120
|
+
'',
|
|
121
|
+
'Fields:',
|
|
122
|
+
...metadata.properties.map(p => ` - ${p.name}: ${p.type}`)
|
|
123
|
+
].filter(Boolean);
|
|
124
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
125
|
+
});
|
|
126
|
+
// get_last_updated - Check dataset freshness
|
|
127
|
+
server.registerTool('get_last_updated', {
|
|
128
|
+
description: 'Get the timestamp of when a dataset was last updated. Useful for checking data freshness.',
|
|
129
|
+
inputSchema: {
|
|
130
|
+
model: z.string().describe('Full dataset path'),
|
|
131
|
+
},
|
|
132
|
+
}, async ({ model }) => {
|
|
133
|
+
const lastUpdate = await client.getLastUpdatedAt(model);
|
|
134
|
+
if (lastUpdate !== null) {
|
|
135
|
+
const hoursAgo = Math.round((Date.now() - lastUpdate.getTime()) / 1000 / 60 / 60);
|
|
136
|
+
const daysAgo = Math.round(hoursAgo / 24);
|
|
137
|
+
const timeDesc = daysAgo > 0 ? `${String(daysAgo)} days ago` : `${String(hoursAgo)} hours ago`;
|
|
138
|
+
return {
|
|
139
|
+
content: [{
|
|
140
|
+
type: 'text',
|
|
141
|
+
text: `Last updated: ${lastUpdate.toISOString()} (${timeDesc})`
|
|
142
|
+
}],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return { content: [{ type: 'text', text: 'No update history available.' }] };
|
|
146
|
+
});
|
|
147
|
+
// get_summary - Histogram with cleaner output
|
|
148
|
+
server.registerTool('get_summary', {
|
|
149
|
+
description: 'Get a histogram/distribution for a numeric field (Server-side). Shows value ranges and counts with percentages.',
|
|
150
|
+
inputSchema: {
|
|
151
|
+
model: z.string().describe('Full dataset path'),
|
|
152
|
+
field: z.string().describe('Numeric field name to summarize'),
|
|
153
|
+
},
|
|
154
|
+
}, async ({ model, field }) => {
|
|
155
|
+
const summary = await client.getSummary(model, field);
|
|
156
|
+
if (summary.length === 0) {
|
|
157
|
+
return { content: [{ type: 'text', text: 'No summary data available.' }] };
|
|
158
|
+
}
|
|
159
|
+
const total = summary.reduce((sum, bin) => sum + bin.count, 0);
|
|
160
|
+
const nonEmpty = summary.filter(b => b.count > 0);
|
|
161
|
+
const lines = nonEmpty.map(bin => {
|
|
162
|
+
const binVal = typeof bin.bin === 'number' ? Math.round(bin.bin) : bin.bin;
|
|
163
|
+
const pct = ((bin.count / total) * 100).toFixed(1);
|
|
164
|
+
return ` ${String(binVal)}: ${String(bin.count)} (${pct}%)`;
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
content: [{
|
|
168
|
+
type: 'text',
|
|
169
|
+
text: `Distribution of "${field}" (${String(total)} total records):\n${lines.join('\n')}`
|
|
170
|
+
}],
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
// analyze_distribution - Client-side sampling for strings/categorical
|
|
174
|
+
server.registerTool('analyze_distribution', {
|
|
175
|
+
description: 'Analyze the distribution of values for a field by sampling data. ' +
|
|
176
|
+
'Use this for categorical fields (strings) to find "Top N" values, or when get_summary fails. ' +
|
|
177
|
+
'Note: Results are ESTIMATES based on a sample.',
|
|
178
|
+
inputSchema: {
|
|
179
|
+
model: z.string().describe('Full dataset path'),
|
|
180
|
+
field: z.string().describe('Field name to analyze (e.g., "category", "city")'),
|
|
181
|
+
sample_size: z.number().default(1000).describe('Number of records to sample (max 500000)'),
|
|
182
|
+
},
|
|
183
|
+
}, async ({ model, field, sample_size }) => {
|
|
184
|
+
const limit = Math.min(sample_size, 500000);
|
|
185
|
+
const query = new QueryBuilder().limit(limit);
|
|
186
|
+
// Try to fetch latest data if possible (though default is random/insertion order often)
|
|
187
|
+
// We can't easily sort by date without knowing the date field, so we just take default order.
|
|
188
|
+
const data = await client.getAll(model, query);
|
|
189
|
+
if (data.length === 0) {
|
|
190
|
+
return { content: [{ type: 'text', text: 'No data found to sample.' }] };
|
|
191
|
+
}
|
|
192
|
+
// Aggregate locally
|
|
193
|
+
const counts = new Map();
|
|
194
|
+
let validCount = 0;
|
|
195
|
+
for (const record of data) {
|
|
196
|
+
if (field in record) {
|
|
197
|
+
const value = record[field];
|
|
198
|
+
if (value !== null && value !== undefined) {
|
|
199
|
+
let key = 'undefined';
|
|
200
|
+
if (typeof value === 'string') {
|
|
201
|
+
key = value;
|
|
202
|
+
}
|
|
203
|
+
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
204
|
+
key = String(value);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
try {
|
|
208
|
+
// JSON.stringify can return undefined
|
|
209
|
+
const json = JSON.stringify(value);
|
|
210
|
+
if (json) {
|
|
211
|
+
key = json;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
key = 'Error: Value cannot be stringified';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
219
|
+
validCount++;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (validCount === 0) {
|
|
224
|
+
return { content: [{ type: 'text', text: `Field "${field}" not found or empty in sample of ${String(data.length)} records.` }] };
|
|
225
|
+
}
|
|
226
|
+
// Sort by frequency
|
|
227
|
+
const sorted = Array.from(counts.entries())
|
|
228
|
+
.sort((a, b) => b[1] - a[1])
|
|
229
|
+
.slice(0, 100); // Top 100
|
|
230
|
+
const lines = sorted.map(([val, count]) => {
|
|
231
|
+
const pct = ((count / validCount) * 100).toFixed(1);
|
|
232
|
+
// Truncate very long values
|
|
233
|
+
const stringVal = String(val);
|
|
234
|
+
const displayVal = stringVal.length > 100 ? stringVal.slice(0, 100) + '...' : stringVal;
|
|
235
|
+
return ` ${displayVal}: ${String(count)} (${pct}%)`;
|
|
236
|
+
});
|
|
237
|
+
return {
|
|
238
|
+
content: [{
|
|
239
|
+
type: 'text',
|
|
240
|
+
text: `Distribution of "${field}" (based on sample of ${String(data.length)} records):\n${lines.join('\n')}`
|
|
241
|
+
}],
|
|
242
|
+
};
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=metadataTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/metadataTools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lt-open-data-sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "TypeScript SDK for the Lithuanian Open Data platform (data.gov.lt)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -65,5 +65,9 @@
|
|
|
65
65
|
"dist",
|
|
66
66
|
"README.md",
|
|
67
67
|
"LICENSE"
|
|
68
|
-
]
|
|
68
|
+
],
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
71
|
+
"zod": "^4.3.4"
|
|
72
|
+
}
|
|
69
73
|
}
|