Primi passi5 minuti di lettura7 lingue

MCP Code Mode: ricette per fatturato mensile, riconciliazione fatture e 100 consultazioni di prezzo in una sola chiamata

Tre programmi pratici in code mode per AnythingMCP: ricavi mensili tra negozio online (Shopify) e contabilità (Lexware Office), ordini riconciliati con le fatture e 100 consultazioni di prezzo per cliente in una sola chiamata a un tool invece di 100. Con il codice, i limiti che contano e quando salvare un programma come tool.

HCA cura del team HelpCodeAggiornato 5 min di lettura Open source su GitHub

Nessuna carta di credito · 7 giorni di prova · Alternativa self-host disponibile

  • Prova gratuita di 7 giorni
    Nessuna carta di credito
  • GDPR & SOC 2 ready
    Dati in UE, log di audit
  • Open source su GitHub
    Open source · AGPL-3.0
  • Funziona con ChatGPT, Claude, Gemini
    Qualsiasi client compatibile MCP

In breve

Tre programmi pratici in code mode per AnythingMCP: ricavi mensili tra negozio online (Shopify) e contabilità (Lexware Office), ordini riconciliati con le fatture e 100 consultazioni di prezzo per cliente in una sola chiamata a un tool invece di 100. Con il codice, i limiti che contano e quando salvare un programma come tool.

TL;DR: Il code mode rende dove un agente altrimenti farebbe molte volte la stessa chiamata o dovrebbe leggere due lunghe liste per confrontarle. Queste tre ricette mostrano il pattern: sommare dati da due sistemi, confrontare due liste, ripetere una consultazione per molti elementi. Ognuna è un breve programma JavaScript che chiama i tool MCP tramite amcp.run e restituisce solo il risultato. Eseguile inline (l'agente scrive il programma con code_execute) oppure salvale come tool di codice che il tuo team richiama per nome. Il code mode è disponibile in AnythingMCP self-hosted dalla v0.52.0 e arriverà presto su AnythingMCP Cloud.

Sei alle prime armi con il code mode? Parti da Cos'è l'MCP code mode? e Crea il tuo primo tool di codice.

Prima di copiare un programma

  • I nomi dei tool sono reali, le strutture variano. Le ricette usano strumenti dei connettori Shopify e Lexware Office. I nomi dei campi seguono la risposta di ciascuna API: esegui un tool una volta nel pannello Test, oppure chiama amcp.describe(name) dentro un programma, prima di fare affidamento su un campo.
  • Dieci secondi per esecuzione. Un'esecuzione si interrompe dopo 10 secondi. Recupera le pagine ed esegui le chiamate indipendenti in parallelo (al massimo 16 alla volta) invece di una dopo l'altra.
  • Sola lettura. Il codice inline non chiama mai tool che modificano dati; i tool di codice salvati possono farlo solo se un amministratore lo consente, nell'edizione Enterprise. Tutte e tre le ricette si limitano a leggere.
  • Cifre inventate. I risultati mostrati sono esempi inventati.

Ricetta 1 — Ricavi mensili tra negozio e contabilità

La domanda: "Quanto abbiamo fatturato a ottobre: negozio online più fatture B2B?"

Senza code mode, l'agente scorre centinaia di ordini del negozio e di fatture, caricando ogni record nel proprio contesto, e somma i numeri leggendoli. Con il code mode ottiene due totali.

// 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,
};

Quello che torna indietro sono quattro numeri, non 600 record:

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

Controlla la definizione prima di fidarti del totale. Se gli ordini del negozio vengono fatturati anche in contabilità, sommare entrambi li conta due volte; in tal caso filtra le fatture sui soli clienti B2B. Qui entrambe le cifre sono importi lordi nella valuta del negozio e della contabilità; rimborsi e note di credito non vengono sottratti. Scrivi queste scelte nella descrizione del tool, così l'AI spiega cosa significa il numero.

Ricetta 2 — Ordini senza fattura, fatture senza ordine

La domanda: "Quali ordini pagati del negozio dello scorso mese non hanno una fattura in contabilità, e quali importi non coincidono?"

È il compito in cui i modelli se la cavano peggio leggendo: due liste di qualche centinaio di righe ciascuna, confrontate a occhio. In codice diventa una ricerca in un dizionario.

// 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 };

Questa versione riceve entrambe le liste come input per mantenere leggibile la logica di confronto. In un tool di codice salvato, recuperale all'interno del programma con i cicli di paginazione della ricetta 1 (gli ordini da shopify_search_orders, le fatture da lexware_office_list_vouchers, più lexware_office_get_invoice dove ti serve il campo di riferimento), così l'AI chiama un solo tool con un mese e ottiene tre brevi liste:

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

Ricetta 3 — 100 consultazioni di prezzo in una sola chiamata invece di 100

La domanda: "Ecco 100 codici articolo dalla richiesta del cliente. Quali sono i prezzi per questo cliente?"

Molti ERP calcolano un prezzo specifico per cliente per ogni articolo e cliente, una richiesta alla volta. Supponi che il tuo connettore REST per l'ERP abbia un tool erp_get_customer_price con gli input article e customer (un nome di esempio; come trasformare un'API REST in strumenti MCP). Senza code mode l'agente fa 100 chiamate e legge 100 risultati. Con il code mode:

// 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),
};

Dieci chiamate vengono eseguite alla volta, quindi 100 consultazioni da poche centinaia di millisecondi ciascuna si concludono ampiamente entro il limite di 10 secondi. Un articolo che fallisce non blocca gli altri: finisce in notFound. Il modello riceve un'unica tabella che può trasformare in una bozza di preventivo o in un'e-mail, invece di 100 risultati separati.

Prima verifica se ti serve davvero il codice. Se l'API può filtrare per una lista di articoli in una sola richiesta (weclapp, per esempio, filtra i codici articolo con un operatore in), una singola chiamata normale a un tool è più semplice. Il code mode serve per le API che non possono farlo.

Inline o salvato?

Inline (code_execute)Tool di codice salvato
Chi scrive il programmaL'agente, per questa domandaUn amministratore, una volta (o lo propone l'agente)
Adatto aAnalisi occasionali, esplorazioneDomande che il team pone ogni settimana
PermessiQuelli del chiamante, sola letturaInvocante o definente, sola lettura salvo autorizzazione alla scrittura (Enterprise)
Edizione (come annunciato con la v0.52)Team ed EnterpriseCommunity 3, Starter 5, Team 20, Enterprise illimitati

Un pattern che l'agente risolve inline due volte è un candidato per un tool salvato. Con il codice inline abilitato, l'agente può proporlo e un amministratore lo approva con un clic.

FAQ

Questi programmi possono scrivere, ad esempio creare le fatture mancanti? Non inline. Un tool di codice salvato può chiamare tool di scrittura solo quando un amministratore attiva Allow write tools, che richiede Enterprise. Per qualsiasi operazione che modifica dati, mantieni il programma in sola lettura e lascia che sia una persona a confermare l'azione.

Cosa succede se un'esecuzione richiede più di 10 secondi? Dividila: un'esecuzione per mese invece che per un anno intero, oppure meno elementi per chiamata. Le esecuzioni che superano un limite si interrompono con un errore; nulla viene scritto a metà, perché si limitano a leggere.

I miei dati vengono inviati da qualche parte dal programma? No. Il programma gira in un runner isolato senza rete. Raggiunge i tuoi sistemi solo tramite i tool MCP, con il tuo ruolo. Vedi Esecuzione sicura del codice per gli agenti AI.

Correlati

Questa guida ti è stata utile?

MCP nel tuo stack in 60 secondi.

Avvia AnythingMCP nel Cloud gestito o installalo sulla tua infrastruttura. 7 giorni gratis, senza carta di credito.

Guide correlate

GS
Per iniziare

Code mode: riduci il consumo di token degli agenti AI eseguendo gli strumenti in un solo passaggio

Il code mode permette a un agente AI di eseguire un breve programma che orchestra molti strumenti MCP in un'unica chiamata, invece di un viaggio di andata e ritorno per ogni strumento. Il filtraggio e l'unione dei dati avvengono in un sandbox isolato, così torna indietro solo la risposta finale, riducendo il consumo di token nei flussi con molti dati fino al 90-99%.

GS
Per iniziare

Crea il tuo primo code tool MCP: ordini ERP e account CRM in una sola chiamata

Un tutorial passo passo per la code mode di AnythingMCP: avvia il code runner, attiva la code mode e salva un code tool che legge gli ultimi ordini dall'ERP (weclapp) e l'account con le trattative aperte dal CRM (HubSpot) in una sola chiamata. Sola lettura, con i permessi di chi chiama, tracciato nell'audit.

GS
Per iniziare

Cos'è la code mode di MCP? Meno token e meno round trip per gli agenti AI

La code mode permette a un agente AI di eseguire un breve programma che chiama più tool MCP, invece di chiamarli uno alla volta attraverso il modello. Perché fa risparmiare token e round trip, quando è utile e quando no, e come la esegue AnythingMCP: tool di codice salvati, codice inline e proposte dell'agente, in un runner isolato.

GS
Per iniziare

Il Knowledge Graph MCP: un connettore che impara come si collegano i tuoi sistemi

AnythingMCP non è solo un proxy MCP — costruisce un knowledge graph dei tuoi strumenti, così gli agenti AI sanno come collegare un cliente nel CRM ai suoi ordini nell'ERP. Ecco come funziona il connettore intelligente.

GS
Per iniziare

Cos'è il Model Context Protocol (MCP)?

Una guida completa per comprendere il Model Context Protocol: come funziona, perché è importante e come iniziare.

GS
Per iniziare

Iniziare con AnythingMCP

Installa e configura AnythingMCP in pochi minuti. Clona il repository, esegui lo script di configurazione interattivo e inizia a collegare le tue API agli agenti AI.