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 bên trong createServer và các điểm vào transport của nó.
Điều kiện tiên quyết
Phần tiêu đề “Điều kiện tiên quyết”Trước khi sử dụng generator này, hãy đảm bảo bạn có:
- Một dự án
ts#mcp-server - Một dự án
ts#rdb
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy Generator
Phần tiêu đề “Chạy Generator”- Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
- Mở Nx Console trong VSCode
- Nhấp
Generate (UI)trong phần "Common Nx Commands" - Tìm kiếm
@aws/nx-plugin - connection - Điền các tham số bắt buộc
- Nhấp
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionBạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runChọ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.
Tùy chọn
Phần tiêu đề “Tùy chọn”| 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. |
Kết quả của Generator
Phần tiêu đề “Kết quả của Generator”Generator sửa đổi ba 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
createServerđược cập nhật để chấp nhận tham số{ db } - http.ts Prisma client được tạo phía trên
const server = createServer({ db }) - stdio.ts Prisma client được tạo trước
await createServer({ db }).connect(transport)
- server.ts
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.
Cách hoạt động
Phần tiêu đề “Cách hoạt động”Định nghĩa Server
Phần tiêu đề “Định nghĩa Server”createServer nhận Prisma client như một tham số để nó vẫn đồng bộ và có thể truyền client cho các công cụ và tài nguyên:
import { getPrisma as getMyDb } from ':my-scope/my-db';
export const createServer = ({ myDb,}: { myDb: Awaited<ReturnType<typeof getMyDb>>;}) => { const server = new McpServer({ name: 'my-service', version: '1.0.0' }); // register tools/resources that use myDb return server;};HTTP Transport
Phần tiêu đề “HTTP Transport”Prisma client được tạo bên trong request handler, phía trên lời gọi createServer:
import { getPrisma as getMyDb } from ':my-scope/my-db';
app.post('/mcp', async (req, res) => { try { const myDb = await getMyDb(); const server = createServer({ myDb }); // ... }});Stdio Transport
Phần tiêu đề “Stdio Transport”Cùng một mẫu được áp dụng cho điểm vào stdio transport:
import { getPrisma as getMyDb } from ':my-scope/my-db';
export const startMcpServer = async () => { const transport = new StdioServerTransport(); const myDb = await getMyDb(); await createServer({ myDb }).connect(transport);};Nhiều Cơ sở dữ liệu
Phần tiêu đề “Nhiều Cơ sở dữ liệu”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 truyền cho createServer cùng nhau:
const postgresDb = await getPostgresDb();const mySqlDb = await getMySqlDb();const server = createServer({ postgresDb, mysqlDb });Cơ sở hạ tầng
Phần tiêu đề “Cơ sở hạ tầng”Construct MCP server được tạo ra triển khai IGrantable và IConnectable, 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.
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.
Truyền các đầu ra của module cơ sở dữ liệu vào module MCP server của bạn để nó có thể truy cập cơ sở dữ liệu và đọc cấu hình runtime của nó:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = module.vpc.vpc_id database_subnet_ids = module.vpc.private_isolated_subnet_ids}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"
appconfig_application_id = module.my_database.appconfig_application_id database_cluster_resource_id = module.my_database.cluster_resource_id database_runtime_user = module.my_database.database_runtime_user database_security_group_id = module.my_database.security_group_id database_port = module.my_database.cluster_port}Đảm bảo execution role của MCP server có quyền rds-db:connect và security group của nó có thể truy cập security group của cơ sở dữ liệu trên cổng cơ sở dữ liệu.
Phát triển Cục bộ
Phần tiêu đề “Phát triển Cục bộ”pnpm nx <mcp-server-name>-serve-local <project-name>yarn nx <mcp-server-name>-serve-local <project-name>npx nx <mcp-server-name>-serve-local <project-name>bunx 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.