MCP ServerからRelational Databaseへの接続
connectionジェネレーターは、TypeScript MCP ServerをRelational Databaseプロジェクトに接続し、createServer内に登録されたすべてのツールでPrismaクライアントを利用できるようにします。
このジェネレーターを使用する前に、以下を確認してください:
ts#mcp-serverプロジェクトts#rdbプロジェクト
ジェネレーターの実行
Section titled “ジェネレーターの実行”このジェネレーターを実行@aws/nx-plugin:connection
pnpm nx g @aws/nx-plugin:connection yarn nx g @aws/nx-plugin:connection npx nx g @aws/nx-plugin:connection bunx nx g @aws/nx-plugin:connection- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - connection - 必須パラメータを入力
- クリック
Generate
コマンドを組み立てる5
必須
必須
MCPサーバープロジェクトをソースとして、リレーショナルデータベースプロジェクトをターゲットとして選択します。プロジェクトに複数のMCPサーバーコンポーネントが含まれている場合は、sourceComponentを指定して明確にします。
sourceProject必須stringソース プロジェクト
targetProject必須string接続先のターゲット プロジェクト
sourceComponentstring接続元のソースコンポーネント(コンポーネント名、ソースプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
targetComponentstring接続先のターゲットコンポーネント(コンポーネント名、ターゲットプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
preferInstallDependenciesbooleanデフォルト:trueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは、MCPサーバーのソースディレクトリ内の以下のファイルを変更します:
Directorypackages/my-service/src/my-mcp
- server.ts Prisma client fetched and available to all tools registered inside
createServer - Dockerfile RDS CA bundle installed for SSL connections to Aurora (only when the MCP server’s
infraisagentcore-ecr)
- server.ts Prisma client fetched and available to all tools registered inside
さらに、<mcp-server-name>-devターゲットが更新され、データベースのdevターゲットに依存するようになります。
MCPツールでのデータベースの使用
Section titled “MCPツールでのデータベースの使用”PrismaクライアントはcreateServer内で取得され、そこに登録されたすべてのツールとリソースで利用できます:
import { getPrisma as getMyDb } from '@my-scope/my-db';
export const createServer = async () => { const myDb = await getMyDb(); myDb.$on('error', console.error); const server = new McpServer({ name: 'my-service', version: '1.0.0' }); // register tools/resources that use myDb return server;};複数のデータベース
Section titled “複数のデータベース”異なるターゲットでジェネレーターを再度実行すると、2番目のデータベースが最初のデータベースと並行して追加されます。両方ともcreateServer内で取得されます:
export const createServer = async () => { const postgresDb = await getPostgresDb(); const mysqlDb = await getMysqlDb(); const server = new McpServer({ ... }); // register tools using both clients return server;};インフラストラクチャ
Section titled “インフラストラクチャ”生成されたMCPサーバーコンストラクトはIGrantableとIConnectableを実装しているため、コンストラクト上で直接データベースへのネットワークアクセスとIAMアクセスを許可できます。
import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';import { MyDatabase } from '@my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });
const myMcpServer = new MyMcpServer(this, 'MyMcpServer', { networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, { vpc, vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS }, securityGroups: [ new SecurityGroup(this, 'MyMcpServerSecurityGroup', { vpc, allowAllOutbound: true }), ], }),});
db.allowDefaultPortFrom(myMcpServer);db.grantConnect(myMcpServer);allowDefaultPortFromは、MCPサーバーランタイムがデータベースポートに到達できるようにセキュリティグループルールを開きます。grantConnectは、サーバーの実行ロールにIAM rds-db:connect権限を付与します。
MCPサーバーをデータベースと同じVPC内で実行し、additional_iam_policy_statementsを介してrds-db:connectを付与し、セキュリティグループルールのペアでネットワークパスを開きます。aws_vpc.mainとaws_subnetリソースは、データベースデプロイメントガイドで定義されています:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = aws_vpc.main.id database_subnet_ids = aws_subnet.database[*].id lambda_subnet_ids = aws_subnet.private[*].id}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server" enable_vpc = true vpc_id = aws_vpc.main.id subnet_ids = aws_subnet.private[*].id
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn
additional_iam_policy_statements = [ { Effect = "Allow" Action = ["rds-db:connect"] Resource = [ "arn:aws:rds-db:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.my_database.connect_resource_id}/${module.my_database.database_runtime_user}" ] } ]}
resource "aws_vpc_security_group_ingress_rule" "mcp_server_to_database" { description = "Allow the MCP server runtime to connect to the database" security_group_id = module.my_database.security_group_id referenced_security_group_id = module.my_mcp_server.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}
resource "aws_vpc_security_group_egress_rule" "mcp_server_to_database" { description = "Allow outbound traffic from the MCP server runtime to the database" security_group_id = module.my_mcp_server.security_group_id referenced_security_group_id = module.my_database.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}appconfig_application_id/appconfig_application_arnは、データベースモジュールからではなく、ルートモジュールで一度宣言された共有ランタイム設定 AppConfigアプリケーションから取得されます。そのアプリケーションはデフォルトでdatabase名前空間を公開するため、データベースモジュールのランタイム設定エントリは追加の設定なしでデプロイされます。
RDS Proxyを使用せずに接続する場合のSSL要件
Section titled “RDS Proxyを使用せずに接続する場合のSSL要件”接続ジェネレーターは、Dockerfileを更新して、Amazon RDS CA バンドルを /usr/local/share/ca-certificates/rds-bundle.crt にインストールします。RDS Proxyを使用せずに接続する場合、Node.jsが証明書を信頼するように、NODE_EXTRA_CA_CERTS をそのパスに設定してください:
new MyMcpServer(this, 'MyMcpServer', { ... environmentVariables: { NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt', },});module "my_mcp_server" { ... env = { NODE_EXTRA_CA_CERTS = "/usr/local/share/ca-certificates/rds-bundle.crt" }}詳細については、Amazon RDS SSL/TLS ドキュメントを参照してください。RDS Proxyを使用する場合、NODE_EXTRA_CA_CERTS を設定する必要はありません。
ローカル開発
Section titled “ローカル開発”pnpm nx <mcp-server-name>-dev <project-name>yarn nx <mcp-server-name>-dev <project-name>npx nx <mcp-server-name>-dev <project-name>bunx nx <mcp-server-name>-dev <project-name>これにより、MCPサーバーと接続されたすべてのデータベースが起動します。LOCAL_DEV=true環境変数により、各PrismaクライアントはAuroraの代わりにローカルDockerデータベースに接続します。