@cyanheads/wikidata-mcp-server 0.1.1
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.md +401 -0
- package/Dockerfile +98 -0
- package/LICENSE +201 -0
- package/README.md +293 -0
- package/changelog/0.1.x/0.1.0.md +20 -0
- package/changelog/0.1.x/0.1.1.md +20 -0
- package/changelog/template.md +119 -0
- package/dist/config/server-config.d.ts +11 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +31 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity.resource.d.ts +11 -0
- package/dist/mcp-server/resources/definitions/entity.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity.resource.js +127 -0
- package/dist/mcp-server/resources/definitions/entity.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +38 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js +215 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-labels.tool.d.ts +24 -0
- package/dist/mcp-server/tools/definitions/get-labels.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-labels.tool.js +93 -0
- package/dist/mcp-server/tools/definitions/get-labels.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-sitelinks.tool.d.ts +31 -0
- package/dist/mcp-server/tools/definitions/get-sitelinks.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-sitelinks.tool.js +128 -0
- package/dist/mcp-server/tools/definitions/get-sitelinks.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-statements.tool.d.ts +29 -0
- package/dist/mcp-server/tools/definitions/get-statements.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-statements.tool.js +185 -0
- package/dist/mcp-server/tools/definitions/get-statements.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/resolve-external-id.tool.d.ts +30 -0
- package/dist/mcp-server/tools/definitions/resolve-external-id.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/resolve-external-id.tool.js +193 -0
- package/dist/mcp-server/tools/definitions/resolve-external-id.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-entities.tool.d.ts +36 -0
- package/dist/mcp-server/tools/definitions/search-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-entities.tool.js +129 -0
- package/dist/mcp-server/tools/definitions/search-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/sparql-query.tool.d.ts +34 -0
- package/dist/mcp-server/tools/definitions/sparql-query.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/sparql-query.tool.js +151 -0
- package/dist/mcp-server/tools/definitions/sparql-query.tool.js.map +1 -0
- package/dist/services/wikidata/types.d.ts +164 -0
- package/dist/services/wikidata/types.d.ts.map +1 -0
- package/dist/services/wikidata/types.js +6 -0
- package/dist/services/wikidata/types.js.map +1 -0
- package/dist/services/wikidata/wikidata-rest-service.d.ts +48 -0
- package/dist/services/wikidata/wikidata-rest-service.d.ts.map +1 -0
- package/dist/services/wikidata/wikidata-rest-service.js +293 -0
- package/dist/services/wikidata/wikidata-rest-service.js.map +1 -0
- package/dist/services/wikidata/wikidata-sparql-service.d.ts +23 -0
- package/dist/services/wikidata/wikidata-sparql-service.d.ts.map +1 -0
- package/dist/services/wikidata/wikidata-sparql-service.js +163 -0
- package/dist/services/wikidata/wikidata-sparql-service.js.map +1 -0
- package/package.json +82 -0
- package/server.json +141 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-external-id.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/resolve-external-id.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Search Wikidata items or properties by text query.
|
|
3
|
+
* @module mcp-server/tools/definitions/search-entities.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const wikidataSearchEntities: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
query: z.ZodString;
|
|
9
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
10
|
+
item: "item";
|
|
11
|
+
property: "property";
|
|
12
|
+
}>>;
|
|
13
|
+
language: z.ZodDefault<z.ZodString>;
|
|
14
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
15
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
17
|
+
results: z.ZodArray<z.ZodObject<{
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
label: z.ZodString;
|
|
20
|
+
description: z.ZodString;
|
|
21
|
+
match: z.ZodObject<{
|
|
22
|
+
type: z.ZodString;
|
|
23
|
+
language: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
}, z.core.$strip>>;
|
|
26
|
+
query: z.ZodString;
|
|
27
|
+
type: z.ZodString;
|
|
28
|
+
language: z.ZodString;
|
|
29
|
+
message: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, z.core.$strip>, readonly [{
|
|
31
|
+
readonly reason: "no_results";
|
|
32
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
33
|
+
readonly when: "Search query returned zero matches.";
|
|
34
|
+
readonly recovery: "Try broader terms, alternate spellings, or switch between \"item\" and \"property\" types.";
|
|
35
|
+
}]>;
|
|
36
|
+
//# sourceMappingURL=search-entities.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0JjC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Search Wikidata items or properties by text query.
|
|
3
|
+
* @module mcp-server/tools/definitions/search-entities.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getWikidataRestService } from '../../../services/wikidata/wikidata-rest-service.js';
|
|
8
|
+
export const wikidataSearchEntities = tool('wikidata_search_entities', {
|
|
9
|
+
title: 'Search Wikidata Entities',
|
|
10
|
+
description: 'Search Wikidata for items or properties by text query. Returns QIDs or PIDs with labels, descriptions, ' +
|
|
11
|
+
'and match metadata indicating whether the hit was on a label or alias. ' +
|
|
12
|
+
'Use type="item" for real-world concepts (people, places, works) and type="property" to find predicate P-IDs. ' +
|
|
13
|
+
'The API returns no total count — pagination is offset-based with no result ceiling indicator.',
|
|
14
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
15
|
+
input: z.object({
|
|
16
|
+
query: z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.describe('Search terms to match against entity labels, aliases, and descriptions.'),
|
|
20
|
+
type: z
|
|
21
|
+
.enum(['item', 'property'])
|
|
22
|
+
.default('item')
|
|
23
|
+
.describe('Entity type to search. Use "item" for Q-IDs (people, places, concepts) or "property" for P-IDs (predicates).'),
|
|
24
|
+
language: z
|
|
25
|
+
.string()
|
|
26
|
+
.default('en')
|
|
27
|
+
.describe('BCP 47 language code for returned labels and descriptions (e.g., "en", "de", "zh").'),
|
|
28
|
+
limit: z
|
|
29
|
+
.number()
|
|
30
|
+
.int()
|
|
31
|
+
.min(1)
|
|
32
|
+
.max(50)
|
|
33
|
+
.default(10)
|
|
34
|
+
.describe('Maximum number of results to return. Range: 1–50.'),
|
|
35
|
+
offset: z
|
|
36
|
+
.number()
|
|
37
|
+
.int()
|
|
38
|
+
.min(0)
|
|
39
|
+
.default(0)
|
|
40
|
+
.describe('Pagination offset. Start at 0; increment by limit to page through results.'),
|
|
41
|
+
}),
|
|
42
|
+
output: z.object({
|
|
43
|
+
results: z
|
|
44
|
+
.array(z
|
|
45
|
+
.object({
|
|
46
|
+
id: z.string().describe('Q-ID (e.g., "Q76") or P-ID (e.g., "P31") of the entity.'),
|
|
47
|
+
label: z
|
|
48
|
+
.string()
|
|
49
|
+
.describe('Display label in the requested language, or empty string if unavailable.'),
|
|
50
|
+
description: z
|
|
51
|
+
.string()
|
|
52
|
+
.describe('Short description in the requested language, or empty string if unavailable.'),
|
|
53
|
+
match: z
|
|
54
|
+
.object({
|
|
55
|
+
type: z
|
|
56
|
+
.string()
|
|
57
|
+
.describe('Match type: "label" for a direct label hit, "alias" for an alias hit.'),
|
|
58
|
+
language: z.string().describe('Language of the matched string.'),
|
|
59
|
+
})
|
|
60
|
+
.describe('Metadata about how this result matched the query.'),
|
|
61
|
+
})
|
|
62
|
+
.describe('A single search result with entity ID, label, description, and match metadata.'))
|
|
63
|
+
.describe('Ranked list of matching entities. Empty when no results found.'),
|
|
64
|
+
query: z.string().describe('The search query that was executed.'),
|
|
65
|
+
type: z.string().describe('The entity type that was searched ("item" or "property").'),
|
|
66
|
+
language: z.string().describe('The language used for label and description display.'),
|
|
67
|
+
message: z
|
|
68
|
+
.string()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Recovery hint when results are empty — suggests how to broaden the query. Absent when results are present.'),
|
|
71
|
+
}),
|
|
72
|
+
errors: [
|
|
73
|
+
{
|
|
74
|
+
reason: 'no_results',
|
|
75
|
+
code: JsonRpcErrorCode.NotFound,
|
|
76
|
+
when: 'Search query returned zero matches.',
|
|
77
|
+
recovery: 'Try broader terms, alternate spellings, or switch between "item" and "property" types.',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
async handler(input, ctx) {
|
|
81
|
+
const svc = getWikidataRestService();
|
|
82
|
+
ctx.log.info('Searching Wikidata entities', {
|
|
83
|
+
query: input.query,
|
|
84
|
+
type: input.type,
|
|
85
|
+
language: input.language,
|
|
86
|
+
limit: input.limit,
|
|
87
|
+
offset: input.offset,
|
|
88
|
+
});
|
|
89
|
+
const raw = await svc.search(input.query, input.type, input.language, input.limit, input.offset, ctx);
|
|
90
|
+
const results = raw.map((r) => ({
|
|
91
|
+
id: r.id,
|
|
92
|
+
label: r['display-label']?.value ?? '',
|
|
93
|
+
description: r['display-description']?.value ?? '',
|
|
94
|
+
match: {
|
|
95
|
+
type: r.match?.type ?? 'label',
|
|
96
|
+
language: r.match?.language ?? input.language,
|
|
97
|
+
},
|
|
98
|
+
}));
|
|
99
|
+
if (results.length === 0) {
|
|
100
|
+
return {
|
|
101
|
+
results: [],
|
|
102
|
+
query: input.query,
|
|
103
|
+
type: input.type,
|
|
104
|
+
language: input.language,
|
|
105
|
+
message: `No ${input.type}s matched "${input.query}" in language "${input.language}". Try broader terms or a different language code.`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return { results, query: input.query, type: input.type, language: input.language };
|
|
109
|
+
},
|
|
110
|
+
format: (result) => {
|
|
111
|
+
const lines = [
|
|
112
|
+
`**Query:** ${result.query} | **Type:** ${result.type} | **Language:** ${result.language}`,
|
|
113
|
+
`**Results:** ${result.results.length}`,
|
|
114
|
+
];
|
|
115
|
+
if (result.message) {
|
|
116
|
+
lines.push(`\n> ${result.message}`);
|
|
117
|
+
}
|
|
118
|
+
for (const item of result.results) {
|
|
119
|
+
lines.push('');
|
|
120
|
+
lines.push(`## ${item.label || item.id}`);
|
|
121
|
+
lines.push(`**ID:** ${item.id}`);
|
|
122
|
+
if (item.description)
|
|
123
|
+
lines.push(`**Description:** ${item.description}`);
|
|
124
|
+
lines.push(`**Match:** ${item.match.type} (${item.match.language})`);
|
|
125
|
+
}
|
|
126
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=search-entities.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-entities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Execute a SPARQL query against the Wikidata Query Service.
|
|
3
|
+
* @module mcp-server/tools/definitions/sparql-query.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const wikidataSparqlQuery: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
query: z.ZodString;
|
|
9
|
+
language: z.ZodDefault<z.ZodString>;
|
|
10
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
results: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>>;
|
|
13
|
+
variables: z.ZodArray<z.ZodString>;
|
|
14
|
+
rowCount: z.ZodNumber;
|
|
15
|
+
truncated: z.ZodBoolean;
|
|
16
|
+
}, z.core.$strip>, readonly [{
|
|
17
|
+
readonly reason: "parse_error";
|
|
18
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
19
|
+
readonly when: "SPARQL syntax error — the query could not be parsed.";
|
|
20
|
+
readonly recovery: "Check SPARQL syntax: verify prefix usage, bracket matching, and SELECT clause format. The error message includes the relevant line.";
|
|
21
|
+
}, {
|
|
22
|
+
readonly reason: "timeout";
|
|
23
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
24
|
+
readonly when: "Query exceeded the client-side timeout.";
|
|
25
|
+
readonly retryable: true;
|
|
26
|
+
readonly recovery: "Add a LIMIT clause, simplify traversal depth, or narrow the subject with additional WHERE conditions.";
|
|
27
|
+
}, {
|
|
28
|
+
readonly reason: "throttled";
|
|
29
|
+
readonly code: JsonRpcErrorCode.RateLimited;
|
|
30
|
+
readonly when: "Wikidata SPARQL endpoint is rate-limited (60 req/min, 5 concurrent per IP).";
|
|
31
|
+
readonly retryable: true;
|
|
32
|
+
readonly recovery: "Wait 30–60 seconds before retrying. Reduce concurrent queries if running parallel requests.";
|
|
33
|
+
}]>;
|
|
34
|
+
//# sourceMappingURL=sparql-query.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparql-query.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/sparql-query.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;GA6K9B,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Execute a SPARQL query against the Wikidata Query Service.
|
|
3
|
+
* @module mcp-server/tools/definitions/sparql-query.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getWikidataSparqlService } from '../../../services/wikidata/wikidata-sparql-service.js';
|
|
8
|
+
export const wikidataSparqlQuery = tool('wikidata_sparql_query', {
|
|
9
|
+
title: 'Wikidata SPARQL Query',
|
|
10
|
+
description: 'Execute a SPARQL SELECT query against the Wikidata Query Service (Blazegraph). ' +
|
|
11
|
+
'Full graph power: multi-hop traversals, aggregations, subqueries, OPTIONAL, FILTER, UNION, BIND. ' +
|
|
12
|
+
'Standard Wikidata prefixes (wd:, wdt:, p:, ps:, pq:, wikibase:, bd:) are auto-injected. ' +
|
|
13
|
+
'The wikibase:label SERVICE is also auto-injected when language is set and the query includes ?<var>Label ' +
|
|
14
|
+
'variables — so you can use ?itemLabel without writing the boilerplate. ' +
|
|
15
|
+
'Hard server timeout is 60s; use LIMIT to keep queries fast. ' +
|
|
16
|
+
'Bindings use the SPARQL 1.1 JSON format: each value is { type, value, "xml:lang"? }. ' +
|
|
17
|
+
'Use wikidata_get_labels to humanize QID results from this tool.',
|
|
18
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
19
|
+
input: z.object({
|
|
20
|
+
query: z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.describe('SPARQL SELECT query. Must be a SELECT query (not CONSTRUCT/DESCRIBE/ASK). ' +
|
|
24
|
+
'Standard prefixes are auto-injected; do not include them yourself. ' +
|
|
25
|
+
'Example: SELECT ?item ?itemLabel WHERE { ?item wdt:P31 wd:Q146. } LIMIT 10'),
|
|
26
|
+
language: z
|
|
27
|
+
.string()
|
|
28
|
+
.default('en')
|
|
29
|
+
.describe('Language for the wikibase:label SERVICE (e.g., "en", "de"). ' +
|
|
30
|
+
'Controls the language of ?<var>Label variables. Set to "" to suppress label SERVICE injection.'),
|
|
31
|
+
timeout: z
|
|
32
|
+
.number()
|
|
33
|
+
.int()
|
|
34
|
+
.min(1)
|
|
35
|
+
.max(55)
|
|
36
|
+
.default(30)
|
|
37
|
+
.describe('Client-side timeout in seconds (1–55). Capped at 55s — the Wikidata server hard limit is 60s.'),
|
|
38
|
+
}),
|
|
39
|
+
output: z.object({
|
|
40
|
+
results: z
|
|
41
|
+
.array(
|
|
42
|
+
// SPARQL 1.1 JSON: variable names are keys; values are { type, value, "xml:lang"?, datatype? }.
|
|
43
|
+
// Variable names are caller-defined and unknowable at schema time — passthrough preserves
|
|
44
|
+
// all fields in structuredContent without aspirational per-field typing.
|
|
45
|
+
z.record(z.string(), z.object({}).passthrough()))
|
|
46
|
+
.describe('Array of result bindings. Each row maps variable names to binding objects with { type, value, "xml:lang"?, datatype? } fields.'),
|
|
47
|
+
variables: z.array(z.string()).describe('Variable names returned by the SELECT clause.'),
|
|
48
|
+
rowCount: z.number().describe('Number of result rows.'),
|
|
49
|
+
truncated: z
|
|
50
|
+
.boolean()
|
|
51
|
+
.describe('True when the endpoint returned a partial result set due to server-side memory limits. ' +
|
|
52
|
+
'False when the full result was returned. Add a LIMIT clause to avoid truncation on large queries.'),
|
|
53
|
+
}),
|
|
54
|
+
errors: [
|
|
55
|
+
{
|
|
56
|
+
reason: 'parse_error',
|
|
57
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
58
|
+
when: 'SPARQL syntax error — the query could not be parsed.',
|
|
59
|
+
recovery: 'Check SPARQL syntax: verify prefix usage, bracket matching, and SELECT clause format. The error message includes the relevant line.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
reason: 'timeout',
|
|
63
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
64
|
+
when: 'Query exceeded the client-side timeout.',
|
|
65
|
+
retryable: true,
|
|
66
|
+
recovery: 'Add a LIMIT clause, simplify traversal depth, or narrow the subject with additional WHERE conditions.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
reason: 'throttled',
|
|
70
|
+
code: JsonRpcErrorCode.RateLimited,
|
|
71
|
+
when: 'Wikidata SPARQL endpoint is rate-limited (60 req/min, 5 concurrent per IP).',
|
|
72
|
+
retryable: true,
|
|
73
|
+
recovery: 'Wait 30–60 seconds before retrying. Reduce concurrent queries if running parallel requests.',
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
async handler(input, ctx) {
|
|
77
|
+
const svc = getWikidataSparqlService();
|
|
78
|
+
ctx.log.info('Executing SPARQL query', {
|
|
79
|
+
language: input.language,
|
|
80
|
+
timeout: input.timeout,
|
|
81
|
+
queryLength: input.query.length,
|
|
82
|
+
});
|
|
83
|
+
let response;
|
|
84
|
+
try {
|
|
85
|
+
response = await svc.query(input.query, input.language, input.timeout * 1000, ctx);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
// Re-map service errors to tool error contract reasons
|
|
89
|
+
const e = err;
|
|
90
|
+
if (e?.data?.reason === 'parse_error') {
|
|
91
|
+
throw ctx.fail('parse_error', err.message, {
|
|
92
|
+
...ctx.recoveryFor('parse_error'),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (e?.data?.reason === 'timeout') {
|
|
96
|
+
throw ctx.fail('timeout', err.message, {
|
|
97
|
+
...ctx.recoveryFor('timeout'),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (e?.data?.reason === 'throttled') {
|
|
101
|
+
throw ctx.fail('throttled', err.message, {
|
|
102
|
+
...ctx.recoveryFor('throttled'),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
const bindings = response.results.bindings;
|
|
108
|
+
const variables = response.head.vars;
|
|
109
|
+
return {
|
|
110
|
+
results: bindings,
|
|
111
|
+
variables,
|
|
112
|
+
rowCount: bindings.length,
|
|
113
|
+
truncated: false,
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
format: (result) => {
|
|
117
|
+
const lines = [
|
|
118
|
+
`**Variables:** ${result.variables.join(', ')} | **Rows:** ${result.rowCount} | **Truncated:** ${result.truncated}`,
|
|
119
|
+
];
|
|
120
|
+
if (result.rowCount === 0) {
|
|
121
|
+
lines.push('\n> No results returned. Check query logic or broaden filters.');
|
|
122
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
123
|
+
}
|
|
124
|
+
// Render as a simple table (first 20 rows)
|
|
125
|
+
const cap = Math.min(result.rowCount, 20);
|
|
126
|
+
const header = result.variables.join(' | ');
|
|
127
|
+
const separator = result.variables.map(() => '---').join(' | ');
|
|
128
|
+
lines.push('');
|
|
129
|
+
lines.push(`| ${header} |`);
|
|
130
|
+
lines.push(`| ${separator} |`);
|
|
131
|
+
for (let i = 0; i < cap; i++) {
|
|
132
|
+
const row = result.variables.map((v) => {
|
|
133
|
+
const raw = result.results[i]?.[v];
|
|
134
|
+
if (!raw)
|
|
135
|
+
return '';
|
|
136
|
+
const binding = raw;
|
|
137
|
+
const val = (binding.value ?? '')
|
|
138
|
+
.replace('http://www.wikidata.org/entity/', 'wd:')
|
|
139
|
+
.replace('http://www.wikidata.org/prop/direct/', 'wdt:');
|
|
140
|
+
const lang = binding['xml:lang'] ? ` @${binding['xml:lang']}` : '';
|
|
141
|
+
return `${val}${lang}`;
|
|
142
|
+
});
|
|
143
|
+
lines.push(`| ${row.join(' | ')} |`);
|
|
144
|
+
}
|
|
145
|
+
if (result.rowCount > 20) {
|
|
146
|
+
lines.push(`\n… ${result.rowCount - 20} more rows not shown.`);
|
|
147
|
+
}
|
|
148
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=sparql-query.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparql-query.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/sparql-query.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Domain types for the Wikidata REST and SPARQL APIs.
|
|
3
|
+
* @module services/wikidata/types
|
|
4
|
+
*/
|
|
5
|
+
/** A single label or description entry (REST API nested object form). */
|
|
6
|
+
export type LocalizedString = {
|
|
7
|
+
language: string;
|
|
8
|
+
value: string;
|
|
9
|
+
};
|
|
10
|
+
/** A label or description map from the REST entity endpoint. */
|
|
11
|
+
export type LocalizedStringMap = Record<string, LocalizedString>;
|
|
12
|
+
/** Aliases map from the REST entity endpoint. */
|
|
13
|
+
export type AliasMap = Record<string, LocalizedString[]>;
|
|
14
|
+
/** Raw search result item from /v1/search/items or /v1/search/properties. */
|
|
15
|
+
export type RawSearchResult = {
|
|
16
|
+
id: string;
|
|
17
|
+
/** Display label — nested { language, value } in REST v1.5. */
|
|
18
|
+
'display-label'?: {
|
|
19
|
+
language: string;
|
|
20
|
+
value: string;
|
|
21
|
+
} | null;
|
|
22
|
+
/** Display description — nested { language, value }. */
|
|
23
|
+
'display-description'?: {
|
|
24
|
+
language: string;
|
|
25
|
+
value: string;
|
|
26
|
+
} | null;
|
|
27
|
+
match?: {
|
|
28
|
+
type: string;
|
|
29
|
+
language: string;
|
|
30
|
+
} | null;
|
|
31
|
+
};
|
|
32
|
+
/** Raw sitelink entry. */
|
|
33
|
+
export type RawSitelink = {
|
|
34
|
+
title: string;
|
|
35
|
+
url?: string | null;
|
|
36
|
+
badges?: string[];
|
|
37
|
+
};
|
|
38
|
+
/** Raw statement value content shapes (varies by data type). */
|
|
39
|
+
export type RawStatementValue = {
|
|
40
|
+
type: string;
|
|
41
|
+
content: unknown;
|
|
42
|
+
};
|
|
43
|
+
/** Raw statement object. */
|
|
44
|
+
export type RawStatement = {
|
|
45
|
+
id: string;
|
|
46
|
+
rank: 'normal' | 'preferred' | 'deprecated';
|
|
47
|
+
property: {
|
|
48
|
+
id: string;
|
|
49
|
+
data_type?: string | null;
|
|
50
|
+
};
|
|
51
|
+
value: RawStatementValue;
|
|
52
|
+
qualifiers?: RawStatement[];
|
|
53
|
+
references?: Array<{
|
|
54
|
+
hash?: string;
|
|
55
|
+
parts?: RawStatement[];
|
|
56
|
+
}>;
|
|
57
|
+
};
|
|
58
|
+
/** Raw REST entity response (items or properties). */
|
|
59
|
+
export type RawEntity = {
|
|
60
|
+
id: string;
|
|
61
|
+
type: 'item' | 'property';
|
|
62
|
+
data_type?: string | null;
|
|
63
|
+
labels?: LocalizedStringMap;
|
|
64
|
+
descriptions?: LocalizedStringMap;
|
|
65
|
+
aliases?: AliasMap;
|
|
66
|
+
statements?: Record<string, RawStatement[]>;
|
|
67
|
+
sitelinks?: Record<string, RawSitelink>;
|
|
68
|
+
};
|
|
69
|
+
export type WbLabel = {
|
|
70
|
+
language: string;
|
|
71
|
+
value: string;
|
|
72
|
+
};
|
|
73
|
+
export type WbDescription = {
|
|
74
|
+
language: string;
|
|
75
|
+
value: string;
|
|
76
|
+
};
|
|
77
|
+
export type WbEntity = {
|
|
78
|
+
id: string;
|
|
79
|
+
type?: string;
|
|
80
|
+
labels?: Record<string, WbLabel>;
|
|
81
|
+
descriptions?: Record<string, WbDescription>;
|
|
82
|
+
missing?: '';
|
|
83
|
+
};
|
|
84
|
+
export type WbGetEntitiesResponse = {
|
|
85
|
+
entities?: Record<string, WbEntity>;
|
|
86
|
+
success?: number;
|
|
87
|
+
error?: {
|
|
88
|
+
code: string;
|
|
89
|
+
info: string;
|
|
90
|
+
};
|
|
91
|
+
servedby?: string;
|
|
92
|
+
};
|
|
93
|
+
/** Raw SPARQL 1.1 JSON result binding. */
|
|
94
|
+
export type SparqlBinding = {
|
|
95
|
+
type: 'uri' | 'literal' | 'typed-literal' | 'bnode';
|
|
96
|
+
value: string;
|
|
97
|
+
'xml:lang'?: string;
|
|
98
|
+
datatype?: string;
|
|
99
|
+
};
|
|
100
|
+
/** Raw SPARQL JSON response. */
|
|
101
|
+
export type SparqlResponse = {
|
|
102
|
+
head: {
|
|
103
|
+
vars: string[];
|
|
104
|
+
};
|
|
105
|
+
results: {
|
|
106
|
+
bindings: Array<Record<string, SparqlBinding>>;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/** Normalized search result. */
|
|
110
|
+
export type SearchResult = {
|
|
111
|
+
id: string;
|
|
112
|
+
label: string;
|
|
113
|
+
description: string;
|
|
114
|
+
match: {
|
|
115
|
+
type: string;
|
|
116
|
+
language: string;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
/** Normalized statement value. */
|
|
120
|
+
export type StatementValue = {
|
|
121
|
+
type: 'wikibase-item';
|
|
122
|
+
qid: string;
|
|
123
|
+
label?: string | undefined;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'time';
|
|
126
|
+
time: string;
|
|
127
|
+
precision: number;
|
|
128
|
+
} | {
|
|
129
|
+
type: 'quantity';
|
|
130
|
+
amount: string;
|
|
131
|
+
unit?: string | undefined;
|
|
132
|
+
unitLabel?: string | undefined;
|
|
133
|
+
} | {
|
|
134
|
+
type: 'string' | 'external-id' | 'url';
|
|
135
|
+
value: string;
|
|
136
|
+
} | {
|
|
137
|
+
type: 'monolingualtext';
|
|
138
|
+
text: string;
|
|
139
|
+
language: string;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'globe-coordinate';
|
|
142
|
+
latitude: number;
|
|
143
|
+
longitude: number;
|
|
144
|
+
precision?: number | undefined;
|
|
145
|
+
} | {
|
|
146
|
+
type: 'other';
|
|
147
|
+
raw: unknown;
|
|
148
|
+
};
|
|
149
|
+
/** Normalized statement. */
|
|
150
|
+
export type NormalizedStatement = {
|
|
151
|
+
id: string;
|
|
152
|
+
rank: 'normal' | 'preferred' | 'deprecated';
|
|
153
|
+
property: string;
|
|
154
|
+
value: StatementValue;
|
|
155
|
+
qualifiers?: Array<{
|
|
156
|
+
property: string;
|
|
157
|
+
value: StatementValue;
|
|
158
|
+
}>;
|
|
159
|
+
references?: Array<{
|
|
160
|
+
property: string;
|
|
161
|
+
value: StatementValue;
|
|
162
|
+
}>;
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/wikidata/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/wikidata/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Wikidata REST API and MediaWiki wbgetentities client.
|
|
3
|
+
* @module services/wikidata/wikidata-rest-service
|
|
4
|
+
*/
|
|
5
|
+
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
|
|
7
|
+
import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
|
|
8
|
+
import type { NormalizedStatement, RawEntity, RawSearchResult, RawStatement, StatementValue } from './types.js';
|
|
9
|
+
/** Checks if an ID is a Q-ID (item). */
|
|
10
|
+
export declare function isQId(id: string): boolean;
|
|
11
|
+
/** Checks if an ID is a P-ID (property). */
|
|
12
|
+
export declare function isPId(id: string): boolean;
|
|
13
|
+
/** Normalizes a Q/P-ID to uppercase (e.g. q76 → Q76). */
|
|
14
|
+
export declare function normalizeId(id: string): string;
|
|
15
|
+
export declare class WikidataRestService {
|
|
16
|
+
private readonly userAgent;
|
|
17
|
+
private readonly restTimeoutMs;
|
|
18
|
+
constructor(_config: AppConfig, _storage: StorageService);
|
|
19
|
+
private get headers();
|
|
20
|
+
private getJson;
|
|
21
|
+
/** Search items or properties by text. */
|
|
22
|
+
search(query: string, type: 'item' | 'property', language: string, limit: number, offset: number, ctx: Context): Promise<RawSearchResult[]>;
|
|
23
|
+
/** Fetch a single entity by QID or PID. Routes by ID prefix. */
|
|
24
|
+
fetchEntity(id: string, ctx: Context): Promise<RawEntity>;
|
|
25
|
+
/** Fetch statements for an entity, optionally filtered to specific P-IDs. */
|
|
26
|
+
fetchStatements(id: string, properties: string[] | undefined, ctx: Context): Promise<Record<string, RawStatement[]>>;
|
|
27
|
+
/** Fetch sitelinks for a Q-ID, optionally filtered to specific site codes. */
|
|
28
|
+
fetchSitelinks(id: string, sites: string[] | undefined, ctx: Context): Promise<Record<string, {
|
|
29
|
+
title: string;
|
|
30
|
+
url?: string | null;
|
|
31
|
+
badges?: string[];
|
|
32
|
+
}>>;
|
|
33
|
+
/**
|
|
34
|
+
* Batch-resolve labels and descriptions for up to 50 IDs using the MediaWiki
|
|
35
|
+
* wbgetentities API (the REST API has no batch label endpoint).
|
|
36
|
+
*/
|
|
37
|
+
fetchLabels(ids: string[], languages: string[], ctx: Context): Promise<Record<string, {
|
|
38
|
+
labels: Record<string, string>;
|
|
39
|
+
descriptions: Record<string, string>;
|
|
40
|
+
}>>;
|
|
41
|
+
}
|
|
42
|
+
/** Normalize a raw statement value to the domain type. */
|
|
43
|
+
export declare function normalizeStatementValue(dataType: string | undefined | null, rawContent: unknown): StatementValue;
|
|
44
|
+
/** Normalize a raw statement array to domain statements. */
|
|
45
|
+
export declare function normalizeStatements(propertyId: string, rawStatements: RawStatement[], labelMap?: Record<string, string>): NormalizedStatement[];
|
|
46
|
+
export declare function initWikidataRestService(config: AppConfig, storage: StorageService): void;
|
|
47
|
+
export declare function getWikidataRestService(): WikidataRestService;
|
|
48
|
+
//# sourceMappingURL=wikidata-rest-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikidata-rest-service.d.ts","sourceRoot":"","sources":["../../../src/services/wikidata/wikidata-rest-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAQrE,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,YAAY,EACZ,cAAc,EAEf,MAAM,YAAY,CAAC;AAKpB,wCAAwC;AACxC,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,4CAA4C;AAC5C,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IAMxD,OAAO,KAAK,OAAO,GAKlB;IAED,OAAO,CAAC,OAAO;IAwBf,0CAA0C;IACpC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,eAAe,EAAE,CAAC;IAc7B,gEAAgE;IAChE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzD,6EAA6E;IACvE,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAyB1C,8EAA8E;IACxE,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAerF;;;OAGG;IACG,WAAW,CACf,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,OAAO,GACX,OAAO,CACR,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CACzF;CAyEF;AAMD,0DAA0D;AAC1D,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACnC,UAAU,EAAE,OAAO,GAClB,cAAc,CA+EhB;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,YAAY,EAAE,EAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,mBAAmB,EAAE,CAsCvB;AAQD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAExF;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAO5D"}
|