Bỏ qua để đến nội dung

AgentCore Gateway đến MCP Server

Generator connection có thể đăng ký một MCP server (có thể là TypeScript hoặc Python) làm target của một AgentCore Gateway.

Sau khi được kết nối, Gateway tổng hợp các công cụ của MCP server vào một endpoint MCP duy nhất, đánh giá các lời gọi dựa trên Cedar policy engine của nó, và ký lưu lượng truy cập đi ra đến MCP server bằng IAM SigV4.

Trước khi sử dụng generator này, hãy đảm bảo bạn có:

  1. Một dự án agentcore-gateway
  2. Một component MCP server (ts#mcp-server hoặc py#mcp-server) được tạo với infra: agentcoreauth: iam

Gateway phải có protocol: mcp và MCP server phải có auth: iam — generator sẽ xác thực cả hai. Các MCP server không dùng IAM không thể được đính kèm vì Gateway ký lưu lượng truy cập đi ra bằng SigV4.

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 Gateway làm nguồn và dự án MCP server làm target. Nếu dự án MCP server chứa nhiều component, hãy chỉ định targetComponent để 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 kết nối các dự án hiện có với nhau thay vì tạo ra các file nguồn mới. Các file sau sẽ được sửa đổi:

  • Thư mụcpackages/<gateway>
    • project.json target dev của Gateway có thêm dependency vào <mcp>-dev của MCP server
    • local-dev.ts ATTACHED_MCP_SERVERS được cập nhật để gateway cục bộ tổng hợp MCP server

Target dev của dự án Gateway có thêm dependency vào target <mcp>-dev của MCP server, do đó khi chạy Gateway cục bộ cũng sẽ khởi động MCP server. MCP server cũng được đăng ký trong local-dev.ts của dự án Gateway để gateway cục bộ tổng hợp các công cụ của nó.

Generator không thể tự động kết nối MCP server target vào cơ sở hạ tầng của bạn vì nó không biết stack hoặc module nào khởi tạo Gateway. Hãy tự thêm một lời gọi duy nhất gateway.addMcpServer(server).

Trong stack nơi bạn khởi tạo Gateway, hãy đăng ký MCP server làm target:

packages/infra/src/stacks/application-stack.ts
const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
const myGateway = new MyGateway(this, 'MyGateway');
// Register the MCP server as a target of the Gateway. The target name
// defaults to the MCP server's `mcpServerName` (its class name in
// kebab-case, e.g. `MyMcpServer` -> `my-mcp-server`).
myGateway.addMcpServer(myMcpServer);

Tên target của Gateway (mặc định là mcpServerName của MCP server) được sử dụng làm tiền tố cho tên action của Cedar — định dạng action là AgentCore::Action::"<targetName>___<toolName>". Xem phần Writing Policies. Giữ tên target ngắn gọn và ổn định; việc thay đổi nó sau này sẽ làm mất hiệu lực bất kỳ Cedar policy nào tham chiếu đến tên cũ.

Để ghi đè tên target mặc định, hãy truyền gatewayTargetName:

myGateway.addMcpServer(myMcpServer, { gatewayTargetName: 'my-mcp' });

Construct cấu hình target với iamCredentialProvider.service = 'bedrock-agentcore' để Gateway ký các lời gọi đi ra bằng execution role của chính nó.

Chạy Gateway cục bộ với:

Terminal window
pnpm nx dev <gateway-name>

khởi động một gateway cục bộ cùng với mọi MCP server được đính kèm trên cổng cục bộ được chỉ định của nó. Gateway cục bộ cung cấp một endpoint MCP duy nhất tổng hợp các công cụ của các server được đính kèm. Các agent được kết nối với Gateway thông qua generator kết nối gateway TypeScript hoặc Python sẽ trỏ đến nó khi chạy với LOCAL_DEV=true.