cool-solution — dev.blog
Tecnologie

Aggiungere un server MCP a Claude Code e Codex

Dare a un agente da terminale gli strumenti giusti vuol dire collegargli dei server MCP. La procedura per aggiungere un MCP a Claude e Codex è sorprendentemente simile: in entrambi c'è un comando dedicato e un file di configurazione. In questa guida la percorro due volte con lo stesso esempio — il server Playwright — prima su Claude Code (comando /mcp e file ~/.claude.json), poi su Codex (file ~/.codex/config.toml), con gli screenshot annotati che indicano ogni sezione.

Il pannello /mcp di Claude Code con i server MCP (playwright, github, notion, sentry) e, accanto, una scheda del file ~/.codex/config.toml.

🔍 Cos'è un server MCP e come si aggiunge

Il Model Context Protocol (MCP) è lo standard aperto che collega un assistente AI a strumenti esterni: un server MCP espone tool, risorse e prompt che l'agente può richiamare — navigare una pagina, leggere un database, chiamare un'API. Aggiungerne uno a Claude o a Codex significa dare all'agente nuove capacità concrete.

La buona notizia è che il meccanismo è quasi identico nei due strumenti: c'è sempre un comando per gestire i server e un file dove vengono elencati. Per mostrarlo uso un solo esempio, il server Playwright che pilota un browser, così vedi la stessa operazione prima su Claude e poi su Codex.

Il server di esempio · Playwright
# Un solo pacchetto, lo stesso per Claude e per Codex
npx @playwright/mcp@latest

Doc ufficiale · Playwright MCP

Il pacchetto ufficiale è @playwright/mcp, avviato con npx.

⌨️ Claude Code: il comando /mcp

Partiamo da Claude Code. Dentro una sessione, il comando /mcp apre un pannello interattivo: elenca i server configurati, mostra lo stato della connessione, quanti tool espone ciascuno e permette di autenticare quelli protetti da OAuth.

È il primo posto dove guardare quando un server non risponde: se accanto al nome leggi needs login o failed, il problema è lì, non nel tuo prompt. Dal pannello riavvii, disconnetti o autentichi un server senza aprire nessun file.

Il pannello di /mcp dentro la sessione
claude — MCP servers> /mcpManage MCP servers · 4 configuredSERVERSTATOTOOL / NOTEplaywright✔ connected21 toolslocalgithub✔ connected8 toolsprojectnotion⚠ needs loginOAuthusersentry✖ failedview logslocal↑↓ select · ↵ view tools / authenticate · d disconnect1stato + toolOgni server mostra lo stato dellaconnessione e quanti tool espone.2⚠ needs loginServer OAuth: premi ↵ sulla rigaper autenticarti dal browser.

Stato per server, numero di tool e ambito; ↵ su un server OAuth avvia il login.

🛠️ Claude Code: list, add e remove da terminale

Fuori dalla sessione la gestione passa dal sottocomando claude mcp. I tre che userai sempre: list per vedere cosa è configurato, add per aggiungere un server, remove per toglierlo; con get ispezioni un singolo server.

Il flag che conta è --scope (o -s): local vale solo per te in questo progetto, project finisce in un file versionabile e condiviso col team, user vale per tutti i tuoi progetti. Scegli l'ambito prima di aggiungere, non dopo.

  • list — elenca i server e il loro stato.
  • add — aggiunge un server (stdio o http).
  • remove — rimuove un server dall'ambito scelto.
claude mcp · list, get, add, remove
# Elenca, ispeziona, rimuovi
claude mcp list
claude mcp get playwright
claude mcp remove playwright

# Aggiungi un server stdio: tutto dopo -- è il comando da avviare
claude mcp add playwright -- npx @playwright/mcp@latest

# ...con ambito esplicito e una variabile d'ambiente
claude mcp add -s project -e API_KEY=*** github -- npx -y github-mcp-server

Doc ufficiale · MCP in Claude Code

Tutto ciò che segue -- è il comando con cui Claude avvia il server.

⚙️ Claude Code: il file di configurazione

Ogni server aggiunto finisce in un file JSON. A livello utente è ~/.claude.json; a livello progetto è .mcp.json nella radice del repo — quello che condividi col team. La chiave è una sola, mcpServers, con una voce per server.

Una voce stdio ha command e args (come avviare il processo); una voce http ha type e url per un server remoto. I token non si scrivono mai in chiaro: passali dalle variabili d'ambiente, come nell'esempio annotato qui sotto.

~/.claude.json · il blocco mcpServers annotato
~/.claude.json1{2"mcpServers": {3"playwright": {4"command": "npx",5"args": ["@playwright/mcp@latest"]6},7"github": {8"type": "http",9"url": "https://api.githubcopilot.com/mcp",10"headers": { "Authorization": "Bearer ${GITHUB_TOKEN}" }11}12}13}1mcpServersLa chiave radice: ogni voce quidentro è un server MCP.2command + argsServer stdio: npx avvia il pacchetto@playwright/mcp@latest.3type: http + urlServer remoto: niente processo,solo un endpoint HTTP.4headersIl token arriva da ${GITHUB_TOKEN}:mai scritto in chiaro nel file.

Playwright via stdio, GitHub via http: le frecce indicano i punti spiegati nel testo.

🧱 Claude Code: aggiungere Playwright passo-passo

Mettiamo tutto insieme. Per aggiungere Playwright a Claude basta una riga: il nome del server, poi --, poi il comando che lo avvia. Claude lo registra, lo avvia e ne scopre i tool al volo.

Verifica subito con claude mcp list — deve comparire playwright — oppure apri /mcp in sessione. Se invece leggi spawn npx ENOENT Node o npx non sono nel PATH: è l'errore più comune, e non dipende da MCP.

Aggiungere e verificare Playwright su Claude
claude mcp add playwright -- npx @playwright/mcp@latest
claude mcp list
#  playwright   ✔ connected · 21 tools

Doc ufficiale · Playwright MCP

Aggiunto, avviato e verificato in due comandi.

🔌 Codex: aggiungere un MCP dal terminale

Passiamo a Codex, la CLI di OpenAI. La logica è la stessa di Claude, cambiano i dettagli. Il sottocomando è codex mcp: add per aggiungere, list per elencare, remove per rimuovere; anche qui -- separa il nome del server dal comando da eseguire.

L'esempio Playwright è quasi identico a quello di Claude: stesso pacchetto, stesso npx, cambia solo il comando contenitore. Le variabili d'ambiente si passano con --env (o -e).

  • codex mcp add — aggiunge un server.
  • codex mcp list — elenca i server (--json per lo script).
  • codex mcp remove — rimuove un server.
codex mcp · add, list, remove
# Aggiungi Playwright a Codex
codex mcp add playwright -- npx @playwright/mcp@latest

# Elenca e rimuovi
codex mcp list
codex mcp remove playwright

# ...con una variabile d'ambiente
codex mcp add -e API_KEY=*** github -- npx -y github-mcp-server

Doc ufficiale · MCP in Codex

Stesso schema di Claude: il nome, poi -- e il comando del server.

📄 Codex: il file config.toml

Codex non usa JSON ma TOML. La configurazione vive in ~/.codex/config.toml e ogni server è una tabella dedicata, [mcp_servers.nome]: il nome del server è la parte dopo il punto.

Dentro la tabella metti command e args per un server stdio, e env per le variabili d'ambiente. È l'equivalente esatto del blocco mcpServers di Claude, scritto in TOML invece che in JSON.

~/.codex/config.toml · una tabella per server
~/.codex/config.toml1# ~/.codex/config.toml2[mcp_servers.playwright]3command = "npx"4args = ["@playwright/mcp@latest"]56[mcp_servers.github]7command = "npx"8args = ["-y", "github-mcp-server"]9env = { GITHUB_TOKEN = "ghp_••••" }1[mcp_servers.NAME]Una tabella per server: il nomedel server è dopo il punto.2command + argsServer stdio: come avviare ilprocesso, qui con npx.3envVariabili d'ambiente passate alserver: token e chiavi API.

[mcp_servers.playwright] è l'equivalente della voce JSON di Claude.

⚖️ Claude e Codex a confronto

Le due strade portano allo stesso risultato. Vale la pena tenere a mente le differenze pratiche quando passi dall'uno all'altro: cambia soprattutto dove finisce la configurazione e con che sintassi la scrivi.

MCP su Claude Code e su Codex

Claude Code

  • Pannello in sessione: /mcp
  • CLI: claude mcp add / list / remove
  • Config JSON: ~/.claude.json e .mcp.json
  • Chiave mcpServers · ambiti local/project/user
  • Variabili: flag -e oppure blocco env

Codex

  • Gestione da CLI: codex mcp add / list / remove
  • Config TOML: ~/.codex/config.toml
  • Tabelle [mcp_servers.nome]
  • Variabili: flag --env oppure chiave env
  • Stesso pacchetto Playwright via npx

Meccanismo identico, sintassi diversa: JSON per Claude, TOML per Codex.

✅ Applica e verifica

Il ciclo è sempre lo stesso, su entrambi: aggiungi il server, controlla che risulti connesso, usalo in chat e, se qualcosa non parte, leggi lo stato e i log prima di toccare la configurazione.

Un'ultima accortezza: versiona la configurazione senza segreti. Su Claude condividi .mcp.json, su Codex config.toml, ma i token restano nelle variabili d'ambiente, mai dentro al file.

Da zero a server attivo, in quattro passi
  1. 01
    Aggiungi il serverclaude mcp add … oppure codex mcp add …
  2. 02
    Verifica lo stato/mcp e claude mcp list · codex mcp list
  3. 03
    Usa i tool in chatL'agente chiede conferma prima di agire.
  4. 04
    Debug dai logspawn npx ENOENT? Node/npx non nel PATH.

Domande frequenti su aggiungere MCP a Claude e Codex

Che differenza c'è tra il comando /mcp e claude mcp?

/mcp è interattivo e si usa dentro una sessione di Claude Code per vedere lo stato dei server e autenticarli; claude mcp è il sottocomando da terminale con cui automatizzi add, list e remove. Sono complementari.

Dove vengono salvati i server MCP di Claude e di Codex?

Claude usa JSON: ~/.claude.json (utente) e .mcp.json (progetto, versionabile). Codex usa TOML: ~/.codex/config.toml, con una tabella [mcp_servers.nome] per ogni server.

Qual è il pacchetto giusto per il server Playwright?

Quello ufficiale è @playwright/mcp, avviato con npx @playwright/mcp@latest. Evita i pacchetti non ufficiali con nomi simili: lo stesso comando vale per Claude e per Codex.

Come passo un token a un server MCP senza scriverlo nel file?

Con le variabili d'ambiente: su Claude il flag -e NOME=valore (o il blocco env nel JSON), su Codex --env NOME=valore (o la chiave env nel TOML). Così il file di configurazione resta condivisibile.

Parliamone

Se questo tema ti riguarda, scrivimi: confrontarsi su codice e AI è sempre tempo speso bene.

Altri articoli del blog

tips-claude-resume-luglio-2026.md10 luglio 2026claude-code-hooks-quality-gate-2026.md9 luglio 2026orchestrazione-agenti-ai-multi-agent-dotnet-2026.md8 luglio 2026