Python MCP Server đến DynamoDB
Generator connection kết nối Python MCP Server với dự án Python DynamoDB, cấu hình phát triển cục bộ để cả hai khởi động cùng nhau tự động.
Đ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#dynamodb
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy Generator
Phần tiêu đề “Chạy Generator”Chạy generator này@aws/nx-plugin:connection
pnpm nx g @aws/nx-plugin:connection yarn nx g @aws/nx-plugin:connection npx nx g @aws/nx-plugin:connection bunx nx g @aws/nx-plugin:connection- 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
Xây dựng lệnh của bạn5
Bắt buộc
Bắt buộc
Chọn dự án MCP server của bạn làm nguồn và dự án DynamoDB 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”sourceProjectBắt buộcstringDự án nguồn
targetProjectBắt buộcstringDự án đích để kết nối tới
sourceComponentstringComponent 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 id của generator). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
targetComponentstringComponent đí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 id của generator). Sử dụng '.' để chọn rõ ràng dự án làm đích.
preferInstallDependenciesbooleanMặc định:trueCó 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”Generator cập nhật target <mcp-server-name>-dev của MCP server trong project.json để phụ thuộc vào target dev của dự án DynamoDB, và thêm package DynamoDB làm dependency workspace. Không có file nguồn nào được sửa đổi.
Sử dụng DynamoDB trong Tools
Phần tiêu đề “Sử dụng DynamoDB trong Tools”Import các lớp entity từ package DynamoDB và sử dụng chúng bên trong các công cụ MCP server của bạn:
from my_scope_my_table.entities.example import ExampleModel
@mcp.tool()def list_examples() -> str: """List all example items.""" items = list(ExampleModel.scan()) return str([item.attribute_values for item in items])Cơ sở hạ tầng
Phần tiêu đề “Cơ sở hạ tầng”Để cho phép hàm Lambda của MCP server truy cập bảng DynamoDB, hãy cấp các quyền cần thiết trong cơ sở hạ tầng của bạn.
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
table.grantReadWriteData(myMcpServer);grantReadWriteData cấp cả quyền DynamoDB và KMS cho execution role của MCP server.
Cấp quyền truy cập cho runtime role của MCP server vào bảng và khóa mã hóa KMS của nó thông qua additional_iam_policy_statements:
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"
additional_iam_policy_statements = [ { Effect = "Allow" Action = [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", ] Resource = [ module.my_table.table_arn, "${module.my_table.table_arn}/index/*", ] }, { Effect = "Allow" Action = [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", ] Resource = [module.my_table.kms_key_arn] }, ]}Phát triển cục bộ
Phần tiêu đề “Phát triển cục bộ”Trình tạo connection cấu hình target dev của dự án để phụ thuộc vào target dev của dự án DynamoDB. DynamoDB Local sẽ tự động khởi động cùng với dự án của bạn khi chạy dev.
Biến môi trường LOCAL_DEV=true được đặt tự động, do đó is_local() trả về True và các entity PynamoDB của bạn kết nối với instance DynamoDB cục bộ thay vì AWS.