MCP ServerからDynamoDBへ
connectionジェネレーターは、TypeScript MCP ServerをTypeScript DynamoDBプロジェクトに接続し、両方が自動的に一緒に起動するようにローカル開発を構成します。
このジェネレーターを使用する前に、以下を確認してください:
ts#mcp-serverプロジェクトts#dynamodbプロジェクト
ジェネレーターの実行
Section titled “ジェネレーターの実行”- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - connection - 必須パラメータを入力
- クリック
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionMCPサーバープロジェクトをソースとして、DynamoDBプロジェクトをターゲットとして選択します。プロジェクトに複数のMCPサーバーコンポーネントが含まれている場合は、sourceComponentを指定して明確にします。
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| sourceProject 必須 | string | - | ソース プロジェクト |
| targetProject 必須 | string | - | 接続先のターゲット プロジェクト |
| sourceComponent | string | - | 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。 |
| targetComponent | string | - | 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。 |
| preferInstallDependencies | boolean | true | ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。 |
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは、MCPサーバーの<mcp-server-name>-devターゲットをproject.json内で更新し、DynamoDBプロジェクトのdevターゲットに依存するようにします。ソースファイルは変更されません。
ツールでのDynamoDBの使用
Section titled “ツールでのDynamoDBの使用”DynamoDBパッケージからエンティティファクトリーをインポートし、createServer内で使用します:
import { createExampleEntity } from ':my-scope/my-table';
export const createServer = async () => { const server = new McpServer({ name: 'my-service', version: '1.0.0' });
server.tool('list_examples', 'List all example items', {}, async () => { const entity = await createExampleEntity(); const result = await entity.scan.go(); return { content: [{ type: 'text', text: JSON.stringify(result.data) }], }; });
return server;};インフラストラクチャ
Section titled “インフラストラクチャ”MCPサーバーがDynamoDBテーブルにアクセスできるようにするには、インフラストラクチャで必要な権限を付与します。
import { MyTable } from ':my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);grantReadWriteDataは、MCPサーバーの実行ロールにDynamoDBとKMSの両方の権限を付与します。
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
resource "aws_iam_role_policy" "dynamodb_access" { role = module.my_mcp_server.lambda_role_name
policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", ] Resource = [ module.my_table.table_arn, "${module.my_table.table_arn}/index/*", ] }, { Effect = "Allow" Action = [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", ] Resource = [module.my_table.kms_key_arn] }, ] })}ローカル開発
Section titled “ローカル開発”connection ジェネレーターは、プロジェクトの dev ターゲットが DynamoDB プロジェクトの dev ターゲットに依存するように設定します。dev を実行すると、DynamoDB Local がプロジェクトと同時に自動的に起動します。
LOCAL_DEV=true 環境変数は自動的に設定されるため、getDynamoDBClient() と resolveTableName() は AWS ではなくローカルの DynamoDB Local インスタンスに接続します。