MCP Server đến DynamoDB
Trình tạo connection kết nối một TypeScript MCP Server với dự án TypeScript DynamoDB, cấu hình phát triển cục bộ để cả hai khởi động cùng nhau một cách 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 trình tạo này, hãy đảm bảo bạn có:
- Một dự án
ts#mcp-server - Một dự án
ts#dynamodb
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy trình tạo
Phần tiêu đề “Chạy trình tạo”- 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 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”| 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 trình tạo
Phần tiêu đề “Kết quả của trình tạo”Trình tạo 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. Không có tệp 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 factory entity từ gói DynamoDB và sử dụng chúng bên trong createServer:
import { createExampleEntity } from ':my-scope/my-table';
export const createServer = async () => { const server = new McpServer({ name: 'my-service', version: '1.0.0' });
server.tool('list_examples', 'List all example items', {}, async () => { const entity = await createExampleEntity(); const result = await entity.scan.go(); return { content: [{ type: 'text', text: JSON.stringify(result.data) }], }; });
return server;};Cơ sở hạ tầng
Phần tiêu đề “Cơ sở hạ tầng”Để cho phép 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 vai trò thực thi của MCP server.
module "my_table" { source = "../../common/terraform/src/app/dynamodb/my-table"}
resource "aws_iam_role_policy" "dynamodb_access" { role = module.my_mcp_server.lambda_role_name
policy = jsonencode({ Version = "2012-10-17" Statement = [ { 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 thiết lập tự động, do đó getDynamoDBClient() và resolveTableName() kết nối đến instance DynamoDB Local cục bộ thay vì AWS.