@kongyo2/tiki-pedia-mcp-server 1.0.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 kongyo2
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # @kongyo2/tiki-pedia-mcp-server
2
+
3
+ [知木ペディア](https://tiki.miraheze.org/)(Miraheze上のMediaWiki)向けMCPサーバーです。
4
+
5
+ ## セットアップ
6
+
7
+ ### Claude Code
8
+
9
+ ```bash
10
+ claude mcp add tiki-pedia -- npx @kongyo2/tiki-pedia-mcp-server
11
+ ```
12
+
13
+ ### Claude Desktop / Cursor 等
14
+
15
+ `claude_desktop_config.json` に追加:
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "tiki-pedia": {
21
+ "command": "npx",
22
+ "args": ["@kongyo2/tiki-pedia-mcp-server"]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## ツール一覧
29
+
30
+ ### ページ
31
+
32
+ | ツール | 説明 |
33
+ | ------------------------ | ------------------------------ |
34
+ | `tiki_get_page_content` | 記事のウィキテキスト内容を取得 |
35
+ | `tiki_check_page_exists` | 記事の存在確認 |
36
+
37
+ ### カテゴリ
38
+
39
+ | ツール | 説明 |
40
+ | ------------------------------- | -------------------------------------- |
41
+ | `tiki_get_categories` | 記事に付与されているカテゴリ一覧を取得 |
42
+ | `tiki_check_category_exists` | カテゴリの存在確認 |
43
+ | `tiki_search_categories` | カテゴリ名の部分一致検索 |
44
+ | `tiki_search_categories_prefix` | カテゴリ名の前方一致検索 |
45
+ | `tiki_list_categories_range` | 範囲指定でのカテゴリ一覧取得 |
46
+ | `tiki_get_category_members` | カテゴリに属するページ一覧を取得 |
47
+
48
+ ### テンプレート
49
+
50
+ | ツール | 説明 |
51
+ | ------------------------------ | -------------------------------------------- |
52
+ | `tiki_get_templates` | 記事内で使用されているテンプレート一覧を取得 |
53
+ | `tiki_check_template_exists` | テンプレートの存在確認 |
54
+ | `tiki_get_template_content` | テンプレートのウィキテキスト内容を取得 |
55
+ | `tiki_search_templates` | テンプレート名の部分一致検索 |
56
+ | `tiki_search_templates_prefix` | テンプレート名の前方一致検索 |
57
+ | `tiki_list_templates_range` | 範囲指定でのテンプレート一覧取得 |
58
+ | `tiki_get_template_usage` | テンプレートを使用しているページ一覧を取得 |
59
+
60
+ ### 検索
61
+
62
+ | ツール | 説明 |
63
+ | -------------------------- | ------------------------ |
64
+ | `tiki_get_recent_articles` | 新着記事一覧を取得 |
65
+ | `tiki_search_fulltext` | 本文内の文字列を全文検索 |
66
+ | `tiki_search_title` | タイトルの部分一致検索 |
67
+
68
+ ### サイト情報
69
+
70
+ | ツール | 説明 |
71
+ | --------------------- | ---------------------------------- |
72
+ | `tiki_get_extensions` | 有効化されている拡張機能一覧を取得 |
73
+ | `tiki_get_siteinfo` | サイト基本情報を取得 |
74
+
75
+ ## 開発
76
+
77
+ ```bash
78
+ npm install
79
+ npm run build
80
+ ```
81
+
82
+ | コマンド | 説明 |
83
+ | ------------------- | -------------------------- |
84
+ | `npm run build` | TypeScriptコンパイル |
85
+ | `npm run dev` | 開発モード(ファイル監視) |
86
+ | `npm run typecheck` | 型チェック |
87
+ | `npm run lint` | oxlintによるリント |
88
+ | `npm run format` | Prettierによるフォーマット |
89
+
90
+ ## ライセンス
91
+
92
+ MIT
package/dist/api.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ export declare function callApi(params: Record<string, string | number | boolean>): Promise<unknown>;
2
+ interface PageData {
3
+ pageid?: number;
4
+ title?: string;
5
+ missing?: string;
6
+ categories?: Array<{
7
+ title: string;
8
+ }>;
9
+ templates?: Array<{
10
+ title: string;
11
+ }>;
12
+ revisions?: Array<{
13
+ slots?: {
14
+ main?: {
15
+ "*"?: string;
16
+ };
17
+ };
18
+ }>;
19
+ }
20
+ export declare function getFirstPage(result: unknown): {
21
+ pageId: string;
22
+ page: PageData;
23
+ };
24
+ export declare function isPageExisting(pageId: string, page: PageData): boolean;
25
+ export declare function stripCategoryPrefix(title: string): string;
26
+ export declare function stripTemplatePrefix(title: string): string;
27
+ export declare function ensureCategoryPrefix(name: string): string;
28
+ export declare function ensureTemplatePrefix(name: string): string;
29
+ export declare function toolResult(data: unknown): {
30
+ content: {
31
+ type: "text";
32
+ text: string;
33
+ }[];
34
+ };
35
+ export declare function toolError(error: unknown): {
36
+ content: {
37
+ type: "text";
38
+ text: string;
39
+ }[];
40
+ isError: boolean;
41
+ };
42
+ export {};
43
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAChD,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED,UAAU,QAAQ;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE;gBACL,GAAG,CAAC,EAAE,MAAM,CAAC;aACd,CAAC;SACH,CAAC;KACH,CAAC,CAAC;CACJ;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB,CAMA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAIvC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO;;;;;;EAUvC"}
package/dist/api.js ADDED
@@ -0,0 +1,61 @@
1
+ const API_URL = "https://tiki.miraheze.org/w/api.php";
2
+ export async function callApi(params) {
3
+ const url = new URL(API_URL);
4
+ for (const [key, value] of Object.entries(params)) {
5
+ url.searchParams.append(key, String(value));
6
+ }
7
+ const response = await fetch(url.toString(), {
8
+ headers: {
9
+ "User-Agent": "TikiPediaMCPServer/1.0.0",
10
+ Accept: "application/json",
11
+ },
12
+ });
13
+ if (!response.ok) {
14
+ throw new Error(`API request failed: ${response.status} ${response.statusText}`);
15
+ }
16
+ return response.json();
17
+ }
18
+ export function getFirstPage(result) {
19
+ const r = result;
20
+ const pages = r?.query?.pages;
21
+ if (!pages)
22
+ throw new Error("API response is invalid");
23
+ const pageId = Object.keys(pages)[0];
24
+ return { pageId, page: pages[pageId] };
25
+ }
26
+ export function isPageExisting(pageId, page) {
27
+ return pageId !== "-1" && page?.missing === undefined;
28
+ }
29
+ export function stripCategoryPrefix(title) {
30
+ return title.replace(/^(Category|カテゴリ):/, "");
31
+ }
32
+ export function stripTemplatePrefix(title) {
33
+ return title.replace(/^(Template|テンプレート):/, "");
34
+ }
35
+ export function ensureCategoryPrefix(name) {
36
+ if (name.startsWith("Category:") || name.startsWith("カテゴリ:"))
37
+ return name;
38
+ return `Category:${name}`;
39
+ }
40
+ export function ensureTemplatePrefix(name) {
41
+ if (name.startsWith("Template:") || name.startsWith("テンプレート:"))
42
+ return name;
43
+ return `Template:${name}`;
44
+ }
45
+ export function toolResult(data) {
46
+ return {
47
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
48
+ };
49
+ }
50
+ export function toolError(error) {
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,668 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ import { callApi, getFirstPage, isPageExisting, stripCategoryPrefix, stripTemplatePrefix, ensureCategoryPrefix, ensureTemplatePrefix, toolResult, toolError, } from "./api.js";
6
+ const server = new McpServer({
7
+ name: "tiki-pedia-mcp-server",
8
+ version: "1.0.0",
9
+ });
10
+ // ─── Page Tools ───
11
+ server.tool("tiki_get_page_content", "記事のウィキテキスト内容を取得", {
12
+ title: z.string().describe("記事のタイトル"),
13
+ }, async ({ title }) => {
14
+ try {
15
+ const result = await callApi({
16
+ action: "query",
17
+ titles: title,
18
+ prop: "revisions",
19
+ rvprop: "content",
20
+ rvslots: "main",
21
+ format: "json",
22
+ });
23
+ const { pageId, page } = getFirstPage(result);
24
+ if (!isPageExisting(pageId, page)) {
25
+ return toolResult({ title, exists: false, content: null });
26
+ }
27
+ const content = page?.revisions?.[0]?.slots?.main?.["*"];
28
+ return toolResult({ title, exists: true, content: content || "" });
29
+ }
30
+ catch (error) {
31
+ return toolError(error);
32
+ }
33
+ });
34
+ server.tool("tiki_check_page_exists", "記事の存在確認", {
35
+ title: z.string().describe("記事のタイトル"),
36
+ }, async ({ title }) => {
37
+ try {
38
+ const result = await callApi({
39
+ action: "query",
40
+ titles: title,
41
+ format: "json",
42
+ });
43
+ const { pageId, page } = getFirstPage(result);
44
+ return toolResult({ title, exists: isPageExisting(pageId, page) });
45
+ }
46
+ catch (error) {
47
+ return toolError(error);
48
+ }
49
+ });
50
+ // ─── Category Tools ───
51
+ server.tool("tiki_get_categories", "記事に付与されているカテゴリー一覧を取得", {
52
+ title: z.string().describe("記事のタイトル"),
53
+ }, async ({ title }) => {
54
+ try {
55
+ const result = await callApi({
56
+ action: "query",
57
+ titles: title,
58
+ prop: "categories",
59
+ format: "json",
60
+ cllimit: "max",
61
+ });
62
+ const { page } = getFirstPage(result);
63
+ const categories = page?.categories?.map((cat) => stripCategoryPrefix(cat.title)) || [];
64
+ return toolResult({ title, categories, count: categories.length });
65
+ }
66
+ catch (error) {
67
+ return toolError(error);
68
+ }
69
+ });
70
+ server.tool("tiki_check_category_exists", "カテゴリーの存在確認", {
71
+ category: z
72
+ .string()
73
+ .describe("カテゴリー名(Category:プレフィックスなし)"),
74
+ }, async ({ category }) => {
75
+ try {
76
+ const categoryTitle = ensureCategoryPrefix(category);
77
+ const result = await callApi({
78
+ action: "query",
79
+ titles: categoryTitle,
80
+ format: "json",
81
+ });
82
+ const { pageId, page } = getFirstPage(result);
83
+ return toolResult({
84
+ category,
85
+ categoryTitle,
86
+ exists: isPageExisting(pageId, page),
87
+ });
88
+ }
89
+ catch (error) {
90
+ return toolError(error);
91
+ }
92
+ });
93
+ server.tool("tiki_search_categories", "カテゴリー名の部分一致検索(opensearch使用)", {
94
+ query: z.string().describe("検索するカテゴリー名(部分一致)"),
95
+ limit: z
96
+ .number()
97
+ .min(1)
98
+ .max(500)
99
+ .optional()
100
+ .describe("取得する結果数(デフォルト: 10)"),
101
+ }, async ({ query, limit = 10 }) => {
102
+ try {
103
+ const result = await callApi({
104
+ action: "opensearch",
105
+ search: query,
106
+ namespace: 14,
107
+ limit,
108
+ format: "json",
109
+ });
110
+ const arr = result;
111
+ const categories = Array.isArray(arr?.[1])
112
+ ? arr[1].map((t) => stripCategoryPrefix(t))
113
+ : [];
114
+ return toolResult({ query, categories, count: categories.length });
115
+ }
116
+ catch (error) {
117
+ return toolError(error);
118
+ }
119
+ });
120
+ server.tool("tiki_search_categories_prefix", "カテゴリー名のプレフィックス検索(前方一致)", {
121
+ prefix: z.string().describe("カテゴリー名のプレフィックス(前方一致)"),
122
+ limit: z
123
+ .number()
124
+ .min(1)
125
+ .max(500)
126
+ .optional()
127
+ .describe("取得する結果数(デフォルト: 50)"),
128
+ }, async ({ prefix, limit = 50 }) => {
129
+ try {
130
+ const result = await callApi({
131
+ action: "query",
132
+ list: "allcategories",
133
+ acprefix: prefix,
134
+ aclimit: limit,
135
+ format: "json",
136
+ });
137
+ const r = result;
138
+ const allcategories = r?.query?.allcategories;
139
+ if (!allcategories)
140
+ throw new Error("API response is invalid");
141
+ const categories = allcategories.map((cat) => cat["*"]);
142
+ return toolResult({ prefix, categories, count: categories.length });
143
+ }
144
+ catch (error) {
145
+ return toolError(error);
146
+ }
147
+ });
148
+ server.tool("tiki_list_categories_range", "範囲指定でのカテゴリー一覧取得", {
149
+ from: z
150
+ .string()
151
+ .optional()
152
+ .describe("開始カテゴリー名(アルファベット順)"),
153
+ to: z.string().optional().describe("終了カテゴリー名(アルファベット順)"),
154
+ limit: z
155
+ .number()
156
+ .min(1)
157
+ .max(500)
158
+ .optional()
159
+ .describe("取得する結果数(デフォルト: 50)"),
160
+ }, async ({ from, to, limit = 50 }) => {
161
+ try {
162
+ const params = {
163
+ action: "query",
164
+ list: "allcategories",
165
+ aclimit: limit,
166
+ format: "json",
167
+ };
168
+ if (from)
169
+ params.acfrom = from;
170
+ if (to)
171
+ params.acto = to;
172
+ const result = await callApi(params);
173
+ const r = result;
174
+ const allcategories = r?.query?.allcategories;
175
+ if (!allcategories)
176
+ throw new Error("API response is invalid");
177
+ const categories = allcategories.map((cat) => cat["*"]);
178
+ return toolResult({
179
+ from: from || "beginning",
180
+ to: to || "end",
181
+ categories,
182
+ count: categories.length,
183
+ });
184
+ }
185
+ catch (error) {
186
+ return toolError(error);
187
+ }
188
+ });
189
+ server.tool("tiki_get_category_members", "カテゴリーに属するページ一覧を取得", {
190
+ category: z
191
+ .string()
192
+ .describe("カテゴリー名(Category:プレフィックスなし)"),
193
+ limit: z
194
+ .number()
195
+ .min(1)
196
+ .max(500)
197
+ .optional()
198
+ .describe("取得する結果数(デフォルト: 50)"),
199
+ }, async ({ category, limit = 50 }) => {
200
+ try {
201
+ const categoryTitle = ensureCategoryPrefix(category);
202
+ const result = await callApi({
203
+ action: "query",
204
+ list: "categorymembers",
205
+ cmtitle: categoryTitle,
206
+ cmlimit: limit,
207
+ format: "json",
208
+ });
209
+ const r = result;
210
+ const categorymembers = r?.query?.categorymembers;
211
+ if (!categorymembers)
212
+ throw new Error("API response is invalid");
213
+ const members = categorymembers.map((m) => m.title);
214
+ return toolResult({
215
+ category,
216
+ categoryTitle,
217
+ members,
218
+ count: members.length,
219
+ });
220
+ }
221
+ catch (error) {
222
+ return toolError(error);
223
+ }
224
+ });
225
+ // ─── Template Tools ───
226
+ server.tool("tiki_get_templates", "記事内で使用されているテンプレート一覧を取得", {
227
+ title: z.string().describe("記事のタイトル"),
228
+ }, async ({ title }) => {
229
+ try {
230
+ const result = await callApi({
231
+ action: "query",
232
+ titles: title,
233
+ prop: "templates",
234
+ format: "json",
235
+ tllimit: "max",
236
+ });
237
+ const { page } = getFirstPage(result);
238
+ const templates = page?.templates?.map((tpl) => stripTemplatePrefix(tpl.title)) || [];
239
+ return toolResult({ title, templates, count: templates.length });
240
+ }
241
+ catch (error) {
242
+ return toolError(error);
243
+ }
244
+ });
245
+ server.tool("tiki_check_template_exists", "テンプレートの存在確認", {
246
+ template: z
247
+ .string()
248
+ .describe("テンプレート名(Template:プレフィックスなし)"),
249
+ }, async ({ template }) => {
250
+ try {
251
+ const templateTitle = ensureTemplatePrefix(template);
252
+ const result = await callApi({
253
+ action: "query",
254
+ titles: templateTitle,
255
+ format: "json",
256
+ });
257
+ const { pageId, page } = getFirstPage(result);
258
+ return toolResult({
259
+ template,
260
+ templateTitle,
261
+ exists: isPageExisting(pageId, page),
262
+ });
263
+ }
264
+ catch (error) {
265
+ return toolError(error);
266
+ }
267
+ });
268
+ server.tool("tiki_get_template_content", "テンプレートのウィキテキスト内容を取得", {
269
+ template: z
270
+ .string()
271
+ .describe("テンプレート名(Template:プレフィックスなし)"),
272
+ }, async ({ template }) => {
273
+ try {
274
+ const templateTitle = ensureTemplatePrefix(template);
275
+ const result = await callApi({
276
+ action: "query",
277
+ titles: templateTitle,
278
+ prop: "revisions",
279
+ rvprop: "content",
280
+ rvslots: "main",
281
+ format: "json",
282
+ });
283
+ const { pageId, page } = getFirstPage(result);
284
+ if (!isPageExisting(pageId, page)) {
285
+ return toolResult({
286
+ template,
287
+ templateTitle,
288
+ exists: false,
289
+ content: null,
290
+ });
291
+ }
292
+ const content = page?.revisions?.[0]?.slots?.main?.["*"];
293
+ return toolResult({
294
+ template,
295
+ templateTitle,
296
+ exists: true,
297
+ content: content || "",
298
+ });
299
+ }
300
+ catch (error) {
301
+ return toolError(error);
302
+ }
303
+ });
304
+ server.tool("tiki_search_templates", "テンプレート名の部分一致検索(opensearch使用)", {
305
+ query: z.string().describe("検索するテンプレート名(部分一致)"),
306
+ limit: z
307
+ .number()
308
+ .min(1)
309
+ .max(500)
310
+ .optional()
311
+ .describe("取得する結果数(デフォルト: 10)"),
312
+ }, async ({ query, limit = 10 }) => {
313
+ try {
314
+ const result = await callApi({
315
+ action: "opensearch",
316
+ search: query,
317
+ namespace: 10,
318
+ limit,
319
+ format: "json",
320
+ });
321
+ const arr = result;
322
+ const templates = Array.isArray(arr?.[1])
323
+ ? arr[1].map((t) => stripTemplatePrefix(t))
324
+ : [];
325
+ return toolResult({ query, templates, count: templates.length });
326
+ }
327
+ catch (error) {
328
+ return toolError(error);
329
+ }
330
+ });
331
+ server.tool("tiki_search_templates_prefix", "テンプレート名のプレフィックス検索(前方一致)", {
332
+ prefix: z.string().describe("テンプレート名のプレフィックス(前方一致)"),
333
+ limit: z
334
+ .number()
335
+ .min(1)
336
+ .max(500)
337
+ .optional()
338
+ .describe("取得する結果数(デフォルト: 50)"),
339
+ }, async ({ prefix, limit = 50 }) => {
340
+ try {
341
+ const result = await callApi({
342
+ action: "query",
343
+ list: "allpages",
344
+ apnamespace: 10,
345
+ apprefix: prefix,
346
+ aplimit: limit,
347
+ format: "json",
348
+ });
349
+ const r = result;
350
+ const allpages = r?.query?.allpages;
351
+ if (!allpages)
352
+ throw new Error("API response is invalid");
353
+ const templates = allpages.map((p) => stripTemplatePrefix(p.title));
354
+ return toolResult({ prefix, templates, count: templates.length });
355
+ }
356
+ catch (error) {
357
+ return toolError(error);
358
+ }
359
+ });
360
+ server.tool("tiki_list_templates_range", "範囲指定でのテンプレート一覧取得", {
361
+ from: z
362
+ .string()
363
+ .optional()
364
+ .describe("開始テンプレート名(アルファベット順)"),
365
+ to: z
366
+ .string()
367
+ .optional()
368
+ .describe("終了テンプレート名(アルファベット順)"),
369
+ limit: z
370
+ .number()
371
+ .min(1)
372
+ .max(500)
373
+ .optional()
374
+ .describe("取得する結果数(デフォルト: 50)"),
375
+ }, async ({ from, to, limit = 50 }) => {
376
+ try {
377
+ const params = {
378
+ action: "query",
379
+ list: "allpages",
380
+ apnamespace: 10,
381
+ aplimit: limit,
382
+ format: "json",
383
+ };
384
+ if (from)
385
+ params.apfrom = from;
386
+ if (to)
387
+ params.apto = to;
388
+ const result = await callApi(params);
389
+ const r = result;
390
+ const allpages = r?.query?.allpages;
391
+ if (!allpages)
392
+ throw new Error("API response is invalid");
393
+ const templates = allpages.map((p) => stripTemplatePrefix(p.title));
394
+ return toolResult({
395
+ from: from || "beginning",
396
+ to: to || "end",
397
+ templates,
398
+ count: templates.length,
399
+ });
400
+ }
401
+ catch (error) {
402
+ return toolError(error);
403
+ }
404
+ });
405
+ server.tool("tiki_get_template_usage", "テンプレートを使用しているページ一覧を取得(全ページ取得)", {
406
+ template: z
407
+ .string()
408
+ .describe("テンプレート名(Template:プレフィックスなし)"),
409
+ }, async ({ template }) => {
410
+ try {
411
+ const templateTitle = ensureTemplatePrefix(template);
412
+ const allPages = [];
413
+ let continueParams = {};
414
+ while (true) {
415
+ const params = {
416
+ action: "query",
417
+ list: "embeddedin",
418
+ eititle: templateTitle,
419
+ format: "json",
420
+ eilimit: "max",
421
+ ...continueParams,
422
+ };
423
+ const result = await callApi(params);
424
+ const r = result;
425
+ const embeddedin = r?.query?.embeddedin;
426
+ if (!embeddedin)
427
+ throw new Error("API response is invalid");
428
+ for (const page of embeddedin) {
429
+ allPages.push(page.title);
430
+ }
431
+ if (r?.continue) {
432
+ continueParams = r.continue;
433
+ }
434
+ else {
435
+ break;
436
+ }
437
+ }
438
+ return toolResult({
439
+ template,
440
+ templateTitle,
441
+ pages: allPages,
442
+ count: allPages.length,
443
+ });
444
+ }
445
+ catch (error) {
446
+ return toolError(error);
447
+ }
448
+ });
449
+ // ─── Search Tools ───
450
+ server.tool("tiki_get_recent_articles", "新着記事一覧を取得(recentchanges API使用)", {
451
+ limit: z
452
+ .number()
453
+ .min(1)
454
+ .max(500)
455
+ .optional()
456
+ .describe("取得する記事数(デフォルト: 50)"),
457
+ namespace: z
458
+ .number()
459
+ .optional()
460
+ .describe("名前空間(デフォルト: 0=メイン記事。14=カテゴリー、10=テンプレートなど)"),
461
+ }, async ({ limit = 50, namespace = 0 }) => {
462
+ try {
463
+ const result = await callApi({
464
+ action: "query",
465
+ list: "recentchanges",
466
+ rctype: "new",
467
+ rcnamespace: namespace,
468
+ rcprop: "title|timestamp|user|comment|sizes",
469
+ rclimit: limit,
470
+ rcdir: "older",
471
+ format: "json",
472
+ });
473
+ const r = result;
474
+ const recentchanges = r?.query?.recentchanges;
475
+ if (!recentchanges)
476
+ throw new Error("API response is invalid");
477
+ const articles = recentchanges.map((rc) => ({
478
+ title: rc.title,
479
+ timestamp: rc.timestamp,
480
+ user: rc.user,
481
+ comment: rc.comment || "",
482
+ size: rc.newlen,
483
+ }));
484
+ return toolResult({ namespace, articles, count: articles.length });
485
+ }
486
+ catch (error) {
487
+ return toolError(error);
488
+ }
489
+ });
490
+ server.tool("tiki_search_fulltext", "本文内の文字列を全文検索(MediaWiki Search API使用)", {
491
+ query: z.string().describe("検索クエリ(本文内の文字列を検索)"),
492
+ namespace: z
493
+ .number()
494
+ .optional()
495
+ .describe("名前空間(デフォルト: 0=メイン記事。14=カテゴリー、10=テンプレートなど)"),
496
+ limit: z
497
+ .number()
498
+ .min(1)
499
+ .max(500)
500
+ .optional()
501
+ .describe("取得する結果数(デフォルト: 50)"),
502
+ offset: z
503
+ .number()
504
+ .min(0)
505
+ .optional()
506
+ .describe("検索結果のオフセット(ページネーション用、デフォルト: 0)"),
507
+ }, async ({ query, namespace = 0, limit = 50, offset = 0 }) => {
508
+ try {
509
+ const result = await callApi({
510
+ action: "query",
511
+ list: "search",
512
+ srsearch: query,
513
+ srnamespace: namespace,
514
+ srlimit: limit,
515
+ sroffset: offset,
516
+ srprop: "size|wordcount|timestamp|snippet",
517
+ srinfo: "totalhits|suggestion",
518
+ format: "json",
519
+ });
520
+ const r = result;
521
+ const search = r?.query?.search;
522
+ const searchinfo = r?.query?.searchinfo;
523
+ if (!search)
524
+ throw new Error("API response is invalid");
525
+ const results = search.map((item) => ({
526
+ title: item.title,
527
+ size: item.size,
528
+ wordcount: item.wordcount,
529
+ timestamp: item.timestamp,
530
+ snippet: item.snippet.replace(/<[^>]*>/g, ""),
531
+ }));
532
+ return toolResult({
533
+ query,
534
+ namespace,
535
+ totalhits: searchinfo?.totalhits || 0,
536
+ suggestion: searchinfo?.suggestion || null,
537
+ offset,
538
+ results,
539
+ count: results.length,
540
+ });
541
+ }
542
+ catch (error) {
543
+ return toolError(error);
544
+ }
545
+ });
546
+ server.tool("tiki_search_title", "タイトルの部分一致検索(OpenSearch API使用)", {
547
+ query: z.string().describe("検索クエリ(タイトルの部分一致検索)"),
548
+ namespace: z
549
+ .number()
550
+ .optional()
551
+ .describe("名前空間(デフォルト: 0=メイン記事。14=カテゴリー、10=テンプレートなど)"),
552
+ limit: z
553
+ .number()
554
+ .min(1)
555
+ .max(500)
556
+ .optional()
557
+ .describe("取得する結果数(デフォルト: 50)"),
558
+ }, async ({ query, namespace = 0, limit = 50 }) => {
559
+ try {
560
+ const result = await callApi({
561
+ action: "opensearch",
562
+ search: query,
563
+ namespace,
564
+ limit,
565
+ format: "json",
566
+ });
567
+ const arr = result;
568
+ const titles = Array.isArray(arr?.[1]) ? arr[1] : [];
569
+ return toolResult({
570
+ query,
571
+ namespace,
572
+ results: titles,
573
+ count: titles.length,
574
+ });
575
+ }
576
+ catch (error) {
577
+ return toolError(error);
578
+ }
579
+ });
580
+ // ─── Site Info Tools ───
581
+ server.tool("tiki_get_extensions", "有効化されている拡張機能一覧を取得", {}, async () => {
582
+ try {
583
+ const result = await callApi({
584
+ action: "query",
585
+ meta: "siteinfo",
586
+ siprop: "extensions",
587
+ format: "json",
588
+ });
589
+ const r = result;
590
+ const extensions = r?.query?.extensions;
591
+ if (!extensions)
592
+ throw new Error("API response is invalid");
593
+ const extensionList = extensions.map((ext) => ({
594
+ name: ext.name,
595
+ type: ext.type,
596
+ version: ext.version || null,
597
+ author: ext.author || null,
598
+ url: ext.url || null,
599
+ description: ext.description || ext.descriptionmsg || null,
600
+ license: ext["license-name"] || null,
601
+ }));
602
+ const byType = {};
603
+ for (const ext of extensionList) {
604
+ if (!byType[ext.type])
605
+ byType[ext.type] = [];
606
+ byType[ext.type].push(ext.name);
607
+ }
608
+ return toolResult({
609
+ totalCount: extensionList.length,
610
+ byType,
611
+ extensions: extensionList,
612
+ });
613
+ }
614
+ catch (error) {
615
+ return toolError(error);
616
+ }
617
+ });
618
+ server.tool("tiki_get_siteinfo", "サイト基本情報を取得", {
619
+ props: z
620
+ .array(z.enum([
621
+ "general",
622
+ "namespaces",
623
+ "namespacealiases",
624
+ "statistics",
625
+ "interwikimap",
626
+ "languages",
627
+ "magicwords",
628
+ "fileextensions",
629
+ "rightsinfo",
630
+ "restrictions",
631
+ "skins",
632
+ "extensiontags",
633
+ "functionhooks",
634
+ "variables",
635
+ ]))
636
+ .optional()
637
+ .describe("取得するサイト情報のプロパティ(デフォルト: general, statistics)"),
638
+ }, async ({ props = ["general", "statistics"] }) => {
639
+ try {
640
+ const result = await callApi({
641
+ action: "query",
642
+ meta: "siteinfo",
643
+ siprop: props.join("|"),
644
+ format: "json",
645
+ });
646
+ const r = result;
647
+ const siteinfo = r?.query;
648
+ if (!siteinfo)
649
+ throw new Error("API response is invalid");
650
+ return toolResult(siteinfo);
651
+ }
652
+ catch (error) {
653
+ return toolError(error);
654
+ }
655
+ });
656
+ // ─── Start Server ───
657
+ async function main() {
658
+ const transport = new StdioServerTransport();
659
+ await server.connect(transport);
660
+ // eslint-disable-next-line no-console
661
+ console.error("Tiki-pedia MCP server running via stdio");
662
+ }
663
+ main().catch((error) => {
664
+ // eslint-disable-next-line no-console
665
+ console.error("Server error:", error);
666
+ process.exit(1);
667
+ });
668
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,SAAS,GACV,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AAErB,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,iBAAiB,EACjB;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;CACtC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,SAAS,EACT;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;CACtC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,yBAAyB;AAEzB,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,sBAAsB,EACtB;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;CACtC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,UAAU,GACd,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvE,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,YAAY,EACZ;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4BAA4B,CAAC;CAC1C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,aAAa;YACb,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,6BAA6B,EAC7B;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,EAAE;YACb,KAAK;YACL,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAmB,CAAC;QAChC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,wBAAwB,EACxB;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACnD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAET,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC;QAC9C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE/D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,iBAAiB,EACjB;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACxD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAA8C;YACxD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;SACf,CAAC;QACF,IAAI,IAAI;YAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAErC,MAAM,CAAC,GAAG,MAET,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC;QAC9C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE/D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC;YAChB,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,EAAE,EAAE,EAAE,IAAI,KAAK;YACf,UAAU;YACV,KAAK,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,mBAAmB,EACnB;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4BAA4B,CAAC;IACzC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAET,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;QAClD,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,aAAa;YACb,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,yBAAyB;AAEzB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,wBAAwB,EACxB;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;CACtC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,SAAS,GACb,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtE,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,aAAa,EACb;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,6BAA6B,CAAC;CAC3C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,aAAa;YACb,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,qBAAqB,EACrB;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,6BAA6B,CAAC;CAC3C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAC;gBAChB,QAAQ;gBACR,aAAa;gBACb,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,aAAa;YACb,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,IAAI,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8BAA8B,EAC9B;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,EAAE;YACb,KAAK;YACL,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAmB,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,yBAAyB,EACzB;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACpD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAET,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,kBAAkB,EAClB;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qBAAqB,CAAC;IAClC,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qBAAqB,CAAC;IAClC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAA8C;YACxD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;SACf,CAAC;QACF,IAAI,IAAI;YAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAErC,MAAM,CAAC,GAAG,MAET,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;YAChB,IAAI,EAAE,IAAI,IAAI,WAAW;YACzB,EAAE,EAAE,EAAE,IAAI,KAAK;YACf,SAAS;YACT,KAAK,EAAE,SAAS,CAAC,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,+BAA+B,EAC/B;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,6BAA6B,CAAC;CAC3C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,cAAc,GAA2B,EAAE,CAAC;QAEhD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAA8C;gBACxD,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,aAAa;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,KAAK;gBACd,GAAG,cAAc;aAClB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,MAGT,CAAC;YAEF,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;YACxC,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAE5D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;gBAChB,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,aAAa;YACb,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,uBAAuB;AAEvB,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,gCAAgC,EAChC;IACE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;IACjC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2CAA2C,CAC5C;CACJ,EACD,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,oCAAoC;YAC5C,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAUT,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC;QAC9C,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;YACzB,IAAI,EAAE,EAAE,CAAC,MAAM;SAChB,CAAC,CAAC,CAAC;QAEJ,OAAO,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,sCAAsC,EACtC;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2CAA2C,CAC5C;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;IACjC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,gCAAgC,CAAC;CAC9C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,kCAAkC;YAC1C,MAAM,EAAE,sBAAsB;YAC9B,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAcT,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;QAChC,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC,CAAC;QAEJ,OAAO,UAAU,CAAC;YAChB,KAAK;YACL,SAAS;YACT,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;YACrC,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,IAAI;YAC1C,MAAM;YACN,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,+BAA+B,EAC/B;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2CAA2C,CAC5C;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;CAClC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,KAAK;YACb,SAAS;YACT,KAAK;YACL,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAmB,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnE,OAAO,UAAU,CAAC;YAChB,KAAK;YACL,SAAS;YACT,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,0BAA0B;AAE1B,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mBAAmB,EACnB,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAaT,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;QACxC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI;YAC1D,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI;SACrC,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,UAAU,CAAC;YAChB,UAAU,EAAE,aAAa,CAAC,MAAM;YAChC,MAAM;YACN,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,YAAY,EACZ;IACE,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,SAAS;QACT,YAAY;QACZ,kBAAkB;QAClB,YAAY;QACZ,cAAc;QACd,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,YAAY;QACZ,cAAc;QACd,OAAO;QACP,eAAe;QACf,eAAe;QACf,WAAW;KACZ,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CACP,6CAA6C,CAC9C;CACJ,EACD,KAAK,EAAE,EAAE,KAAK,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,MAA6C,CAAC;QACxD,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE1D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CACF,CAAC;AAEF,uBAAuB;AAEvB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC3D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@kongyo2/tiki-pedia-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for 知木ペディア (Tiki-pedia) MediaWiki API on Miraheze",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "tiki-pedia-mcp-server": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "start": "node dist/index.js",
15
+ "build": "tsc",
16
+ "dev": "tsx watch src/index.ts",
17
+ "typecheck": "tsc --noEmit",
18
+ "lint": "oxlint --silent",
19
+ "lint:strict": "oxlint --deny-warnings",
20
+ "format": "prettier --write .",
21
+ "format:check": "prettier --check .",
22
+ "check:file": "prettier --check"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "keywords": [
28
+ "mcp",
29
+ "mediawiki",
30
+ "tiki-pedia",
31
+ "miraheze",
32
+ "model-context-protocol"
33
+ ],
34
+ "license": "MIT",
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "^1.12.0",
37
+ "zod": "^3.24.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.10.0",
41
+ "oxlint": "^1.56.0",
42
+ "prettier": "^3.8.1",
43
+ "tsx": "^4.19.2",
44
+ "typescript": "^5.7.2"
45
+ }
46
+ }