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 một dự án Relational Database, làm cho Prisma client có sẵn 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
Terminal window
pnpm nx g @aws/nx-plugin:connection
Bạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

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ểuMặc địnhMô tả
sourceProject Bắt buộcstring-Dự án nguồn
targetProject Bắt buộcstring-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.
preferInstallDependencies booleantrueCó nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

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à có sẵn 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 các kết nối SSL đến Aurora

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

Prisma client được lấy bên trong createServer và có sẵn 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 cùng với 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 { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
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 },
securityGroups: [
new SecurityGroup(this, 'MyMcpServerSecurityGroup', { vpc, allowAllOutbound: true }),
],
}),
});
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 có RDS Proxy

Phần tiêu đề “Yêu cầu SSL Khi Kết nối Không có 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 thành đườ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>-dev <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 LOCAL_DEV=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.