Primeros pasos5 minutos de lectura7 idiomas

Recetas del modo código de MCP: ingresos mensuales, conciliación de facturas y 100 consultas de precios en una sola llamada

Tres programas prácticos del modo código para AnythingMCP: ingresos mensuales de la tienda online (Shopify) y la contabilidad (Lexware Office), pedidos conciliados con facturas y 100 consultas de precios de clientes en una sola llamada a una herramienta en lugar de 100. Con el código, los límites que importan y cuándo guardar un programa como herramienta.

HCPor el equipo de HelpCodeActualizado 5 min de lectura Código abierto en GitHub

Sin tarjeta de crédito · 7 días de prueba · Alternativa self-host disponible

  • Prueba gratis de 7 días
    Sin tarjeta de crédito
  • RGPD y SOC 2 ready
    Datos en la UE, registros de auditoría
  • Código abierto en GitHub
    Open source · AGPL-3.0
  • Funciona con ChatGPT, Claude, Gemini
    Cualquier cliente compatible con MCP

Resumen

Tres programas prácticos del modo código para AnythingMCP: ingresos mensuales de la tienda online (Shopify) y la contabilidad (Lexware Office), pedidos conciliados con facturas y 100 consultas de precios de clientes en una sola llamada a una herramienta en lugar de 100. Con el código, los límites que importan y cuándo guardar un programa como herramienta.

TL;DR: El modo código compensa allí donde un agente tendría que hacer muchas veces la misma llamada o leer dos listas largas para compararlas. Estas tres recetas muestran el patrón: sumar entre dos sistemas, cruzar dos listas, repetir una consulta para muchos elementos. Cada una es un programa corto en JavaScript que llama a herramientas MCP mediante amcp.run y devuelve solo el resultado. Ejecútalas en línea (el agente escribe el programa con code_execute) o guárdalas como herramientas de código que tu equipo llama por su nombre. El modo código está disponible en AnythingMCP autoalojado desde la v0.52.0 y llegará próximamente a AnythingMCP Cloud.

¿Nuevo en el modo código? Empieza por ¿Qué es el modo código de MCP? y Crea tu primera herramienta de código.

Antes de copiar un programa

  • Los nombres de herramientas son reales, las estructuras varían. Las recetas usan herramientas de los conectores de Shopify y Lexware Office. Los nombres de los campos siguen la respuesta de cada API; ejecuta una herramienta una vez en su panel Test, o llama a amcp.describe(name) dentro de un programa, antes de fiarte de un campo.
  • Diez segundos por ejecución. Una ejecución se detiene a los 10 segundos. Obtén las páginas y ejecuta las llamadas independientes en paralelo (como máximo 16 a la vez) en lugar de una tras otra.
  • Solo lectura. El código en línea nunca llama a herramientas que modifiquen datos; las herramientas de código guardadas solo pueden hacerlo si un administrador lo permite, en Enterprise. Las tres recetas solo leen.
  • Cifras inventadas. Los resultados mostrados son ejemplos inventados.

Receta 1 — Ingresos mensuales entre tienda y contabilidad

La pregunta: «¿Cuáles fueron nuestros ingresos en octubre: tienda online más facturas B2B?»

Sin el modo código, el agente recorre cientos de pedidos de la tienda y de facturas, lee cada registro en su contexto y suma los números leyendo. Con el modo código recibe dos totales.

// Input: args.month as "YYYY-MM", e.g. "2026-10".
const [y, m] = String(args.month).split('-').map(Number);
const from = `${y}-${String(m).padStart(2, '0')}-01`;
const to = m === 12 ? `${y + 1}-01-01` : `${y}-${String(m + 1).padStart(2, '0')}-01`;

// Shop: paid orders created in the month (Shopify search syntax), 250 per page.
let shop = 0, shopOrders = 0, after = undefined;
do {
  const res = await amcp.run('shopify_search_orders', {
    query: `created_at:>=${from} created_at:<${to} financial_status:paid test:false`,
    first: 250,
    after,
  });
  const page = res.orders ?? res.data?.orders; // depends on how the tool wraps the GraphQL result
  for (const o of page.nodes) {
    shop += Number(o.currentTotalPriceSet.shopMoney.amount);
    shopOrders++;
  }
  after = page.pageInfo.hasNextPage ? page.pageInfo.endCursor : undefined;
} while (after);

// Accounting: sales invoices dated in the month, without drafts and voided ones.
let b2b = 0, invoices = 0, p = 0, last = false;
const lastDay = new Date(Date.UTC(y, m, 0)).toISOString().slice(0, 10);
while (!last) {
  const res = await amcp.run('lexware_office_list_vouchers', {
    voucherType: 'salesinvoice',
    voucherStatus: 'open,paid,paidoff',
    voucherDateFrom: from,
    voucherDateTo: lastDay,
    size: 250,
    page: p++,
  });
  for (const v of res.content ?? []) { b2b += Number(v.totalAmount); invoices++; }
  last = res.last ?? true;
}

return {
  month: args.month,
  shop: { orders: shopOrders, gross: Math.round(shop * 100) / 100 },
  invoices: { count: invoices, gross: Math.round(b2b * 100) / 100 },
  total: Math.round((shop + b2b) * 100) / 100,
};

Lo que vuelve son cuatro números, no 600 registros:

{ "month": "2026-10", "shop": { "orders": 412, "gross": 38214.9 }, "invoices": { "count": 57, "gross": 91380.12 }, "total": 129595.02 }

Comprueba la definición antes de fiarte del total. Si los pedidos de la tienda también se facturan en la contabilidad, sumar ambos los cuenta dos veces; en ese caso filtra las facturas para dejar solo clientes B2B. Ambas cifras son importes brutos en la moneda de la tienda y de la contabilidad; no se restan reembolsos ni notas de crédito. Escribe estas decisiones en la descripción de la herramienta, para que la IA explique qué significa el número.

Receta 2 — Pedidos sin factura, facturas sin pedido

La pregunta: «¿Qué pedidos pagados de la tienda del mes pasado no tienen factura en la contabilidad y qué importes no coinciden?»

Es la tarea en la que peor rinden los modelos al leer: dos listas de unos cientos de líneas cada una, comparadas a ojo. En código es una búsqueda en un diccionario.

// Where your accounting keeps the shop order number. Adapt to your setup:
// many shop integrations write it into the invoice's reference or title.
const orderRefOf = (invoice) => invoice.orderReference;

const orders = args.orders;     // [{ name: "#1042", total: 89.9 }, ...] from a first step
const invoices = args.invoices; // [{ orderReference: "#1042", totalAmount: 89.9, voucherNumber: "RE0815" }, ...]

const byOrder = new Map(invoices.map((i) => [orderRefOf(i), i]));
const missing = [], mismatched = [];
for (const o of orders) {
  const inv = byOrder.get(o.name);
  if (!inv) missing.push(o.name);
  else if (Math.abs(Number(inv.totalAmount) - Number(o.total)) > 0.01)
    mismatched.push({ order: o.name, invoice: inv.voucherNumber, order_total: o.total, invoice_total: inv.totalAmount });
}
const orderNames = new Set(orders.map((o) => o.name));
const orphanInvoices = invoices.filter((i) => !orderNames.has(orderRefOf(i))).map((i) => i.voucherNumber);

return { checked: orders.length, missing, mismatched, orphanInvoices };

Esta versión recibe ambas listas como entradas para que la lógica de cruce sea legible. En una herramienta de código guardada, obtenlas dentro del programa con los bucles de paginación de la receta 1 (pedidos desde shopify_search_orders, facturas desde lexware_office_list_vouchers, más lexware_office_get_invoice donde necesites el campo de referencia), de modo que la IA llame a una sola herramienta con un mes y reciba tres listas cortas:

{ "checked": 412, "missing": ["#1077", "#1139"], "mismatched": [{ "order": "#1101", "invoice": "RE0902", "order_total": 129.0, "invoice_total": 119.0 }], "orphanInvoices": [] }

Receta 3 — 100 consultas de precios en una llamada en lugar de 100

La pregunta: «Aquí tienes 100 números de artículo de la consulta del cliente. ¿Cuáles son los precios de este cliente?»

Muchos ERP calculan un precio específico por artículo y cliente, una petición cada vez. Supongamos que tu propio conector REST para el ERP tiene una herramienta erp_get_customer_price con las entradas article y customer (un nombre de ejemplo; cómo convertir una API REST en herramientas MCP). Sin el modo código, el agente hace 100 llamadas y lee 100 resultados. Con el modo código:

// Inputs: args.customer, args.articles (array of article numbers).
const articles = [...new Set(args.articles.map(String))];
const rows = [];
const BATCH = 10; // at most 16 calls may be in flight at once

for (let i = 0; i < articles.length; i += BATCH) {
  const batch = articles.slice(i, i + BATCH);
  const results = await Promise.all(batch.map(async (article) => {
    try {
      const r = await amcp.run('erp_get_customer_price', { article, customer: args.customer });
      return { article, price: r.netPrice, unit: r.priceUnit, currency: r.currency };
    } catch (e) {
      return { article, error: String(e.message ?? e) };
    }
  }));
  rows.push(...results);
}

return {
  customer: args.customer,
  found: rows.filter((r) => !r.error).length,
  notFound: rows.filter((r) => r.error).map((r) => r.article),
  prices: rows.filter((r) => !r.error),
};

Se ejecutan diez llamadas a la vez, así que 100 consultas de unos cientos de milisegundos cada una terminan holgadamente dentro del límite de 10 segundos. Un artículo que falle no detiene el resto; acaba en notFound. El modelo recibe una única tabla que puede convertir en un borrador de presupuesto o en un correo electrónico, en lugar de 100 resultados de herramienta separados.

Antes de nada, comprueba si necesitas código. Si la API puede filtrar por una lista de artículos en una sola petición (weclapp, por ejemplo, filtra números de artículo con un operador in), una única llamada ordinaria a una herramienta es más sencilla. El modo código es para las APIs que no pueden.

¿En línea o guardado?

En línea (code_execute)Herramienta de código guardada
Quién escribe el programaEl agente, para esta preguntaUn administrador, una sola vez (o el agente lo propone)
Ideal paraAnálisis puntuales, exploraciónPreguntas que el equipo hace cada semana
PermisosLos propios del solicitante, solo lecturaInvocador o definidor, solo lectura salvo que se permita escribir (Enterprise)
Edición (según lo anunciado con la v0.52)Team y EnterpriseCommunity 3, Starter 5, Team 20, Enterprise ilimitadas

Un patrón que el agente resuelve en línea dos veces es candidato a herramienta guardada. Con el código en línea activado, el agente puede proponerla y un administrador la aprueba con un clic.

FAQ

¿Pueden estos programas escribir, por ejemplo crear las facturas que faltan? No en línea. Una herramienta de código guardada solo puede llamar a herramientas de escritura cuando un administrador activa Allow write tools, lo que requiere Enterprise. Para cualquier cosa que modifique datos, mantén el programa en solo lectura y deja que una persona confirme la acción.

¿Y si una ejecución necesita más de 10 segundos? Divídela: una ejecución por mes en lugar de por año, o menos elementos por llamada. Las ejecuciones que superan un límite se detienen con un error; no queda nada escrito a medias, porque solo leen.

¿El programa envía mis datos a algún sitio? No. El programa se ejecuta en un runner aislado sin red. Solo accede a tus sistemas a través de las herramientas MCP, con tu rol. Consulta Ejecución segura de código para agentes de IA.

Relacionado

¿Te ha sido útil esta guía?

MCP en tu stack en 60 segundos.

Pon en marcha AnythingMCP en la nube gestionada o alójalo en tu propia infraestructura. 7 días gratis, sin tarjeta de crédito.

Guías relacionadas

GS
Primeros pasos

Code Mode: reduce el consumo de tokens del agente de IA ejecutando las herramientas en un solo paso

El modo código permite que un agente de IA ejecute un breve programa que orquesta muchas herramientas MCP en una única llamada, en lugar de una ida y vuelta por herramienta. El filtrado y la combinación de datos ocurren en una sandbox aislada, de modo que solo regresa la respuesta final, reduciendo el consumo de tokens en flujos de trabajo con muchos datos hasta en un 90–99 %.

GS
Primeros pasos

Crea tu primera herramienta de código MCP: pedidos del ERP y cuenta del CRM en una sola llamada

Un tutorial paso a paso del modo código de AnythingMCP: inicia el code runner, activa el modo código y guarda una herramienta de código que lee los últimos pedidos del ERP (weclapp) y la cuenta y los deals abiertos del CRM (HubSpot) en una sola llamada. Solo lectura, con los permisos de quien llama y auditada.

GS
Primeros pasos

¿Qué es el modo código de MCP? Menos tokens y menos idas y vueltas para los agentes de IA

El modo código permite que un agente de IA ejecute un programa corto que llama a varias herramientas MCP, en lugar de llamarlas una a una a través del modelo. Por qué ahorra tokens e idas y vueltas, cuándo ayuda y cuándo no, y cómo lo ejecuta AnythingMCP: herramientas de código guardadas, código en línea y propuestas del agente, en un runner aislado.

GS
Primeros pasos

El grafo de conocimiento MCP: un conector que aprende cómo se conectan tus sistemas

AnythingMCP no es solo un proxy MCP — construye un grafo de conocimiento de tus herramientas para que los agentes de IA sepan cómo encadenar un cliente de tu CRM con sus pedidos en el ERP. Así funciona el conector inteligente.

GS
Primeros pasos

¿Qué es el Protocolo de Contexto del Modelo (MCP)?

Una guía completa para entender el Protocolo de Contexto del Modelo: cómo funciona, por qué es importante y cómo empezar.

GS
Primeros pasos

Introducción a AnythingMCP

Instala y configura AnythingMCP en minutos. Clona el repositorio, ejecuta el script de configuración interactivo y comienza a conectar tus APIs a agentes de IA.