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

Python Agent đến MCP

Trình tạo connection có thể kết nối Python Agent của bạn với máy chủ MCP (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 máy chủ MCP, cả khi triển khai lên AWS (thông qua Bedrock AgentCore) và khi chạy cục bộ.

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

  1. Một dự án Python với thành phần Python Agent (Strands hoặc LangChain)
  2. Một dự án với thành phần máy chủ MCP (có thể là ts#mcp-server hoặc py#mcp-server)
  3. Cả hai thành phần được tạo với infra: agentcore
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 agent của bạn làm nguồn và dự án máy chủ MCP của bạn làm đích. Nếu các dự án của bạn chứa nhiều thành phần, hãy chỉ định các tùy chọn sourceComponenttargetComponent để 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.

Trình tạo tạo một dự án Python agent_connection được chia sẻ tại packages/common/agent_connection/ (nếu nó chưa tồn tại). Các mô-đun 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 Re-exports per-connection clients
      • Thư mụccore
        • agentcore_endpoints.py Framework-agnostic ARN/URL resolution
        • agentcore_mcp_transport.py Framework-agnostic MCP transport
        • agentcore_mcp_client_<framework>.py MCP client wrapping the transport for your agent’s framework
        • Thư mụcauth/ Framework-agnostic SigV4 / session-forwarding httpx.Auth
      • Thư mụcapp
        • <mcp_server_name>_client_<framework>.py Per-connection client for each MCP server

Hậu tố client khớp với framework của agent của bạn (_strands hoặc _langchain).

Ngoài ra, trình tạo:

  • Chuyển đổi agent.py của agent của bạn để import và sử dụng các công cụ của máy chủ MCP thông qua client dựa trên class
  • Thêm dự án agent_connection làm phụ thuộc workspace của dự án agent của bạn
  • Cập nhật target dev của agent để phụ thuộc vào target serve của máy chủ MCP

Trình tạo chuyển đổi agent.py của agent của bạn để sử dụng các công cụ của máy chủ MCP:

packages/my-project/my_module/agent/agent.py
from contextlib import contextmanager
from strands import Agent
from my_scope_agent_connection import MyMcpServerClientStrands
@contextmanager
def get_agent():
my_mcp_server = MyMcpServerClientStrands.create()
with (
my_mcp_server,
):
yield Agent(
system_prompt="...",
tools=[*my_mcp_server.list_tools_sync()],
)

Client Strands là một context manager, được nhập vào trong khối with xung quanh agent.

ID phiên AgentCore được truyền tự động đến máy chủ MCP thông qua header X-Amzn-Bedrock-AgentCore-Runtime-Session-Id cho cả hai framework, đảm bảo tính nhất quán cho Bedrock AgentCore Observability.

Sau khi chạy trình tạo kết nối, bạn cần cấp quyền cho agent để gọi máy chủ MCP:

packages/infra/src/stacks/application-stack.ts
const mcpServer = new MyMcpServer(this, 'MyMcpServer');
const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the MCP server
mcpServer.grantInvokeAccess(myAgent);

ARN runtime AgentCore của máy chủ MCP được tự động đăng ký trong namespace agentcore của Runtime Configuration bởi construct CDK được tạo, vì vậy agent có thể khám phá nó tại runtime.

Trình tạo cấu hình target dev của agent để:

  1. Tự động khởi động (các) máy chủ MCP đã kết nối
  2. Đặt LOCAL_DEV=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:

Terminal window
pnpm nx <agent-name>-dev <project-name>

Điều này sẽ khởi động cả agent và tất cả các máy chủ MCP đã kết nối, với agent kết nối trực tiếp đến các máy chủ MCP thông qua HTTP trên các cổng cục bộ được chỉ định của chúng.