@exabugs/dynamodb-client 1.3.44 → 1.3.45

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 (102) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/bin/dynamodb-mcp.js +13 -0
  3. package/dist/integrations/react-admin/components/ReferenceManyToManyInput.d.ts.map +1 -1
  4. package/dist/integrations/react-admin/components/ReferenceManyToManyInput.js +11 -0
  5. package/dist/integrations/react-admin/components/ReferenceManyToManyInput.js.map +1 -1
  6. package/dist/mcp/adapter.d.ts +36 -0
  7. package/dist/mcp/adapter.d.ts.map +1 -0
  8. package/dist/mcp/adapter.js +213 -0
  9. package/dist/mcp/adapter.js.map +1 -0
  10. package/dist/mcp/cli.d.ts +2 -0
  11. package/dist/mcp/cli.d.ts.map +1 -0
  12. package/dist/mcp/cli.js +123 -0
  13. package/dist/mcp/cli.js.map +1 -0
  14. package/dist/mcp/index.d.ts +7 -0
  15. package/dist/mcp/index.d.ts.map +1 -0
  16. package/dist/mcp/index.js +6 -0
  17. package/dist/mcp/index.js.map +1 -0
  18. package/dist/mcp/server.d.ts +18 -0
  19. package/dist/mcp/server.d.ts.map +1 -0
  20. package/dist/mcp/server.js +127 -0
  21. package/dist/mcp/server.js.map +1 -0
  22. package/dist/mcp/tools/deleteMany.d.ts +12 -0
  23. package/dist/mcp/tools/deleteMany.d.ts.map +1 -0
  24. package/dist/mcp/tools/deleteMany.js +26 -0
  25. package/dist/mcp/tools/deleteMany.js.map +1 -0
  26. package/dist/mcp/tools/deleteOne.d.ts +12 -0
  27. package/dist/mcp/tools/deleteOne.d.ts.map +1 -0
  28. package/dist/mcp/tools/deleteOne.js +26 -0
  29. package/dist/mcp/tools/deleteOne.js.map +1 -0
  30. package/dist/mcp/tools/find.d.ts +12 -0
  31. package/dist/mcp/tools/find.d.ts.map +1 -0
  32. package/dist/mcp/tools/find.js +64 -0
  33. package/dist/mcp/tools/find.js.map +1 -0
  34. package/dist/mcp/tools/findMany.d.ts +12 -0
  35. package/dist/mcp/tools/findMany.d.ts.map +1 -0
  36. package/dist/mcp/tools/findMany.js +30 -0
  37. package/dist/mcp/tools/findMany.js.map +1 -0
  38. package/dist/mcp/tools/findManyReference.d.ts +12 -0
  39. package/dist/mcp/tools/findManyReference.d.ts.map +1 -0
  40. package/dist/mcp/tools/findManyReference.js +34 -0
  41. package/dist/mcp/tools/findManyReference.js.map +1 -0
  42. package/dist/mcp/tools/findOne.d.ts +12 -0
  43. package/dist/mcp/tools/findOne.d.ts.map +1 -0
  44. package/dist/mcp/tools/findOne.js +26 -0
  45. package/dist/mcp/tools/findOne.js.map +1 -0
  46. package/dist/mcp/tools/index.d.ts +13 -0
  47. package/dist/mcp/tools/index.d.ts.map +1 -0
  48. package/dist/mcp/tools/index.js +29 -0
  49. package/dist/mcp/tools/index.js.map +1 -0
  50. package/dist/mcp/tools/insertMany.d.ts +12 -0
  51. package/dist/mcp/tools/insertMany.d.ts.map +1 -0
  52. package/dist/mcp/tools/insertMany.js +30 -0
  53. package/dist/mcp/tools/insertMany.js.map +1 -0
  54. package/dist/mcp/tools/insertOne.d.ts +12 -0
  55. package/dist/mcp/tools/insertOne.d.ts.map +1 -0
  56. package/dist/mcp/tools/insertOne.js +26 -0
  57. package/dist/mcp/tools/insertOne.js.map +1 -0
  58. package/dist/mcp/tools/updateMany.d.ts +12 -0
  59. package/dist/mcp/tools/updateMany.d.ts.map +1 -0
  60. package/dist/mcp/tools/updateMany.js +30 -0
  61. package/dist/mcp/tools/updateMany.js.map +1 -0
  62. package/dist/mcp/tools/updateOne.d.ts +12 -0
  63. package/dist/mcp/tools/updateOne.d.ts.map +1 -0
  64. package/dist/mcp/tools/updateOne.js +40 -0
  65. package/dist/mcp/tools/updateOne.js.map +1 -0
  66. package/dist/mcp/types.d.ts +50 -0
  67. package/dist/mcp/types.d.ts.map +1 -0
  68. package/dist/mcp/types.js +49 -0
  69. package/dist/mcp/types.js.map +1 -0
  70. package/dist/scripts/operations/bulkRecordRepair.js +9 -2
  71. package/dist/scripts/operations/bulkRecordRepair.js.map +1 -1
  72. package/dist/scripts/utils/clientFactory.d.ts.map +1 -1
  73. package/dist/scripts/utils/clientFactory.js +7 -0
  74. package/dist/scripts/utils/clientFactory.js.map +1 -1
  75. package/dist/server/handler.cjs +31 -18
  76. package/dist/server/handler.cjs.map +2 -2
  77. package/dist/server/operations/find/idQuery.d.ts.map +1 -1
  78. package/dist/server/operations/find/idQuery.js.map +1 -1
  79. package/dist/server/operations/find/shadowQuery.js.map +1 -1
  80. package/dist/server/operations/find/types.d.ts +2 -2
  81. package/dist/server/operations/find/types.d.ts.map +1 -1
  82. package/dist/server/operations/find/utils.d.ts +3 -2
  83. package/dist/server/operations/find/utils.d.ts.map +1 -1
  84. package/dist/server/operations/find/utils.js +16 -4
  85. package/dist/server/operations/find/utils.js.map +1 -1
  86. package/dist/server/operations/operationDispatcher.js.map +1 -1
  87. package/dist/server/operations/parameterConverter.d.ts +5 -5
  88. package/dist/server/operations/parameterConverter.d.ts.map +1 -1
  89. package/dist/server/operations/parameterConverter.js +30 -14
  90. package/dist/server/operations/parameterConverter.js.map +1 -1
  91. package/dist/server/query/converter.d.ts +54 -4
  92. package/dist/server/query/converter.d.ts.map +1 -1
  93. package/dist/server/query/converter.js +53 -3
  94. package/dist/server/query/converter.js.map +1 -1
  95. package/dist/server/query/nearSearch.js +1 -1
  96. package/dist/server/query/nearSearch.js.map +1 -1
  97. package/dist/server/types.d.ts +0 -3
  98. package/dist/server/types.d.ts.map +1 -1
  99. package/dist/shadows/generator.d.ts +3 -3
  100. package/dist/shadows/generator.d.ts.map +1 -1
  101. package/dist/shadows/generator.js.map +1 -1
  102. package/package.json +15 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.3.45] - 2026-01-18
11
+
12
+ ### Added
13
+
14
+ - **MCPツールのテスト実装**: P1優先度の5つのMCPツールに対する完全なテストスイートを追加
15
+ - ユニットテスト: `insertMany`, `updateOne`, `updateMany`, `deleteOne`, `deleteMany`(5ファイル、計229テスト)
16
+ - 統合テスト: 全10ツール(`find`, `findMany`, `findManyReference`, `findOne`, `insertOne`, `insertMany`, `updateOne`, `updateMany`, `deleteOne`, `deleteMany`)の基本的なエラーハンドリングテスト(10ファイル)
17
+ - 全MCPテスト46件成功(ユニットテスト + 統合テスト)
18
+
19
+ ### Changed
20
+
21
+ - **parameterConverterの拡張**: MCPツールから直接`id`パラメータを受け取れるように改善
22
+ - `convertUpdateOneParams`: 直接`id`パラメータをサポート(`{ id, data, options }`形式)
23
+ - `convertDeleteOneParams`: 直接`id`パラメータをサポート(`{ id, options }`形式)
24
+ - MCPツールとHTTP APIの両方で統一的なパラメータ処理が可能に
25
+
26
+ ### Fixed
27
+
28
+ - **parameterConverterのエラーメッセージ修正**: テストの期待値と実際のエラーメッセージを統一
29
+ - `convertUpdateOneParams`: "Invalid params: id or filter is required" → "Invalid params: must provide either id or filter"
30
+ - 全テスト940件成功(Test Files 82 passed)
31
+
10
32
  ## [1.3.44] - 2026-01-17
11
33
 
12
34
  ### Added
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * DynamoDB Client MCP Server
5
+ * 実行可能スクリプト
6
+ *
7
+ * このスクリプトは、ビルド後のCLIエントリポイント(dist/mcp/cli.js)を実行します。
8
+ */
9
+
10
+ import('../dist/mcp/cli.js').catch((error) => {
11
+ console.error('Failed to start DynamoDB MCP Server:', error);
12
+ process.exit(1);
13
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceManyToManyInput.d.ts","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyInput.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,6BAA6B,KAAG,YA+F/E,CAAC"}
1
+ {"version":3,"file":"ReferenceManyToManyInput.d.ts","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyInput.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,6BAA6B,KAAG,YA+F/E,CAAC"}
@@ -8,6 +8,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  * **重要**: このコンポーネントはフォーム保存時に自動的に中間テーブルを更新します。
9
9
  * DataProviderが自動的に処理するため、transform関数を書く必要はありません。
10
10
  *
11
+ * NOTE: react-adminの型定義による any の使用
12
+ *
13
+ * このファイルでは、react-adminのDataProviderとコンポーネントの型定義の制約により、
14
+ * 一部で any 型を使用しています。これはreact-adminの設計上の制約です。
15
+ *
16
+ * 実行時の型安全性は以下により確保されています:
17
+ * 1. DataProviderのgetListメソッドは中間テーブルのレコードを返す
18
+ * 2. cloneElementのpropsはreact-adminの標準プロパティ
19
+ * 3. 実際のデータ型は実行時に検証される
20
+ *
11
21
  * @example
12
22
  * ```typescript
13
23
  * <ReferenceManyToManyInput
@@ -20,6 +30,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
30
  * </ReferenceManyToManyInput>
21
31
  * ```
22
32
  */
33
+ /* eslint-disable @typescript-eslint/no-explicit-any */
23
34
  import { cloneElement, useEffect, useMemo, useState } from 'react';
24
35
  import { ReferenceArrayInput, useDataProvider, useNotify, useRecordContext } from 'react-admin';
25
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceManyToManyInput.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReferenceManyToManyInput.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type MCPServerConfig } from './types.js';
2
+ /**
3
+ * MCPアダプター
4
+ * MCPツール呼び出しをLambda操作に変換する
5
+ */
6
+ export declare class MCPAdapter {
7
+ constructor(config: MCPServerConfig);
8
+ /**
9
+ * MCPツールを実行
10
+ * @param toolName ツール名
11
+ * @param args ツール引数
12
+ * @returns 実行結果
13
+ */
14
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
15
+ /**
16
+ * エラーを処理してMCPErrorに変換
17
+ * @param error 元のエラー
18
+ * @param toolName ツール名
19
+ * @param requestId リクエストID
20
+ * @returns MCPError
21
+ */
22
+ private handleError;
23
+ /**
24
+ * MCPツール名をAPIリクエストに変換
25
+ * @param toolName ツール名
26
+ * @param args ツール引数
27
+ * @returns APIリクエスト
28
+ */
29
+ private convertToolToApiRequest;
30
+ /**
31
+ * リクエストIDを生成
32
+ * @returns リクエストID
33
+ */
34
+ private generateRequestId;
35
+ }
36
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/mcp/adapter.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAU1E;;;GAGG;AACH,qBAAa,UAAU;gBACT,MAAM,EAAE,eAAe;IAwBnC;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCpF;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAuFnB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAuE/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * MCP Adapter Layer
3
+ * MCPツール呼び出しを既存のLambda操作に変換
4
+ */
5
+ import { randomUUID } from 'node:crypto';
6
+ import { createLogger } from '../shared/index.js';
7
+ import { executeOperation } from '../server/operations/operationDispatcher.js';
8
+ import { MCPError, MCPErrorCode } from './types.js';
9
+ /**
10
+ * ロガーインスタンス
11
+ */
12
+ const logger = createLogger({
13
+ service: 'mcp-adapter',
14
+ level: process.env.LOG_LEVEL || 'info',
15
+ });
16
+ /**
17
+ * MCPアダプター
18
+ * MCPツール呼び出しをLambda操作に変換する
19
+ */
20
+ export class MCPAdapter {
21
+ constructor(config) {
22
+ // 環境変数を設定(既存のLambda操作が使用)
23
+ if (config.tableName) {
24
+ process.env.DYNAMODB_TABLE = config.tableName;
25
+ }
26
+ if (config.region) {
27
+ process.env.AWS_REGION = config.region;
28
+ }
29
+ if (config.profile) {
30
+ process.env.AWS_PROFILE = config.profile;
31
+ }
32
+ if (config.accessKeyId) {
33
+ process.env.AWS_ACCESS_KEY_ID = config.accessKeyId;
34
+ }
35
+ if (config.secretAccessKey) {
36
+ process.env.AWS_SECRET_ACCESS_KEY = config.secretAccessKey;
37
+ }
38
+ logger.info('MCPAdapter initialized', {
39
+ tableName: config.tableName,
40
+ region: config.region || 'default',
41
+ });
42
+ }
43
+ /**
44
+ * MCPツールを実行
45
+ * @param toolName ツール名
46
+ * @param args ツール引数
47
+ * @returns 実行結果
48
+ */
49
+ async executeTool(toolName, args) {
50
+ const requestId = this.generateRequestId();
51
+ logger.debug('Executing MCP tool', {
52
+ requestId,
53
+ toolName,
54
+ args,
55
+ });
56
+ try {
57
+ // MCPツール名をLambda操作に変換
58
+ const apiRequest = this.convertToolToApiRequest(toolName, args);
59
+ // 既存のLambda操作を実行
60
+ const result = await executeOperation(apiRequest, requestId);
61
+ logger.debug('MCP tool executed successfully', {
62
+ requestId,
63
+ toolName,
64
+ });
65
+ return result;
66
+ }
67
+ catch (error) {
68
+ // エラーを分類して適切なMCPErrorに変換
69
+ const mcpError = this.handleError(error, toolName, requestId);
70
+ logger.error('MCP tool execution failed', {
71
+ requestId,
72
+ toolName,
73
+ errorCode: mcpError.code,
74
+ errorMessage: mcpError.message,
75
+ details: mcpError.details,
76
+ });
77
+ throw mcpError;
78
+ }
79
+ }
80
+ /**
81
+ * エラーを処理してMCPErrorに変換
82
+ * @param error 元のエラー
83
+ * @param toolName ツール名
84
+ * @param requestId リクエストID
85
+ * @returns MCPError
86
+ */
87
+ handleError(error, toolName, requestId) {
88
+ // すでにMCPErrorの場合はそのまま返す
89
+ if (error instanceof MCPError) {
90
+ return error;
91
+ }
92
+ // Errorオブジェクトの場合
93
+ if (error instanceof Error) {
94
+ // AWS SDK エラーの判定
95
+ if ('name' in error && typeof error.name === 'string') {
96
+ // DynamoDB関連エラー
97
+ if (error.name.includes('DynamoDB') ||
98
+ error.name.includes('ResourceNotFound') ||
99
+ error.name.includes('ValidationException')) {
100
+ return new MCPError(MCPErrorCode.DYNAMODB_ERROR, error.message, {
101
+ toolName,
102
+ requestId,
103
+ originalError: error.name,
104
+ });
105
+ }
106
+ // 認証関連エラー
107
+ if (error.name.includes('AccessDenied') ||
108
+ error.name.includes('UnauthorizedOperation') ||
109
+ error.name.includes('InvalidClientTokenId') ||
110
+ error.name.includes('SignatureDoesNotMatch')) {
111
+ return new MCPError(MCPErrorCode.AUTHENTICATION_ERROR, error.message, {
112
+ toolName,
113
+ requestId,
114
+ originalError: error.name,
115
+ });
116
+ }
117
+ }
118
+ // パラメータ関連エラー(メッセージから判定)
119
+ if (error.message.includes('Missing required parameter') ||
120
+ error.message.includes('required parameter')) {
121
+ return new MCPError(MCPErrorCode.MISSING_REQUIRED_PARAMETER, error.message, {
122
+ toolName,
123
+ requestId,
124
+ });
125
+ }
126
+ if (error.message.includes('Invalid parameter') ||
127
+ error.message.includes('invalid')) {
128
+ return new MCPError(MCPErrorCode.INVALID_PARAMETER, error.message, {
129
+ toolName,
130
+ requestId,
131
+ });
132
+ }
133
+ // その他のエラーは内部エラーとして扱う
134
+ return new MCPError(MCPErrorCode.INTERNAL_ERROR, error.message, {
135
+ toolName,
136
+ requestId,
137
+ stack: error.stack,
138
+ });
139
+ }
140
+ // 文字列エラーの場合
141
+ if (typeof error === 'string') {
142
+ return new MCPError(MCPErrorCode.INTERNAL_ERROR, error, {
143
+ toolName,
144
+ requestId,
145
+ });
146
+ }
147
+ // その他の不明なエラー
148
+ return new MCPError(MCPErrorCode.INTERNAL_ERROR, 'An unknown error occurred', {
149
+ toolName,
150
+ requestId,
151
+ error: String(error),
152
+ });
153
+ }
154
+ /**
155
+ * MCPツール名をAPIリクエストに変換
156
+ * @param toolName ツール名
157
+ * @param args ツール引数
158
+ * @returns APIリクエスト
159
+ */
160
+ convertToolToApiRequest(toolName, args) {
161
+ // ツール名から操作名とリソース名を抽出
162
+ // 例: "dynamodb_find" -> { op: "find", resource: args.collection }
163
+ const toolPrefix = 'dynamodb_';
164
+ if (!toolName.startsWith(toolPrefix)) {
165
+ throw new MCPError(MCPErrorCode.INVALID_TOOL_NAME, `Invalid tool name: ${toolName}. Must start with "${toolPrefix}"`, { toolName });
166
+ }
167
+ // ツール名から操作名を抽出(キャメルケース)
168
+ // 例: "dynamodb_findOne" -> "findOne"
169
+ const operationCamelCase = toolName.substring(toolPrefix.length);
170
+ // キャメルケースをスネークケースに変換して検証
171
+ // 例: "findOne" -> "find_one"
172
+ const operationSnakeCase = operationCamelCase.replace(/([A-Z])/g, '_$1').toLowerCase();
173
+ const resource = args.collection;
174
+ if (!resource) {
175
+ throw new MCPError(MCPErrorCode.MISSING_REQUIRED_PARAMETER, 'Missing required parameter: collection', { toolName, availableParams: Object.keys(args) });
176
+ }
177
+ // 操作名を検証(スネークケース形式)
178
+ const validOperations = [
179
+ 'find',
180
+ 'find_one',
181
+ 'find_many',
182
+ 'find_many_reference',
183
+ 'insert_one',
184
+ 'insert_many',
185
+ 'update_one',
186
+ 'update_many',
187
+ 'delete_one',
188
+ 'delete_many',
189
+ ];
190
+ if (!validOperations.includes(operationSnakeCase)) {
191
+ throw new MCPError(MCPErrorCode.INVALID_OPERATION, `Unknown operation: ${operationSnakeCase}`, { toolName, operation: operationSnakeCase, validOperations });
192
+ }
193
+ // スネークケースをキャメルケースに変換(API呼び出し用)
194
+ // 例: "find_one" -> "findOne"
195
+ const camelCaseOp = operationSnakeCase.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
196
+ // collectionを除いたパラメータを抽出
197
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
198
+ const { collection: _, ...params } = args;
199
+ return {
200
+ op: camelCaseOp,
201
+ resource,
202
+ params,
203
+ };
204
+ }
205
+ /**
206
+ * リクエストIDを生成
207
+ * @returns リクエストID
208
+ */
209
+ generateRequestId() {
210
+ return randomUUID();
211
+ }
212
+ }
213
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/mcp/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAwB,MAAM,YAAY,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,OAAO,EAAE,aAAa;IACtB,KAAK,EAAG,OAAO,CAAC,GAAG,CAAC,SAAiD,IAAI,MAAM;CAChF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,OAAO,UAAU;IACrB,YAAY,MAAuB;QACjC,0BAA0B;QAC1B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACpC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,IAA6B;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE3C,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;YACjC,SAAS;YACT,QAAQ;YACR,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEhE,iBAAiB;YACjB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAE7D,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAC7C,SAAS;gBACT,QAAQ;aACT,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yBAAyB;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,SAAS;gBACT,QAAQ;gBACR,SAAS,EAAE,QAAQ,CAAC,IAAI;gBACxB,YAAY,EAAE,QAAQ,CAAC,OAAO;gBAC9B,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,WAAW,CAAC,KAAc,EAAE,QAAgB,EAAE,SAAiB;QACrE,wBAAwB;QACxB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iBAAiB;QACjB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,iBAAiB;YACjB,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,gBAAgB;gBAChB,IACE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;oBACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC1C,CAAC;oBACD,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE;wBAC9D,QAAQ;wBACR,SAAS;wBACT,aAAa,EAAE,KAAK,CAAC,IAAI;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBAED,UAAU;gBACV,IACE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;oBAC3C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAC5C,CAAC;oBACD,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,EAAE;wBACpE,QAAQ;wBACR,SAAS;wBACT,aAAa,EAAE,KAAK,CAAC,IAAI;qBAC1B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC;gBACpD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAC5C,CAAC;gBACD,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,0BAA0B,EAAE,KAAK,CAAC,OAAO,EAAE;oBAC1E,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC3C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EACjC,CAAC;gBACD,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,EAAE;oBACjE,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,qBAAqB;YACrB,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE;gBAC9D,QAAQ;gBACR,SAAS;gBACT,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;QAED,YAAY;QACZ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE;gBACtD,QAAQ;gBACR,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,aAAa;QACb,OAAO,IAAI,QAAQ,CACjB,YAAY,CAAC,cAAc,EAC3B,2BAA2B,EAC3B;YACE,QAAQ;YACR,SAAS;YACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,uBAAuB,CAC7B,QAAgB,EAChB,IAA6B;QAE7B,qBAAqB;QACrB,kEAAkE;QAClE,MAAM,UAAU,GAAG,WAAW,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAChB,YAAY,CAAC,iBAAiB,EAC9B,sBAAsB,QAAQ,sBAAsB,UAAU,GAAG,EACjE,EAAE,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,qCAAqC;QACrC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEjE,yBAAyB;QACzB,6BAA6B;QAC7B,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAEvF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAoB,CAAC;QAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,QAAQ,CAChB,YAAY,CAAC,0BAA0B,EACvC,wCAAwC,EACxC,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjD,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,eAAe,GAAG;YACtB,MAAM;YACN,UAAU;YACV,WAAW;YACX,qBAAqB;YACrB,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;SACd,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,QAAQ,CAChB,YAAY,CAAC,iBAAiB,EAC9B,sBAAsB,kBAAkB,EAAE,EAC1C,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAC7D,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,6BAA6B;QAC7B,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAEjG,yBAAyB;QACzB,6DAA6D;QAC7D,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;QAE1C,OAAO;YACL,EAAE,EAAE,WAA+B;YACnC,QAAQ;YACR,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,iBAAiB;QACvB,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * DynamoDB Client MCP Server CLI
3
+ * CLIエントリポイント
4
+ */
5
+ import { DynamoDBMCPServer } from './server.js';
6
+ import { createLogger } from '../shared/index.js';
7
+ /**
8
+ * ロガーインスタンス
9
+ */
10
+ const logger = createLogger({
11
+ service: 'mcp-cli',
12
+ level: process.env.LOG_LEVEL || 'info',
13
+ });
14
+ /**
15
+ * 環境変数から設定を取得
16
+ */
17
+ function getConfigFromEnv() {
18
+ // 必須パラメータのチェック
19
+ const tableName = process.env.DYNAMODB_TABLE;
20
+ if (!tableName) {
21
+ const errorMessage = 'DYNAMODB_TABLE environment variable is required';
22
+ logger.error(errorMessage);
23
+ console.error(`Error: ${errorMessage}`);
24
+ console.error('\nUsage:');
25
+ console.error(' DYNAMODB_TABLE=your-table-name npx @exabugs/dynamodb-client mcp');
26
+ console.error('\nOptional environment variables:');
27
+ console.error(' AWS_REGION (default: us-east-1)');
28
+ console.error(' AWS_PROFILE');
29
+ console.error(' AWS_ACCESS_KEY_ID');
30
+ console.error(' AWS_SECRET_ACCESS_KEY');
31
+ console.error(' LOG_LEVEL (debug|info|warn|error, default: info)');
32
+ process.exit(1);
33
+ }
34
+ // 環境変数から設定を取得
35
+ const config = {
36
+ tableName,
37
+ region: process.env.AWS_REGION || 'us-east-1',
38
+ profile: process.env.AWS_PROFILE,
39
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
40
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
41
+ };
42
+ logger.debug('Configuration loaded from environment', {
43
+ tableName: config.tableName,
44
+ region: config.region,
45
+ hasProfile: !!config.profile,
46
+ hasAccessKey: !!config.accessKeyId,
47
+ });
48
+ return config;
49
+ }
50
+ /**
51
+ * メイン関数
52
+ */
53
+ async function main() {
54
+ try {
55
+ logger.info('Starting DynamoDB Client MCP Server');
56
+ const config = getConfigFromEnv();
57
+ // MCPサーバーを起動
58
+ const server = new DynamoDBMCPServer(config);
59
+ await server.start();
60
+ logger.info('MCP Server is running');
61
+ }
62
+ catch (error) {
63
+ logger.error('Failed to start MCP Server', {
64
+ error: error instanceof Error ? error.message : String(error),
65
+ stack: error instanceof Error ? error.stack : undefined,
66
+ });
67
+ // ユーザーフレンドリーなエラーメッセージを表示
68
+ console.error('\nFatal error occurred:');
69
+ if (error instanceof Error) {
70
+ console.error(` ${error.message}`);
71
+ // AWS認証エラーの場合は追加のヘルプを表示
72
+ if (error.message.includes('credentials') ||
73
+ error.message.includes('AccessDenied') ||
74
+ error.message.includes('UnauthorizedOperation')) {
75
+ console.error('\nAWS authentication failed. Please check:');
76
+ console.error(' 1. AWS credentials are configured correctly');
77
+ console.error(' 2. AWS_PROFILE is set (if using profiles)');
78
+ console.error(' 3. AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are set (if using keys)');
79
+ console.error(' 4. IAM permissions allow DynamoDB access');
80
+ }
81
+ // DynamoDBテーブルエラーの場合
82
+ if (error.message.includes('ResourceNotFound') ||
83
+ error.message.includes('Table')) {
84
+ console.error('\nDynamoDB table not found. Please check:');
85
+ console.error(' 1. DYNAMODB_TABLE is set correctly');
86
+ console.error(' 2. The table exists in the specified region');
87
+ console.error(' 3. AWS_REGION is set correctly');
88
+ }
89
+ }
90
+ else {
91
+ console.error(` ${String(error)}`);
92
+ }
93
+ process.exit(1);
94
+ }
95
+ }
96
+ // プロセス終了時のクリーンアップ
97
+ process.on('SIGINT', () => {
98
+ logger.info('Received SIGINT, shutting down gracefully');
99
+ process.exit(0);
100
+ });
101
+ process.on('SIGTERM', () => {
102
+ logger.info('Received SIGTERM, shutting down gracefully');
103
+ process.exit(0);
104
+ });
105
+ // 未処理のPromise拒否をキャッチ
106
+ process.on('unhandledRejection', (reason, promise) => {
107
+ logger.error('Unhandled Promise Rejection', {
108
+ reason: reason instanceof Error ? reason.message : String(reason),
109
+ promise: String(promise),
110
+ });
111
+ console.error('\nUnhandled Promise Rejection:');
112
+ console.error(reason);
113
+ process.exit(1);
114
+ });
115
+ // エラーハンドリング付きで実行
116
+ main().catch((error) => {
117
+ logger.error('Unexpected error in main', {
118
+ error: error instanceof Error ? error.message : String(error),
119
+ });
120
+ console.error('Fatal error:', error);
121
+ process.exit(1);
122
+ });
123
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Server エントリポイント
3
+ */
4
+ export { DynamoDBMCPServer } from './server.js';
5
+ export { MCPError, MCPErrorCode } from './types.js';
6
+ export type { MCPServerConfig } from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Server エントリポイント
3
+ */
4
+ export { DynamoDBMCPServer } from './server.js';
5
+ export { MCPError, MCPErrorCode } from './types.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type MCPServerConfig } from './types.js';
2
+ /**
3
+ * DynamoDB Client MCPサーバー
4
+ */
5
+ export declare class DynamoDBMCPServer {
6
+ private server;
7
+ private adapter;
8
+ constructor(config: MCPServerConfig);
9
+ /**
10
+ * リクエストハンドラーの設定
11
+ */
12
+ private setupHandlers;
13
+ /**
14
+ * サーバーを起動
15
+ */
16
+ start(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAUA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAa5D;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,eAAe;IAyBnC;;OAEG;IACH,OAAO,CAAC,aAAa;IA2ErB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}