Bỏ qua để đến nội dung

MCP Server đến Cơ sở dữ liệu Quan hệ

Generator connection kết nối một TypeScript MCP Server với dự án Cơ sở dữ liệu Quan hệ, làm cho Prisma client khả dụng cho tất cả các công cụ được đăng ký bên trong createServer.

Trước khi sử dụng generator này, hãy đảm bảo bạn có:

  1. Một dự án ts#mcp-server
  2. Một dự án ts#rdb
  1. Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
  2. Mở Nx Console trong VSCode
  3. Nhấp Generate (UI) trong phần "Common Nx Commands"
  4. Tìm kiếm @aws/nx-plugin - connection
  5. Điền các tham số bắt buộc
    • Nhấp Generate

    Chọn dự án MCP server của bạn làm nguồn và dự án cơ sở dữ liệu quan hệ của bạn làm đích. Nếu dự án chứa nhiều thành phần MCP server, hãy chỉ định sourceComponent để phân biệt.

    Tham số Kiểu Mặc định Mô tả
    sourceProject Bắt buộc string - Dự án nguồn
    targetProject Bắt buộc string - Dự án đích để kết nối tới
    sourceComponent string - Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
    targetComponent string - Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.

    Generator sửa đổi hai tệp trong thư mục nguồn của MCP server của bạn:

    • Thư mụcpackages/my-service/src/my-mcp
      • server.ts Prisma client được lấy và khả dụng cho tất cả các công cụ được đăng ký bên trong createServer
      • Dockerfile RDS CA bundle được cài đặt cho kết nối SSL đến Aurora

    Ngoài ra, target <mcp-server-name>-serve-local được cập nhật để phụ thuộc vào target serve-local của cơ sở dữ liệu.

    Prisma client được lấy bên trong createServer và khả dụng cho tất cả các công cụ và tài nguyên được đăng ký ở đó:

    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;
    };

    Chạy generator lại với một đích khác sẽ thêm cơ sở dữ liệu thứ hai bên cạnh cơ sở dữ liệu đầu tiên. Cả hai đều được lấy bên trong 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;
    };

    Construct MCP server được tạo ra triển khai IGrantableIConnectable, vì vậy bạn có thể cấp quyền truy cập mạng và IAM cho cơ sở dữ liệu trực tiếp trên construct.

    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 mở quy tắc security group để runtime MCP server có thể truy cập cổng cơ sở dữ liệu. grantConnect cấp quyền IAM rds-db:connect cho execution role của server.

    Yêu cầu SSL Khi Kết nối Không qua RDS Proxy

    Phần tiêu đề “Yêu cầu SSL Khi Kết nối Không qua RDS Proxy”

    Trình tạo kết nối cập nhật Dockerfile để cài đặt gói CA của Amazon RDS tại /usr/local/share/ca-certificates/rds-bundle.crt. Đặt NODE_EXTRA_CA_CERTS vào đường dẫn đó để Node.js tin tưởng chứng chỉ khi kết nối không sử dụng 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',
    },
    });

    Để biết thêm chi tiết, xem tài liệu Amazon RDS SSL/TLS. Khi sử dụng RDS Proxy, bạn không cần cấu hình NODE_EXTRA_CA_CERTS.

    Terminal window
    pnpm nx <mcp-server-name>-serve-local <project-name>

    Điều này khởi động MCP server và tất cả các cơ sở dữ liệu được kết nối. Biến môi trường SERVE_LOCAL=true khiến mỗi Prisma client kết nối với cơ sở dữ liệu Docker cục bộ của nó thay vì Aurora.