Volver a todos los recursos
Tutorial // Recorrido práctico • Actualizado el 20 oct 2026 • 15 min de lectura • Stack: TypeScript y Node.js

Construye tu primera aplicación con Claude

Un tutorial práctico y listo para producción que muestra cómo inicializar el SDK de Anthropic, registrar herramientas tipadas, ejecutar llamadas a herramientas de forma segura y manejar ciclos de interacción agéntica estructurados.

Portada de Construye tu primera aplicación con Claude

Requisitos previos

Antes de empezar, asegúrate de tener instalado lo siguiente en tu máquina de desarrollo:

01

Inicializa el proyecto e instala el SDK oficial

Crea un directorio aislado e instala el SDK oficial de Anthropic para Node.js y `dotenv` para manejar las variables de entorno de forma segura:

Terminal bash
mkdir claude-agent && cd claude-agent
npm init -y
npm install @anthropic-ai/sdk dotenv
npm install -D typescript @types/node ts-node

Crea un archivo .env en la carpeta raíz:

.env env
ANTHROPIC_API_KEY="sk-ant-api03-..."
02

Define el cliente y el esquema de la herramienta

Crea index.ts. Vamos a definir una herramienta real que consulta el inventario por SKU:

index.ts TypeScript
import Anthropic from "@anthropic-ai/sdk";
import * as dotenv from "dotenv";
dotenv.config();

const anthropic = new Anthropic();

// 1. Definir la especificación de la herramienta con un esquema estricto
const tools: Anthropic.Tool[] = [
  {
    name: "lookup_inventory",
    description: "Check the available warehouse stock and restock date for a product SKU.",
    input_schema: {
      type: "object",
      properties: {
        sku: {
          type: "string",
          description: "Product SKU identifier (e.g., 'KB-PRO-99')"
        }
      },
      required: ["sku"]
    }
  }
];
03

Ejecuta el ciclo de llamada a la herramienta

Cuando Claude determina que para responder necesita datos externos, devuelve un bloque tool_use con stop_reason: "tool_use". Tu aplicación ejecuta la herramienta y le devuelve el resultado al modelo:

index.ts TypeScript
async function runAgent(userPrompt: string) {
  const messages: Anthropic.MessageParam[] = [
    { role: "user", content: userPrompt }
  ];

  // Primera llamada: Claude decide si usar la herramienta
  const response = await anthropic.messages.create({
    model: "claude-3-7-sonnet-20250219",
    max_tokens: 1024,
    tools: tools,
    messages: messages
  });

  console.log("Claude Stop Reason:", response.stop_reason);

  // Verificar si se pidió ejecutar la herramienta
  if (response.stop_reason === "tool_use") {
    const toolBlock = response.content.find(block => block.type === "tool_use");

    if (toolBlock && toolBlock.type === "tool_use") {
      console.log(`Executing tool "${toolBlock.name}" with args:`, toolBlock.input);

      // Consulta simulada a la base de datos
      const mockResult = {
        sku: (toolBlock.input as any).sku,
        in_stock: 42,
        warehouse: "Austin-TX",
        next_delivery: "2026-11-15"
      };

      // Agregar el mensaje del asistente y el mensaje tool_result
      messages.push({ role: "assistant", content: response.content });
      messages.push({
        role: "user",
        content: [
          {
            type: "tool_result",
            tool_use_id: toolBlock.id,
            content: JSON.stringify(mockResult)
          }
        ]
      });

      // Segunda llamada: Claude genera la respuesta final para el usuario
      const finalResponse = await anthropic.messages.create({
        model: "claude-3-7-sonnet-20250219",
        max_tokens: 1024,
        tools: tools,
        messages: messages
      });

      console.log("\nFinal Answer:\n", (finalResponse.content[0] as any).text);
    }
  }
}

runAgent("How many units of SKU 'KB-PRO-99' do we have in stock?");
04

Ejecuta y verifica la salida esperada

Ejecuta el script con ts-node:

Salida de la terminal output
$ npx ts-node index.ts
Claude Stop Reason: tool_use
Executing tool "lookup_inventory" with args: { sku: 'KB-PRO-99' }

Final Answer:
There are currently 42 units of SKU 'KB-PRO-99' in stock at the Austin, TX warehouse.
The next scheduled delivery is expected on November 15, 2026.
Buena práctica para producción

Valida siempre los argumentos de entrada de las herramientas con un validador en tiempo de ejecución como Zod antes de pasarlos a bases de datos internas o pasarelas de pago. Así te proteges de la manipulación de argumentos mediante prompt injection.

Perfil de Sebastián Larrauri

Tutorial de Sebastián Larrauri

Claude Forward Deployed Engineer y arquitecto de sistemas de IA. Developer y Architect certificado por Anthropic, con las credenciales CCDV-F, CCAO-F, CCAR-F y CCAR-P.