Python Strands Agent tới MCP
Trình tạo connection có thể kết nối Python Strands Agent của bạn với một MCP server (có thể là TypeScript hoặc Python).
Trình tạo thiết lập tất cả các kết nối cần thiết để agent của bạn có thể khám phá và gọi các công cụ của MCP server, cả khi triển khai lên AWS (thông qua Bedrock AgentCore) và khi chạy cục bộ.
Đ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 Python với component Strands Agent
- Một dự án với component MCP server (có thể là
ts#mcp-serverhoặcpy#mcp-server) - Cả hai component được tạo với
computeType: BedrockAgentCoreRuntime
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 agent của bạn làm nguồn và dự án MCP server của bạn làm đích. Nếu dự án của bạn chứa nhiều component, hãy chỉ định các tùy chọn sourceComponent và targetComponent để 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ả đầu ra của trình tạo
Phần tiêu đề “Kết quả đầu ra của trình tạo”Trình tạo tạo một dự án Python agent_connection được chia sẻ tại packages/common/agent_connection/ (nếu chưa tồn tại). Các module client theo từng kết nối được tạo vào dự án được chia sẻ này:
Thư mụcpackages/common/agent_connection
Thư mục<scope>_agent_connection
- __init__.py Xuất lại các client theo từng kết nối
Thư mụccore
- agentcore_mcp_client.py Client MCP AgentCore cốt lõi
Thư mụcapp
- <mcp_server_name>_client.py Client theo từng kết nối cho mỗi MCP server
Ngoài ra, trình tạo còn:
- Chuyển đổi
agent.pycủa agent để import và sử dụng các công cụ của MCP server thông qua một client dựa trên class - Thêm dự án
agent_connectionlàm dependency workspace của dự án agent - Cập nhật target
serve-localcủa agent để phụ thuộc vào target serve của MCP server
Sử dụng MCP Server đã kết nối
Phần tiêu đề “Sử dụng MCP Server đã kết nối”Trình tạo chuyển đổi agent.py của agent để sử dụng các công cụ của MCP server:
from contextlib import contextmanagerfrom strands import Agent
from my_scope_agent_connection import MyMcpServerClient
@contextmanagerdef get_agent(session_id: str): my_mcp_server = MyMcpServerClient.create(session_id=session_id) with ( my_mcp_server, ): yield Agent( system_prompt="...", tools=[*my_mcp_server.list_tools_sync()], )Tham số session_id được truyền từ người gọi, đảm bảo tính nhất quán cho Bedrock AgentCore Observability.
Hạ tầng
Phần tiêu đề “Hạ tầng”Sau khi chạy trình tạo kết nối, bạn cần cấp quyền cho agent để gọi MCP server:
const mcpServer = new MyMcpServer(this, 'MyMcpServer');const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent access to bedrock modelsmyAgent.agentCoreRuntime.addToRolePolicy( new PolicyStatement({ actions: ['bedrock:InvokeModel', 'bedrock:InvokeModelWithResponseStream'], resources: ['arn:aws:bedrock:*:*:foundation-model/*', 'arn:aws:bedrock:*:*:inference-profile/*'], }),);
// Grant the agent permissions to invoke the MCP servermcpServer.grantInvokeAccess(myAgent.agentCoreRuntime);ARN runtime AgentCore của MCP server được tự động đăng ký trong namespace connection của Runtime Configuration bởi CDK construct được tạo, để agent có thể khám phá nó tại runtime.
Sau khi chạy trình tạo kết nối, bạn cần cấp quyền cho agent để gọi MCP server trong cấu hình Terraform của bạn:
module "inventory_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/inventory-mcp"}
module "story_agent" { source = "../../common/terraform/src/app/agents/story-agent"}
# Grant the agent permissions to invoke the MCP serverresource "aws_iam_policy" "agent_invoke_mcp" { name = "AgentInvokeMcpPolicy" policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = "bedrock-agentcore:InvokeAgent" Resource = module.inventory_mcp_server.agent_core_runtime_arn }] })}
resource "aws_iam_role_policy_attachment" "agent_invoke_mcp" { role = module.story_agent.agent_core_runtime_role_arn policy_arn = aws_iam_policy.agent_invoke_mcp.arn}ARN runtime AgentCore của MCP server được tự động đăng ký trong namespace connection của Runtime Configuration bởi module Terraform được tạo, để agent có thể khám phá nó tại runtime.
Phát triển cục bộ
Phần tiêu đề “Phát triển cục bộ”Trình tạo cấu hình target serve-local của agent để:
- Tự động khởi động (các) MCP server đã kết nối
- Đặt
SERVE_LOCAL=trueđể client được tạo sử dụng truyền tải HTTP trực tiếp thay vì AgentCore
Chạy agent cục bộ với:
pnpm nx <agent-name>-serve-local <project-name>yarn nx <agent-name>-serve-local <project-name>npx nx <agent-name>-serve-local <project-name>bunx nx <agent-name>-serve-local <project-name>Điều này sẽ khởi động cả agent và tất cả các MCP server đã kết nối, với agent kết nối trực tiếp đến các MCP server thông qua HTTP trên các cổng cục bộ được chỉ định của chúng.