Salta al contenuto

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.

Vedi su GitHub
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.
Questo è un estratto della demo del progetto (README e docs/demo-output.txt). In una configurazione di Claude Desktop, 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 verify si 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.

    mcpcage audit verify
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"
Nella demo del progetto (docs/demo-output.txt) un server finto esce con una versione nuova che aggiunge un ordine nascosto alla descrizione di uno strumento. L'assistente riceve un errore al posto della lista degli strumenti, e mcpcage diff spiega perché la modifica è sospetta.

Come si comincia

  1. Installa

    npm install -g mcpcage

    Serve Docker acceso e Node.js 22 o successivo.

  2. Guarda cosa gira senza gabbia

    mcpcage protect

    Legge 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.

  3. Mettili in gabbia

    mcpcage protect --fix

    Prima 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 unwrap rimette 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.

Codice aperto
Tutto il codice è pubblico, con licenza Apache-2.0.
LICENSE
Nessuna dipendenza
Il pacchetto non porta con sé altre librerie quando lo usi.
package.json
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 protect li 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.