Skip to content

Python MCP Server からリレーショナルデータベースへの接続

connection ジェネレーターは、Python MCP ServerPython リレーショナルデータベースプロジェクトに接続し、サーバーに登録されたすべてのツールでデータベースセッションを利用できるようにします。

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

  1. py#mcp-server プロジェクト
  2. py#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)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
    preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。
    • Directorypackages/my_service
      • project.json my_mcp_server-dev からデータベースの dev ターゲットへの依存関係を追加します
      • pyproject.toml データベースパッケージをワークスペースの依存関係として追加します
      • Directorymy_service
        • Directorymy_mcp_server
          • Dockerfile Aurora への直接接続に使用される RDS CA バンドルを追加します

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

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

    データベースパッケージから session_context をインポートし、MCP サーバーツール内で使用します:

    packages/my_service/my_service/my_mcp_server/server.py
    from sqlmodel import select
    from my_scope.my_db import session_context
    from my_scope.my_db.models.example import ExampleModel
    @mcp.tool()
    async def list_examples() -> str:
    """List all example records."""
    async with session_context() as session:
    items = (await session.execute(select(ExampleModel))).all()
    return str([item.model_dump() for item in items])

    異なるターゲットでジェネレーターを再度実行すると、最初のデータベースと並行して2番目のデータベースが追加されます。両方のセッションコンテキストがすべてのツールで利用可能になります:

    packages/my_service/my_service/my_mcp_server/server.py
    from my_scope.my_db import session_context as my_db_session_context
    from my_scope.other_db import session_context as other_db_session_context

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

    packages/infra/src/stacks/application-stack.ts
    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 },
    }),
    });
    db.allowDefaultPortFrom(myMcpServer);
    db.grantConnect(myMcpServer);

    allowDefaultPortFrom はセキュリティグループルールを開き、MCP サーバーランタイムがデータベースポートに到達できるようにします。grantConnect は、サーバーの実行ロールに IAM rds-db:connect 権限を付与します。

    RDS Proxy を使用せずに接続する場合の SSL 要件

    Section titled “RDS Proxy を使用せずに接続する場合の SSL 要件”

    MCP サーバーが(RDS Proxy を使用せずに)Aurora クラスターに直接接続する場合、接続ジェネレーターは生成された MCP サーバーの Dockerfile を更新して、Amazon RDS CA バンドルをシステムトラストストアにインストールします:

    ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crt
    RUN update-ca-certificates

    RDS Proxy を使用する場合、MCP サーバーランタイムで RDS CA バンドルを設定する必要はありません。

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

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