@shuji-bonji/rfcxml-mcp 0.3.0 → 0.4.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.
Files changed (54) hide show
  1. package/README.ja.md +39 -33
  2. package/README.md +37 -29
  3. package/dist/config.d.ts +26 -26
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +28 -25
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.d.ts +30 -5
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/constants.js +49 -7
  10. package/dist/constants.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +18 -17
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/checklist-generator.d.ts +43 -0
  15. package/dist/services/checklist-generator.d.ts.map +1 -0
  16. package/dist/services/checklist-generator.js +107 -0
  17. package/dist/services/checklist-generator.js.map +1 -0
  18. package/dist/services/rfc-fetcher.d.ts +11 -11
  19. package/dist/services/rfc-fetcher.d.ts.map +1 -1
  20. package/dist/services/rfc-fetcher.js +37 -31
  21. package/dist/services/rfc-fetcher.js.map +1 -1
  22. package/dist/services/rfc-text-parser.d.ts +4 -6
  23. package/dist/services/rfc-text-parser.d.ts.map +1 -1
  24. package/dist/services/rfc-text-parser.js +9 -40
  25. package/dist/services/rfc-text-parser.js.map +1 -1
  26. package/dist/services/rfcxml-parser.d.ts +5 -18
  27. package/dist/services/rfcxml-parser.d.ts.map +1 -1
  28. package/dist/services/rfcxml-parser.js +21 -95
  29. package/dist/services/rfcxml-parser.js.map +1 -1
  30. package/dist/tools/definitions.d.ts +1 -1
  31. package/dist/tools/definitions.js +27 -27
  32. package/dist/tools/definitions.js.map +1 -1
  33. package/dist/tools/handlers.d.ts +48 -21
  34. package/dist/tools/handlers.d.ts.map +1 -1
  35. package/dist/tools/handlers.js +72 -156
  36. package/dist/tools/handlers.js.map +1 -1
  37. package/dist/types/index.d.ts +17 -0
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/utils/requirement-extractor.d.ts +24 -0
  40. package/dist/utils/requirement-extractor.d.ts.map +1 -0
  41. package/dist/utils/requirement-extractor.js +100 -0
  42. package/dist/utils/requirement-extractor.js.map +1 -0
  43. package/dist/utils/section.d.ts +21 -0
  44. package/dist/utils/section.d.ts.map +1 -0
  45. package/dist/utils/section.js +53 -0
  46. package/dist/utils/section.js.map +1 -0
  47. package/dist/utils/text.d.ts.map +1 -1
  48. package/dist/utils/text.js +3 -2
  49. package/dist/utils/text.js.map +1 -1
  50. package/dist/utils/validation.d.ts +14 -0
  51. package/dist/utils/validation.d.ts.map +1 -0
  52. package/dist/utils/validation.js +30 -0
  53. package/dist/utils/validation.js.map +1 -0
  54. package/package.json +1 -1
package/README.ja.md CHANGED
@@ -29,15 +29,15 @@ RFC 文書を **構造的に理解** するための MCP サーバー。
29
29
 
30
30
  ## 既存 MCP との違い
31
31
 
32
- | 機能 | 既存 mcp-rfc | RFCXML MCP |
33
- |------|-------------|------------|
34
- | RFC テキスト取得 | ✅ | ✅ |
35
- | セクション抽出 | ✅ (テキストベース) | ✅ (構造ベース) |
36
- | MUST/SHOULD/MAY 抽出 | ❌ | ✅ |
37
- | 条件・例外の構造化 | ❌ | ✅ |
38
- | RFC 間依存グラフ | ❌ | ✅ |
39
- | 定義スコープ管理 | ❌ | ✅ |
40
- | 実装チェックリスト | ❌ | ✅ |
32
+ | 機能 | 既存 mcp-rfc | RFCXML MCP |
33
+ | -------------------- | ------------------- | --------------- |
34
+ | RFC テキスト取得 | ✅ | ✅ |
35
+ | セクション抽出 | ✅ (テキストベース) | ✅ (構造ベース) |
36
+ | MUST/SHOULD/MAY 抽出 | ❌ | ✅ |
37
+ | 条件・例外の構造化 | ❌ | ✅ |
38
+ | RFC 間依存グラフ | ❌ | ✅ |
39
+ | 定義スコープ管理 | ❌ | ✅ |
40
+ | 実装チェックリスト | ❌ | ✅ |
41
41
 
42
42
  ## クイックスタート
43
43
 
@@ -57,6 +57,7 @@ MCP 設定ファイルに以下を追加:
57
57
  ```
58
58
 
59
59
  設定ファイルの場所:
60
+
60
61
  - **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
61
62
  - **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
62
63
  - **Claude Code**: `.claude/settings.json` または `claude settings` コマンド
@@ -111,20 +112,22 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
111
112
  "rfc": 6455,
112
113
  "sections": [...],
113
114
  "_source": "text",
114
- "_sourceNote": "⚠️ テキストからの解析結果です。精度が低い可能性があります。"
115
+ "_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
115
116
  }
116
117
  ```
117
118
 
118
- | `_source` | 説明 |
119
- |-----------|------|
120
- | `xml` | RFCXML から解析(高精度) |
121
- | `text` | テキストから解析(中精度) |
119
+ > **Note**: v0.4.0 以降、すべてのメッセージは英語で出力されます(国際化対応)。
120
+
121
+ | `_source` | 説明 |
122
+ | --------- | -------------------------- |
123
+ | `xml` | RFCXML から解析(高精度) |
124
+ | `text` | テキストから解析(中精度) |
122
125
 
123
126
  ### 対応状況
124
127
 
125
- | RFC | 形式 | 備考 |
126
- |-----|------|------|
127
- | RFC 8650 以降 | XML | RFCXML v3 公式対応 |
128
+ | RFC | 形式 | 備考 |
129
+ | ------------- | -------- | ------------------ |
130
+ | RFC 8650 以降 | XML | RFCXML v3 公式対応 |
128
131
  | RFC 8650 未満 | テキスト | 自動フォールバック |
129
132
 
130
133
  ## 出力サンプル
@@ -211,20 +214,22 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
211
214
 
212
215
  ### `generate_checklist` - 実装チェックリスト生成
213
216
 
217
+ > **Note**: v0.4.0 以降、チェックリストは英語で出力されます。
218
+
214
219
  ```markdown
215
- # RFC 9293 実装チェックリスト
220
+ # RFC 9293 Implementation Checklist
216
221
 
217
222
  **Transmission Control Protocol (TCP)**
218
223
 
219
- 役割: クライアント
224
+ Role: client
220
225
 
221
- ## 必須要件 (MUST / REQUIRED / SHALL)
226
+ ## Mandatory Requirements (MUST / REQUIRED / SHALL)
222
227
 
223
228
  - [ ] A TCP implementation support simultaneous open attempts (MUST-10). (section-3.5)
224
229
  - [ ] TCP endpoints implement both sending and receiving the MSS Option (MUST-14). (section-3.7.1)
225
230
  - [ ] The RTO be computed according to the algorithm in, including Karn's algorithm (MUST-18). (section-3.8.1)
226
231
 
227
- ## 任意要件 (MAY / OPTIONAL)
232
+ ## Optional Requirements (MAY / OPTIONAL)
228
233
 
229
234
  - [ ] Implementers include "keep-alives" in their TCP implementations (MAY-5). (section-3.8.4)
230
235
  ```
@@ -242,7 +247,7 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
242
247
  { "number": "5", "title": "Data Framing" }
243
248
  ],
244
249
  "_source": "text",
245
- "_sourceNote": "⚠️ テキストからの解析結果です。精度が低い可能性があります。"
250
+ "_sourceNote": "Warning: Parsed from text format. Accuracy may be limited."
246
251
  }
247
252
  ```
248
253
 
@@ -250,13 +255,14 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
250
255
 
251
256
  [examples/](./examples/) ディレクトリに `generate_checklist` ツールで生成したチェックリストのサンプルがあります:
252
257
 
253
- | RFC | プロトコル | ソース |
254
- |-----|----------|--------|
255
- | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | テキスト(フォールバック) |
256
- | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
257
- | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | テキスト(フォールバック) |
258
+ | RFC | プロトコル | ソース |
259
+ | ----------------------------------------------------- | ---------- | -------------------------- |
260
+ | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | テキスト(フォールバック) |
261
+ | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
262
+ | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | テキスト(フォールバック) |
258
263
 
259
264
  **Claude への依頼例:**
265
+
260
266
  ```
261
267
  RFC 9293 (TCP) の実装チェックリストを生成してください。
262
268
  ```
@@ -314,12 +320,12 @@ src/
314
320
 
315
321
  LRU(Least Recently Used)キャッシュでメモリ使用量を制限:
316
322
 
317
- | キャッシュ | 最大エントリ数 | 内容 |
318
- |-----------|---------------|------|
319
- | XML キャッシュ | 20 | 生の RFCXML |
320
- | Text キャッシュ | 20 | 生のテキスト |
321
- | Metadata キャッシュ | 100 | RFC メタデータ |
322
- | Parse キャッシュ | 50 | パース済み構造 |
323
+ | キャッシュ | 最大エントリ数 | 内容 |
324
+ | ------------------- | -------------- | -------------- |
325
+ | XML キャッシュ | 20 | 生の RFCXML |
326
+ | Text キャッシュ | 20 | 生のテキスト |
327
+ | Metadata キャッシュ | 100 | RFC メタデータ |
328
+ | Parse キャッシュ | 50 | パース済み構造 |
323
329
 
324
330
  ## 開発
325
331
 
package/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.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
+ [日本語版 README](README.ja.md)
10
+
9
11
  A Model Context Protocol (MCP) server for **structured understanding** of RFC documents.
10
12
 
11
13
  ## Purpose
@@ -33,15 +35,15 @@ Unlike existing text-based RFC MCP servers, this server leverages the semantic s
33
35
 
34
36
  ## Comparison with Existing MCPs
35
37
 
36
- | Feature | Existing mcp-rfc | RFCXML MCP |
37
- |---------|------------------|------------|
38
- | RFC text retrieval | ✅ | ✅ |
39
- | Section extraction | ✅ (text-based) | ✅ (structure-based) |
40
- | MUST/SHOULD/MAY extraction | ❌ | ✅ |
41
- | Condition/exception structuring | ❌ | ✅ |
42
- | RFC dependency graph | ❌ | ✅ |
43
- | Definition scope management | ❌ | ✅ |
44
- | Implementation checklist | ❌ | ✅ |
38
+ | Feature | Existing mcp-rfc | RFCXML MCP |
39
+ | ------------------------------- | ---------------- | -------------------- |
40
+ | RFC text retrieval | ✅ | ✅ |
41
+ | Section extraction | ✅ (text-based) | ✅ (structure-based) |
42
+ | MUST/SHOULD/MAY extraction | ❌ | ✅ |
43
+ | Condition/exception structuring | ❌ | ✅ |
44
+ | RFC dependency graph | ❌ | ✅ |
45
+ | Definition scope management | ❌ | ✅ |
46
+ | Implementation checklist | ❌ | ✅ |
45
47
 
46
48
  ## Quick Start
47
49
 
@@ -61,6 +63,7 @@ Add the following to your MCP configuration file:
61
63
  ```
62
64
 
63
65
  Configuration file locations:
66
+
64
67
  - **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
65
68
  - **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
66
69
  - **Claude Code**: `.claude/settings.json` or use `claude settings` command
@@ -119,17 +122,17 @@ All responses include source information:
119
122
  }
120
123
  ```
121
124
 
122
- | `_source` | Description |
123
- |-----------|-------------|
124
- | `xml` | Parsed from RFCXML (high accuracy) |
125
- | `text` | Parsed from text (medium accuracy) |
125
+ | `_source` | Description |
126
+ | --------- | ---------------------------------- |
127
+ | `xml` | Parsed from RFCXML (high accuracy) |
128
+ | `text` | Parsed from text (medium accuracy) |
126
129
 
127
130
  ### Compatibility
128
131
 
129
- | RFC | Format | Notes |
130
- |-----|--------|-------|
131
- | RFC 8650+ | XML | Official RFCXML v3 support |
132
- | Before RFC 8650 | Text | Automatic fallback |
132
+ | RFC | Format | Notes |
133
+ | --------------- | ------ | -------------------------- |
134
+ | RFC 8650+ | XML | Official RFCXML v3 support |
135
+ | Before RFC 8650 | Text | Automatic fallback |
133
136
 
134
137
  ## Output Samples
135
138
 
@@ -254,13 +257,14 @@ Role: Client
254
257
 
255
258
  See the [examples/](./examples/) directory for complete checklist samples:
256
259
 
257
- | RFC | Protocol | Source |
258
- |-----|----------|--------|
260
+ | RFC | Protocol | Source |
261
+ | ----------------------------------------------------- | --------- | --------------- |
259
262
  | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | Text (fallback) |
260
- | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
261
- | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | Text (fallback) |
263
+ | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
264
+ | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | Text (fallback) |
262
265
 
263
266
  **Example prompt for Claude:**
267
+
264
268
  ```
265
269
  Generate an implementation checklist for RFC 9293 (TCP).
266
270
  ```
@@ -277,7 +281,8 @@ src/
277
281
  ├── services/
278
282
  │ ├── rfc-fetcher.ts # RFC fetching (parallel)
279
283
  │ ├── rfcxml-parser.ts # RFCXML parser
280
- └── rfc-text-parser.ts # Text fallback parser
284
+ ├── rfc-text-parser.ts # Text fallback parser
285
+ │ └── checklist-generator.ts # Checklist generation service
281
286
  ├── tools/
282
287
  │ ├── definitions.ts # MCP tool definitions
283
288
  │ └── handlers.ts # Tool handlers
@@ -286,7 +291,10 @@ src/
286
291
  └── utils/
287
292
  ├── cache.ts # LRU cache
288
293
  ├── fetch.ts # Parallel fetch utility
289
- └── text.ts # Text processing utility
294
+ ├── requirement-extractor.ts # Shared requirement extraction
295
+ ├── section.ts # Section search utilities
296
+ ├── text.ts # Text processing utility
297
+ └── validation.ts # Input validation
290
298
  ```
291
299
 
292
300
  ### RFC Fetch Optimization
@@ -318,12 +326,12 @@ Sends parallel requests to multiple sources (RFC Editor, IETF Tools, Datatracker
318
326
 
319
327
  LRU (Least Recently Used) cache with memory limits:
320
328
 
321
- | Cache | Max Entries | Content |
322
- |-------|-------------|---------|
323
- | XML Cache | 20 | Raw RFCXML |
324
- | Text Cache | 20 | Raw text |
325
- | Metadata Cache | 100 | RFC metadata |
326
- | Parse Cache | 50 | Parsed structure |
329
+ | Cache | Max Entries | Content |
330
+ | -------------- | ----------- | ---------------- |
331
+ | XML Cache | 20 | Raw RFCXML |
332
+ | Text Cache | 20 | Raw text |
333
+ | Metadata Cache | 100 | RFC metadata |
334
+ | Parse Cache | 50 | Parsed structure |
327
335
 
328
336
  ## Development
329
337
 
package/dist/config.d.ts CHANGED
@@ -1,66 +1,66 @@
1
1
  /**
2
- * アプリケーション設定
3
- * すべての設定値を一箇所で管理
2
+ * Application Configuration
3
+ * Centralized configuration management
4
4
  */
5
5
  /**
6
- * パッケージ情報
6
+ * Package information (dynamically loaded from package.json)
7
7
  */
8
8
  export declare const PACKAGE_INFO: {
9
- readonly name: "rfcxml-mcp";
10
- readonly version: "0.1.2";
9
+ readonly name: string;
10
+ readonly version: string;
11
11
  };
12
12
  /**
13
- * HTTP リクエスト設定
13
+ * HTTP request configuration
14
14
  */
15
15
  export declare const HTTP_CONFIG: {
16
- /** User-Agent ヘッダー */
17
- readonly userAgent: "rfcxml-mcp/0.1.2";
18
- /** タイムアウト(ミリ秒) */
16
+ /** User-Agent header */
17
+ readonly userAgent: `${string}/${string}`;
18
+ /** Timeout in milliseconds */
19
19
  readonly timeout: 30000;
20
- /** リトライ回数 */
20
+ /** Maximum retry attempts */
21
21
  readonly maxRetries: 3;
22
22
  };
23
23
  /**
24
- * キャッシュ設定
24
+ * Cache configuration
25
25
  */
26
26
  export declare const CACHE_CONFIG: {
27
- /** XML 生データキャッシュ(小さめ:パース済みがメイン) */
27
+ /** XML raw data cache (smaller since parsed cache is primary) */
28
28
  readonly xml: {
29
29
  readonly maxSize: 20;
30
30
  readonly name: "XMLCache";
31
31
  };
32
- /** テキスト生データキャッシュ */
32
+ /** Text raw data cache */
33
33
  readonly text: {
34
34
  readonly maxSize: 20;
35
35
  readonly name: "TextCache";
36
36
  };
37
- /** メタデータキャッシュ(軽量なので多め) */
37
+ /** Metadata cache (lightweight, so larger) */
38
38
  readonly metadata: {
39
39
  readonly maxSize: 100;
40
40
  readonly name: "MetadataCache";
41
41
  };
42
- /** パース済み RFC キャッシュ(メインキャッシュ) */
42
+ /** Parsed RFC cache (main cache) */
43
43
  readonly parsed: {
44
44
  readonly maxSize: 50;
45
45
  readonly name: "ParseCache";
46
46
  };
47
47
  };
48
48
  /**
49
- * RFC 関連の設定
49
+ * RFC-related configuration
50
50
  */
51
51
  export declare const RFC_CONFIG: {
52
52
  /**
53
- * RFCXML v3 が確実に利用可能な最小 RFC 番号
54
- * RFC 8650 (2019年12月) 以降は公式に RFCXML v3 形式
53
+ * Minimum RFC number where RFCXML v3 is reliably available
54
+ * RFC 8650 (December 2019) and later use official RFCXML v3 format
55
55
  */
56
56
  readonly xmlAvailableFrom: 8650;
57
57
  };
58
58
  /**
59
- * RFC XML ソースの取得元
60
- * 優先順位順に定義
59
+ * RFC XML source URLs
60
+ * Defined in priority order
61
61
  */
62
62
  export declare const RFC_XML_SOURCES: {
63
- /** RFC Editor 公式 */
63
+ /** RFC Editor official */
64
64
  readonly rfcEditor: (num: number) => string;
65
65
  /** IETF Tools */
66
66
  readonly ietfTools: (num: number) => string;
@@ -68,11 +68,11 @@ export declare const RFC_XML_SOURCES: {
68
68
  readonly datatracker: (num: number) => string;
69
69
  };
70
70
  /**
71
- * RFC テキストソースの取得元
72
- * 優先順位順に定義
71
+ * RFC text source URLs
72
+ * Defined in priority order
73
73
  */
74
74
  export declare const RFC_TEXT_SOURCES: {
75
- /** RFC Editor 公式(テキスト) */
75
+ /** RFC Editor official (text) */
76
76
  readonly rfcEditor: (num: number) => string;
77
77
  /** IETF Tools */
78
78
  readonly ietfTools: (num: number) => string;
@@ -81,11 +81,11 @@ export declare const RFC_TEXT_SOURCES: {
81
81
  * IETF Datatracker API
82
82
  */
83
83
  export declare const DATATRACKER_API: {
84
- /** RFC ドキュメント情報 */
84
+ /** RFC document information */
85
85
  readonly document: (num: number) => string;
86
86
  };
87
87
  /**
88
- * RFC XML 形式で利用可能か確認
88
+ * Check if RFC is likely available in XML format
89
89
  */
90
90
  export declare function isRFCXMLLikelyAvailable(rfcNumber: number): boolean;
91
91
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,sBAAsB;;IAEtB,kBAAkB;;IAElB,aAAa;;CAEL,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,mCAAmC;;;;;IAKnC,oBAAoB;;;;;IAKpB,0BAA0B;;;;;IAK1B,gCAAgC;;;;;CAKxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB;;;OAGG;;CAEK,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,oBAAoB;8BACH,MAAM;IACvB,iBAAiB;8BACA,MAAM;IACvB,kBAAkB;gCACC,MAAM;CACjB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B,0BAA0B;8BACT,MAAM;IACvB,iBAAiB;8BACA,MAAM;CACf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,mBAAmB;6BACH,MAAM;CACd,CAAC;AAEX;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAElE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,wBAAwB;;IAExB,8BAA8B;;IAE9B,6BAA6B;;CAErB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,iEAAiE;;;;;IAKjE,0BAA0B;;;;;IAK1B,8CAA8C;;;;;IAK9C,oCAAoC;;;;;CAK5B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB;;;OAGG;;CAEK,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,0BAA0B;8BACT,MAAM;IACvB,iBAAiB;8BACA,MAAM;IACvB,kBAAkB;gCACC,MAAM;CACjB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iCAAiC;8BAChB,MAAM;IACvB,iBAAiB;8BACA,MAAM;CACf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,+BAA+B;6BACf,MAAM;CACd,CAAC;AAEX;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAElE"}
package/dist/config.js CHANGED
@@ -1,66 +1,69 @@
1
1
  /**
2
- * アプリケーション設定
3
- * すべての設定値を一箇所で管理
2
+ * Application Configuration
3
+ * Centralized configuration management
4
4
  */
5
+ import { createRequire } from 'module';
6
+ const require = createRequire(import.meta.url);
7
+ const packageJson = require('../package.json');
5
8
  /**
6
- * パッケージ情報
9
+ * Package information (dynamically loaded from package.json)
7
10
  */
8
11
  export const PACKAGE_INFO = {
9
- name: 'rfcxml-mcp',
10
- version: '0.1.2',
12
+ name: packageJson.name,
13
+ version: packageJson.version,
11
14
  };
12
15
  /**
13
- * HTTP リクエスト設定
16
+ * HTTP request configuration
14
17
  */
15
18
  export const HTTP_CONFIG = {
16
- /** User-Agent ヘッダー */
19
+ /** User-Agent header */
17
20
  userAgent: `${PACKAGE_INFO.name}/${PACKAGE_INFO.version}`,
18
- /** タイムアウト(ミリ秒) */
21
+ /** Timeout in milliseconds */
19
22
  timeout: 30000,
20
- /** リトライ回数 */
23
+ /** Maximum retry attempts */
21
24
  maxRetries: 3,
22
25
  };
23
26
  /**
24
- * キャッシュ設定
27
+ * Cache configuration
25
28
  */
26
29
  export const CACHE_CONFIG = {
27
- /** XML 生データキャッシュ(小さめ:パース済みがメイン) */
30
+ /** XML raw data cache (smaller since parsed cache is primary) */
28
31
  xml: {
29
32
  maxSize: 20,
30
33
  name: 'XMLCache',
31
34
  },
32
- /** テキスト生データキャッシュ */
35
+ /** Text raw data cache */
33
36
  text: {
34
37
  maxSize: 20,
35
38
  name: 'TextCache',
36
39
  },
37
- /** メタデータキャッシュ(軽量なので多め) */
40
+ /** Metadata cache (lightweight, so larger) */
38
41
  metadata: {
39
42
  maxSize: 100,
40
43
  name: 'MetadataCache',
41
44
  },
42
- /** パース済み RFC キャッシュ(メインキャッシュ) */
45
+ /** Parsed RFC cache (main cache) */
43
46
  parsed: {
44
47
  maxSize: 50,
45
48
  name: 'ParseCache',
46
49
  },
47
50
  };
48
51
  /**
49
- * RFC 関連の設定
52
+ * RFC-related configuration
50
53
  */
51
54
  export const RFC_CONFIG = {
52
55
  /**
53
- * RFCXML v3 が確実に利用可能な最小 RFC 番号
54
- * RFC 8650 (2019年12月) 以降は公式に RFCXML v3 形式
56
+ * Minimum RFC number where RFCXML v3 is reliably available
57
+ * RFC 8650 (December 2019) and later use official RFCXML v3 format
55
58
  */
56
59
  xmlAvailableFrom: 8650,
57
60
  };
58
61
  /**
59
- * RFC XML ソースの取得元
60
- * 優先順位順に定義
62
+ * RFC XML source URLs
63
+ * Defined in priority order
61
64
  */
62
65
  export const RFC_XML_SOURCES = {
63
- /** RFC Editor 公式 */
66
+ /** RFC Editor official */
64
67
  rfcEditor: (num) => `https://www.rfc-editor.org/rfc/rfc${num}.xml`,
65
68
  /** IETF Tools */
66
69
  ietfTools: (num) => `https://xml2rfc.ietf.org/public/rfc/rfc${num}.xml`,
@@ -68,11 +71,11 @@ export const RFC_XML_SOURCES = {
68
71
  datatracker: (num) => `https://datatracker.ietf.org/doc/rfc${num}/xml/`,
69
72
  };
70
73
  /**
71
- * RFC テキストソースの取得元
72
- * 優先順位順に定義
74
+ * RFC text source URLs
75
+ * Defined in priority order
73
76
  */
74
77
  export const RFC_TEXT_SOURCES = {
75
- /** RFC Editor 公式(テキスト) */
78
+ /** RFC Editor official (text) */
76
79
  rfcEditor: (num) => `https://www.rfc-editor.org/rfc/rfc${num}.txt`,
77
80
  /** IETF Tools */
78
81
  ietfTools: (num) => `https://tools.ietf.org/rfc/rfc${num}.txt`,
@@ -81,11 +84,11 @@ export const RFC_TEXT_SOURCES = {
81
84
  * IETF Datatracker API
82
85
  */
83
86
  export const DATATRACKER_API = {
84
- /** RFC ドキュメント情報 */
87
+ /** RFC document information */
85
88
  document: (num) => `https://datatracker.ietf.org/api/v1/doc/document/rfc${num}/`,
86
89
  };
87
90
  /**
88
- * RFC XML 形式で利用可能か確認
91
+ * Check if RFC is likely available in XML format
89
92
  */
90
93
  export function isRFCXMLLikelyAvailable(rfcNumber) {
91
94
  return rfcNumber >= RFC_CONFIG.xmlAvailableFrom;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,sBAAsB;IACtB,SAAS,EAAE,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE;IACzD,kBAAkB;IAClB,OAAO,EAAE,KAAK;IACd,aAAa;IACb,UAAU,EAAE,CAAC;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,mCAAmC;IACnC,GAAG,EAAE;QACH,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,UAAU;KACjB;IACD,oBAAoB;IACpB,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,WAAW;KAClB;IACD,0BAA0B;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,eAAe;KACtB;IACD,gCAAgC;IAChC,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;KACnB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;OAGG;IACH,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,oBAAoB;IACpB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,0CAA0C,GAAG,MAAM;IAC/E,kBAAkB;IAClB,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uCAAuC,GAAG,OAAO;CACvE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,0BAA0B;IAC1B,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,iCAAiC,GAAG,MAAM;CAC9D,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uDAAuD,GAAG,GAAG;CAChF,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,OAAO;CACpB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,wBAAwB;IACxB,SAAS,EAAE,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE;IACzD,8BAA8B;IAC9B,OAAO,EAAE,KAAK;IACd,6BAA6B;IAC7B,UAAU,EAAE,CAAC;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,iEAAiE;IACjE,GAAG,EAAE;QACH,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,UAAU;KACjB;IACD,0BAA0B;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,WAAW;KAClB;IACD,8CAA8C;IAC9C,QAAQ,EAAE;QACR,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,eAAe;KACtB;IACD,oCAAoC;IACpC,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;KACnB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;OAGG;IACH,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,0CAA0C,GAAG,MAAM;IAC/E,kBAAkB;IAClB,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uCAAuC,GAAG,OAAO;CACvE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iCAAiC;IACjC,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,MAAM;IAC1E,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,iCAAiC,GAAG,MAAM;CAC9D,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,uDAAuD,GAAG,GAAG;CAChF,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC;AAClD,CAAC"}
@@ -1,15 +1,40 @@
1
1
  /**
2
- * 共通定数
3
- * BCP 14 / RFC 2119 キーワードとパターン
2
+ * Common Constants
3
+ * BCP 14 / RFC 2119 keywords and patterns
4
4
  */
5
5
  import type { RequirementLevel } from './types/index.js';
6
6
  /**
7
- * BCP 14 / RFC 2119 キーワード
8
- * 長いキーワードから順に並べる("MUST NOT" "MUST" より先にマッチさせるため)
7
+ * BCP 14 / RFC 2119 keywords
8
+ * Ordered by length (longer first to match "MUST NOT" before "MUST")
9
9
  */
10
10
  export declare const REQUIREMENT_KEYWORDS: RequirementLevel[];
11
11
  /**
12
- * キーワードの正規表現(長い順にマッチ)
12
+ * Create a new requirement regex instance
13
+ * Safe for use in loops with exec() - avoids lastIndex state issues
14
+ */
15
+ export declare function createRequirementRegex(): RegExp;
16
+ /**
17
+ * Keyword regex (matches longest first)
18
+ * Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
13
19
  */
14
20
  export declare const REQUIREMENT_REGEX: RegExp;
21
+ /**
22
+ * Section number pattern for parsing RFC text
23
+ * Matches: "1.", "1.1", "1.1.1", etc. followed by title
24
+ * Used in text-based RFC parsing
25
+ */
26
+ export declare const SECTION_HEADER_PATTERN: RegExp;
27
+ /**
28
+ * Create a section header pattern regex instance
29
+ * Safe for use in loops with exec()
30
+ */
31
+ export declare function createSectionHeaderRegex(): RegExp;
32
+ /**
33
+ * RFC reference pattern (e.g., "RFC 1234", "RFC1234")
34
+ */
35
+ export declare function createRFCReferenceRegex(): RegExp;
36
+ /**
37
+ * Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
38
+ */
39
+ export declare function createSectionReferenceRegex(): RegExp;
15
40
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAAgB,EAYlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAA+D,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAAgB,EAYlD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA2B,CAAC;AAM1D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAgC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
package/dist/constants.js CHANGED
@@ -1,10 +1,13 @@
1
1
  /**
2
- * 共通定数
3
- * BCP 14 / RFC 2119 キーワードとパターン
2
+ * Common Constants
3
+ * BCP 14 / RFC 2119 keywords and patterns
4
4
  */
5
+ // ========================================
6
+ // BCP 14 / RFC 2119 Keywords
7
+ // ========================================
5
8
  /**
6
- * BCP 14 / RFC 2119 キーワード
7
- * 長いキーワードから順に並べる("MUST NOT" "MUST" より先にマッチさせるため)
9
+ * BCP 14 / RFC 2119 keywords
10
+ * Ordered by length (longer first to match "MUST NOT" before "MUST")
8
11
  */
9
12
  export const REQUIREMENT_KEYWORDS = [
10
13
  'MUST NOT',
@@ -20,10 +23,49 @@ export const REQUIREMENT_KEYWORDS = [
20
23
  'OPTIONAL',
21
24
  ];
22
25
  /**
23
- * キーワードの正規表現(長い順にマッチ)
26
+ * Create a new requirement regex instance
27
+ * Safe for use in loops with exec() - avoids lastIndex state issues
24
28
  */
25
- export const REQUIREMENT_REGEX = new RegExp(`\\b(${REQUIREMENT_KEYWORDS.join('|')})\\b`, 'g');
26
- // RFC 関連の設定は config.ts に集約されています
29
+ export function createRequirementRegex() {
30
+ return new RegExp(`\\b(${REQUIREMENT_KEYWORDS.join('|')})\\b`, 'g');
31
+ }
32
+ /**
33
+ * Keyword regex (matches longest first)
34
+ * Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
35
+ */
36
+ export const REQUIREMENT_REGEX = createRequirementRegex();
37
+ // ========================================
38
+ // Section Patterns
39
+ // ========================================
40
+ /**
41
+ * Section number pattern for parsing RFC text
42
+ * Matches: "1.", "1.1", "1.1.1", etc. followed by title
43
+ * Used in text-based RFC parsing
44
+ */
45
+ export const SECTION_HEADER_PATTERN = /^(\d+(?:\.\d+)*\.?)\s+(.+)$/;
46
+ /**
47
+ * Create a section header pattern regex instance
48
+ * Safe for use in loops with exec()
49
+ */
50
+ export function createSectionHeaderRegex() {
51
+ return new RegExp(SECTION_HEADER_PATTERN.source);
52
+ }
53
+ // ========================================
54
+ // Cross-Reference Patterns
55
+ // ========================================
56
+ /**
57
+ * RFC reference pattern (e.g., "RFC 1234", "RFC1234")
58
+ */
59
+ export function createRFCReferenceRegex() {
60
+ return /RFC\s*(\d+)/gi;
61
+ }
62
+ /**
63
+ * Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
64
+ */
65
+ export function createSectionReferenceRegex() {
66
+ return /[Ss]ection\s+([\d.]+)/g;
67
+ }
68
+ // RFC-related configuration is centralized in config.ts
27
69
  // - RFC_CONFIG.xmlAvailableFrom
28
70
  // - isRFCXMLLikelyAvailable()
29
71
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9F,iCAAiC;AACjC,gCAAgC;AAChC,8BAA8B"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,2CAA2C;AAC3C,6BAA6B;AAC7B,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,MAAM,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;AAE1D,2CAA2C;AAC3C,mBAAmB;AACnB,2CAA2C;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,2CAA2C;AAE3C;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED,wDAAwD;AACxD,gCAAgC;AAChC,8BAA8B"}