API & MCP — Automatizzare Slonge Billing
Slonge Billing offre un'interfaccia a riga di comando (CLI) ufficiale e un server MCP (Model Context Protocol) per Claude Desktop, Cursor e Claude Code. In questo modo può gestire il suo tenant in modo programmatico o tramite agenti IA — creare clienti, emettere fatture, ottenere rapporti, il tutto senza cliccare nell'interfaccia web.
A chi è destinato?
- Utenti della CLI: sviluppatori/sviluppatrici, contabili o utenti esperti che desiderano automatizzare attività di routine o integrarle nei propri script.
- Utenti di agenti IA: chi utilizza Claude Desktop, Cursor o Claude Code (o un altro agente compatibile con MCP) e vuole usare le funzioni di Slonge direttamente dalla chat — «Creami il cliente Beispiel AG con l'e-mail …» oppure «Quali fatture sono scadute questa settimana?».
- Requisito: ruolo Amministratore nel tenant — solo gli amministratori possono creare o revocare token API.
Avvio rapido in 5 minuti
Passo 1: creare un token API
- Acceda a Slonge Billing.
- Apra le Impostazioni.
- Passi alla scheda API & MCP.
- Clicchi su Crea token.
- Assegni un nome significativo (ad es. «Claude Desktop», «Pipeline CI»).
- Facoltativo: scelga una scadenza (30 / 90 / 365 giorni oppure «Mai»).
- Clicchi su Crea — il token completo viene mostrato una sola volta. Lo copi subito. Dopo la chiusura della finestra di dialogo non è più recuperabile.
Sicurezza: i token vengono memorizzati come hash SHA-256. Slonge stesso non può più visualizzare il valore in chiaro dopo la creazione. Se un token viene perso, lo revochi e ne crei uno nuovo.
Passo 2A: usare la CLI
# Una tantum: impostare la configurazione
slonge config set api-url https://app.slonge-billing.ch
slonge config set api-token slk_live_IL_SUO_TOKEN_QUI
slonge config test # conferma l'autenticazione Bearer
# Comandi quotidiani
slonge client list
slonge client create --name "Beispiel AG" --email [email protected]
slonge invoice list --status pending --limit 10
slonge invoice create --project-id <id> --amount 1500 --description "Prestazione di consulenza maggio"
slonge invoice mark-paid <id-fattura>
Flag globali (disponibili per tutti i comandi):
--json— restituisce una risposta JSON invece di una tabella (ideale per gli script)--verbose— registra le chiamate HTTP su stderr--dry-run— convalida l'input e mostra la chiamata prevista senza eseguirla
La CLI salva la configurazione in ~/.slonge/config.json (Windows: %USERPROFILE%\.slonge\config.json).
Passo 2B: integrare il server MCP in Claude Desktop
-
Completi la configurazione in
%APPDATA%\Claude\claude_desktop_config.json(Windows) o~/Library/Application Support/Claude/claude_desktop_config.json(macOS):{ "mcpServers": { "slonge-billing": { "command": "node", "args": ["<percorso-assoluto>/packages/mcp-server/dist/index.js"], "env": { "SLONGE_CONFIG_PATH": "<percorso-assoluto>/.slonge/config.json" } } } } -
Chiuda completamente Claude Desktop (non solo la finestra — anche l'icona nella barra delle applicazioni) e lo riavvii.
-
Nella chat compare un'icona 🔌 con la voce
slonge-billinge circa 20 strumenti disponibili. -
Nella conversazione chieda: «Elencami le fatture aperte in Slonge» — Claude richiama lo strumento adatto e mostra il risultato direttamente nella chat.
Gli stessi passi funzionano con Cursor e Claude Code (tramite la rispettiva configurazione MCP).
Funzioni disponibili
Sia la CLI sia il server MCP accedono alla stessa API — la funzionalità è identica.
| Ambito | Operazioni |
|---|---|
| Clienti | Elencare · Visualizzare · Creare · Aggiornare · Eliminare |
| Progetti | Elencare (filtri: stato, cliente) · Visualizzare · Creare · Aggiornare · Eliminare |
| Fatture | Elencare (filtri: stato, progetto, cliente) · Visualizzare · Creare · Aggiornare · Eliminare · Contrassegnare come pagata · Inviare (con PDF, QR-fattura svizzera e branding) · Esportare UBL XML (Peppol BIS Billing 3.0) |
| Registrazioni di tempo | Elencare · Visualizzare · Creare · Aggiornare · Eliminare · Registrazione rapida (slonge time-entry log --project-id <id> --hours <n>) |
| Spese | Elencare · Visualizzare · Creare · Aggiornare · Eliminare · Caricare giustificativo (OCR, soggetto a quota IA) |
| Offerte | Elencare · Visualizzare · Creare (con voci) · Aggiornare · Eliminare · Convertire in fattura |
| Solleciti | Elencare le partite aperte · Stato per fattura · Avviare un'elaborazione manualmente (opzione --preview) |
| Rapporti | Elencare i tipi disponibili · Esportare (bilancio, conto economico, rendiconto IVA, Abacus XML, Abacus ASCII) |
| Impostazioni | Visualizzare · Aggiornare (TENANT_ADMIN — IBAN, aliquota IVA, valuta predefinita, ecc.) |
| Token API | Elencare · Creare · Revocare |
Nuovi strumenti (Wave 6)
| Strumento MCP | Percorso HTTP | Descrizione |
|---|---|---|
| settings_update | PATCH /api/cli/settings | Aggiornare le impostazioni del tenant (TENANT_ADMIN) |
| quote_pdf | GET /api/cli/quote/[id]/pdf | Offerta in PDF (codificata in base64) |
| quote_send | POST /api/cli/quote/[id]/send | Inviare l'offerta via e-mail; DRAFT → SENT |
Fattura elettronica (Peppol BIS Billing 3.0)
| Strumento MCP | Percorso HTTP | Descrizione |
|---|---|---|
invoice_ubl | GET /api/cli/invoice/[id]/ubl | Fattura in UBL XML Peppol BIS 3.0 (base64), IBAN + riferimento QR svizzero inclusi. Solo CHF. |
Comando CLI abbreviato:
slonge invoice ubl <id> -o rechnung.xml # scrive l'XML su disco
slonge invoice ubl <id> # invia l'XML in streaming su stdout
Per ottenere l'elenco completo dei nomi degli strumenti MCP (nel formato client_list, invoice_create, ecc.), utilizzi la chiamata tools/list del suo client MCP.
Autenticazione & limiti
- Token Bearer — ogni chiamata richiede l'intestazione
Authorization: Bearer slk_<env>_<token>. - Vincolo al tenant — il token conosce il proprio tenant; non è possibile cambiare tenant su un token. Chi gestisce più tenant crea un token distinto per ciascun tenant.
- Limite di frequenza — 60 richieste al minuto per token. In caso di superamento, l'API risponde con
429 Too Many Requestse l'intestazioneRetry-After. - Registro di audit — ogni accesso viene registrato (data e ora, metodo, percorso, codice di stato, tempo di risposta).
Quota IA
Gli strumenti che utilizzano OpenAI — attualmente solo expense upload / expense_upload — vengono conteggiati rispetto al limite IA mensile del suo piano (aiCallsPerMonth).
| Piano | Limite |
|---|---|
| Standard | 100 chiamate OCR / mese |
| AI Pro | 1000 chiamate OCR / mese |
| Trial | 1000 (durante il periodo di prova di 30 giorni) |
Al raggiungimento del limite, l'API risponde con 429 QUOTA_EXCEEDED. Le chiamate effettuate su un piano senza funzioni IA rispondono con 403 FORBIDDEN. Entrambi i codici hanno un significato deterministico — gli agenti possono distinguere tra «attendere e riprovare» (limite di frequenza) e «aggiornare il piano» (quota).
Codici di errore
L'API risponde sempre con la stessa struttura di involucro:
{ "success": false, "error": { "code": "VALIDATION_ERROR", "message": "...", "details": { } } }
| Codice | HTTP | Significato |
|---|---|---|
VALIDATION_ERROR | 400 | L'input non corrisponde allo schema; details contiene i percorsi dei campi |
UNAUTHORIZED | 401 | Token assente, scaduto, revocato o formattato in modo errato |
FORBIDDEN | 403 | Il ruolo non è sufficiente per l'operazione (ad es. la creazione di token è riservata agli amministratori) |
NOT_FOUND | 404 | La risorsa non esiste nel suo tenant |
CONFLICT | 409 | ad es. nuova revoca di un token già revocato |
RATE_LIMITED | 429 | Limite (60 req/min) superato — tenga conto dell'intestazione Retry-After |
INTERNAL_ERROR | 500 | Errore del server — riprovi più tardi o contatti il supporto |
Sicurezza & buone pratiche
- Non committare mai i token — un
.gitignoreper i file.enve~/.slonge/config.jsonè obbligatorio. - Un token per applicazione — ogni pipeline CI, ogni laptop, ogni agente riceve un proprio token. In questo modo è possibile revocare in modo mirato in caso di perdita di un dispositivo.
- Assegnare nomi significativi — il nome del token compare nel registro di audit e nella panoramica; «Claude Desktop — laptop di Ben» è più eloquente di «Token 1».
- Revocare in caso di sospetto — la revoca è immediatamente efficace; il token non può essere riattivato.
- Utilizzare una data di scadenza — per integrazioni temporanee (ad es. una migrazione una tantum) è preferibile 30 giorni anziché «Mai».
Streamable HTTP Transport
Oltre allo slonge-mcp locale (stdio), Slonge Billing offre un endpoint MCP ospitato:
POST https://app.slonge-billing.ch/api/mcp
Authorization: Bearer slk_...
Accept: application/json, text/event-stream
Colleghi i client compatibili (claude.ai, ChatGPT, Cursor con supporto MCP remoto) direttamente a questo URL — nessuna installazione necessaria. Gli stessi token API funzionano tramite stdio e HTTP.
Passi successivi
- Creare un token: Impostazioni → API & MCP
- Ci contatti all'indirizzo [email protected] in caso di domande sulla configurazione o se desidera nuovi strumenti MCP.
Nota per sviluppatori/sviluppatrici: l'SDK ufficiale si chiama
@slonge/agent-sdke contiene schemi Zod e un client HTTP tipizzato. Viene mantenuto insieme alla CLI e al server MCP nel monorepo di Slonge Billing.