TypeScript Strands Agent a MCP
Il generatore connection può connettere il tuo TypeScript Strands Agent a un server MCP (sia TypeScript che Python).
Il generatore configura tutto il cablaggio necessario in modo che il tuo agente possa scoprire e invocare gli strumenti del server MCP, sia quando viene distribuito su AWS (tramite Bedrock AgentCore) che quando viene eseguito localmente.
Prerequisiti
Sezione intitolata “Prerequisiti”Prima di utilizzare questo generatore, assicurati di avere:
- Un progetto TypeScript con un componente Strands Agent
- Un progetto con un componente server MCP (sia
ts#mcp-serverchepy#mcp-server) - Entrambi i componenti creati con
computeType: BedrockAgentCoreRuntime
Utilizzo
Sezione intitolata “Utilizzo”Eseguire il Generatore
Sezione intitolata “Eseguire il Generatore”- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
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:connectionPuoi anche eseguire una prova per vedere quali file verrebbero modificati
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-runSeleziona il tuo progetto agente come sorgente e il tuo progetto server MCP come destinazione. Se i tuoi progetti contengono più componenti, specifica le opzioni sourceComponent e targetComponent per disambiguare.
Opzioni
Sezione intitolata “Opzioni”| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| sourceProject Obbligatorio | string | - | The source project |
| targetProject Obbligatorio | string | - | The target project to connect to |
| sourceComponent | string | - | The source component to connect from (component name, path relative to source project root, or generator id). Use '.' to explicitly select the project as the source. |
| targetComponent | string | - | The target component to connect to (component name, path relative to target project root, or generator id). Use '.' to explicitly select the project as the target. |
Output del Generatore
Sezione intitolata “Output del Generatore”Il generatore crea un pacchetto condiviso agent-connection e modifica il codice del tuo agente:
Directorypackages/common/agent-connection
Directorysrc
Directoryapp
- <mcp-server-name>-client.ts Client di alto livello per il server MCP connesso
Directorycore
- agentcore-mcp-client.ts Client MCP AgentCore di basso livello con autenticazione SigV4/JWT
- index.ts Esporta tutti i client
- project.json
- tsconfig.json
Inoltre, il generatore:
- Trasforma il file
agent.tsdel tuo agente per importare e utilizzare gli strumenti del server MCP - Aggiorna il target
serve-localdell’agente per dipendere dal target serve del server MCP - Installa le dipendenze richieste
Utilizzo del Server MCP Connesso
Sezione intitolata “Utilizzo del Server MCP Connesso”Il generatore trasforma il file agent.ts del tuo agente per utilizzare gli strumenti del server MCP:
import { Agent, tool } from '@strands-agents/sdk';import { MyMcpServerClient } from ':my-scope/agent-connection';
export const getAgent = async (sessionId: string) => { const myMcpServerClient = await MyMcpServerClient.create(sessionId); return new Agent({ systemPrompt: '...', tools: [myMcpServerClient], });};Il parametro sessionId viene passato dal chiamante, garantendo coerenza per Bedrock AgentCore Observability.
Infrastruttura
Sezione intitolata “Infrastruttura”Dopo aver eseguito il generatore di connessione, devi concedere all’agente il permesso di invocare il server 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.agentCoreRuntime.grantInvoke(myAgent.agentCoreRuntime);L’ARN del runtime AgentCore del server MCP viene automaticamente registrato nel namespace connection della Runtime Configuration dal costrutto CDK generato, in modo che l’agente possa scoprirlo a runtime.
Dopo aver eseguito il generatore di connessione, devi concedere all’agente il permesso di invocare il server MCP nella tua configurazione 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}L’ARN del runtime AgentCore del server MCP viene automaticamente registrato nel namespace connection della Runtime Configuration dal modulo Terraform generato, in modo che l’agente possa scoprirlo a runtime.
Sviluppo Locale
Sezione intitolata “Sviluppo Locale”Il generatore configura il target serve-local dell’agente per:
- Avviare automaticamente i server MCP connessi
- Impostare
SERVE_LOCAL=truein modo che il client generato utilizzi il trasporto HTTP diretto invece di AgentCore
Esegui l’agente localmente con:
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>Questo avvierà sia l’agente che tutti i server MCP connessi, con l’agente che si connette ai server MCP direttamente tramite HTTP sulle loro porte locali assegnate.