Skip to content

MCP ServerとRelational Databaseの接続

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

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

  1. ts#mcp-serverプロジェクト
  2. ts#rdbプロジェクト
  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - connection
  5. 必須パラメータを入力
    • クリック Generate

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

    パラメータ デフォルト 説明
    sourceProject 必須 string - ソース プロジェクト
    targetProject 必須 string - 接続先のターゲット プロジェクト
    sourceComponent string - 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
    targetComponent string - 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。

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

    • Directorypackages/my-service/src/my-mcp
      • server.ts createServer内に登録されたすべてのツールでPrismaクライアントが取得され利用可能
      • Dockerfile AuroraへのSSL接続用にRDS CAバンドルがインストールされる

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

    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 { 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権限を付与します。

    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>-serve-local <project-name>

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