MCP ServerとRelational Databaseの接続
connectionジェネレーターは、TypeScript MCP ServerをRelational Databaseプロジェクトに接続し、createServer内に登録されたすべてのツールでPrismaクライアントを利用可能にします。
このジェネレーターを使用する前に、以下を用意してください:
ts#mcp-serverプロジェクトts#rdbプロジェクト
ジェネレーターの実行
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サーバープロジェクトをソースとして、リレーショナルデータベースプロジェクトをターゲットとして選択します。プロジェクトに複数のMCPサーバーコンポーネントが含まれている場合は、sourceComponentを指定して明確にします。
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| sourceProject 必須 | string | - | ソース プロジェクト |
| targetProject 必須 | string | - | 接続先のターゲット プロジェクト |
| sourceComponent | string | - | 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。 |
| targetComponent | string | - | 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。 |
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは、MCPサーバーのソースディレクトリ内の2つのファイルを変更します:
Directorypackages/my-service/src/my-mcp
- server.ts
createServer内に登録されたすべてのツールでPrismaクライアントが取得され利用可能 - Dockerfile AuroraへのSSL接続用にRDS CAバンドルがインストールされる
- server.ts
さらに、<mcp-server-name>-serve-localターゲットが、データベースのserve-localターゲットに依存するように更新されます。
PrismaクライアントはcreateServer内で取得され、そこに登録されたすべてのツールとリソースで利用可能です:
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;};複数のデータベース
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 { MyDatabase } from ':my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });const myMcpServer = new MyMcpServer(this, 'MyMcpServer', { vpc, ... });
db.allowDefaultPortFrom(myMcpServer);db.grantConnect(myMcpServer);allowDefaultPortFromはセキュリティグループルールを開き、MCPサーバーランタイムがデータベースポートに到達できるようにします。grantConnectは、サーバーの実行ロールにIAM rds-db:connect権限を付与します。
データベースモジュールの出力をMCPサーバーモジュールに渡すことで、データベースに到達し、そのランタイム設定を読み取ることができます:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = module.vpc.vpc_id database_subnet_ids = module.vpc.private_isolated_subnet_ids}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"
appconfig_application_id = module.my_database.appconfig_application_id database_cluster_resource_id = module.my_database.cluster_resource_id database_runtime_user = module.my_database.database_runtime_user database_security_group_id = module.my_database.security_group_id database_port = module.my_database.cluster_port}MCPサーバーの実行ロールが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 をそのパスに設定してください:
new MyMcpServer(this, 'MyMcpServer', { ... environmentVariables: { NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt', },});module "my_mcp_server" { ... environment_variables = { 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>-serve-local <project-name>yarn nx <mcp-server-name>-serve-local <project-name>npx nx <mcp-server-name>-serve-local <project-name>bunx nx <mcp-server-name>-serve-local <project-name>これにより、MCPサーバーと接続されているすべてのデータベースが起動します。SERVE_LOCAL=true環境変数により、各PrismaクライアントはAuroraの代わりにローカルのDockerデータベースに接続します。