Python MCP Server tới Cơ sở dữ liệu Quan hệ
Generator connection kết nối một Python MCP Server với một dự án Python Relational Database, làm cho database session có sẵn cho tất cả các công cụ được đăng ký trong server.
Đ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
py#mcp-server - Một dự án
py#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”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-run- 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
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.
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. |
| preferInstallDependencies | boolean | true | Có 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. |
Kết quả của Generator
Phần tiêu đề “Kết quả của Generator”Thư mụcpackages/my_service
- project.json Thêm một dependency từ
my_mcp_server-devvào targetdevcủa database - pyproject.toml Thêm package database như một workspace dependency
Thư mụcmy_service
Thư mụcmy_mcp_server
- Dockerfile Thêm RDS CA bundle được sử dụng cho các kết nối Aurora trực tiếp
- project.json Thêm một dependency từ
Sử dụng Database trong MCP Tools
Phần tiêu đề “Sử dụng Database trong MCP Tools”Import session_context từ package database của bạn và sử dụng nó bên trong các công cụ MCP server của bạn:
from sqlmodel import selectfrom my_scope.my_db import session_contextfrom 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])Nhiều Database
Phần tiêu đề “Nhiều Database”Chạy generator lại với một target khác sẽ thêm database thứ hai cùng với database đầu tiên. Cả hai session context đều có sẵn cho tất cả các công cụ:
from my_scope.my_db import session_context as my_db_session_contextfrom my_scope.other_db import session_context as other_db_session_contextHạ tầng
Phần tiêu đề “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 database trực tiếp trên construct.
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 để MCP server runtime có thể truy cập cổng database. grantConnect cấp quyền IAM rds-db:connect cho execution role của server.
Chạy MCP server bên trong cùng VPC với database, cấp cho nó quyền rds-db:connect thông qua additional_iam_policy_statements, và mở đường dẫn mạng với một cặp quy tắc security group. Các tài nguyên aws_vpc.main và aws_subnet được định nghĩa trong hướng dẫn triển khai database:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = aws_vpc.main.id database_subnet_ids = aws_subnet.database[*].id lambda_subnet_ids = aws_subnet.private[*].id}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server" enable_vpc = true vpc_id = aws_vpc.main.id subnet_ids = aws_subnet.private[*].id
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn
additional_iam_policy_statements = [ { Effect = "Allow" Action = ["rds-db:connect"] Resource = [ "arn:aws:rds-db:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.my_database.connect_resource_id}/${module.my_database.database_runtime_user}" ] } ]}
resource "aws_vpc_security_group_ingress_rule" "mcp_server_to_database" { description = "Allow the MCP server runtime to connect to the database" security_group_id = module.my_database.security_group_id referenced_security_group_id = module.my_mcp_server.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}
resource "aws_vpc_security_group_egress_rule" "mcp_server_to_database" { description = "Allow outbound traffic from the MCP server runtime to the database" security_group_id = module.my_mcp_server.security_group_id referenced_security_group_id = module.my_database.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}appconfig_application_id/appconfig_application_arn đến từ ứng dụng runtime configuration AppConfig được chia sẻ được khai báo một lần trong root module của bạn, không phải từ database module. Bao gồm namespace database khi khởi tạo nó để entry runtime configuration của database module được triển khai:
module "runtime_config_appconfig" { source = "../../common/terraform/src/core/runtime-config/appconfig"
application_name = "my-app-runtime-config" namespaces = ["connection", "agentcore", "database"]}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”Khi MCP server kết nối trực tiếp với Aurora cluster (không có RDS Proxy), connection generator cập nhật Dockerfile MCP server được tạo ra để cài đặt Amazon RDS CA bundle vào system trust store:
ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crtRUN update-ca-certificatesKhi sử dụng RDS Proxy, bạn không cần cấu hình RDS CA bundle trong MCP server runtime.
Phát triển Cục bộ
Phần tiêu đề “Phát triển Cục bộ”pnpm nx <mcp-server-name>-dev <project-name>yarn nx <mcp-server-name>-dev <project-name>npx nx <mcp-server-name>-dev <project-name>bunx nx <mcp-server-name>-dev <project-name>Điều này khởi động MCP server và tất cả các database được kết nối. Biến môi trường LOCAL_DEV=true khiến database client kết nối với Docker database cục bộ của nó thay vì Aurora.