Salta ai contenuti

Collega un assistente AI (MCP)

MoneyLights ha un server MCP integrato, quindi un assistente AI — Claude Desktop, Claude Code, un agente IDE, qualsiasi cosa che parli il protocollo — può lavorare con i dati della tua organizzazione su richiesta.

È la stessa credenziale dell’API REST: una connessione MCP è una chiave API, con gli stessi ambiti, gli stessi limiti e lo stesso pulsante di revoca. Non c’è nulla di separato da gestire.

L’endpoint è https://api.moneylights.app/mcp (Streamable HTTP). Una configurazione tipica del client:

{
"mcpServers": {
"moneylights": {
"url": "https://api.moneylights.app/mcp",
"headers": { "X-API-Key": "ml_sk_..." }
}
}
}

Con Claude Code è un solo comando:

Terminal window
claude mcp add --transport http moneylights https://api.moneylights.app/mcp \
--header "X-API-Key: ml_sk_..."

Crea la chiave in Impostazioni → Chiavi API e concedile solo gli ambiti di cui l’assistente ha bisogno. Tutto richiede la chiave, incluso l’elenco degli strumenti.

L’elenco degli strumenti è calcolato dagli ambiti della tua chiave, ad ogni richiesta. Una chiave senza un ambito non viene nemmeno informata dell’esistenza dello strumento corrispondente.

StrumentoAmbitoCosa fa
get_cashflow_overviewcashflow:readEntrate/spese/netto mensili, saldo iniziale, categorie principali
get_analytics_overviewanalytics:readAggregati per categoria, cliente, progetto e persona
list_transactionstransactions:readTransazioni, filtrate e paginate, ognuna con i documenti ad essa collegati
list_documentsdocuments:readDocumenti e i loro campi estratti, ognuno con i movimenti ad esso collegati
get_document_filedocuments:readIl file originale di un documento — il PDF o l’immagine che l’app mostra
get_pending_distributionprofitpulse:readDistribuzioni Safe-to-Spend in attesa
list_vendorsvendors:readFornitori, con spesa totale
list_clientsclients:readClienti, con entrate totali
list_projectsprojects:readProgetti, con totali e obiettivi
upload_documentdocuments:writeArchivia un fattura o una ricevuta nei tuoi documenti

Entrambi gli overview si calcolano sulla stessa base e lo dicono: ogni risposta porta un basis — periodo, valute, i conti coperti (ogni conto visibile, a meno che non venga richiesto per id), e come sono stati trattati i trasferimenti tra i conti della stessa organizzazione. Per impostazione predefinita, sono esclusi da entrate e spese, movimento per movimento, esattamente come mostra la vista Cashflow dell’app; passa includeInternalTransfers: true a uno dei due strumenti per il movimento bancario grezzo, che il basis etichetta come tale e che non è comparabile con il predefinito. Confronta i numeri tra i due strumenti solo quando il loro basis corrisponde. netCashResult è il reddito meno le spese dei movimenti bancari — un risultato di cassa, non un profitto contabile.

Entrambi gli elenchi lo dicono, da entrambi i lati, come mostra l’app. Ogni transazione porta linkedDocuments e ogni documento porta linkedTransactions; ogni voce nomina l’altro lato e un link:

  • confirmed — il documento è abbinato al movimento, il che conta come documentato.
  • suggested — il matcher propone l’abbinamento; nessuno l’ha confermato e il movimento è ancora privo del suo documento. La voce porta il score del matcher.

Un assistente può quindi distinguere nessuna fattura da una fattura in attesa di conferma da già archiviata — e non può cambiare nulla di tutto ciò, perché questa connessione non ha uno strumento per farlo.

Un movimento può portare diversi documenti confermati. Un documento si collega al massimo a un movimento, quindi una fattura pagata in più parti mostra solo il movimento a cui è stata abbinata. Un documento ancora Processing non ha collegamenti ancora; None significa nessuno.

Gli ambiti continuano a valere: il lato lontano di un collegamento è descritto (fornitore e numero, o descrizione e importo) solo a una chiave che può leggere anche quella risorsa. Con un ambito ottieni l’id dell’altro lato, il tipo di collegamento e il punteggio — sufficiente per sapere che un movimento è documentato, non cosa dice la fattura.

get_document_file prende un documentId da list_documents e restituisce il file memorizzato stesso — lo stesso PDF o immagine che l’app apre — come risorsa incorporata con il suo tipo MIME (application/pdf, image/jpeg, …), accanto all’id del documento, nome del file e dimensione — file fino a 10MB, lo stesso limite di un upload. Questo è come un assistente verifica se una differenza proviene dalla fattura, da ciò che è stato estratto o dal movimento a cui è stato abbinato, senza esportare nulla. È una lettura: nulla sul documento, i suoi campi estratti o i suoi collegamenti cambia. Un documento che non è tuo è semplicemente non trovato.

upload_document è l’unico strumento che scrive, ed è stato scelto per quel ruolo deliberatamente: aggiunge sempre e solo. L’assistente invia il file (PDF o immagine, fino a 10MB) e MoneyLights lo elabora attraverso la stessa pipeline di un upload nell’app — memorizzato, i suoi campi estratti (fornitore, data, numero, importi) e abbinato automaticamente alle tue transazioni bancarie.

Inviare lo stesso file due volte non duplica mai i tuoi dati: il re-upload è registrato come un duplicato contrassegnato che punta all’originale. Tutto ciò che l’assistente archivia è visibile — e cancellabile — nell’app.

Ogni altra scrittura (creazione di clienti, riclassificazione delle transazioni, configurazione di buste…) rimane nell’app di proposito: quelle azioni presuppongono un umano che le confermi.

Il server offre anche punti di partenza pronti all’uso — una revisione mensile del cashflow, un’analisi della spesa dei fornitori, una pulizia dei documenti mancanti — elencati solo quando la tua chiave può eseguire ogni strumento di cui hanno bisogno. Usali così come sono o modifica liberamente.

  • L’assistente è vincolato dalla chiave, ricontrollato ad ogni richiesta. Declassa o rimuovi il creatore della chiave e l’assistente si restringe o si ferma alla prossima chiamata.
  • I dati finanziari contengono testo scritto da estranei — riferimenti di pagamento, documenti inviati via email. I risultati degli strumenti vengono consegnati all’interno di un confine contrassegnato che dice al modello di trattarli come dati, mai come istruzioni. Considera questo come una mitigazione, non una garanzia, e limita strettamente le chiavi.
  • Per disconnettere un assistente, revoca la sua chiave in Impostazioni → Chiavi API. Immediato, sempre disponibile.

Dai a ogni assistente la sua chiave — una per cliente significa che puoi disconnetterne uno senza disturbare gli altri.