Cosa puoi fare con MCP
Con i server MCP connessi, puoi chiedere a Claude Code di:- Implementare funzionalità da issue tracker: “Aggiungi la funzionalità descritta nel ticket JIRA ENG-4521 e crea una PR su GitHub.”
- Analizzare dati di monitoraggio: “Controlla Sentry e Statsig per verificare l’utilizzo della funzionalità descritta in ENG-4521.”
- Interrogare database: “Trova gli indirizzi email di 10 utenti casuali che hanno utilizzato la funzionalità ENG-4521, in base al nostro database PostgreSQL.”
- Integrare design: “Aggiorna il nostro modello di email standard in base ai nuovi design Figma che sono stati pubblicati su Slack”
- Automatizzare flussi di lavoro: “Crea bozze Gmail invitando questi 10 utenti a una sessione di feedback sulla nuova funzionalità.”
- Reagire a eventi esterni: Un server MCP può anche agire come un canale che invia messaggi nella tua sessione, in modo che Claude reagisca ai messaggi Telegram, chat Discord o eventi webhook mentre sei assente.
Trovare e costruire server MCP
Sfoglia i connettori verificati nella Anthropic Directory. I connettori della Directory utilizzano la stessa infrastruttura MCP di Claude Code, quindi puoi aggiungere qualsiasi server remoto elencato lì conclaude mcp add.
Per costruire il tuo server, consulta la guida al server MCP per i fondamenti del protocollo e la documentazione sulla creazione di connettori Claude per l’autenticazione, i test e l’invio alla Directory.
Puoi anche far scaffoldare un server da Claude con il plugin ufficiale mcp-server-dev.
Installa il plugin
claude, quindi inserisci questo al suo prompt:Marketplace "claude-plugins-official" not found: aggiungi il marketplace con/plugin marketplace add anthropics/claude-plugins-official, quindi riprova l’installazione.Plugin "<name>" not found in marketplace "claude-plugins-official": la tua copia locale del catalogo del marketplace potrebbe non essere aggiornata. Aggiornala con/plugin marketplace update claude-plugins-official, quindi riprova l’installazione. Se il nuovo tentativo mostra lo stesso messaggio, consulta Plugin not found in marketplace.
Run /reload-plugins to apply., Claude Code esegue quindi quel ricaricamento per te. Se il ricaricamento avverte che il tuo prossimo messaggio rileggerebbe la conversazione, esegui /reload-plugins --force.Esegui la skill di creazione
Installare i server MCP
I server MCP possono essere configurati in diversi modi a seconda delle tue esigenze:Opzione 1: aggiungere un server HTTP remoto
I server HTTP sono l’opzione consigliata per connettersi a server MCP remoti. È il trasporto più ampiamente supportato per i servizi basati su cloud..mcp.json, ~/.claude.json o claude mcp add-json, il campo type accetta streamable-http come alias di http. La specifica MCP usa il nome streamable-http per questo trasporto, quindi le configurazioni copiate dalla documentazione del server funzionano senza modifiche.
Una voce JSON che ha un url ma nessun type è un errore di configurazione, perché Claude Code legge una voce senza type come un server stdio. Claude Code salta quel server e segnala MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry.
Solo un’applicazione host dell’SDK, come un’applicazione Agent SDK o l’app desktop, può registrare un server in-process "type": "sdk". Claude Code salta una voce "type": "sdk" in .mcp.json, ~/.claude.json o nelle impostazioni e segnala Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register.
Nelle esecuzioni con --output-format stream-json, Claude Code segnala anche una voce --mcp-config saltata nel campo mcp_server_errors dell’evento system/init, così gli script possono rilevare che il server non è mai stato caricato. Questo richiede Claude Code v2.1.219 o successiva.
Opzione 2: aggiungere un server SSE remoto
Alcuni servizi espongono ancora solo un endpoint SSE. Aggiungili con lo stesso comandoclaude mcp add --transport http <name> <url> usato per un server HTTP. Claude Code prova prima il trasporto HTTP e passa a SSE quando il server non lo accetta. Il passaggio automatico richiede Claude Code v2.1.265 o successiva.
In una versione precedente, o per connetterti direttamente tramite SSE, passa invece --transport sse:
Opzione 3: aggiungere un server stdio locale
I server stdio vengono eseguiti come processi locali sulla tua macchina. Sono ideali per strumenti che richiedono accesso diretto al sistema o per script personalizzati. Claude Code impostaCLAUDE_PROJECT_DIR nell’ambiente del server avviato sulla radice del progetto, così il tuo server può risolvere i percorsi relativi al progetto senza dipendere dalla directory di lavoro. È la stessa directory che gli hook ricevono nella loro variabile CLAUDE_PROJECT_DIR. Leggila dall’interno del processo del tuo server, ad esempio process.env.CLAUDE_PROJECT_DIR in Node o os.environ["CLAUDE_PROJECT_DIR"] in Python.
CLAUDE_PROJECT_DIR è la radice stabile del progetto e non cambia quando aggiungi o rimuovi directory di lavoro a metà sessione. Un server che limita il proprio accesso al filesystem a un insieme di directory consentite dovrebbe invece implementare la richiesta MCP roots/list. Claude Code risponde a roots/list con la directory di avvio della sessione più ogni directory di lavoro aggiuntiva che hai concesso con --add-dir, /add-dir o l’impostazione additionalDirectories. Claude Code invia notifications/roots/list_changed quando quell’insieme cambia.
Questa variabile è impostata nell’ambiente del server, non nell’ambiente di Claude Code stesso, quindi fare riferimento a essa tramite espansione ${VAR} nel command o negli args di una voce .mcp.json con ambito di progetto o di una voce di server con ambito locale o utente in ~/.claude.json richiede un valore predefinito come ${CLAUDE_PROJECT_DIR:-.}. Le configurazioni MCP fornite dai plugin sostituiscono ${CLAUDE_PROJECT_DIR} direttamente e non hanno bisogno del valore predefinito.
-- (doppio trattino) separa le opzioni proprie di Claude, come --transport, --env e --scope, dal comando e dagli argomenti che eseguono il server. Tutto ciò che segue -- viene passato al server senza modifiche.Ad esempio:claude mcp add --transport stdio myserver -- npx server→ eseguenpx serverclaude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080→ eseguepython server.py --port 8080conKEY=valuenell’ambiente
--, Claude Code proverebbe ad analizzare i flag del server, come --port qui sopra, come se fossero opzioni proprie.--env accetta più coppie KEY=value. Se il nome del server segue direttamente --env, la CLI legge il nome come un’altra coppia e lo rifiuta, quindi inserisci almeno un’altra opzione, come --transport stdio, tra --env e il nome del server.Come Claude Code arresta un server stdio
Quando Claude Code disconnette un server stdio, ad esempio quando la tua sessione termina, invia un segnale al processo del server e attende brevemente che termini prima di forzarne l’arresto. Se il tuo server salva lo stato o rimuove file di lock all’arresto, gestisci il segnale per la tua piattaforma e completa le operazioni entro quel tempo:- Su macOS e Linux: Claude Code invia
SIGINT, poiSIGTERMse il processo è ancora in esecuzione 100 millisecondi dopo, poiSIGKILLdopo ulteriori 400 millisecondi. - Su Windows: Claude Code chiude lo stdin del server, poi termina l’albero dei processi del server se il processo è ancora in esecuzione 300 millisecondi dopo.
Opzione 4: aggiungere un server WebSocket remoto
I server WebSocket mantengono una connessione bidirezionale persistente, adatta ai server MCP remoti che inviano eventi a Claude senza che venga richiesto. Usa invece HTTP quando il tuo server risponde solo alle richieste, poiché HTTP supporta OAuth e il flagclaude mcp add --transport, mentre WebSocket non supporta nessuno dei due.
Configura i server WebSocket in .mcp.json o con claude mcp add-json:
type: "ws" accetta gli stessi campi url, headers, headersHelper, timeout e alwaysLoad di http. L’autenticazione avviene solo tramite header, quindi passa un token statico in headers o generane uno al momento della connessione con headersHelper. Il flag claude mcp add --transport non accetta ws.
Aggiungere un server da istruzioni di configurazione scritte per un altro client
I server MCP non sono specifici di Claude Code, quindi le istruzioni di configurazione di un server potrebbero essere scritte per Claude Desktop, Cursor o un altro client MCP e non fornire alcun comandoclaude mcp add. Per aggiungere comunque il server, cerca in quelle istruzioni un URL, un comando di avvio o un blocco JSON:
- Un URL come
https://mcp.example.com/mcp: il server è remoto. - Un comando di avvio come
npx -y @example/mcp-server: il server viene eseguito sulla tua macchina. - Un blocco JSON
mcpServers: configurazione scritta per il file delle impostazioni di un altro client.
--scope project o --scope user.
Aggiungere un server da un URL
Un URL significa che il server è remoto. Per un endpointhttps://, aggiungilo con --transport http, oppure segui l’Opzione 2 quando le istruzioni indicano che l’endpoint usa SSE. Per un endpoint wss://, usa invece l’Opzione 4, poiché --transport non accetta ws:
--header come mostrato nell’Opzione 1.
Aggiungere un server da un comando npx, uvx o binario
Un comando di avvio significa che il server viene eseguito come processo stdio locale. Inserisci l’intero comando dopo --, così Claude Code passa flag come -y al comando che avvia il server invece di leggerli come opzioni proprie. Passa le eventuali variabili d’ambiente richieste dalle istruzioni con --env, dopo il nome del server e prima di --:
--.
Aggiungere un server da un blocco JSON mcpServers
Un blocco mcpServers scritto per un altro client MCP, come Claude Desktop, usa la chiave contenitore e la forma delle voci che Claude Code legge. Passa a claude mcp add-json l’oggetto all’interno di mcpServers, non il contenitore. Due tipi di voci richiedono prima una correzione:
- Un
urlsenzatype: aggiungi"type": "http","type": "sse"o"type": "ws"in base all’endpoint. Claude Code legge una voce senzatypecome un server stdio, quindi una voceurlsenzatypefallisce. - Una chiave con caratteri diversi da lettere, numeri, trattini e underscore: scegli un nome di server che usi solo quei caratteri. Altrimenti la chiave è il nome del server.
--scope per add-json. Per condividere invece il server con il tuo team, aggiungi --scope project, oppure aggiungi la voce sotto mcpServers in .mcp.json nella radice del progetto ed esegui il commit. Ambito di progetto descrive come Claude Code carica e approva quel file.
Ogni comando claude mcp add e claude mcp add-json stampa una riga Added ... in caso di successo. Per verificare che Claude Code si sia connesso, esegui claude mcp get <name>; Stato del server descrive gli stati mostrati e il passaggio di approvazione per i server .mcp.json.
Gestire i tuoi server
Una volta configurati, puoi gestire i tuoi server MCP con questi comandi:Stato del server
claude mcp add conferma un’aggiunta riuscita stampando una riga Added ..., che significa che la configurazione è stata scritta. Se invece il comando stampa un messaggio was not saved, consulta MCP server was not saved or removed; per un messaggio may not have been saved, consulta MCP server may not have been saved or removed.
claude mcp list mostra uno stato di salute accanto a ogni server elencato, come ✔ Connected, ! Needs authentication o ✘ Failed to connect. Uno stato di errore significa che Claude Code non è riuscito a connettersi a quel server, non che il comando list sia fallito.
Gli stati in questo elenco riportano una decisione di configurazione anziché un tentativo di connessione, quindi Claude Code li stampa senza connettersi al server:
⏸ Pending approval (run `claude` to approve): un server con ambito di progetto da.mcp.jsonche non hai ancora approvato. Claude Code lo mostra sia inclaude mcp listsia inclaude mcp get <name>. Eseguiclaudein modo interattivo per esaminarlo e approvarlo.✘ Rejected (see disabledMcpjsonServers in settings): un server.mcp.jsonrifiutato da una vocedisabledMcpjsonServers. Claude Code lo mostra solo inclaude mcp get <name>.⊘ Disabled for this project (re-enable via /mcp): un server indicato nell’elencodisabledMcpServersdel progetto. Claude Code lo mostra sia inclaude mcp listsia inclaude mcp get <name>. Riattiva il server dal pannello/mcp.
Approvazioni dei server di progetto e attendibilità del workspace
claude mcp list e claude mcp get leggono le approvazioni di .mcp.json solo dai file delle impostazioni che non sono inclusi nel repository finché non consideri attendibile il workspace eseguendo claude al suo interno e accettando la finestra di dialogo sull’attendibilità del workspace. Un repository clonato non può approvare i propri server: enableAllProjectMcpServers o enabledMcpjsonServers inclusi nel commit del file .claude/settings.json del progetto vengono ignorati in una cartella non attendibile, e il server resta in ⏸ Pending approval invece di essere connesso e sottoposto al controllo di salute.
Le approvazioni da queste fonti si applicano comunque in una cartella non attendibile:
- il tuo
~/.claude/settings.jsonutente - le impostazioni gestite
- le impostazioni passate con
--settings
.claude/settings.local.json non tracciato, ma esegue git per verificare se il file è tracciato, ed esegue quel controllo solo in una cartella attendibile. In una cartella che non hai mai considerato attendibile, Claude Code attende la finestra di dialogo sull’attendibilità prima di applicare le approvazioni del file, a meno che la cartella non sia la tua home di configurazione: la tua directory home, o una directory il cui .claude hai impostato come CLAUDE_CONFIG_DIR. Prima della v2.1.207, Claude Code applicava le approvazioni da un .claude/settings.local.json non tracciato anche in una cartella che non avevi mai considerato attendibile.
Una voce disabledMcpjsonServers in qualsiasi file delle impostazioni rifiuta comunque il server.
Dettagli sullo stato del server
In/mcp, incluso il menu di un server al suo interno, e nel gestore /plugin, un server HTTP o SSE remoto che hai già usato può mostrare uno stato cached come cached 2h ago · connects on first use · 5 tools. Claude Code ha caricato l’elenco degli strumenti del server dalla sua cache di rilevamento, salvata in una sessione precedente, invece di connettersi all’avvio, e Claude Code connette il server la prima volta che Claude chiama uno degli strumenti del server. Gli strumenti sono disponibili dal tuo primo messaggio, quindi non devi fare nulla. La cache di rilevamento e il relativo stato cached richiedono Claude Code v2.1.221 o successiva.
La cache di rilevamento è disattivata per impostazione predefinita, a meno che un rilascio graduale non l’abbia attivata per il tuo account. Imposta MCP_DISCOVERY_CACHE=1 per attivarla, oppure 0 per mantenerla disattivata anche quando il rilascio l’ha attivata. Prima della v2.1.238, la cache era attiva per impostazione predefinita.
Quando selezioni Disable o Clear authentication dal menu di un server in /mcp, Claude Code scarta anche la voce della cache di quel server. Anche Reconnect la scarta su un server connesso o in errore; su un server cached, Reconnect connette subito il server e mantiene la voce. La volta successiva in cui Claude Code si connette al server dopo aver scartato la voce, recupera l’elenco degli strumenti dal server invece che dalla cache.
Quando lo stato di un server è ✘ Failed to connect, claude mcp list aggiunge il dettaglio dell’errore a quella riga di stato, e claude mcp get <name> lo mostra su una riga Issue:: lo stato HTTP o il codice di errore, più l’eventuale testo di errore restituito dal server. La vista di dettaglio del server in /mcp include lo stesso testo riportato dal server nella riga Issue:. Claude Code oscura da questo dettaglio il testo simile a credenziali e non include mai l’URL del server espanso, che può contenere segreti. Claude Code non aggiunge alcun dettaglio a uno stato ✘ Connection error, perché il testo dell’eccezione che stamperebbe lì può incorporare quell’URL. Prima della v2.1.219, entrambi i comandi mostravano solo lo stato di errore semplice, senza il codice di stato né il testo di errore del server.
Quando completi l’autenticazione da /mcp e la connessione fallisce ancora con uno stato HTTP o un codice di errore del trasporto, Claude Code aggiunge quel codice e l’origine dell’URL del server al messaggio che stampa dopo il tentativo. L’origine è lo schema e l’host, più la porta quando l’URL ne specifica una, come https://mcp.example.com.
- Il percorso e la query non compaiono mai in quel messaggio.
- Per un server nell’ambito locale, di progetto o utente o nella configurazione MCP gestita, l’origine mostra l’host come scritto in quella configurazione, quindi un riferimento
${VAR}nell’host non viene espanso nel messaggio. - Per un errore senza stato o codice di errore, Claude Code mostra il testo dell’errore senza l’origine.
url vuoto viene mostrato come not configured in /mcp, in claude mcp list e nel gestore /plugin, e Claude Code non tenta di connettersi a esso. Un plugin può includere una voce segnaposto di questo tipo per un connettore che configuri in seguito, così Claude Code non la segnala come un errore o un problema di configurazione. La vista di dettaglio del server in /mcp riporta No URL configured for this server; imposta l’url della voce per connetterlo.
Avvisi di configurazione
Claude Code avvisa dei problemi di configurazione riportati di seguito. Ogni voce indica cosa controlla Claude Code e come eliminare l’avviso:- Spazi nascosti: Claude Code avvisa quando un valore di configurazione MCP contiene spazi iniziali o finali nascosti, che spesso derivano dall’incollare un token con un a capo finale. Claude Code controlla
command,url, ogni voce diargse i valori e i nomi delle chiavi sottoenveheaders. Claude Code mostra l’avviso nell’output diclaude mcp liste in/mcp, indicando i campi interessati senza mostrarne i valori, ad esempioLeading or trailing whitespace in: headers.Authorization. Claude Code non rimuove gli spazi e usa i valori esattamente come scritti, quindi modifica la configurazione per rimuoverli. - Stesso nome in più ambiti: se definisci lo stesso nome di server in più di un ambito con endpoint diversi, Claude Code avvisa del conflitto nell’output di
claude mcp liste in/mcp. Claude Code memorizza gli accessi OAuth per endpoint, quindi quando ti autentichi con la definizione che viene caricata in un progetto, devi comunque accedere separatamente in un progetto in cui viene caricata una definizione diversa. Mantieni l’endpoint che desideri e rimuovi gli altri conclaude mcp remove <name> --scope <scope>. Nell’avviso, Claude Code riporta l’endpoint di ciascun ambito come scritto nella tua configurazione, con i riferimenti${VAR}non espansi, quindi non mostra mai un valore risolto come una chiave API. - Nomi riservati: Claude Code riserva i nomi dei suoi server integrati, tra cui
workspace,claude-in-chrome,computer-use,Claude PrevieweClaude Browser. Se la tua configurazione definisce un server con un nome riservato, Claude Code lo salta al caricamento e mostra un avviso che ti chiede di rinominarlo.claude mcp addrifiuta un nome riservato con un errore.Claude PrevieweClaude Browserindicano entrambi il server integrato usato dal riquadro di anteprima dell’app desktop di Claude Code. - Variabile d’ambiente mancante: se un riferimento
${VAR}nella configurazione di un server indica una variabile non impostata e priva di:-default, Claude Code avvisa nell’output diclaude mcp liste in/mcp, indicando la variabile, e carica comunque il server con il testo${VAR}non espanso. Imposta la variabile o aggiungi un fallback${VAR:-default}. Nell’urle negliheadersdi un server remoto, alcune variabili di credenziali vengono invece lette come vuote, senza avviso.
Disponibilità degli strumenti
Il pannello/mcp mostra il numero di strumenti accanto a ogni server connesso e segnala i server che dichiarano la capacità tools ma non espongono alcuno strumento.
Se la tua richiesta necessita di strumenti di un server che si sta ancora connettendo in background, Claude attende quel server prima di continuare. Il modo in cui avviene l’attesa dipende dalla tua configurazione:
- Con la ricerca degli strumenti, il comportamento predefinito: l’attesa avviene all’interno della chiamata
ToolSearch. - Senza ricerca degli strumenti: Claude usa invece lo strumento
WaitForMcpServers. Le configurazioni senza ricerca degli strumenti includonoENABLE_TOOL_SEARCH=falsee un modello precedente a Claude Opus 4.5, Claude Sonnet 4.5 e Claude Haiku 4.5 su Agent Platform di Google Cloud. Per un gatewayANTHROPIC_BASE_URL, consulta Ricerca degli strumenti tramite un gateway LLM. - Su un deploy di Microsoft Foundry ospitato su Azure: Claude parte dal percorso della ricerca degli strumenti anziché con
WaitForMcpServers, poiché Claude Code scopre il rifiuto lato server del deploy solo dall’API. Dopo che Claude Code ha spostato quel deploy al caricamento anticipato, gli strumenti di un server che completa la connessione diventano disponibili alla successiva richiesta di Claude.
No such tool available.
Disattivare un server senza rimuoverlo
Disattiva un server nel pannello/mcp per impedire a Claude Code di connettersi a esso senza perderne la configurazione. Claude Code continua a elencare il server in /mcp, contrassegnato come disattivato.
Quando attivi o disattivi un server, Claude Code registra la tua scelta per progetto in ~/.claude.json, in uno di due elenchi che coprono insiemi di server disgiunti:
disabledMcpServers: un elenco di esclusione per i server configurati dall’utente, i server dei plugin, i server che la tua organizzazione fornisce tramite le impostazioni gestite, i connettori claude.ai che Claude Code recupera autonomamente e i server integrati attivi per impostazione predefinita. Claude Code non si connette a un server che elenchi qui. Quando disattivi un connettore claude.ai con l’interruttore per progetto di/mcpdescritto in Disattivare i connettori claude.ai, Claude Code lo scrive in questo elenco con il suo nome visualizzato, ad esempioclaude.ai Slack.enabledMcpServers: un elenco di inclusione per i server integrati disattivati per impostazione predefinita, comecomputer-use. Claude Code si connette a un server disattivato per impostazione predefinita solo quando lo elenchi qui.
enabledMcpServers, o un server integrato disattivato per impostazione predefinita a disabledMcpServers, Claude Code ignora la voce.
disabledMcpServers e enabledMcpServers non hanno relazione con enabledMcpjsonServers e disabledMcpjsonServers, che controllano l’approvazione dei server definiti nel file .mcp.json di un progetto.
Runtime del client MCP
Claude Code si connette ai server MCP tramite uno di due runtime del client. Il runtime v1 è basato su MCP TypeScript SDK 1.x. Il runtime v2 è lo stesso codice su MCP TypeScript SDK 2.0, che aggiunge la revisione del protocollo MCP 2026-07-28. Il resto di questa pagina si applica a entrambi i runtime, tranne dove una sezione indica il runtime v2. Claude Code sceglie un runtime ogni volta che lo avvii e lo mantiene finché non esci. Nelle sessioni in cui recupera i feature flag, usa il runtime v2 su Claude Code v2.1.232 o successiva. Nelle sessioni in cui non recupera i feature flag, Claude Code usa il runtime v2 per impostazione predefinita su Claude Code v2.1.274 o successiva:- Sessioni su Amazon Bedrock, Claude Platform on AWS, Agent Platform di Google Cloud o Microsoft Foundry, a meno che una piattaforma host che incorpora Claude Code non imposti
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST - Sessioni con accesso tramite un gateway delle app Claude
- Sessioni in cui disattivi la telemetria o il recupero dei feature flag, ad esempio con
DISABLE_TELEMETRY
- Chiede ai server HTTP, stdio e connettori claude.ai se supportano la revisione più recente, e la usa con quelli che la supportano. Si connette a tutti gli altri server come fa v1.
- Riceve le notifiche
list_changeddai server sulla revisione più recente tramite uno stream che mantiene aperto. - Non registra un server di canale che si connette sulla revisione più recente, perché quella revisione non può trasportare messaggi di canale.
- Fa fallire un accesso OAuth MCP la cui risposta di autorizzazione indica un emittente inatteso.
- Invia le credenziali OAuth MCP solo a un endpoint dei token servito tramite HTTPS o su
localhost,127.0.0.1o::1. L’accesso fallisce per un server il cui endpoint dei token èhttp://semplice in qualsiasi altra posizione, come un dispositivo sulla tua rete locale. Consulta Refusing to send credentials to non-https token endpoint.
MCP_SDK_GENERATION su v1 o v2. Per decidere se Claude Code pone la domanda, imposta MCP_PROTOCOL_NEGOTIATION su auto o legacy.
Aggiornamenti dinamici degli strumenti
Un server MCP può modificare gli strumenti, i prompt o le risorse che offre mentre è connesso e inviare una notificalist_changed. Quando ne arriva una:
- In una sessione interattiva del terminale, Claude Code recupera l’elenco aggiornato da quel server, quindi non devi riconnetterlo.
- In modalità non interattiva con il flag
-pe nell’Agent SDK, Claude Code aggiorna solo l’elenco degli strumenti in risposta a queste notifiche.
Stream di notifiche sul runtime v2
Sul runtime v2, Claude Code riceve le notifichelist_changed da un server sulla revisione più recente del protocollo tramite uno stream che mantiene aperto. Quando lo stream si chiude, Claude Code lo riapre, con due limiti:
- Lo stream si richiude entro 10 secondi: Claude Code lo riapre fino a tre volte, poi si ferma per quella connessione.
- Lo stream resta aperto più di 10 secondi, poi si chiude, come accade comunemente con gli stream verso host serverless: dopo cinque riaperture in un’ora, Claude Code attende circa sei ore prima della successiva.
/mcp.
Riconnessione automatica
Claude Code riconnette un server remoto che si disconnette a metà sessione e riprova la prima connessione di un server HTTP o SSE dopo un errore temporaneo. I server stdio sono processi locali e Claude Code non li riconnette automaticamente.Disconnessioni di un server remoto a metà sessione
Claude Code prova innanzitutto a riconnettere un server remoto disconnesso fino a cinque volte con backoff esponenziale, partendo da un ritardo di un secondo e raddoppiandolo ogni volta:- In una sessione interattiva:
/mcpmostra il server come in attesa mentre Claude Code si riconnette. Dopo cinque tentativi falliti, Claude Code contrassegna il server come in errore, o come bisognoso di autenticazione quando il server deve essere nuovamente autorizzato. Quando contrassegna il server come in errore, vedi una notificaMCP server "<name>" disconnected · open /mcp to reconnect. Puoi riprovare manualmente da/mcp. - Nelle esecuzioni
claude -pe nelle sessioni dell’Agent SDK: Claude Code effettua gli stessi cinque tentativi, senza alcun pannello/mcpper mostrarli. Quando i tentativi di un server HTTP o SSE falliscono con un errore temporaneo, continua a riprovare in background per circa mezz’ora al massimo, e il server e i suoi strumenti tornano disponibili quando un nuovo tentativo riesce a connettersi.
Prime connessioni fallite
Quando la prima connessione di un server HTTP o SSE fallisce con un errore temporaneo, come una risposta 5xx, una connessione rifiutata o un timeout, Claude Code riprova fino a tre volte. Se la connessione fallisce ancora, Claude Code contrassegna il server come in errore. Claude Code non riprova in questi casi:- La prima connessione di un server WebSocket
- Un errore di autenticazione o di risorsa non trovata, perché per risolverlo è necessaria una modifica alla configurazione. Quando un
headersHelperè l’unica fonte dell’headerAuthorizationdel server, Claude Code riprova comunque un errore di autenticazione, perché riesegue l’helper a ogni tentativo e può ottenere una credenziale nuova
Richieste di rilevamento fallite
Dopo che un server si è connesso, Claude Code gli invia richieste di rilevamento delle capacità cometools/list, prompts/list e resources/list. Claude Code riprova queste richieste fino a tre volte con un breve backoff dopo un errore temporaneo di rete o del server. Non riprova in caso di errori di autenticazione, risposte 4xx o timeout delle richieste.
Riprovare tu stesso i server in errore
Per riprovare tutti i server in errore o che necessitano di autenticazione, esegui/mcp reconnect all. Nel terminale interattivo questo richiede Claude Code v2.1.284 o successiva, e le versioni precedenti stampano lì MCP server "all" not found.
Come Claude viene a sapere che un server è in errore
Se Claude Code comunica a Claude che un server configurato non è riuscito a connettersi dipende dalla ricerca degli strumenti, che è attiva per impostazione predefinita:- Con la ricerca degli strumenti, Claude Code comunica a Claude quale server è in errore e il relativo errore di connessione, così Claude segnala l’errore di connessione nella sua risposta. Claude Code include le stesse informazioni nei risultati di
ToolSearchche non trovano alcuno strumento corrispondente. - In qualsiasi configurazione senza ricerca degli strumenti, Claude Code non segnala a Claude le connessioni ai server fallite.
Inviare messaggi con i canali
Un server MCP può anche inviare messaggi direttamente nella tua sessione, così Claude può reagire a eventi esterni come risultati della CI, avvisi di monitoraggio o messaggi di chat. Per abilitarlo, il tuo server dichiara la capacitàclaude/channel e tu lo abiliti con il flag --channels all’avvio. Consulta Canali per usare un canale supportato ufficialmente, oppure Riferimento dei canali per crearne uno tuo.
Sul runtime v2, un server di canale che negozia la revisione del protocollo MCP 2026-07-28 non può consegnare messaggi di canale, quindi Claude Code non lo registra come canale. Un server di canale che non supporta quella revisione si connette con l’handshake precedente e viene registrato come prima.
Claude Code chiede quella revisione ai server stdio per impostazione predefinita. Per mantenere un server di canale stdio sull’handshake precedente, imposta MCP_PROTOCOL_NEGOTIATION su legacy, che mantiene tutti i server su di esso.
Il timeout per server è un limite rigido di tempo reale per ogni chiamata a uno strumento, e le notifiche di avanzamento del server non lo estendono. I valori inferiori a 1000 vengono ignorati e si ricade su MCP_TOOL_TIMEOUT, o sul suo valore predefinito di circa 28 ore quando quella variabile non è impostata. Per un server HTTP, SSE o connettore claude.ai esiste anche un secondo timer per richiesta che copre ogni richiesta fino al primo byte della risposta del server. Claude Code imposta quel timer sul maggiore di tre valori: 60 secondi, il timeout degli strumenti che si applica al server e MCP_TIMEOUT. Il valore predefinito di 28 ore di un MCP_TOOL_TIMEOUT non impostato non entra in quel confronto, e un valore inferiore a 60 secondi non accorcia il timer. I server stdio e WebSocket non hanno un timer per richiesta.
Un timeout per server di almeno 1000 funge anche da soglia minima per il timeout di inattività descritto di seguito: Claude Code non interrompe mai per inattività le chiamate agli strumenti di quel server prima del timeout per server.
Una chiamata a uno strumento di un server MCP che non invia alcuna risposta e alcuna notifica di avanzamento per la durata della finestra di inattività viene interrotta con un errore invece di attendere il limite di tempo reale. Il timeout di inattività si applica a tutti i tipi di server tranne i server IDE e i server in-process dell’SDK. La finestra di inattività è per impostazione predefinita di cinque minuti per i server HTTP, SSE, WebSocket e connettori claude.ai, e di 30 minuti per i server stdio.
Imposta la variabile d’ambiente CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT in millisecondi per modificare la finestra di inattività, oppure impostala su 0 per disattivare il controllo.
Questi timeout limitano per quanto tempo può essere eseguita una chiamata, non sempre per quanto tempo blocca la sessione: una chiamata nella conversazione principale che supera i due minuti passa prima a un’attività in background. Consulta Spostamento automatico in background delle chiamate lunghe agli strumenti.
Spostamento automatico in background delle chiamate lunghe agli strumenti
Una chiamata a uno strumento MCP nella conversazione principale che è ancora in esecuzione dopo due minuti passa a un’attività in background invece di bloccare la sessione. Claude riceve immediatamente l’ID dell’attività e continua a lavorare, e il risultato arriva come notifica dell’attività quando la chiamata si conclude. L’attività compare in/tasks, dove puoi anche arrestarla, e non sopravvive all’uscita dalla sessione. La voce dell’attività mostra l’ultimo avanzamento riportato dal server. Se arresti l’attività, Claude Code annulla la chiamata e comunica a Claude che non arriverà alcun risultato. L’arresto non garantisce che il server si fermi: potrebbe aver già svolto parte del lavoro, o potrebbe comunque completarlo.
I limiti per chiamata si applicano anche mentre la chiamata è in esecuzione in background: il limite di tempo reale impostato dal timeout per server o da MCP_TOOL_TIMEOUT, e il timeout di inattività impostato da CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT.
Imposta la variabile d’ambiente CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS in millisecondi per modificare la soglia, oppure impostala su 0 per disattivare lo spostamento automatico in background. Anche impostare CLAUDE_CODE_DISABLE_BACKGROUND_TASKS su 1 lo disattiva, insieme a tutte le altre funzionalità delle attività in background.
Alcune chiamate non passano mai in background:
- Le chiamate dai subagent; Claude Code sposta in background solo le chiamate della conversazione principale
- Le chiamate ai server IDE
- Le chiamate in modalità non interattiva, a meno che
CLAUDE_AUTO_BACKGROUND_TASKSnon sia impostato su1, poiché un’esecuzione singola può terminare prima che arrivi il risultato
Server MCP forniti dai plugin
I plugin possono includere server MCP che forniscono strumenti e integrazioni quando abiliti il plugin. Come funzionano i server MCP dei plugin:- I plugin definiscono i server MCP in
.mcp.jsonnella radice del plugin o inline inplugin.json - Quando abiliti un plugin, Claude Code avvia automaticamente i suoi server MCP
- Claude Code offre gli strumenti MCP dei plugin insieme agli strumenti MCP configurati manualmente
- Aggiungi e rimuovi i server dei plugin installando o disinstallando il plugin, non con i comandi
/mcp. Puoi comunque disattivare un server di un plugin installato in/mcp, il che impedisce a Claude Code di connettersi a esso senza rimuovere il plugin
.mcp.json nella radice del plugin:
plugin.json:
- Ciclo di vita automatico: i server si connettono e si disconnettono in questi momenti:
- All’avvio della sessione, Claude Code connette automaticamente i server dei plugin abilitati. In
/mcp, un server di plugin remoto (HTTP o SSE) che hai già usato può invece mostrare lo statocached; Claude Code lo connette quando Claude chiama per la prima volta uno dei suoi strumenti - Se abiliti o disabiliti un plugin durante una sessione, Claude Code connette o disconnette i suoi server MCP quando la modifica viene applicata. Applicare le modifiche ai plugin senza riavviare descrive quando ciò avviene. In una sessione senza terminale interattivo,
/reload-pluginsnon connette né disconnette i server MCP dei plugin; queste modifiche hanno effetto nella sessione successiva - Quando ricarichi, Claude Code mantiene le connessioni attive dei server dei plugin la cui configurazione non è cambiata, e fa lo stesso quando sostituisci l’elenco dei server MCP della sessione dall’Agent SDK senza indicarli
- Quando sposti la sessione con
/cdsu v2.1.246 o successiva, Claude Code connette i server dei plugin abilitati dalle impostazioni della nuova directory e disconnette i server dei plugin che non sono più abilitati, quindi non devi eseguire/reload-pluginsdopo lo spostamento - Nelle sessioni cloud, una chiamata MCP a un server di plugin non ancora connesso, ad esempio subito dopo il risveglio di una sessione inattiva, avvia il server su richiesta e attende che si connetta
- All’avvio della sessione, Claude Code connette automaticamente i server dei plugin abilitati. In
- Segnaposto di percorso:
${CLAUDE_PLUGIN_ROOT}viene risolto nella directory di installazione del plugin,${CLAUDE_PLUGIN_DATA}nella sua directory di stato persistente e${CLAUDE_PROJECT_DIR}nella radice stabile del progetto. La sostituzione si applica a:- server
stdio:command,args,env - server
http,sseews:url,headerseheadersHelper
- server
- Accesso all’ambiente utente: accesso alle stesse variabili d’ambiente dei server configurati manualmente
- Più tipi di trasporto: supporto per i trasporti stdio, SSE, HTTP e WebSocket, anche se il supporto dei trasporti può variare in base al server
/mcp con indicatori che mostrano che provengono da plugin.
claude mcp get nasconde i valori configurati per il server stdio o WebSocket di un plugin, perché possono contenere credenziali:
- Server stdio: stampa
Command: stdio, una rigaArgs:vuota e ogni variabile d’ambiente comeNAME=[REDACTED] - Server WebSocket: stampa
URL: wse ogni header come<name>: [REDACTED], eclaude mcp listmostrawsal posto dell’URL
.mcp.json o plugin.json.
Nomi degli strumenti MCP dei plugin:
Gli strumenti di un server MCP incluso in un plugin contengono sia il nome del plugin sia la chiave del server nel loro nome richiamabile. La forma completa è mcp__plugin_<plugin-name>_<server-name>__<tool-name>, dove qualsiasi carattere al di fuori di A-Z, a-z, 0-9, _ e - viene sostituito con _. Per il server database-tools incluso in un plugin chiamato my-plugin, uno strumento query è richiamabile come:
allowed-tools di una skill, nel campo tools di un subagent o in un matcher di hook. Un matcher di hook scritto sulla semplice chiave del server, come mcp__database-tools__.*, non si attiva mai per un server incluso in un plugin.
Il server stesso viene registrato con il nome qualificato plugin:<plugin-name>:<server-name>, come plugin:my-plugin:database-tools. Usa quel nome dove è previsto il nome di un server configurato, come nel campo server di un hook mcp_tool.
Consulta il riferimento dei componenti dei plugin per i dettagli sull’inclusione di server MCP nei plugin.
Ambiti di installazione MCP
I server MCP possono essere configurati a tre ambiti diversi. L’ambito che scegli controlla in quali progetti il server viene caricato e se la configurazione è condivisa con il tuo team. Gli amministratori possono anche distribuire o fornire server a ogni utente tramite configurazione gestita.Ambito locale
L’ambito locale è il predefinito. Un server con ambito locale viene caricato solo nel progetto in cui lo hai aggiunto e rimane privato per te. Claude Code lo archivia in~/.claude.json nel percorso di quel progetto, quindi lo stesso server non apparirà nei tuoi altri progetti. Utilizza l’ambito locale per server di sviluppo personali, configurazioni sperimentali o server con credenziali che non desideri nel controllo della versione.
~/.claude.json (la tua directory home), mentre le impostazioni locali generali utilizzano .claude/settings.local.json (nella directory del progetto). Vedi Impostazioni per i dettagli sui percorsi dei file di impostazioni.~/.claude.json. L’esempio seguente mostra il risultato quando lo esegui da /path/to/your/project:
Ambito del progetto
I server con ambito del progetto abilitano la collaborazione del team archiviando le configurazioni in un file.mcp.json nella directory radice del tuo progetto. Quando aggiungi un server con ambito del progetto, Claude Code crea o aggiorna automaticamente questo file con la struttura di configurazione appropriata. Archivia .mcp.json nel controllo della versione in modo che tutti nel tuo team ottengano gli stessi strumenti e servizi MCP.
.mcp.json risultante segue un formato standardizzato:
.mcp.json. Per ripristinare queste scelte di approvazione, esegui claude mcp reset-project-choices.
Nelle esecuzioni claude -p, nelle sessioni Agent SDK e nelle sessioni cloud al di fuori di un progetto, Claude Code non può mostrare quel prompt: carica i server con ambito del progetto senza chiedere. Claude Code salta anche il prompt in una sessione che avvii in modalità bypassPermissions con skipDangerousModePermissionPrompt impostato nelle tue impostazioni utente o nelle impostazioni gestite. Per mantenere un server fuori comunque:
- Aggiungilo a
disabledMcpjsonServers, che lo blocca in ogni modalità di autorizzazione. - Escludi completamente le impostazioni del progetto con
--setting-sourceso l’opzionesettingSourcesdell’SDK. - Avvia la sessione con
--strict-mcp-config. Claude Code utilizza quindi solo i server MCP che passi con--mcp-config. Saltare il prompt di approvazione per i server con ambito del progetto che Claude Code non sta caricando richiede Claude Code v2.1.246 o successivo; prima di v2.1.246, una sessione ristretta attendeva comunque l’approvazione per loro, il che lasciava le sessioni in background in attesa all’avvio. Vedi Controllo esclusivo con managed-mcp.json per quello che il flag fa sotto un file MCP gestito.
Ambito utente
I server con ambito utente vengono archiviati in~/.claude.json e forniscono accessibilità tra progetti, rendendoli disponibili in tutti i progetti sulla tua macchina mentre rimangono privati al tuo account utente. Questo ambito funziona bene per server di utilità personali, strumenti di sviluppo o servizi che utilizzi frequentemente in diversi progetti.
Gerarchia e precedenza dell’ambito
Quando lo stesso server è definito in più di un posto, Claude Code si connette ad esso una volta, utilizzando la definizione dalla fonte con la precedenza più alta. L’intera voce del server da quella fonte viene utilizzata; i campi non vengono uniti tra gli ambiti.- Ambito locale
- Ambito del progetto
- Ambito utente
- Server forniti da plugin
- Connettori claude.ai
:443 su https, o una barra finale. Un percorso diverso, una stringa di query, userinfo o una porta non predefinita rendono due server diversi.
Un server che la tua organizzazione fornisce tramite l’impostazione gestita managedMcpServers si classifica al di sopra di tutti questi, quindi quando uno di loro lo duplica, Claude Code si connette alla definizione dell’organizzazione. Richiede Claude Code v2.1.259 o successivo.
Se apri una sessione locale nella scheda Code dell’app Desktop con lo stesso nome di server stdio al livello superiore di ~/.claude.json (ambito utente) e in .mcp.json, la scheda Code utilizza la definizione ~/.claude.json.
Espansione delle variabili di ambiente in .mcp.json
Claude Code supporta l’espansione delle variabili di ambiente nei file .mcp.json, consentendo ai team di condividere configurazioni mantenendo flessibilità per i percorsi specifici della macchina e i valori sensibili come le chiavi API.
Sintassi supportata
${VAR}: si espande al valore della variabile di ambienteVAR${VAR:-default}: si espande aVARse impostato, altrimenti utilizzadefault
Posizioni di espansione
Le variabili di ambiente possono essere espanse in:command: il percorso dell’eseguibile del serverargs: argomenti della riga di comandoenv: variabili di ambiente passate al serverurl: per i tipi di server HTTPheaders: per l’autenticazione del server HTTP
Esempio con espansione di variabili
Variabili non impostate senza un valore predefinito
Se una variabile di ambiente richiesta non è impostata e non ha un valore predefinito, la configurazione viene comunque caricata: Claude Code segnala un avviso di variabile mancante per quel server nell’output diclaude mcp list e utilizza il testo ${VAR} non espanso così com’è. Imposta la variabile o aggiungi un fallback :-default in modo che il server si avvii con il valore che intendi. Negli url e headers di un server remoto, alcune variabili di credenziali leggono come vuote invece, senza avviso.
Variabili di credenziali che leggono come vuote
Negliurl e headers di un server remoto, Claude Code legge le variabili di credenziali dal tuo ambiente come vuote piuttosto che espanderle. Questo impedisce che il .mcp.json di un progetto o un plugin invii le tue credenziali di Claude Code o del provider cloud a un server che nomina. Se scrivi Bearer ${ANTHROPIC_AUTH_TOKEN}, il server riceve Bearer senza credenziale e rifiuta la richiesta, di solito con un 401. Claude Code lo segnala come una connessione non riuscita.
I nomi coperti sono:
- Le credenziali di Claude Code stesso, come
ANTHROPIC_API_KEYeANTHROPIC_AUTH_TOKEN - Le credenziali del tuo provider cloud, come
AWS_BEARER_TOKEN_BEDROCK - Altre credenziali che il tuo ambiente contiene, come
HTTPS_PROXYeNPM_TOKEN
:-default su di esso viene ignorato. Un URL di base del provider come ANTHROPIC_BASE_URL si espande comunque, quindi "url": "${ANTHROPIC_BASE_URL}/mcp" funziona, a meno che il valore dell’URL stesso non incorpori una credenziale come un nome utente e una password.
Un nome al di fuori di questo set, come API_KEY, si espande come scritto. Per dare al server una delle credenziali coperte, copiala in una variabile con un nome di tua scelta e fai riferimento a quel nome invece.
Quando url o headers di un server remoto fanno riferimento a una variabile coperta che hai impostato, Claude Code la nomina in una riga di log di debug. Per leggere la riga, esegui claude --debug-file /tmp/claude-debug.log e cerca in quel file never expanded toward a remote server.
Come i riferimenti appaiono in /mcp e nell’output CLI
Per un server negli ambiti locale, progetto o utente, le seguenti superfici mostrano un riferimento ${VAR} per nome piuttosto che come valore risolto:
- L’URL o la riga di comando nella vista dettagli
/mcpdi un server - Output di
claude mcp listeclaude mcp get
/mcp mostra i riferimenti in questo modo in Claude Code v2.1.268 o successivo.
Per un server che la tua organizzazione fornisce tramite l’impostazione managedMcpServers, queste superfici mostrano solo l’host dell’URL.
Per verificare cosa mostrano claude mcp list, claude mcp get e /mcp quando una connessione non riesce, vedi Dettagli dello stato del server.
Esempi pratici
Esempio: Connettiti a GitHub per le revisioni del codice
Il server MCP remoto di GitHub si autentica con un token di accesso personale GitHub passato come header. Per ottenerne uno, apri le impostazioni del token GitHub, genera un nuovo token con granularità fine con accesso ai repository con cui desideri che Claude lavori, quindi aggiungi il server:YOUR_GITHUB_PAT con il tuo token di accesso personale. Il comando claude mcp add salva la configurazione senza convalidare le credenziali, quindi un valore segnaposto è accettato qui ma il server non riesce a connettersi in seguito. Per verificare la connessione, esegui /mcp e controlla che la riga del server mostri un segno di spunta. Un server con credenziali errate mostra invece una ✘, e il suo dettaglio dell’errore include lo stato HTTP che il server ha restituito, come un 401.
Quindi lavora con GitHub:
Esempio: Interroga il tuo database PostgreSQL
DBHub, il pacchetto@bytebase/dbhub, è un server MCP che connette Claude a un database relazionale attraverso la stringa di connessione che passi in --dsn. Utilizza un utente di database di sola lettura nella stringa di connessione in modo che le query che Claude esegue non possano modificare i dati:
/mcp e controlla che la riga db mostri un segno di spunta.
Quindi interroga il tuo database naturalmente:
Autenticazione con server MCP remoti
Molti server MCP basati su cloud richiedono l’autenticazione. Claude Code supporta OAuth 2.0 per connessioni sicure. Claude Code contrassegna un server remoto come richiedente autenticazione quando il server risponde con401 Unauthorized o 403 Forbidden. Ciò che Claude Code mostra dipende dal server:
- Per un server a cui non hai effettuato l’accesso, uno di questi codici di stato lo contrassegna in
/mcpin modo che tu possa completare il flusso OAuth. - Per un connettore claude.ai, un
401causato dal rifiuto di claude.ai del tuo token di sessione non contrassegna il connettore, perché la riautorizzazione del connettore non può risolvere il tuo accesso. Claude Code mostra invece lo stato di rifiuto del token di sessione. - Per un server il cui header
Authorizationhai configurato, inheaderso tramite unheadersHelper, un401o403durante la connessione non contrassegna il server, perché la credenziale da correggere è quella che hai configurato. Claude Code segnala invece la connessione come non riuscita. Se hai impostato quell’header da un riferimento${VAR}, verifica se quella variabile è una che Claude Code legge come vuota. - Per un connettore consegnato a una sessione cloud, Claude Code non esegue un flusso di accesso, perché il proxy della sessione si autentica al connettore con l’autorizzazione che hai concesso in claude.ai. Quando un connettore lì ha bisogno di autorizzazione di nuovo, riconnettilo su claude.ai/customize/connectors piuttosto che dalla sessione.
401 Unauthorized, Claude Code aggiorna il token archiviato, si riconnette e ritenta la richiesta una volta. Contrassegna il server in /mcp solo se anche quel tentativo non riesce.
Quando il server rifiuta il token di aggiornamento archiviato, Claude Code mostra immediatamente un avviso che punta a /mcp. Apri /mcp e seleziona Re-authenticate sul server per accedere di nuovo prima che la prossima chiamata a uno strumento non riesca.
Un server personalizzato che restituisce un header WWW-Authenticate che punta al suo server di autorizzazione ottiene la stessa scoperta automatica di qualsiasi altro server remoto.
Claude Code mostra anche un avviso di avvio quando uno o più server configurati richiedono l’autenticazione, quindi non è necessario aprire /mcp per scoprire quali server richiedono l’accesso. L’avviso conta solo i server a cui puoi accedere da Claude Code. Prima della v2.1.218, contava anche i connettori claude.ai che non erano connessi in claude.ai, che puoi connettere solo dalle impostazioni di claude.ai.
L’avviso annuncia ogni server una volta e lo esclude dal conteggio ai successivi avvii fino a quando quel server non si è connesso e ha bisogno di accesso di nuovo. /mcp elenca comunque ogni server che ha bisogno di accesso.
Un’esecuzione claude -p o Agent SDK non ha un pannello /mcp, quindi lì Claude Code non può eseguire il flusso OAuth. Per utilizzare un server che richiede l’autenticazione, completa prima l’accesso da una sessione interattiva: esegui /mcp nella sessione, oppure claude mcp login <name> nella tua shell. Quando un server configurato richiede l’autenticazione durante un’esecuzione claude -p o Agent SDK con la ricerca degli strumenti abilitata, Claude Code comunica a Claude che gli strumenti del server non sono disponibili fino a quando non lo autorizzi.
Se hai configurato headers.Authorization per il server e il server rifiuta quell’header, Claude Code segnala la connessione come non riuscita invece di ricorrere a OAuth. Verifica che il token sia valido per l’endpoint MCP, oppure rimuovi l’header per utilizzare il flusso OAuth.
Aggiungi il server che richiede l'autenticazione
sentry nella guida rapida MCP, salta questo passaggio: eseguire di nuovo claude mcp add con lo stesso nome di server nello stesso ambito non riesce con MCP server sentry already exists in local config. Altrimenti, esegui:Utilizza il comando /mcp all'interno di Claude Code
Autenticazione dalla riga di comando
Il comandoclaude mcp login <name> esegue il flusso OAuth di un server configurato direttamente dalla tua shell, quindi non è necessario aprire il pannello /mcp all’interno di una sessione. Per un connettore claude.ai, segui Autorizzare di nuovo un connettore dalla tua shell.
claude mcp logout <name>.
claude mcp login rileva quando nessun browser locale è disponibile, ad esempio durante una sessione SSH o su Linux senza un server di visualizzazione, e stampa l’URL di autorizzazione invece di provare ad aprire un browser. Apri l’URL sulla tua macchina locale, quindi incolla l’URL di reindirizzamento completo dalla barra degli indirizzi del tuo browser al prompt. Il comando ha bisogno di un terminale interattivo per il passaggio di incollamento, quindi connettiti con ssh -t. Passa --no-browser per forzare il prompt dell’URL anche quando viene rilevato un browser locale.
Utilizza una porta di callback OAuth fissa
Alcuni server MCP richiedono un URI di reindirizzamento specifico registrato in anticipo. Per impostazione predefinita, Claude Code sceglie una porta disponibile casuale per il callback OAuth. Utilizza--callback-port per fissare la porta in modo che corrisponda a un URI di reindirizzamento pre-registrato della forma http://localhost:PORT/callback. Se l’accesso su Claude Code v2.1.229 non riesce con una mancata corrispondenza dell’URI di reindirizzamento, vedi la nota sulla versione in Utilizza credenziali OAuth pre-configurate.
Puoi utilizzare --callback-port da solo (con registrazione dinamica del client) o insieme a --client-id (con credenziali pre-configurate).
Utilizza credenziali OAuth pre-configurate
Alcuni server MCP non supportano la configurazione OAuth automatica tramite Dynamic Client Registration. Se vedi un errore come “Incompatible auth server: does not support dynamic client registration,” il server richiede credenziali pre-configurate. Claude Code supporta anche server che utilizzano un Client ID Metadata Document (CIMD) invece di Dynamic Client Registration e li scopre automaticamente. Se la scoperta automatica non riesce, registra prima un’app OAuth tramite il portale degli sviluppatori del server, quindi fornisci le credenziali quando aggiungi il server.Registra un'app OAuth con il server
http://localhost:PORT/callback con quella porta. Utilizzerai la stessa porta nel passaggio successivo.In v2.1.229, Claude Code ha inviato http://127.0.0.1:PORT/callback invece, e i server che corrispondevano esattamente all’URI di reindirizzamento registrato hanno rifiutato l’accesso con una mancata corrispondenza dell’URI di reindirizzamento. Claude Code v2.1.231 ha ripristinato il modulo localhost. Per recuperare su v2.1.229, aggiorna Claude Code, oppure aggiungi temporaneamente il modulo http://127.0.0.1:PORT/callback agli URI di reindirizzamento registrati del server.Aggiungi il server con le tue credenziali
claude mcp add accetta il tuo ID client e la porta di callback come flag, e claude mcp add-json li accetta in un oggetto oauth. Se hai registrato un URI di reindirizzamento, imposta la porta di callback sulla porta in quell’URI.- claude mcp add
- claude mcp add-json
- claude mcp add-json (solo porta di callback)
- CI / env var
--client-id per passare l’ID client della tua app. Il flag --client-secret richiede il segreto con input mascherato:Autenticati in Claude Code
/mcp in Claude Code e segui il flusso di accesso del browser.Sovrascrivi la scoperta dei metadati OAuth
Indirizza Claude Code a un URL di metadati OAuth specifico per bypassare la catena di scoperta predefinita. ImpostaauthServerMetadataUrl quando gli endpoint standard del server MCP generano errori, o quando desideri instradare la scoperta attraverso un proxy interno. Per impostazione predefinita, Claude Code controlla prima i metadati della risorsa protetta RFC 9728 su /.well-known/oauth-protected-resource, quindi ricade sui metadati del server di autorizzazione RFC 8414 su /.well-known/oauth-authorization-server.
Imposta authServerMetadataUrl nell’oggetto oauth della configurazione del tuo server in .mcp.json:
https://. Il scopes_supported dell’URL dei metadati sovrascrive gli scope che il server upstream pubblicizza.
Limita gli scope OAuth
Impostaoauth.scopes per fissare gli scope che Claude Code richiede durante il flusso di autorizzazione. Questo è il modo supportato per limitare un server MCP a un sottoinsieme approvato dal team di sicurezza quando il server di autorizzazione upstream pubblicizza più scope di quelli che desideri concedere. Il valore è una singola stringa separata da spazi, corrispondente al formato del parametro scope in RFC 6749 §3.3.
oauth.scopes ha la precedenza sia su authServerMetadataUrl che sugli scope che il server scopre su /.well-known. Lascialo non impostato per consentire al server MCP di determinare l’insieme di scope richiesti.
Quando oauth.scopes non è impostato, Claude Code non richiede il catalogo completo di scopes_supported dai metadati del server di autorizzazione scoperti automaticamente. I metadati recuperati da un authServerMetadataUrl configurato forniscono comunque il loro scopes_supported come scope richiesti.
Se il server di autorizzazione pubblicizza offline_access in scopes_supported, Claude Code lo aggiunge agli scope fissati in modo che il token di accesso possa essere aggiornato senza un nuovo accesso dal browser.
Se il server successivamente restituisce un 403 insufficient_scope per una chiamata a uno strumento, la chiamata non riesce con un messaggio needs additional permissions che nomina lo scope che il server richiede. Il server viene mostrato come richiedente autenticazione in /mcp.
Se quello scope non è nei tuoi oauth.scopes fissati, aggiungilo, quindi esegui /mcp e autentica di nuovo il server. Claude Code richiede gli scope fissati piuttosto che lo scope che il server ha nominato, quindi se ti autentichi di nuovo senza aggiungerlo, il token che ottieni ancora non lo ha.
Utilizza intestazioni dinamiche per l’autenticazione personalizzata
Se il tuo server MCP utilizza uno schema di autenticazione diverso da OAuth, come Kerberos, token di breve durata o un SSO interno, utilizzaheadersHelper per generare intestazioni di richiesta al momento della connessione. Claude Code esegue il comando ed esegue il merge del suo output nelle intestazioni di connessione.
- Il comando deve scrivere un oggetto JSON di coppie chiave-valore stringa su stdout
- Claude Code esegue il comando in una shell e rinuncia dopo 10 secondi
- Claude Code sceglie la directory di lavoro del comando in base a dove hai configurato il server, quindi fornisci lo script come percorso assoluto o mettilo su
PATH - Le intestazioni dinamiche sovrascrivono qualsiasi
headersstatico con lo stesso nome
401 Unauthorized o 403 Forbidden, Claude Code esegue automaticamente di nuovo l’helper secondo la stessa regola, si riconnette con le intestazioni aggiornate e ritenta la chiamata una volta. Claude Code contrassegna il server come richiedente autenticazione in /mcp solo se anche quel tentativo non riesce.
Quando l’output dell’helper include un header Authorization, Claude Code utilizza quella credenziale come autenticazione del server e non ricorre a OAuth per il server.
Se il server rifiuta la credenziale dell’helper durante la connessione, Claude Code segnala la connessione come non riuscita piuttosto che contrassegnare il server come richiedente autenticazione. Correggi la credenziale che il tuo helper restituisce, quindi riconnettiti da /mcp per eseguire di nuovo l’helper.
Claude Code imposta queste variabili d’ambiente quando esegue l’helper:
headersHelper fornito da un plugin non può fare riferimento ai valori ${user_config.*} del plugin, perché il comando viene eseguito attraverso una shell. Claude Code segnala il server come non configurato correttamente con un errore e non sostituisce il valore. Metti ${user_config.KEY} nel campo headers del server, che non viene analizzato dalla shell, oppure fai in modo che lo script helper legga il valore da un file di configurazione. Prima della v2.1.207, headersHelper sostituiva i valori ${user_config.*}.
Dove l’helper viene eseguito
Claude Code sceglie la directory di lavoro del comandoheadersHelper dalla configurazione che dichiara il server. Un cd che Claude esegue in Bash non lo sposta, e /cd lo sposta solo per i server che vengono eseguiti dalla directory di lavoro primaria della sessione. Ogni riga di seguito fornisce la directory rispetto alla quale un percorso relativo nel tuo comando headersHelper si risolve.
Quali variabili un helper può leggere
UnheadersHelper che un repository o un plugin fornisce è un comando che non hai scritto, quindi Claude Code lo esegue senza le variabili di credenziale dal tuo ambiente, come ANTHROPIC_API_KEY. Dove hai configurato il server decide se questo si applica:
- Rimosso: un server in un
.mcp.jsondi progetto o in un plugin, e un server inline in un file agent dal tuo progetto o da una directory--add-dir - Non rimosso: un server di ambito utente o ambito locale, in MCP gestito, da un connettore claude.ai, o fornito dall’SDK o da
--mcp-config, e un server inline in un file agent da~/.claude/agents/, dalle impostazioni gestite, o passato con--agents
GIT_CONFIG_KEY_<n> di Git, Claude Code rimuove ogni variabile dal tuo ambiente il cui nome sembra una credenziale, come un nome con TOKEN, SECRET, PASSWORD, KEY, o AUTH in esso in entrambi i casi di lettera, quindi sia ANTHROPIC_API_KEY che MY_REGISTRY_TOKEN vengono rimossi. Claude Code rimuove anche un elenco fisso di variabili di credenziale i cui nomi non seguono quel modello, come ANTHROPIC_CUSTOM_HEADERS.
Quando questo si applica al tuo helper, fai in modo che lo script legga la sua credenziale da un file o da un archivio di credenziali. Se l’url del server contiene il valore effettivo di una di queste variabili, come MY_REGISTRY_TOKEN, anche nel valore CLAUDE_CODE_MCP_SERVER_URL che l’helper riceve quella parte viene sostituita con REDACTED.
Affida una cartella prima che il suo headersHelper venga eseguito
Claude Code esegue unheadersHelper come comando shell arbitrario. Per un server in un .mcp.json di progetto o di ambito locale, lo esegue solo dopo che accetti la finestra di dialogo di fiducia per la directory del progetto in cui il server è dichiarato. Prima della v2.1.238, una sessione claude -p o SDK eseguiva questi helper senza controllare la fiducia, e una sessione interattiva li eseguiva una volta che avevi affidato una cartella genitore.
- Fiducia che non conta: la fiducia di una cartella genitore, e la fiducia automatica che una sessione
claude -po SDK ottiene per gli hook nei file di impostazioni - Fino a quando non affidi la cartella: Claude Code connette il server con i suoi soli
headersstatici. In una sessioneclaude -po SDK stampa anche una rigaheadersHelper not runper server su stderr, dicendoti come concedere la fiducia. - Fiducia senza una finestra di dialogo: imposta
projects["<path>"].hasTrustDialogAcceptedsutruein~/.claude.json.<path>è la cartella su cui Project allow rules and workspace trust dice che Claude Code basa la fiducia.
.claude/agents/, o una directory --add-dir. Fino a quando non affidi quel progetto o quella directory stessa, Claude Code non carica il server affatto, quindi il suo helper non viene mai eseguito nemmeno.
Aggiungi server MCP dalla configurazione JSON
Se hai una configurazione JSON per un server MCP, puoi aggiungerla direttamente:Aggiungi un server MCP da JSON
Verifica che il server sia stato aggiunto
Importa server MCP da Claude Desktop
Se hai già configurato server MCP in Claude Desktop, puoi importarli:Importa server da Claude Desktop
Seleziona quali server importare
Verifica che i server siano stati importati
claude mcp possono contenere solo lettere, numeri, trattini e caratteri di sottolineatura. Claude Desktop non applica questa restrizione, quindi un server Claude Desktop il cui nome contiene qualsiasi altro carattere, come uno spazio, non può essere importato. L’importazione segnala ogni nome che rifiuta e continua comunque a importare gli altri server che hai selezionato.
Utilizzare i server MCP da claude.ai
Se hai effettuato l’accesso a Claude Code con un account claude.ai, i server MCP che hai aggiunto in claude.ai, noti come connettori, sono automaticamente disponibili in Claude Code:Configurare i server MCP in claude.ai
Autenticare il server MCP
Visualizzare e gestire i server in Claude Code
/mcp elenca claude.ai Claude Docs senza configurazione, e Claude lo utilizza quando chiedi un documento destinato ad altre persone. Per disattivarlo, aggiungi una voce serverName di "claude.ai Claude Docs" a deniedMcpServers o utilizza l’interruttore /mcp, entrambi descritti in Disabilitare i connettori claude.ai.
Claude Code contrassegna un connettore come managed in /mcp e nel gestore /plugin quando la tua organizzazione gestisce la sua autenticazione in claude.ai. Lo stato managed non cambia il modo in cui Claude Code si connette al connettore o applica i controlli degli strumenti della tua organizzazione.
I connettori a cui non hai mai effettuato l’accesso sono compressi dietro una riga Show unused connectors alla fine della sezione claude.ai, in modo che un elenco fornito dall’organizzazione non riempia il pannello. Seleziona la riga per espanderli. Un connettore a cui hai effettuato l’accesso in precedenza rimane visibile anche quando attualmente necessita di una nuova autenticazione.
I connettori da claude.ai vengono recuperati solo quando il tuo metodo di autenticazione attivo è un accesso con abbonamento a claude.ai. Non vengono caricati, anche se hai precedentemente eseguito /login, quando:
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN, oapiKeyHelperè attivo- Un provider di terze parti come Amazon Bedrock o Agent Platform di Google Cloud è attivo
ANTHROPIC_PROFILE, le variabili di federazione, o un profilo Anthropic attivo fornisce le credenzialiCLAUDE_CODE_OAUTH_TOKENcontiene un token daclaude setup-token, che può solo effettuare richieste di modello
/mcp non elenca un connettore che hai aggiunto, esegui /status per confermare quale metodo di autenticazione è attivo. Annulla l’impostazione di quella variabile di ambiente, rimuovi l’impostazione apiKeyHelper, o disattiva il profilo, quindi esegui /login per selezionare il tuo account claude.ai.
Se un problema di rete temporaneo impedisce il caricamento dell’elenco dei connettori all’avvio della sessione, Claude Code ritenta il recupero fino a tre volte in background, e i connettori vengono visualizzati una volta che un tentativo ha successo. Se ancora non sono apparsi, riavvia Claude Code per recuperare di nuovo l’elenco.
Se /mcp mostra un connettore come session token rejected, o la sua vista dettagliata mostra claude.ai rejected the session token, claude.ai ha rifiutato il token dal tuo accesso a Claude Code. Autorizzare di nuovo il connettore non cancella questo stato, perché l’autorizzazione propria del connettore in claude.ai non è quello che è stato rifiutato. Per cancellarlo:
- Esegui
/loginper accedere di nuovo. - Ricollega il connettore da
/mcp.
/mcp elenca il connettore come nascosto e mostra come rimuovere il duplicato se preferisci utilizzare il connettore.
Alcuni connettori ospitati da Anthropic, come Microsoft 365, Gmail e Google Calendar, non supportano OAuth locale da Claude Code perché il provider di identità upstream accetta solo l’URL di reindirizzamento che claude.ai ha registrato. Quando un server che hai aggiunto con claude mcp add o in .mcp.json punta a uno di questi host e accedi da /mcp o con claude mcp login, Claude Code mostra is Anthropic-hosted and doesn't support local OAuth, indirizzandoti a connettere il servizio su claude.ai/customize/connectors.
Dopo aver rimosso la tua voce con claude mcp remove <name> e aver connesso il servizio su claude.ai, il connettore viene visualizzato in Claude Code automaticamente.
Come i connettori raggiungono Claude Code
Quali impostazioni governano un connettore claude.ai dipende da dove viene eseguita la tua sessione, perché solo alcune sessioni recuperano i connettori da claude.ai stesse. Ogni riga sottostante nomina come i connettori arrivano in un tipo di sessione e cosa li controlla lì. Le sessioni WSL dell’app desktop non hanno una riga perché i connettori sono ancora in fase di distribuzione per esse.disableClaudeAiConnectors, ENABLE_CLAUDEAI_MCP_SERVERS, e allowAllClaudeAiMcps agiscono solo sulla prima riga, i connettori che Claude Code recupera da solo. Le altre due righe differiscono da essa in questi modi:
- Sessioni cloud: le voci
allowedMcpServersedeniedMcpServersche raggiungono la sessione, ad esempio attraverso impostazioni gestite dal server, filtrano anche i connettori forniti. Il proxy della sessione riscrive l’URL di ogni connettore, quindi un patternserverUrlscritto per l’URL del connettore stesso non lo corrisponde. Per ammettere i connettori forniti insieme a un allowlist di URL in un ambiente auto-ospitato, aggiungi le vociserverUrlelencate sotto Connector traffic leaves your network. Claude Code elimina i connettori forniti quando unmanaged-mcp.jsonè presente sull’host che esegue la sessione, come un host di runner auto-ospitato, indipendentemente dal fatto che tu impostiallowAllClaudeAiMcps. - Sessioni locali e SSH dell’app desktop: l’app desktop registra i connettori come server
type: "sdk"in-process, e nessuna impostazione MCP omanaged-mcp.jsonli raggiunge. Un utente mantiene un connettore fuori dalle proprie sessioni disconnettendolo su claude.ai/customize/connectors. Un’organizzazione blocca i strumenti di un connettore o disattiva completamente Claude Code nell’app desktop.
Controlli dell’organizzazione sugli strumenti del connettore
La tua organizzazione può impostare controlli per strumento sui connettori claude.ai. Claude Code legge queste impostazioni all’avvio e le applica localmente, tranne nelle sessioni locali e SSH dell’app desktop. Lì, l’app desktop trattiene gli strumentiblocked prima di fornire un connettore, e l’impostazione ask non raggiunge Claude Code, quindi applica le regole di autorizzazione ordinarie della sessione a quegli strumenti invece di richiedere su ogni chiamata. Nelle sessioni in cui Claude Code recupera i connettori da solo, esegui /mcp per vedere quale impostazione si applica a ogni strumento su un connettore.
- Strumento impostato su
ask: Claude Code richiede su ogni chiamata con il motivoYour organization requires approval for this tool. Il prompt appare anche in modalità permissionacceptEdits,auto, ebypassPermissions, e non offre mai un’opzione per ricordare la tua scelta. Le regole Allow che corrispondono allo strumento non saltano il prompt neanche. In modalitàdontAsk, che non richiede mai, Claude Code nega la chiamata. - Strumento impostato su
blocked: Claude Code filtra lo strumento prima che Claude lo veda, quindi non appare mai nell’elenco degli strumenti di Claude. Nelle sessioni in cui Claude Code recupera i connettori da solo, l’elenco degli strumenti/mcpmostra ancora lo strumento, contrassegnatodisabled by your organization.
blocked, quindi Claude non può usare uno strumento bloccato neanche lì, e non puoi trattenere uno strumento dalle sessioni dell’app desktop mantenendolo disponibile in chat. L’app desktop salta un connettore i cui strumenti sono tutti bloccati.
Disabilitare i connettori claude.ai
Claude Code applicadisableClaudeAiConnectors solo ai connettori che recupera da solo, non ai connettori che un host cloud o l’app desktop fornisce. Per disattivare i connettori che recupera, imposta l’impostazione su true in qualsiasi ambito di impostazioni:
true in qualsiasi fonte di impostazioni ha la precedenza. Un .claude/settings.json di progetto archiviato può escludere un repository dai connettori che Claude Code recupera da solo, ma un false a livello di progetto non può riabilitare i connettori che un true a livello di utente o politica ha disabilitato. I server passati esplicitamente tramite --mcp-config non sono interessati.
Puoi anche impostare la variabile di ambiente ENABLE_CLAUDEAI_MCP_SERVERS su false, che ha lo stesso effetto per la sessione shell corrente:
deniedMcpServers per nome o per pattern di URL. Ad esempio, una voce serverName di "claude.ai Slack" blocca il connettore Slack. Puoi anche eseguire /mcp per attivare o disattivare qualsiasi connettore che Claude Code recupera solo per il progetto corrente.
Usa Claude Code come server MCP
Puoi usare Claude Code stesso come server MCP a cui altre applicazioni possono connettersi:backgroundOutputPath, la chiamata ha lasciato il suo comando in esecuzione in background, ad esempio quando la chiamata ha impostato run_in_background: true o il comando ha raggiunto il suo timeout. Il campo fornisce il percorso del file di output del comando. Nulla notifica il tuo client quando il comando termina, e il file non riceve alcuna riga di chiusura quando ciò accade, quindi leggendo il file vedi l’output scritto fino a quel momento. Per rilevare la fine, aggiungi un marcatore in coda al comando, ad esempio npm test; echo DONE, e cercalo nel file. Il campo backgroundOutputPath richiede Claude Code v2.1.295 o successivo.
Limiti di output MCP e avvisi
Quando gli strumenti MCP producono output di grandi dimensioni, Claude Code aiuta a gestire l’utilizzo dei token per evitare di sovraccaricare il contesto della conversazione:- Soglia di avviso di output: Claude Code visualizza un avviso quando l’output di qualsiasi strumento MCP supera 10.000 token
- Limite configurabile: puoi regolare il numero massimo di token di output MCP consentiti utilizzando la variabile d’ambiente
MAX_MCP_OUTPUT_TOKENS - Limite predefinito: il massimo predefinito è 25.000 token
- Ambito: la variabile d’ambiente si applica agli strumenti che non dichiarano il proprio limite. Gli strumenti che impostano
anthropic/maxResultSizeCharsutilizzano invece quel valore per il contenuto di testo, indipendentemente dal valore impostato perMAX_MCP_OUTPUT_TOKENS. Gli strumenti che restituiscono dati di immagine sono comunque soggetti aMAX_MCP_OUTPUT_TOKENS - Oltre il limite: quando un risultato riuscito senza contenuto di immagine supera il limite di token, Claude Code lo salva in un file e lo sostituisce nella conversazione con un messaggio che nomina il percorso del file, in modo che Claude legga il file quando ha bisogno del contenuto. Il file si trova nella directory
tool-resultsdella sessione sotto~/.claude/projects/. - Dimensione della risposta dai server HTTP e SSE: quando una risposta da un server HTTP o SSE supera i 16 MiB, Claude Code smette di leggerla e la richiesta non riesce. Il limite si applica dopo la decompressione a un singolo corpo di risposta JSON o a un singolo evento di un flusso di eventi. Se gestisci il server, restituisci meno dati per risposta per rimanere sotto il limite, ad esempio impaginando i risultati
- Dimensione dei messaggi dai server WebSocket: quando un server WebSocket invia un singolo messaggio di oltre 16 MiB, Claude Code chiude la connessione e le chiamate in corso su quel server non riescono. Se gestisci il server, restituisci meno dati per messaggio per rimanere sotto il limite
- Limite di caratteri per i risultati di testo: per uno strumento che non dichiara
anthropic/maxResultSizeChars, Claude Code salva in un file un risultato riuscito senza contenuto di immagine quando supera i 50.000 caratteri, indipendentemente dal numero di token. L’impostazione diMAX_MCP_OUTPUT_TOKENSnon modifica questa soglia - Risultati di errore: quando uno strumento restituisce un risultato contrassegnato con
isError: true, Claude riceve il testo del risultato come messaggio di errore dello strumento. Di un testo di errore più lungo di circa 11.000 caratteri vengono mantenuti solo i primi 5.000 e gli ultimi 5.000 caratteri, con un indicatore tra di essi che riporta quanti caratteri sono stati rimossi
MAX_MCP_OUTPUT_TOKENS nella tua shell prima di avviare Claude Code:
Aumentare il limite per uno strumento specifico
Se stai creando un server MCP, puoi consentire ai singoli strumenti di restituire risultati più grandi della soglia predefinita di persistenza su disco di 50.000 caratteri impostando_meta["anthropic/maxResultSizeChars"] nella voce di risposta tools/list dello strumento. Claude Code aumenta la soglia di quello strumento al valore annotato, fino a un limite massimo di 500.000 caratteri.
Questo è utile per gli strumenti che restituiscono output intrinsecamente grandi ma necessari, come schemi di database o alberi di file completi. Senza l’annotazione, i risultati riusciti che superano la soglia predefinita vengono persistiti su disco e sostituiti con un riferimento a file nella conversazione.
MAX_MCP_OUTPUT_TOKENS per il contenuto di testo, quindi gli utenti non hanno bisogno di aumentare la variabile d’ambiente per gli strumenti che la dichiarano. Gli strumenti che restituiscono dati di immagine sono comunque soggetti al limite di token.
Immagini nei risultati degli strumenti
Quando uno strumento MCP restituisce un’immagine PNG, JPEG, GIF o WebP, Claude vede l’immagine inline nella conversazione. La copia inline può essere ridimensionata o compressa per adattarsi ai limiti di dimensione dell’immagine del modello. Claude Code salva anche i byte originali in un file nella directorytool-results della sessione sotto ~/.claude/projects/ e fornisce a Claude il percorso. Claude può quindi ritagliare, convertire o riutilizzare il file a risoluzione completa con strumenti come Bash.
Se disabiliti la persistenza della sessione con --no-session-persistence o CLAUDE_CODE_SKIP_PROMPT_HISTORY, Claude Code non scrive alcun file di immagine e Claude riceve solo la copia inline.
Il salvataggio dei risultati delle immagini MCP in un file richiede Claude Code v2.1.283 o versioni successive.
Tool input schemas con un combinatore a livello radice
Alcuni server MCP dichiarano lo schema di input di uno strumento come un’unione JSON Schema, conanyOf, oneOf, o allOf al livello superiore dello schema. L’API Claude non accetta queste parole chiave alla radice dello schema. Accetta combinatori annidati all’interno di properties, che Claude Code invia invariati.
Gli strumenti con un combinatore a livello radice rimangono disponibili. Prima di inviare lo strumento all’API, Claude Code appiattisce lo schema in un singolo oggetto e antepone una frase alla descrizione dello strumento che dice a Claude quali gruppi di parametri appartengono insieme:
allOf: le proprietà di ogni ramo vengono unite, e l’elencorequireddi ogni ramo si applica ancoraanyOfeoneOf: le proprietà di ogni ramo vengono unite, e l’elencorequireddi ogni ramo viene descritto nella descrizione dello strumento invece di essere applicato dallo schema
Strumenti con schemi di input non validi
L’API Claude controlla lo schema di input di ogni strumento in una richiesta e rifiuta l’intera richiesta quando uno schema non supera il controllo, quindi un singolo strumento MCP con uno schema malformato farebbe fallire ogni richiesta che lo include con un errore 400. Claude Code esegue due dei controlli dell’API da solo quando carica gli strumenti di un server ed esclude ogni strumento che non li supererebbe, in modo che gli altri strumenti del server continuino a funzionare:- I nomi delle proprietà di primo livello devono essere lunghi da 1 a 64 caratteri e utilizzare solo lettere ASCII e cifre,
_,.e- - Lo schema deve essere valido rispetto al meta-schema JSON Schema draft 2020-12. Claude Code applica questo controllo agli schemi che non dichiarano alcun
$schemae agli schemi che dichiarano draft 2020-12. Uno schema che dichiara qualsiasi altro dialetto salta questo controllo, anche se il controllo del nome della proprietà sopra indicato si applica comunque
Strumenti con nomi più lunghi di 128 caratteri
Se/mcp elenca uno strumento che Claude non riesce a chiamare, verifica se il nome completo dello strumento supera i 128 caratteri. Esegui /mcp nella tua sessione e seleziona lo strumento per vederne il nome completo, ad esempio mcp__<server>__<tool>. Claude Code esclude uno strumento MCP dagli strumenti che invia a Claude quando il suo nome completo supera i 128 caratteri. La Claude API rifiuta una richiesta che include uno strumento di questo tipo, quindi escluderlo permette agli altri strumenti del server di continuare a funzionare.
Per il messaggio che indica lo strumento e i modi per abbreviarne il nome completo, consulta MCP tool name over 128 characters.
Richiedere l’approvazione per uno strumento specifico
Se stai creando un server MCP, puoi contrassegnare uno strumento come soggetto ad approvazione esplicita a ogni chiamata impostando_meta["anthropic/requiresUserInteraction"] a true nella voce dello strumento all’interno della risposta tools/list. Il valore deve essere il booleano JSON true; qualsiasi altro valore viene ignorato.
Claude Code mostra la richiesta di permesso di quello strumento a ogni chiamata, anche nelle modalità di permesso acceptEdits, auto e bypassPermissions, e non offre per esso un’opzione “non chiedere più”. Nemmeno le regole allow che corrispondono allo strumento permettono di saltare la richiesta. In modalità dontAsk, che non chiede mai nulla, Claude Code invece nega la chiamata.
La richiesta deve raggiungere una persona. In modalità non interattiva con --permission-prompt-tool, un risultato allow restituito dallo strumento di prompt per uno strumento contrassegnato viene convertito in un rifiuto con il messaggio MCP tool requires user interaction; not supported via --permission-prompt-tool. Il callback canUseTool dell’Agent SDK invece riceve queste chiamate e può approvarle, perché ci si aspetta che la tua applicazione SDK le mostri a un utente.
Usa questa funzionalità per gli strumenti la cui richiesta di permesso è proprio lo scopo, come un passaggio di consenso o di concessione dell’accesso in cui l’approvazione automatica significherebbe che nessun essere umano ha mai dato il proprio consenso. Gli altri strumenti dello stesso server mantengono il normale comportamento dei permessi.
La seguente voce tools/list contrassegna uno strumento come sempre soggetto ad approvazione.
Rispondere alle richieste di elicitazione MCP
I server MCP possono richiedere input strutturato da voi durante un’attività utilizzando l’elicitazione. Quando un server ha bisogno di informazioni che non può ottenere da solo, Claude Code visualizza una finestra di dialogo interattiva e trasmette la vostra risposta al server. Non è richiesta alcuna configurazione da parte vostra: le finestre di dialogo di elicitazione vengono visualizzate automaticamente quando un server le richiede. I server possono richiedere input in due modi:- Modalità modulo: Claude Code mostra una finestra di dialogo con campi modulo definiti dal server (ad esempio, un prompt di nome utente e password). Compilate i campi e inviate.
- Modalità URL: Claude Code chiede se aprire un collegamento nel tuo browser. I server utilizzano questa modalità per un flusso che si conclude al di fuori del terminale, come l’accesso.
% o &, conta quattro volte verso il limite: il suo carattere più tre caratteri di escape. Un URL senza nessuno di essi raggiunge il limite a circa 8.000 caratteri. Un URL costruito principalmente con escape percentuali, dove ogni terzo carattere è un %, lo raggiunge a circa 4.000.
Per rispondere automaticamente alle richieste di elicitazione senza mostrare una finestra di dialogo, utilizzate l’hook Elicitation.
Se state creando un server MCP che utilizza l’elicitazione, consultate la specifica di elicitazione MCP per i dettagli del protocollo e gli esempi di schema.
Sulle connessioni che utilizzano revisione del protocollo 2026-07-28, Claude Code dichiara elicitation: {form: {}, url: {}} nelle sue capacità client, quindi un server lì può richiedere entrambe le modalità attraverso la richiesta di elicitazione standard del protocollo.
Utilizzare le risorse MCP
I server MCP possono esporre risorse che è possibile referenziare utilizzando menzioni @, in modo simile a come si referenziano i file.Referenziare le risorse MCP
Elencare le risorse disponibili
@ nel suo prompt per visualizzare le risorse disponibili da tutti i server MCP connessi. Le risorse vengono visualizzate insieme ai file nel menu di completamento automatico.Referenziare una risorsa specifica
@server:protocol://resource/path per referenziare una risorsa:Riferimenti a risorse multiple
ui:// o il tipo di media text/html;profile=mcp-app: pagine per un’applicazione host da renderizzare piuttosto che contenuti per Claude da leggere. Non vengono visualizzate nei suggerimenti @ o nei risultati dello strumento di elenco delle risorse, e un server che offre solo risorse dell’interfaccia utente mostra un elenco di risorse vuoto. La lettura di una risorsa dell’interfaccia utente tramite il suo URI funziona comunque.
Scalare con la ricerca di strumenti MCP
La ricerca di strumenti mantiene basso l’utilizzo del contesto MCP rimandando le definizioni degli strumenti fino a quando Claude non ne ha bisogno. Solo i nomi degli strumenti e le istruzioni del server si caricano all’inizio della sessione, quindi aggiungere più server MCP ha un impatto minimo sulla finestra di contesto. Claude Code non impone un limite fisso di strumenti per server; il limite pratico è il budget della finestra di contesto.ENABLE_TOOL_SEARCH non può sovrascrivere questo comportamento, poiché il rifiuto proviene dal deploy stesso.Ricerca di strumenti per gli autori di server MCP
Se stai creando un server MCP, il campo delle istruzioni del server diventa più utile con la ricerca di strumenti abilitata. Le istruzioni del server aiutano Claude a capire quando cercare i tuoi strumenti, in modo simile a come funzionano le skill. Aggiungi istruzioni del server chiare e descrittive che spieghino:- Quale categoria di attività gestiscono i tuoi strumenti
- Quando Claude dovrebbe cercare i tuoi strumenti
- Capacità chiave che il tuo server fornisce
- Istruzioni del server e descrizione di uno strumento caricato in anticipo: 4.096 caratteri
- Descrizione di uno strumento che Claude carica tramite la ricerca di strumenti: 16.384 caratteri
api.anthropic.com arrivano a Claude per intero. Per modificare i limiti per gli altri server MCP nella tua sessione, imposta CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH a un numero di caratteri. Il numero che imposti sostituisce entrambi i limiti: 8192, ad esempio, alza il limite più breve e abbassa quello più lungo. Questa variabile richiede Claude Code v2.1.280 o successivo.
Contrassegnare uno strumento da caricare in anticipo o da mantenere rimandato
Per controllare come viene caricato uno degli strumenti del tuo server, imposta"anthropic/alwaysLoad" nell’oggetto _meta di quello strumento. Chi aggiunge il tuo server a Claude Code può anche impostare alwaysLoad per l’intero server nella propria configurazione, e la sua impostazione può sovrascrivere la tua:
tools/list chiede che uno strumento venga caricato in anticipo:
Configurare la ricerca di strumenti
La ricerca di strumenti è abilitata per impostazione predefinita: gli strumenti MCP vengono rimandati e scoperti su richiesta. L’impostazioneCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS mantiene la ricerca di strumenti disattivata. Non puoi sovrascriverla impostando tu stesso ENABLE_TOOL_SEARCH. Su Claude Code v2.1.227 o successivo, la tua organizzazione può mantenere attiva la ricerca di strumenti anche con questa variabile impostata, tramite le impostazioni gestite. In una sessione che riceve la configurazione HIPAA, la ricerca di strumenti è disattivata, e né ENABLE_TOOL_SEARCH né le impostazioni gestite la riattivano. Disabilitare le capacità pre-release spiega dove si applica l’override e cosa rimuove la variabile.
Claude Code usa la ricerca di strumenti su Claude Opus 4, Claude Sonnet 4, Claude Haiku 4.5 e modelli successivi, oppure su Opus 4.5, Sonnet 4.5, Haiku 4.5 e modelli successivi su Google Cloud’s Agent Platform. Sui modelli precedenti, Claude Code carica tutti gli strumenti MCP in anticipo, e ENABLE_TOOL_SEARCH=true non sovrascrive questo comportamento.
Su Google Cloud’s Agent Platform, Claude Code decide in base alla generazione del modello:
- Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 e successivi: la ricerca di strumenti è attiva per impostazione predefinita, come su Anthropic API.
- Modelli precedenti di Agent Platform: Claude Code carica tutti gli strumenti MCP in anticipo, perché i loro stack di servizio rifiutano l’intestazione beta richiesta.
ENABLE_TOOL_SEARCH=truenon sovrascrive questo comportamento.
ENABLE_TOOL_SEARCH=true.
Controlla il comportamento della ricerca di strumenti con la variabile d’ambiente ENABLE_TOOL_SEARCH:
env di settings.json.
Puoi anche disabilitare specificamente lo strumento ToolSearch:
ToolSearch o lo escludi da --tools, gli strumenti MCP vengono invece caricati in anticipo, ma una richiesta può comunque contenere una voce segnaposto defer_loading. Se un gateway rifiuta quella voce, consulta Ricerca di strumenti tramite un gateway LLM.
Ricerca di strumenti tramite un gateway LLM
- Hai impostato
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: consulta come influisce sulla ricerca di strumenti - Una richiesta è fallita con un errore che menziona
defer_loadingotool_reference: consulta Extra inputs are not permitted
ANTHROPIC_BASE_URL punta a un gateway, la ricerca di strumenti è attiva per impostazione predefinita, quindi le richieste includono i campi degli strumenti defer_loading e i blocchi tool_reference che il gateway deve inoltrare. Mentre la ricerca di strumenti è attiva, gli strumenti MCP vengono rimandati. Per caricare invece tutti gli strumenti in anticipo, imposta ENABLE_TOOL_SEARCH=false nella tua shell o nel campo env delle impostazioni. Prima della v2.1.304, la ricerca di strumenti era disattivata dietro un gateway a meno che ENABLE_TOOL_SEARCH non fosse true, auto o auto:N.
Su v2.1.305 o successivo, Claude Code può riprovare una richiesta senza la ricerca di strumenti dopo un 400 o 422 di cui non riconosce la causa. Quando il nuovo tentativo riesce, sullo schermo non appare nulla e non devi fare niente: gli strumenti MCP vengono invece caricati in anticipo. Claude Code riprova la ricerca di strumenti più tardi, al costo di un’altra richiesta rifiutata. Per evitare queste richieste, imposta ENABLE_TOOL_SEARCH=false.
Strumenti che restano rimandati sotto la soglia ENABLE_TOOL_SEARCH=auto
Se /context etichetta gli strumenti come (deferred) o (loaded on-demand) anche se le loro definizioni totalizzano meno della soglia auto, la ricerca di strumenti era già attiva in questa conversazione ed è rimasta attiva. Il totale può diminuire in seguito, ad esempio mentre i server MCP si riconnettono dopo che riprendi una sessione. Non devi fare niente: Claude carica ciascuno di quegli strumenti quando un’attività ne ha bisogno.
Esentare un server dal rinvio
Se gli strumenti di un server dovrebbero essere sempre visibili a Claude senza un passaggio di ricerca, impostaalwaysLoad a true nella configurazione di quel server. Gli strumenti del server vengono quindi caricati nel contesto indipendentemente dall’impostazione ENABLE_TOOL_SEARCH. Usa questa opzione per un piccolo numero di strumenti di cui Claude ha bisogno a ogni turno, poiché ogni strumento caricato in anticipo consuma contesto che altrimenti sarebbe disponibile per la tua conversazione.
La seguente voce .mcp.json esenta un server HTTP lasciando rimandati gli altri server:
alwaysLoad è disponibile su tutti i tipi di server.
L’impostazione alwaysLoad: true fa anche sì che l’avvio attenda gli strumenti del server, entro il timeout di connessione standard di 5 secondi, poiché devono essere presenti quando viene costruito il primo prompt. Un server remoto con una voce cached valida fornisce i suoi strumenti dalla cache senza connettersi, quindi non ritarda l’avvio. Gli altri server si connettono in background per impostazione predefinita; imposta MCP_CONNECTION_NONBLOCKING=0 per far sì che l’avvio attenda anche loro.
Rimandare gli strumenti di un server
Per mantenere tutti gli strumenti di un server dietro la ricerca di strumenti, imposta"alwaysLoad": false nella voce di quel server nella tua configurazione MCP. Questo include gli strumenti che l’autore del server ha contrassegnato per il caricamento anticipato. Se ometti alwaysLoad, quegli strumenti contrassegnati vengono caricati in anticipo. Richiede Claude Code v2.1.287 o successivo.
Usa i prompt MCP come comandi
I server MCP possono esporre prompt che diventano disponibili come comandi in Claude Code. I prompt da un server denominatoanthropic-skills non vengono visualizzati, perché Claude Code riserva quel nome per le skills sincronizzate da claude.ai. Gli strumenti del server funzionano comunque. Rinomina il server nella tua configurazione MCP per elencare i suoi prompt.
Esegui i prompt MCP
Scopri i prompt disponibili
/ per vedere i comandi disponibili, inclusi quelli dai server MCP. Claude Code elenca ogni prompt MCP come /servername:promptname (MCP). Digitando /mcp__servername__promptname lo esegui anche.Esegui un prompt senza argomenti
Esegui un prompt con argomenti
Configurazione MCP gestita
Per le organizzazioni che necessitano di un controllo centralizzato su quali server MCP gli utenti possono connettere, vedere Configurazione MCP gestita. Copre la distribuzione di un set di server fisso conmanaged-mcp.json, la fornitura di server a ogni utente con managedMcpServers, la restrizione dei server con allowedMcpServers e deniedMcpServers, e ciò che gli utenti vedono quando un server è bloccato.