@shuji-bonji/rfcxml-mcp 0.5.3 → 0.6.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/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@shuji-bonji/rfcxml-mcp.svg)](https://www.npmjs.com/package/@shuji-bonji/rfcxml-mcp)
4
4
  [![CI](https://img.shields.io/github/actions/workflow/status/shuji-bonji/rfcxml-mcp/ci.yml?branch=main&label=CI)](https://github.com/shuji-bonji/rfcxml-mcp/actions/workflows/ci.yml)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
6
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen.svg)](https://nodejs.org/)
7
7
  [![Claude Code](https://img.shields.io/badge/Claude%20Code-Compatible-blueviolet)](https://claude.ai/code)
8
8
 
9
9
  [日本語版 README](README.ja.md)
package/dist/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * RFCXML MCP Server
4
- * MCP server for structural understanding of RFC documents
3
+ * RFCXML MCP Server — エントリポイント
4
+ *
5
+ * MCP SDK v2 の `serveStdio` は接続の開始時にプロトコル era を確定し、
6
+ * factory から作った 1 インスタンスをその接続に固定する。
7
+ * サーバの組み立ては `server.ts` の `buildServer()` にある。
5
8
  */
6
9
  export {};
7
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
package/dist/index.js CHANGED
@@ -1,99 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * RFCXML MCP Server
4
- * MCP server for structural understanding of RFC documents
3
+ * RFCXML MCP Server — エントリポイント
4
+ *
5
+ * MCP SDK v2 の `serveStdio` は接続の開始時にプロトコル era を確定し、
6
+ * factory から作った 1 インスタンスをその接続に固定する。
7
+ * サーバの組み立ては `server.ts` の `buildServer()` にある。
5
8
  */
6
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
- import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
- import { tools } from './tools/definitions.js';
10
- import { toolHandlers } from './tools/handlers.js';
11
- import { PACKAGE_INFO } from './config.js';
12
- // Server instance
13
- const server = new Server({
14
- name: PACKAGE_INFO.name,
15
- version: PACKAGE_INFO.version,
16
- }, {
17
- capabilities: {
18
- tools: {},
19
- resources: {},
9
+ import { serveStdio } from '@modelcontextprotocol/server/stdio';
10
+ import { buildServer } from './server.js';
11
+ import { logger } from './utils/logger.js';
12
+ serveStdio(() => buildServer(), {
13
+ onerror: (error) => {
14
+ logger.error('Server', error.message, error);
20
15
  },
21
16
  });
22
- // List tools
23
- server.setRequestHandler(ListToolsRequestSchema, async () => {
24
- return { tools };
25
- });
26
- // Execute tool
27
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
28
- const { name, arguments: args } = request.params;
29
- try {
30
- const handler = toolHandlers[name];
31
- if (!handler) {
32
- throw new Error(`Unknown tool: ${name}`);
33
- }
34
- const result = await handler(args);
35
- return {
36
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
37
- };
38
- }
39
- catch (error) {
40
- const message = error instanceof Error ? error.message : String(error);
41
- return {
42
- content: [{ type: 'text', text: JSON.stringify({ error: message }, null, 2) }],
43
- isError: true,
44
- };
45
- }
46
- });
47
- // List resources (RFC schema)
48
- server.setRequestHandler(ListResourcesRequestSchema, async () => {
49
- return {
50
- resources: [
51
- {
52
- uri: 'rfcxml://schema',
53
- name: 'RFCXML Schema Information',
54
- description: 'RFCXML v3 structure and schema information',
55
- mimeType: 'application/json',
56
- },
57
- ],
58
- };
59
- });
60
- // Read resource
61
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
62
- const { uri } = request.params;
63
- if (uri === 'rfcxml://schema') {
64
- return {
65
- contents: [
66
- {
67
- uri,
68
- mimeType: 'application/json',
69
- text: JSON.stringify({
70
- version: 'v3',
71
- spec: 'RFC 7991 (superseded by rfc7991bis)',
72
- documentation: 'https://authors.ietf.org/rfcxml-vocabulary',
73
- keyElements: {
74
- bcp14: 'Markup for RFC 2119 keywords (MUST, SHOULD, MAY, etc.)',
75
- xref: 'Internal and external references',
76
- reference: 'Bibliography references',
77
- section: 'Section structure',
78
- t: 'Text paragraph',
79
- dl: 'Definition list',
80
- sourcecode: 'Source code',
81
- },
82
- }, null, 2),
83
- },
84
- ],
85
- };
86
- }
87
- throw new Error(`Unknown resource: ${uri}`);
88
- });
89
- // Start server
90
- async function main() {
91
- const transport = new StdioServerTransport();
92
- await server.connect(transport);
93
- console.error('RFCXML MCP Server started');
94
- }
95
- main().catch((error) => {
96
- console.error('Server error:', error);
97
- process.exit(1);
98
- });
17
+ logger.info('Server', 'RFCXML MCP Server started');
99
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MCP Resource Definitions
3
+ *
4
+ * `rfcxml://schema` は RFCXML v3 の語彙情報を返す静的リソース。
5
+ * 内容が定数であるため、サーバ組み立て (`server.ts`) からは切り離してここに置く。
6
+ */
7
+ /** リソース URI */
8
+ export declare const RFCXML_SCHEMA_URI = "rfcxml://schema";
9
+ /** `resources/list` に出す表示情報 */
10
+ export declare const RFCXML_SCHEMA_METADATA: {
11
+ readonly name: "RFCXML Schema Information";
12
+ readonly description: "RFCXML v3 structure and schema information";
13
+ readonly mimeType: "application/json";
14
+ };
15
+ /** `resources/read` が返す本体 */
16
+ export declare const RFCXML_SCHEMA_PAYLOAD: {
17
+ readonly version: "v3";
18
+ readonly spec: "RFC 7991 (superseded by rfc7991bis)";
19
+ readonly documentation: "https://authors.ietf.org/rfcxml-vocabulary";
20
+ readonly keyElements: {
21
+ readonly bcp14: "Markup for RFC 2119 keywords (MUST, SHOULD, MAY, etc.)";
22
+ readonly xref: "Internal and external references";
23
+ readonly reference: "Bibliography references";
24
+ readonly section: "Section structure";
25
+ readonly t: "Text paragraph";
26
+ readonly dl: "Definition list";
27
+ readonly sourcecode: "Source code";
28
+ };
29
+ };
30
+ //# sourceMappingURL=definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/resources/definitions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAEnD,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAaxB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MCP Resource Definitions
3
+ *
4
+ * `rfcxml://schema` は RFCXML v3 の語彙情報を返す静的リソース。
5
+ * 内容が定数であるため、サーバ組み立て (`server.ts`) からは切り離してここに置く。
6
+ */
7
+ /** リソース URI */
8
+ export const RFCXML_SCHEMA_URI = 'rfcxml://schema';
9
+ /** `resources/list` に出す表示情報 */
10
+ export const RFCXML_SCHEMA_METADATA = {
11
+ name: 'RFCXML Schema Information',
12
+ description: 'RFCXML v3 structure and schema information',
13
+ mimeType: 'application/json',
14
+ };
15
+ /** `resources/read` が返す本体 */
16
+ export const RFCXML_SCHEMA_PAYLOAD = {
17
+ version: 'v3',
18
+ spec: 'RFC 7991 (superseded by rfc7991bis)',
19
+ documentation: 'https://authors.ietf.org/rfcxml-vocabulary',
20
+ keyElements: {
21
+ bcp14: 'Markup for RFC 2119 keywords (MUST, SHOULD, MAY, etc.)',
22
+ xref: 'Internal and external references',
23
+ reference: 'Bibliography references',
24
+ section: 'Section structure',
25
+ t: 'Text paragraph',
26
+ dl: 'Definition list',
27
+ sourcecode: 'Source code',
28
+ },
29
+ };
30
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/resources/definitions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAEnD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,4CAA4C;IACzD,QAAQ,EAAE,kBAAkB;CACpB,CAAC;AAEX,6BAA6B;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,qCAAqC;IAC3C,aAAa,EAAE,4CAA4C;IAC3D,WAAW,EAAE;QACX,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,kCAAkC;QACxC,SAAS,EAAE,yBAAyB;QACpC,OAAO,EAAE,mBAAmB;QAC5B,CAAC,EAAE,gBAAgB;QACnB,EAAE,EAAE,iBAAiB;QACrB,UAAU,EAAE,aAAa;KAC1B;CACO,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * RFCXML MCP Server の組み立て
3
+ *
4
+ * MCP SDK v2 では stdio の起動が `serveStdio(factory)` になり、接続ごとに
5
+ * factory から 1 インスタンスが作られる。そのためサーバ生成をこの
6
+ * `buildServer()` に切り出し、`index.ts` は起動だけを担う。
7
+ * テストからは `InMemoryTransport` でこの同じ関数を叩ける。
8
+ */
9
+ import { McpServer } from '@modelcontextprotocol/server';
10
+ /**
11
+ * MCP サーバを 1 つ組み立てて返す。
12
+ *
13
+ * ツールは `definitions.ts`(入力スキーマ)と `handlers.ts`(実装)の対応表から
14
+ * 一括登録する。新しいツールを足すときに触るのはこの 2 ファイルだけで、
15
+ * この関数は変更しなくてよい。
16
+ */
17
+ export declare function buildServer(): McpServer;
18
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,8BAA8B,CAAC;AAyCzE;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAyDvC"}
package/dist/server.js ADDED
@@ -0,0 +1,93 @@
1
+ /**
2
+ * RFCXML MCP Server の組み立て
3
+ *
4
+ * MCP SDK v2 では stdio の起動が `serveStdio(factory)` になり、接続ごとに
5
+ * factory から 1 インスタンスが作られる。そのためサーバ生成をこの
6
+ * `buildServer()` に切り出し、`index.ts` は起動だけを担う。
7
+ * テストからは `InMemoryTransport` でこの同じ関数を叩ける。
8
+ */
9
+ import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
10
+ import { tools } from './tools/definitions.js';
11
+ import { toolHandlers } from './tools/handlers.js';
12
+ import { RFCXML_SCHEMA_METADATA, RFCXML_SCHEMA_PAYLOAD, RFCXML_SCHEMA_URI, } from './resources/definitions.js';
13
+ import { PACKAGE_INFO } from './config.js';
14
+ /**
15
+ * `initialize` の応答としてクライアントへ返す説明。
16
+ *
17
+ * README やツール説明より早く、ツールを 1 つも呼ばないうちに読まれる。
18
+ * 潰したい誤解は 2 つある。
19
+ *
20
+ * 1. このサーバが「適合判定器」だと読まれること。
21
+ * `validate_statement` は RFC 本文中の BCP 14 キーワードと文を突き合わせるだけで、
22
+ * 実装が適合しているかどうかの判定は返さない。
23
+ * 2. 空の結果が「そのような規定は存在しない」と読まれること。
24
+ * RFC 8650 より前の RFC には公式 XML がなくテキストにフォールバックするため、
25
+ * 取得できる範囲がツールごとに変わる。
26
+ *
27
+ * 文面を薄める前に、この 2 つが別の場所で言えているかを確認すること。
28
+ */
29
+ const INSTRUCTIONS = `This server is a structured READER of published RFCs. It is not a conformance judge and not a web search.
30
+
31
+ It does NOT do the following:
32
+ - It does not decide whether an implementation conforms to an RFC. \`validate_statement\` matches a sentence against the BCP 14 keywords found in the RFC text and returns the matched requirements; the verdict is yours.
33
+ - It does not cover Internet-Drafts or non-RFC documents. Only published RFCs are reachable.
34
+ - It does not fetch arbitrary URLs. Sources are fixed to rfc-editor.org and the IETF Datatracker API.
35
+
36
+ For keyword search across IETF documents and for Internet-Drafts, use the ietf MCP server (\`search_ietf_rfc_by_keyword\`, \`get_ietf_doc\`, \`list_ietf_docs_number\`).
37
+
38
+ An empty result means "this RFC's text did not yield a match in the requested scope", NOT "no such requirement exists". In particular:
39
+ - RFCs numbered below 8650 usually have no official RFCXML. The text parser is used instead: \`get_related_sections\` is limited, and \`get_rfc_dependencies\` may return placeholder titles/anchors. Every result carries \`_source\` and, where relevant, \`_sourceNote\` — read them before concluding.
40
+ - Requirement extraction is keyword-based (RFC 2119 / RFC 8174). A requirement written without those keywords is not reported.
41
+
42
+ Costly options: \`includeAuthors=true\` on \`get_rfc_structure\` adds 1+N Datatracker requests, and \`includeContent=true\` returns the full section bodies.`;
43
+ /**
44
+ * MCP サーバを 1 つ組み立てて返す。
45
+ *
46
+ * ツールは `definitions.ts`(入力スキーマ)と `handlers.ts`(実装)の対応表から
47
+ * 一括登録する。新しいツールを足すときに触るのはこの 2 ファイルだけで、
48
+ * この関数は変更しなくてよい。
49
+ */
50
+ export function buildServer() {
51
+ const server = new McpServer({
52
+ name: PACKAGE_INFO.name,
53
+ version: PACKAGE_INFO.version,
54
+ }, { instructions: INSTRUCTIONS });
55
+ for (const tool of tools) {
56
+ const handler = toolHandlers[tool.name];
57
+ if (!handler) {
58
+ // 定義と実装の対応漏れ。起動時に落として気づけるようにする。
59
+ throw new Error(`No handler registered for tool: ${tool.name}`);
60
+ }
61
+ server.registerTool(tool.name, {
62
+ description: tool.description,
63
+ // definitions.ts は JSON Schema をそのまま持つ。v2 は Standard Schema を
64
+ // 要求するため fromJsonSchema で包む(zod への書き換えは不要)。
65
+ inputSchema: fromJsonSchema(tool.inputSchema),
66
+ }, async (args) => {
67
+ try {
68
+ const result = await handler(args);
69
+ return {
70
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
71
+ };
72
+ }
73
+ catch (error) {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ return {
76
+ content: [{ type: 'text', text: JSON.stringify({ error: message }, null, 2) }],
77
+ isError: true,
78
+ };
79
+ }
80
+ });
81
+ }
82
+ server.registerResource('rfcxml-schema', RFCXML_SCHEMA_URI, RFCXML_SCHEMA_METADATA, async (uri) => ({
83
+ contents: [
84
+ {
85
+ uri: uri.href,
86
+ mimeType: RFCXML_SCHEMA_METADATA.mimeType,
87
+ text: JSON.stringify(RFCXML_SCHEMA_PAYLOAD, null, 2),
88
+ },
89
+ ],
90
+ }));
91
+ return server;
92
+ }
93
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,YAAY,GAAG;;;;;;;;;;;;;6JAawI,CAAC;AAE9J;;;;;;GAMG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,OAAO,EAAE,YAAY,CAAC,OAAO;KAC9B,EACD,EAAE,YAAY,EAAE,YAAY,EAAE,CAC/B,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,gCAAgC;YAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,8DAA8D;YAC9D,4CAA4C;YAC5C,WAAW,EAAE,cAAc,CAA0B,IAAI,CAAC,WAAW,CAAC;SACvE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC5E,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBACvF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,gBAAgB,CACrB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;gBACzC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;aACrD;SACF;KACF,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,6 +1,16 @@
1
1
  /**
2
2
  * MCP Tool Definitions
3
3
  */
4
- import type { Tool } from '@modelcontextprotocol/sdk/types.js';
5
- export declare const tools: Tool[];
4
+ import type { JsonSchemaType, Tool } from '@modelcontextprotocol/server';
5
+ /**
6
+ * ツール定義。
7
+ *
8
+ * `Tool['inputSchema']` は wire 上の緩い JSON 値型のため、`fromJsonSchema()` が
9
+ * 受け取る `JsonSchemaType` にそのままは渡せない。ここで inputSchema だけを
10
+ * 差し替えて、`server.ts` 側でのキャストを不要にする。
11
+ */
12
+ export type ToolDefinition = Omit<Tool, 'inputSchema'> & {
13
+ inputSchema: JsonSchemaType;
14
+ };
15
+ export declare const tools: ToolDefinition[];
6
16
  //# sourceMappingURL=definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,KAAK,EAAE,IAAI,EAgLvB,CAAC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG;IACvD,WAAW,EAAE,cAAc,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,cAAc,EAgLjC,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * MCP Tool Definitions
3
- */
4
1
  export const tools = [
5
2
  // ========================================
6
3
  // Phase 1: Basic Structure
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shuji-bonji/rfcxml-mcp",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "MCP server for structured understanding of RFC documents via RFCXML",
5
5
  "keywords": [
6
6
  "mcp",
@@ -41,21 +41,22 @@
41
41
  "prepublishOnly": "npm run build"
42
42
  },
43
43
  "dependencies": {
44
- "@modelcontextprotocol/sdk": "^1.29.0",
45
- "fast-xml-parser": "^4.5.0"
44
+ "@modelcontextprotocol/server": "^2.0.0",
45
+ "fast-xml-parser": "^5.11.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@eslint/js": "^9.39.2",
49
+ "@modelcontextprotocol/client": "^2.0.0",
49
50
  "@types/node": "^22.0.0",
50
- "@vitest/coverage-v8": "^2.1.9",
51
+ "@vitest/coverage-v8": "^4.1.11",
51
52
  "eslint": "^9.0.0",
52
53
  "eslint-config-prettier": "^10.1.8",
53
54
  "prettier": "^3.8.0",
54
- "typescript": "^5.7.0",
55
+ "typescript": "^6.0.3",
55
56
  "typescript-eslint": "^8.53.0",
56
- "vitest": "^2.1.0"
57
+ "vitest": "^4.1.11"
57
58
  },
58
59
  "engines": {
59
- "node": ">=20.0.0"
60
+ "node": ">=22.0.0"
60
61
  }
61
62
  }