跳转到内容

MCP 服务器连接到关系数据库

connection 生成器将 TypeScript MCP 服务器 连接到 关系数据库 项目,使 Prisma 客户端可供 createServer 内注册的所有工具使用。

在使用此生成器之前,请确保您拥有:

  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 服务器源目录中的两个文件:

    • 文件夹packages/my-service/src/my-mcp
      • server.ts Prisma 客户端在 createServer 内获取并可供所有注册的工具使用
      • Dockerfile 安装 RDS CA 证书包以支持与 Aurora 的 SSL 连接

    此外,<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;
    };

    使用不同的目标再次运行生成器会将第二个数据库添加到第一个数据库旁边。两者都在 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。将 NODE_EXTRA_CA_CERTS 设置为该路径,以便 Node.js 在不使用 RDS Proxy 连接时信任该证书:

    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 客户端连接到其本地 Docker 数据库而不是 Aurora。