mcpcage · gratuito e open source
Ogni server MCP nella sua gabbia.
mcpcage chiude in una scatola i plugin del tuo assistente AI. Ogni plugin fa il suo lavoro e nient'altro, e se cambia di nascosto viene bloccato. Funziona con Claude, Cursor, VS Code e Copilot. Senza mcpcage, i plugin di questi assistenti possono leggere i tuoi file e le tue password e mandarli dove vogliono. Con mcpcage possono farlo solo se glielo permetti tu. Le due protezioni partono insieme, con un solo comando, sugli assistenti che usi già.
Questi plugin si chiamano server MCP.
npm install -g mcpcage
Servono Docker e Node.js 22 o successivo. Gira su macOS, Linux e Windows (con Docker Desktop). È rilasciato con licenza Apache-2.0.
$ mcpcage protect Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json filesystem npx -y @modelcontextprotocol/server-filesystem /Users/you NOT CAGED access: /Users/you: your whole home directory github npx -y @modelcontextprotocol/server-github NOT CAGED secret in clear text: GITHUB_PERSONAL_ACCESS_TOKEN Summary 2 run on your machine with your permissions and no cage. -> mcpcage protect --fix 1 keeps a secret in clear text in a configuration file. 1 can reach your whole home directory, the disk or a directory with credentials.
mcpcage protect trova due server senza gabbia, uno che vede tutta la cartella home e uno con un token scritto in chiaro. L'output dello strumento è in inglese.Il problema
La maggior parte dei server MCP sono pacchetti npm o PyPI che l'assistente avvia sul tuo computer con npx o uvx. Girano con i tuoi permessi, quindi possono leggere le chiavi SSH, le credenziali del cloud e il codice sorgente e mandarli dove vogliono.
Un server innocuo può anche cambiare con un aggiornamento. Se la descrizione di uno strumento nasconde delle istruzioni, l'assistente le legge insieme al resto e può seguirle. In inglese questo si chiama rug pull o tool poisoning.
Cosa fa
-
Chiude il server in un contenitore
Ogni server parte in un contenitore Docker senza rete, con il disco in sola lettura e senza accesso alla tua cartella home. Vede solo le cartelle che scegli tu, in sola lettura se non dici altrimenti.
mcpcage run -
Fissa gli strumenti al primo uso
La prima volta registra la definizione di ogni strumento. Se un aggiornamento la cambia, la sessione si blocca e nessuna chiamata arriva al server finché una persona non guarda la modifica e la approva.
mcpcage diffmcpcage approve -
Indica i segni di istruzioni nascoste
Sotto ogni modifica elenca le parti che sembrano ordini nascosti, per esempio tag rivolti al modello, percorsi di file segreti, richieste di non dire niente all'utente o caratteri invisibili. Le regole sono fisse e niente viene mandato fuori dal computer.
mcpcage protect --inspect -
Tiene un registro a catena
Ogni voce del registro contiene l'impronta di quella precedente, così
mcpcage audit verifymcpcage audit verifysi accorge se qualcuno ha cambiato o cancellato delle voci. Delle chiamate salva il nome dello strumento e l'impronta degli argomenti, mai i loro valori.
client: MCP error -32001: mcpcage blocked tools/list: tool definitions of "demo-notes" changed
since they were approved (rug-pull protection). 3 high-severity signs of hidden
instructions. Run `mcpcage diff demo-notes`.
$ mcpcage diff demo-notes
~ tool "add_note" changed since it was approved
! HIGH conceal-from-user description: "Do not tell the user" asks the model to hide something from you
! HIGH hidden-tag description: "<IMPORTANT>" a tag that hides instructions for the model
! HIGH sensitive-path description: "~/.ssh/id_rsa" points at a secret file
! MEDIUM before-using description: "Before calling this tool" adds an action to every call of this tool
3 high-severity signs of hidden instructions in "add_note"
mcpcage diff spiega perché la modifica è sospetta.Come si comincia
-
Installa
npm install -g mcpcageServe Docker acceso e Node.js 22 o successivo.
-
Guarda cosa gira senza gabbia
mcpcage protectLegge le configurazioni dei client installati e dice quali server girano senza gabbia e cosa possono raggiungere. Segnala anche i segreti scritti in chiaro. Le configurazioni restano come sono.
-
Mettili in gabbia
mcpcage protect --fixPrima mostra cosa sta per fare e chiede conferma, poi mette in gabbia i server avviati con npx o uvx. Accanto a ogni file che cambia lascia una copia di backup, e
mcpcage unwraprimette i comandi originali.
Legge le configurazioni di Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Devin e GitHub Copilot CLI. Le istruzioni complete, in inglese, sono nel README del progetto.
Perché ci si può fidare
Accanto a ogni voce c'è il link dove controllarla.
- Pubblicazione tracciata
- Dalla versione 0.6.3 ogni rilascio arriva su npm dalla build pubblica su GitHub, senza chiavi salvate (trusted publishing), con la provenienza e un'attestazione firmata della build. Dalla 0.6.4 ogni rilascio resta in attesa finché il responsabile non lo approva con la verifica in due passaggi.
- CHANGELOG · npm · release.yml
- OpenSSF Scorecard
- Il progetto è valutato dallo Scorecard di OpenSSF, che controlla le pratiche di sicurezza del repository.
- Scorecard
- 63 server provati
- Sono stati provati in gabbia i 24 server MCP avviati con npx più scaricati da npm, su macOS, Windows e Linux, e i 39 server Python avviati con uvx più scaricati da PyPI, su macOS e Linux. Con le impostazioni di partenza 22 dei 24 si avviano ed elencano i loro strumenti, mentre 2 hanno bisogno della rete. Dei 39, su Linux, 27 si avviano, 3 hanno bisogno della rete, 3 non hanno i pacchetti già pronti che la gabbia richiede e 6 si fermano per motivi loro, per esempio perché controllano le credenziali all'avvio.
- compatibility.md
- Prove ogni settimana
- Ogni settimana le parti che leggono dati non fidati o decidono cosa è sicuro ricevono 20.000 input generati a caso per ogni prova (fuzzing), e il codice viene modificato apposta, una piccola modifica alla volta, per vedere se le prove se ne accorgono (mutation testing).
- fuzz.yml · mutation.yml
- Avvisi pubblici
- Il progetto pubblica avvisi di sicurezza su GitHub. Finora sono cinque: tre corretti nella versione 0.6.2, uno nella 0.6.4, uno nella 0.7.0.
- Avvisi di sicurezza
- Segnalazioni
- Chi trova una vulnerabilità la segnala in privato, come spiega la politica di sicurezza del progetto.
- SECURITY.md
Cosa non fa
- Si fida di Docker e del kernel. Una vulnerabilità di Docker o del kernel che fa girare i contenitori può aprire la gabbia.
- Non filtra la rete. La rete è tutta chiusa o tutta aperta. Un server che ne ha bisogno, aperto con
--allow-net, può mandare dati dove vuole. - Si fida della prima lista di strumenti. La prende per buona senza chiedere, a meno che tu non usi
--strict, che chiede un'approvazione esplicita anche la prima volta. - Non blocca le risposte. Le regole leggono anche i risultati degli strumenti e annotano nel registro i segni che trovano, ma non li fermano, quindi l'assistente riceve quello che il server ha mandato.
- Costruisce la gabbia solo per i server avviati con npx o uvx. Un server Python deve avere i pacchetti già pronti (wheel): uno che si installa solo dai sorgenti viene rifiutato, perché installarlo farebbe girare il suo codice. Gli altri e i server remoti
mcpcage protectli elenca ma non li cambia; un server che è già un'immagine Docker si avvia con--image.
Il modello delle minacce del progetto, THREAT-MODEL.md, descrive questi limiti per intero (in inglese).
Per le aziende
mcpcage è gratuito. Se nella vostra azienda più persone lavorano con assistenti AI e server MCP, possiamo aiutarvi a installarlo e a decidere quali cartelle aprire a ciascun server.