Python Strands Agent para MCP
O gerador connection pode conectar seu Python Strands Agent a um servidor MCP (seja TypeScript ou Python).
O gerador configura toda a conexão necessária para que seu agente possa descobrir e invocar as ferramentas do servidor MCP, tanto quando implantado na AWS (via Bedrock AgentCore) quanto quando executado localmente.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de usar este gerador, certifique-se de ter:
- Um projeto Python com um componente Strands Agent
- Um projeto com um componente de servidor MCP (seja
ts#mcp-serveroupy#mcp-server) - Ambos os componentes criados com
computeType: BedrockAgentCoreRuntime
Execute o Gerador
Seção intitulada “Execute o Gerador”- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
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:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
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-runSelecione seu projeto de agente como origem e seu projeto de servidor MCP como destino. Se seus projetos contiverem múltiplos componentes, especifique as opções sourceComponent e targetComponent para desambiguar.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| sourceProject Obrigatório | string | - | O projeto de origem |
| targetProject Obrigatório | string | - | O projeto de destino para conectar |
| sourceComponent | string | - | O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem. |
| targetComponent | string | - | O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador cria um projeto Python compartilhado agent_connection em packages/common/agent_connection/ (se ainda não existir). Módulos de cliente por conexão são gerados neste projeto compartilhado:
Directorypackages/common/agent_connection
Directory<scope>_agent_connection
- __init__.py Re-exporta clientes por conexão
Directorycore
- agentcore_mcp_client.py Cliente MCP AgentCore principal
Directoryapp
- <mcp_server_name>_client.py Cliente por conexão para cada servidor MCP
Além disso, o gerador:
- Transforma o
agent.pydo seu agente para importar e usar as ferramentas do servidor MCP via um cliente baseado em classe - Adiciona o projeto
agent_connectioncomo uma dependência de workspace do seu projeto de agente - Atualiza o target
serve-localdo agente para depender do target serve do servidor MCP
Usando o Servidor MCP Conectado
Seção intitulada “Usando o Servidor MCP Conectado”O gerador transforma o agent.py do seu agente para usar as ferramentas do servidor MCP:
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()], )O parâmetro session_id é propagado a partir do chamador, garantindo consistência para Bedrock AgentCore Observability.
Infraestrutura
Seção intitulada “Infraestrutura”Após executar o gerador de conexão, você precisa conceder ao agente permissão para invocar o servidor MCP:
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);O ARN do runtime AgentCore do servidor MCP é automaticamente registrado no namespace connection da Configuração de Runtime pelo construtor CDK gerado, para que o agente possa descobri-lo em tempo de execução.
Após executar o gerador de conexão, você precisa conceder ao agente permissão para invocar o servidor MCP na sua configuração Terraform:
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}O ARN do runtime AgentCore do servidor MCP é automaticamente registrado no namespace connection da Configuração de Runtime pelo módulo Terraform gerado, para que o agente possa descobri-lo em tempo de execução.
Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”O gerador configura o target serve-local do agente para:
- Iniciar o(s) servidor(es) MCP conectado(s) automaticamente
- Definir
SERVE_LOCAL=truepara que o cliente gerado use transporte HTTP direto em vez de AgentCore
Execute o agente localmente com:
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>Isso iniciará tanto o agente quanto todos os servidores MCP conectados, com o agente se conectando aos servidores MCP diretamente via HTTP em suas portas locais atribuídas.