@cyanheads/wikipedia-mcp-server 0.1.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/AGENTS.md +394 -0
- package/CLAUDE.md +394 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +294 -0
- package/changelog/0.1.x/0.1.0.md +18 -0
- package/changelog/0.1.x/0.1.1.md +22 -0
- package/changelog/0.1.x/0.1.2.md +13 -0
- package/changelog/0.1.x/0.1.3.md +31 -0
- package/changelog/template.md +119 -0
- package/dist/config/server-config.d.ts +13 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +25 -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 +25 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +168 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +19 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-article.tool.d.ts +34 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-article.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-article.tool.js +153 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-article.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-languages.tool.d.ts +35 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-languages.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-languages.tool.js +105 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-languages.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-sections.tool.d.ts +37 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-sections.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-sections.tool.js +109 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-sections.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-summary.tool.d.ts +30 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-summary.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-summary.tool.js +107 -0
- package/dist/mcp-server/tools/definitions/wikipedia-get-summary.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search-nearby.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search-nearby.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search-nearby.tool.js +127 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search-nearby.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search.tool.d.ts +32 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search.tool.js +91 -0
- package/dist/mcp-server/tools/definitions/wikipedia-search.tool.js.map +1 -0
- package/dist/services/wikipedia/types.d.ts +110 -0
- package/dist/services/wikipedia/types.d.ts.map +1 -0
- package/dist/services/wikipedia/types.js +6 -0
- package/dist/services/wikipedia/types.js.map +1 -0
- package/dist/services/wikipedia/wikipedia-service.d.ts +81 -0
- package/dist/services/wikipedia/wikipedia-service.d.ts.map +1 -0
- package/dist/services/wikipedia/wikipedia-service.js +577 -0
- package/dist/services/wikipedia/wikipedia-service.js.map +1 -0
- package/package.json +86 -0
- package/server.json +99 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview wikipedia_search tool — full-text search across Wikipedia articles.
|
|
3
|
+
* @module mcp-server/tools/definitions/wikipedia-search.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const wikipediaSearch: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
query: z.ZodString;
|
|
9
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
language: z.ZodDefault<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
results: z.ZodArray<z.ZodObject<{
|
|
13
|
+
title: z.ZodString;
|
|
14
|
+
pageid: z.ZodNumber;
|
|
15
|
+
snippet: z.ZodString;
|
|
16
|
+
wordcount: z.ZodNumber;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
total_results: z.ZodNumber;
|
|
19
|
+
query_used: z.ZodString;
|
|
20
|
+
language: z.ZodString;
|
|
21
|
+
}, z.core.$strip>, readonly [{
|
|
22
|
+
readonly reason: "no_results";
|
|
23
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
24
|
+
readonly when: "Search returned zero results for the query.";
|
|
25
|
+
readonly recovery: "Broaden the query or try different keywords and search again.";
|
|
26
|
+
}, {
|
|
27
|
+
readonly reason: "invalid_language";
|
|
28
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
29
|
+
readonly when: "The language code is not a valid BCP 47 code.";
|
|
30
|
+
readonly recovery: "Use a valid BCP 47 language code such as \"fr\", \"de\", or \"ja\".";
|
|
31
|
+
}]>;
|
|
32
|
+
//# sourceMappingURL=wikipedia-search.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikipedia-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/wikipedia-search.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,eAAe;;;;;;;;;;;;;;;;;;;;;;;;GAuG1B,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview wikipedia_search tool — full-text search across Wikipedia articles.
|
|
3
|
+
* @module mcp-server/tools/definitions/wikipedia-search.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getWikipediaService } from '../../../services/wikipedia/wikipedia-service.js';
|
|
8
|
+
export const wikipediaSearch = tool('wikipedia_search', {
|
|
9
|
+
title: 'Search Wikipedia',
|
|
10
|
+
description: 'Search Wikipedia articles by full-text query. Returns ranked results with plain-text titles, snippets (HTML stripped), page IDs, and word counts. Best when the exact article title is unknown or when multiple articles on a topic are needed. Returned pageid values can be passed to other tools. Supports all Wikipedia language editions.',
|
|
11
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
12
|
+
input: z.object({
|
|
13
|
+
query: z.string().describe('Search query (e.g. "Python programming language").'),
|
|
14
|
+
limit: z
|
|
15
|
+
.number()
|
|
16
|
+
.int()
|
|
17
|
+
.min(1)
|
|
18
|
+
.default(10)
|
|
19
|
+
.describe('Maximum number of results to return (default 10, max 50). Must be a positive integer.'),
|
|
20
|
+
language: z
|
|
21
|
+
.string()
|
|
22
|
+
.default('en')
|
|
23
|
+
.describe('Wikipedia language edition code (default "en"). Examples: "fr", "de", "ja".'),
|
|
24
|
+
}),
|
|
25
|
+
output: z.object({
|
|
26
|
+
results: z
|
|
27
|
+
.array(z
|
|
28
|
+
.object({
|
|
29
|
+
title: z.string().describe('Article title (e.g. "Python (programming language)").'),
|
|
30
|
+
pageid: z.number().describe('Wikipedia page ID — use as input to other tools.'),
|
|
31
|
+
snippet: z.string().describe('Plain-text search snippet with matched terms.'),
|
|
32
|
+
wordcount: z.number().describe('Article word count.'),
|
|
33
|
+
})
|
|
34
|
+
.describe('A single search result entry.'))
|
|
35
|
+
.describe('Ranked search results.'),
|
|
36
|
+
total_results: z.number().describe('Total number of matching results in Wikipedia.'),
|
|
37
|
+
query_used: z.string().describe('The query that was searched.'),
|
|
38
|
+
language: z.string().describe('Language edition queried.'),
|
|
39
|
+
}),
|
|
40
|
+
errors: [
|
|
41
|
+
{
|
|
42
|
+
reason: 'no_results',
|
|
43
|
+
code: JsonRpcErrorCode.NotFound,
|
|
44
|
+
when: 'Search returned zero results for the query.',
|
|
45
|
+
recovery: 'Broaden the query or try different keywords and search again.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
reason: 'invalid_language',
|
|
49
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
50
|
+
when: 'The language code is not a valid BCP 47 code.',
|
|
51
|
+
recovery: 'Use a valid BCP 47 language code such as "fr", "de", or "ja".',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
async handler(input, ctx) {
|
|
55
|
+
const { language } = input;
|
|
56
|
+
const limit = Math.min(input.limit, 50);
|
|
57
|
+
if (!/^[a-z]{2,3}(-[a-z0-9]+)*$/i.test(language)) {
|
|
58
|
+
throw ctx.fail('invalid_language', `Invalid language code "${language}". Use a BCP 47 language code such as "fr", "de", or "ja".`, { language, ...ctx.recoveryFor('invalid_language') });
|
|
59
|
+
}
|
|
60
|
+
ctx.log.info('Searching Wikipedia', { query: input.query, limit, language });
|
|
61
|
+
const svc = getWikipediaService();
|
|
62
|
+
const { results, totalResults } = await svc.search(input.query, limit, language, ctx);
|
|
63
|
+
if (results.length === 0) {
|
|
64
|
+
throw ctx.fail('no_results', `No Wikipedia articles found for query "${input.query}" in language "${language}".`, {
|
|
65
|
+
query: input.query,
|
|
66
|
+
language,
|
|
67
|
+
recovery: { hint: `Try different keywords or a broader query than "${input.query}".` },
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
ctx.log.info('Search complete', { count: results.length, totalResults, language });
|
|
71
|
+
return {
|
|
72
|
+
results,
|
|
73
|
+
total_results: totalResults,
|
|
74
|
+
query_used: input.query,
|
|
75
|
+
language,
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
format: (result) => {
|
|
79
|
+
const lines = [
|
|
80
|
+
`**${result.results.length} of ${result.total_results} results** for "${result.query_used}" (${result.language})\n`,
|
|
81
|
+
];
|
|
82
|
+
for (const item of result.results) {
|
|
83
|
+
lines.push(`### ${item.title}`);
|
|
84
|
+
lines.push(`**Page ID:** ${item.pageid} | **Words:** ${item.wordcount}`);
|
|
85
|
+
if (item.snippet)
|
|
86
|
+
lines.push(item.snippet);
|
|
87
|
+
}
|
|
88
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=wikipedia-search.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikipedia-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/wikipedia-search.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Domain types for the Wikipedia service layer.
|
|
3
|
+
* @module services/wikipedia/types
|
|
4
|
+
*/
|
|
5
|
+
/** REST API summary response shape (partial — only fields we use). */
|
|
6
|
+
export type RestSummaryRaw = {
|
|
7
|
+
type?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
pageid?: number;
|
|
10
|
+
wikibase_item?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
extract?: string;
|
|
13
|
+
thumbnail?: {
|
|
14
|
+
source?: string;
|
|
15
|
+
width?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/** Action API search result entry. */
|
|
20
|
+
export type ActionSearchResult = {
|
|
21
|
+
title: string;
|
|
22
|
+
pageid: number;
|
|
23
|
+
snippet: string;
|
|
24
|
+
wordcount?: number;
|
|
25
|
+
};
|
|
26
|
+
/** Action API search query response. */
|
|
27
|
+
export type ActionSearchRaw = {
|
|
28
|
+
query?: {
|
|
29
|
+
searchinfo?: {
|
|
30
|
+
totalhits?: number;
|
|
31
|
+
};
|
|
32
|
+
search?: ActionSearchResult[];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/** Action API extracts response (for full article text). */
|
|
36
|
+
export type ActionExtractsRaw = {
|
|
37
|
+
query?: {
|
|
38
|
+
pages?: Record<string, {
|
|
39
|
+
pageid?: number;
|
|
40
|
+
title?: string;
|
|
41
|
+
extract?: string;
|
|
42
|
+
missing?: string;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/** Action API parse/sections response. */
|
|
47
|
+
export type ActionSectionsRaw = {
|
|
48
|
+
parse?: {
|
|
49
|
+
title?: string;
|
|
50
|
+
pageid?: number;
|
|
51
|
+
sections?: Array<{
|
|
52
|
+
toclevel?: number;
|
|
53
|
+
level?: string;
|
|
54
|
+
line?: string;
|
|
55
|
+
number?: string;
|
|
56
|
+
index?: string;
|
|
57
|
+
fromtitle?: string;
|
|
58
|
+
byteoffset?: number | null;
|
|
59
|
+
anchor?: string;
|
|
60
|
+
}>;
|
|
61
|
+
};
|
|
62
|
+
error?: {
|
|
63
|
+
code?: string;
|
|
64
|
+
info?: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/** Action API parse/wikitext response (formatversion=2 shape). */
|
|
68
|
+
export type ActionWikitextRaw = {
|
|
69
|
+
parse?: {
|
|
70
|
+
title?: string;
|
|
71
|
+
pageid?: number;
|
|
72
|
+
/** formatversion=2: plain string. formatversion=1 used `{ '*': string }` — no longer used. */
|
|
73
|
+
wikitext?: string;
|
|
74
|
+
};
|
|
75
|
+
error?: {
|
|
76
|
+
code?: string;
|
|
77
|
+
info?: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
/** Action API langlinks response (formatversion=2 shape, llprop=url). */
|
|
81
|
+
export type ActionLangLinksRaw = {
|
|
82
|
+
query?: {
|
|
83
|
+
pages?: Record<string, {
|
|
84
|
+
pageid?: number;
|
|
85
|
+
title?: string;
|
|
86
|
+
missing?: string;
|
|
87
|
+
langlinks?: Array<{
|
|
88
|
+
lang: string;
|
|
89
|
+
/** formatversion=2: plain key. formatversion=1 used `'*'` — no longer used. */
|
|
90
|
+
title: string;
|
|
91
|
+
/** Present when llprop=url is passed. */
|
|
92
|
+
url?: string;
|
|
93
|
+
}>;
|
|
94
|
+
}>;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
/** Action API geosearch response. */
|
|
98
|
+
export type ActionGeoSearchRaw = {
|
|
99
|
+
query?: {
|
|
100
|
+
geosearch?: Array<{
|
|
101
|
+
pageid: number;
|
|
102
|
+
ns: number;
|
|
103
|
+
title: string;
|
|
104
|
+
lat: number;
|
|
105
|
+
lon: number;
|
|
106
|
+
dist: number;
|
|
107
|
+
}>;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/wikipedia/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/wikipedia/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Wikipedia service — wraps the MediaWiki REST API and Action API.
|
|
3
|
+
* @module services/wikipedia/wikipedia-service
|
|
4
|
+
*/
|
|
5
|
+
import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
|
|
6
|
+
import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
|
|
7
|
+
import type { RequestContextLike } from '@cyanheads/mcp-ts-core/utils';
|
|
8
|
+
export declare class WikipediaService {
|
|
9
|
+
private readonly userAgent;
|
|
10
|
+
constructor(_config: AppConfig, _storage: StorageService, userAgent: string);
|
|
11
|
+
/** Shared fetch headers for all requests. */
|
|
12
|
+
private headers;
|
|
13
|
+
/** GET from the REST API (`/api/rest_v1/`). */
|
|
14
|
+
restGet<T>(language: string, path: string, ctx: RequestContextLike): Promise<T>;
|
|
15
|
+
/** GET from the Action API (`/w/api.php`). */
|
|
16
|
+
actionGet<T>(language: string, params: Record<string, string>, ctx: RequestContextLike): Promise<T>;
|
|
17
|
+
/** Fetch the REST summary for an article. */
|
|
18
|
+
getSummary(title: string, language: string, ctx: RequestContextLike): Promise<{
|
|
19
|
+
title: string;
|
|
20
|
+
pageType: string;
|
|
21
|
+
pageid: number | undefined;
|
|
22
|
+
wikidataQid: string | undefined;
|
|
23
|
+
description: string | undefined;
|
|
24
|
+
extract: string;
|
|
25
|
+
thumbnailUrl: string | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
/** Full-text search across Wikipedia articles. */
|
|
28
|
+
search(query: string, limit: number, language: string, ctx: RequestContextLike): Promise<{
|
|
29
|
+
results: Array<{
|
|
30
|
+
title: string;
|
|
31
|
+
pageid: number;
|
|
32
|
+
snippet: string;
|
|
33
|
+
wordcount: number;
|
|
34
|
+
}>;
|
|
35
|
+
totalResults: number;
|
|
36
|
+
}>;
|
|
37
|
+
/** Fetch full article plain text via Action API extracts. */
|
|
38
|
+
getArticleFull(title: string, language: string, ctx: RequestContextLike): Promise<{
|
|
39
|
+
title: string;
|
|
40
|
+
pageid: number | undefined;
|
|
41
|
+
content: string;
|
|
42
|
+
}>;
|
|
43
|
+
/** Fetch a single section's wikitext and strip it to plain text. */
|
|
44
|
+
getArticleSection(title: string, sectionIndex: number, language: string, ctx: RequestContextLike): Promise<{
|
|
45
|
+
title: string;
|
|
46
|
+
pageid: number | undefined;
|
|
47
|
+
sectionTitle: string;
|
|
48
|
+
content: string;
|
|
49
|
+
}>;
|
|
50
|
+
/** Fetch section table of contents for an article. */
|
|
51
|
+
getSections(title: string, language: string, ctx: RequestContextLike): Promise<{
|
|
52
|
+
pageid: number | undefined;
|
|
53
|
+
sections: Array<{
|
|
54
|
+
index: number;
|
|
55
|
+
number: string;
|
|
56
|
+
title: string;
|
|
57
|
+
level: number;
|
|
58
|
+
}>;
|
|
59
|
+
}>;
|
|
60
|
+
/** List language editions available for an article. */
|
|
61
|
+
getLanguages(title: string, sourceLanguage: string, ctx: RequestContextLike): Promise<{
|
|
62
|
+
languages: Array<{
|
|
63
|
+
languageCode: string;
|
|
64
|
+
title: string;
|
|
65
|
+
url: string;
|
|
66
|
+
}>;
|
|
67
|
+
}>;
|
|
68
|
+
/** Find geotagged Wikipedia articles near a coordinate. */
|
|
69
|
+
searchNearby(latitude: number, longitude: number, radiusMeters: number, limit: number, language: string, ctx: RequestContextLike): Promise<{
|
|
70
|
+
results: Array<{
|
|
71
|
+
title: string;
|
|
72
|
+
pageid: number;
|
|
73
|
+
latitude: number;
|
|
74
|
+
longitude: number;
|
|
75
|
+
distance_meters: number;
|
|
76
|
+
}>;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
export declare function initWikipediaService(config: AppConfig, storage: StorageService, userAgent: string): void;
|
|
80
|
+
export declare function getWikipediaService(): WikipediaService;
|
|
81
|
+
//# sourceMappingURL=wikipedia-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikipedia-service.d.ts","sourceRoot":"","sources":["../../../src/services/wikipedia/wikipedia-service.ts"],"names":[],"mappings":"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"}
|