Skip to content

MCP ServerからRelational Databaseへの接続

connectionジェネレーターは、TypeScript MCP ServerRelational Databaseプロジェクトに接続し、createServer内に登録されたすべてのツールでPrismaクライアントを利用できるようにします。

このジェネレーターを使用する前に、以下を確認してください:

  1. ts#mcp-serverプロジェクト
  2. ts#rdbプロジェクト
Terminal window
pnpm nx g @aws/nx-plugin:connection
変更されるファイルを確認するためにドライランを実行することもできます
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

MCPサーバープロジェクトをソースとして、リレーショナルデータベースプロジェクトをターゲットとして選択します。プロジェクトに複数のMCPサーバーコンポーネントが含まれている場合は、sourceComponentを指定して明確にします。

パラメータデフォルト説明
sourceProject 必須string-ソース プロジェクト
targetProject 必須string-接続先のターゲット プロジェクト
sourceComponent string-接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
targetComponent string-接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

ジェネレーターは、MCPサーバーのソースディレクトリ内の2つのファイルを変更します:

  • 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

さらに、<mcp-server-name>-devターゲットが更新され、データベースのdevターゲットに依存するようになります。

MCPツールでのデータベースの使用

Section titled “MCPツールでのデータベースの使用”

PrismaクライアントはcreateServer内で取得され、そこに登録されたすべてのツールとリソースで利用できます:

packages/my-service/src/my-mcp/server.ts
import { getPrisma as getMyDb } from '@my-scope/my-db';
export const createServer = async () => {
const myDb = await getMyDb();
const server = new McpServer({ name: 'my-service', version: '1.0.0' });
// register tools/resources that use myDb
return server;
};

異なるターゲットでジェネレーターを再度実行すると、2番目のデータベースが最初のデータベースと並行して追加されます。両方ともcreateServer内で取得されます:

packages/my-service/src/my-mcp/server.ts
export const createServer = async () => {
const postgresDb = await getPostgresDb();
const mysqlDb = await getMysqlDb();
const server = new McpServer({ ... });
// register tools using both clients
return server;
};

生成されたMCPサーバーコンストラクトはIGrantableIConnectableを実装しているため、コンストラクト上で直接データベースへのネットワークアクセスとIAMアクセスを許可できます。

packages/infra/src/stacks/application-stack.ts
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権限を付与します。

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 をそのパスに設定してください:

packages/infra/src/stacks/application-stack.ts
new MyMcpServer(this, 'MyMcpServer', {
...
environmentVariables: {
NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt',
},
});

詳細については、Amazon RDS SSL/TLS ドキュメントを参照してください。RDS Proxyを使用する場合、NODE_EXTRA_CA_CERTS を設定する必要はありません。

Terminal window
pnpm nx <mcp-server-name>-dev <project-name>

これにより、MCPサーバーと接続されたすべてのデータベースが起動します。LOCAL_DEV=true環境変数により、各PrismaクライアントはAuroraの代わりにローカルDockerデータベースに接続します。