> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurazione MCP

> Come aggiungere, configurare e gestire server MCP

<div id="adding-mcp-servers">
  ## Aggiungere server MCP
</div>

<div id="via-command-line">
  ### Dalla riga di comando
</div>

Il modo più rapido per aggiungere un server MCP:

```bash theme={null}
# server stdio — passa semplicemente il comando dopo --
devin mcp add <name> -- <command> [args...]

# server HTTP — passa l'URL come argomento posizionale
devin mcp add <name> <URL>

# server HTTP — oppure usa il flag --url
devin mcp add <name> --url <URL>
```

Il tipo di trasporto viene determinato automaticamente: un URL implica HTTP (Streamable HTTP), mentre gli argomenti in coda (o `--command`) implicano stdio.

<Note>I server MCP remoti usano Streamable HTTP per impostazione predefinita. Se il server risponde con un errore HTTP 4xx, la CLI ripiega su SSE allo stesso URL. Imposta `"transport": "sse"` esplicitamente, se necessario — vedi [fallback SSE legacy](#legacy-sse-fallback) di seguito.</Note>

Per impostazione predefinita, i server vengono salvati nell'ambito **local** (`.devin/config.local.json`, ignorato da git). Usa `-s`/`--scope` per modificarlo:

```bash theme={null}
devin mcp add -s project <name> <URL>   # condiviso tramite .devin/config.json
devin mcp add -s user <name> <URL>      # globale (~/.config/devin/config.json; %APPDATA%\devin\config.json su Windows)
```

Puoi anche gestire i server dalla riga di comando:

```bash theme={null}
devin mcp list              # List all configured servers
devin mcp get <name>        # Show details for a specific server
devin mcp remove <name>     # Remove a configured server
devin mcp login <name>      # Authenticate with a server via OAuth
devin mcp logout <name>     # Remove stored OAuth credentials
devin mcp enable <name>     # Abilita un server disabilitato
devin mcp disable <name>    # Disabilita un server senza rimuoverlo
```

<div id="via-config-file">
  ### Tramite il file di configurazione
</div>

Aggiungi i server direttamente alla sezione `mcpServers` del file di configurazione:

<Tabs>
  <Tab title="Configurazione del progetto">
    ```json theme={null}
    // .devin/config.json
    {
      "mcpServers": {
        "server-name": {
          "command": "npx",
          "args": ["-y", "@company/mcp-server"],
          "env": {
            "API_KEY": "your-key"
          }
        }
      }
    }
    ```

    <Note>I server a livello di progetto vengono condivisi con il tuo team tramite il controllo di versione.</Note>
  </Tab>

  <Tab title="Configurazione utente">
    ```json theme={null}
    // ~/.config/devin/config.json
    {
      "mcpServers": {
        "my-server": {
          "command": "node",
          "args": ["/path/to/my-server.js"],
          "env": {}
        }
      }
    }
    ```

    <Note>I server a livello utente si applicano a tutti i tuoi progetti.</Note>
  </Tab>

  <Tab title="Local override">
    ```json theme={null}
    // .devin/config.local.json
    {
      "mcpServers": {
        "server-name": {
          "command": "npx",
          "args": ["-y", "@company/mcp-server"],
          "env": {
            "API_KEY": "my-personal-key"
          }
        }
      }
    }
    ```

    <Note>Le configurazioni locali sono escluse da Git tramite gitignore: usale per le chiavi API personali.</Note>
  </Tab>
</Tabs>

***

<div id="server-configuration-options">
  ## Opzioni di configurazione del server
</div>

I server MCP possono essere configurati in due modi: come **comando locale** (trasporto stdio) o come **server remoto** (trasporto HTTP).

<div id="local-command-stdio">
  ### Comando locale (stdio)
</div>

| Campo      | Tipo      | Obbligatorio | Descrizione                                                                                                                     |
| ---------- | --------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| `command`  | string    | Sì           | L'eseguibile da eseguire                                                                                                        |
| `args`     | string\[] | No           | Argomenti della riga di comando                                                                                                 |
| `env`      | object    | No           | Variabili d'ambiente da impostare                                                                                               |
| `disabled` | boolean   | No           | Imposta su `true` per saltare questo server (vedi [Abilitazione e disabilitazione dei server](#enabling-and-disabling-servers)) |

<div id="remote-server-streamable-http">
  ### Server remoto (Streamable HTTP)
</div>

| Campo               | Tipo    | Obbligatorio | Descrizione                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------- | ------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`               | string  | Sì           | L'URL dell'endpoint del server MCP                                                                                                                                                                                                                                                                                                                                                                                                       |
| `transport`         | string  | No           | `"http"` (Streamable HTTP, predefinito per i server basati su URL) oppure `"sse"` (SSE legacy). Se è impostato su `"http"` o omesso, la CLI tenta prima Streamable HTTP e, in caso di errori 4xx, passa a SSE ([secondo la spec](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility)). Imposta esplicitamente `"sse"` se l'endpoint SSE del server si trova in un percorso diverso. |
| `headers`           | object  | No           | Header HTTP personalizzati da includere nelle richieste                                                                                                                                                                                                                                                                                                                                                                                  |
| `oauthClientId`     | string  | No           | Client ID OAuth preregistrato, per i server che non supportano la registrazione dinamica dei client (DCR), ad es. GitHub. Vedi la sezione "Client OAuth preregistrati" qui sotto.                                                                                                                                                                                                                                                        |
| `oauthClientSecret` | string  | No           | client secret OAuth, per client confidenziali. Da abbinare a `oauthClientId`.                                                                                                                                                                                                                                                                                                                                                            |
| `disabled`          | boolean | No           | Impostalo su `true` per saltare questo server (vedi [Abilitazione e disabilitazione dei server](#enabling-and-disabling-servers))                                                                                                                                                                                                                                                                                                        |

<div id="examples">
  ### Esempi
</div>

<AccordionGroup>
  <Accordion title="GitHub (stdio)">
    ```json theme={null}
    {
      "mcpServers": {
        "github": {
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-github"],
          "env": {
            "GITHUB_TOKEN": "ghp_..."
          }
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Notion (HTTP con OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "notion": {
          "url": "https://mcp.notion.com/mcp",
          "transport": "http"
        }
      }
    }
    ```

    <Note>Dopo aver aggiunto un server basato su OAuth, esegui `devin mcp login notion` per autenticarti. Vedi [Autenticazione](#authentication) qui sotto.</Note>
  </Accordion>

  <Accordion title="Linear (HTTP con OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "linear": {
          "url": "https://mcp.linear.app/mcp",
          "transport": "http"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Atlassian / Jira (HTTP con OAuth)">
    ```json theme={null}
    {
      "mcpServers": {
        "atlassian": {
          "url": "https://mcp.atlassian.com/v1/mcp",
          "transport": "http"
        }
      }
    }
    ```

    <Note>Dopo averlo aggiunto, esegui `devin mcp login atlassian` per autenticarti. Ogni client MCP (Windsurf, Claude Code, Devin CLI) mantiene la propria sessione OAuth, quindi devi effettuare l'accesso separatamente anche se ti sei già autenticato in un altro tool.</Note>
  </Accordion>

  <Accordion title="Server personalizzato (stdio)">
    ```json theme={null}
    {
      "mcpServers": {
        "my-tools": {
          "command": "python",
          "args": ["./scripts/mcp-server.py"],
          "env": {
            "DB_URL": "postgres://localhost/mydb"
          }
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

***

<div id="authentication">
  ## Autenticazione
</div>

Alcuni server MCP remoti richiedono l'autenticazione OAuth. Dopo aver aggiunto un server basato su OAuth alla tua configurazione, autenticati con il comando `login`:

```bash theme={null}
devin mcp login <server-name>
```

Ad esempio:

```bash theme={null}
devin mcp login notion    # Autenticazione con Notion
devin mcp login linear    # Autenticazione con Linear
```

Si apre una finestra del browser in cui è possibile autorizzare l'accesso. I token OAuth vengono archiviati localmente e aggiornati automaticamente.

Facoltativamente, è possibile richiedere ambiti OAuth specifici:

```bash theme={null}
devin mcp login notion --scopes read,write
```

Per rimuovere le credenziali OAuth memorizzate per un server:

```bash theme={null}
devin mcp logout <server-name>
```

<Note>
  Se il server supporta OAuth, ti verrà anche chiesto automaticamente di autenticarti al primo utilizzo del server.
</Note>

<div id="pre-registered-oauth-clients">
  ### Client OAuth preregistrati
</div>

La maggior parte dei server MCP basati su OAuth supporta la [registrazione dinamica del client](https://datatracker.ietf.org/doc/html/rfc7591) (DCR), quindi Devin CLI si registra automaticamente e non è necessario fornire credenziali client.

Alcuni provider (ad es. GitHub) non supportano DCR e richiedono invece un client OAuth **preregistrato**. In questi casi, specifica il Client ID — e un client secret se si tratta di un client confidenziale — tramite `oauthClientId` / `oauthClientSecret`:

```json theme={null}
{
  "mcpServers": {
    "my-server": {
      "url": "https://mcp.example.com/mcp",
      "transport": "http",
      "oauthClientId": "Iv1.abc123def456",
      "oauthClientSecret": "${env:MY_MCP_CLIENT_SECRET}"
    }
  }
}
```

Quando `oauthClientId` è impostato, Devin CLI non esegue la registrazione dinamica del client e usa il client preregistrato durante il flusso OAuth. Esegui `devin mcp login <name>` (oppure attiva il primo utilizzo) per autenticarti come di consueto.

Puoi anche impostarli dalla riga di comando quando aggiungi o accedi a un server:

```bash theme={null}
devin mcp add my-server <URL> --oauth-client-id <ID> --oauth-client-secret <SECRET>
devin mcp login my-server --oauth-client-id <ID> --oauth-client-secret <SECRET>
```

<Note>
  `oauthClientId` / `oauthClientSecret` sono credenziali client OAuth usate durante il flusso di autorizzazione. **Non** sono credenziali generiche per ogni richiesta: se un server si aspetta un token statico, usa invece `headers` (HTTP) o `env` (stdio).
</Note>

<Warning>
  Non fare commit di un client secret in una configurazione condivisa. Richiamalo da una variabile d'ambiente (`${env:VAR}`), leggilo da un file (`${file:/path}`) oppure inseriscilo in `.devin/config.local.json` (ignorato da git). Consulta la sezione "Gestione dei segreti" qui sotto.
</Warning>

***

<div id="enabling-and-disabling-servers">
  ## Abilitare e disabilitare i server
</div>

Puoi disabilitare temporaneamente un server MCP senza rimuoverne la configurazione. Un server disabilitato viene ignorato durante il rilevamento degli strumenti: i suoi strumenti non verranno visualizzati e il processo del server non verrà avviato.

```bash theme={null}
devin mcp disable <name>    # Disabilita un server
devin mcp enable <name>     # Riabilitalo
```

Questo imposta il flag `"disabled": true` sulla voce del server nel file di configurazione. Usa `-s`/`--scope` per selezionare un ambito specifico:

```bash theme={null}
devin mcp disable -s project my-server
devin mcp enable -s user my-server
```

Puoi anche impostare il flag direttamente nel file di configurazione:

```json theme={null}
{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "@company/mcp-server"],
      "disabled": true
    }
  }
}
```

<Note>La disattivazione è utile quando vuoi mantenere la configurazione di un server (incluse le variabili d'ambiente e le credenziali OAuth) ma interromperne temporaneamente l'uso — per esempio, per ridurre il tempo di avvio o isolare un problema.</Note>

***

<div id="managing-secrets">
  ## Gestione dei segreti
</div>

<Warning>
  Non eseguire mai il commit di chiavi API o segreti nel sistema di controllo versione. Usa `.devin/config.local.json` per i valori sensibili.
</Warning>

Per i progetti di team, l'approccio consigliato è:

1. Definire il server in `.devin/config.json` con segnaposto o senza variabili d'ambiente
2. Ogni membro del team aggiunge le proprie chiavi personali in `.devin/config.local.json`

Il file di configurazione locale viene escluso automaticamente da Git.

***

<div id="mcp-permissions">
  ## Autorizzazioni MCP
</div>

Puoi pre-approvare, negare o richiedere sempre una conferma per strumenti MCP specifici nella configurazione delle autorizzazioni:

```json theme={null}
{
  "permissions": {
    "allow": [
      "mcp__github__list_issues",
      "mcp__github__create_issue"
    ],
    "deny": [
      "mcp__github__delete_repo"
    ],
    "ask": [
      "mcp__linear__*"
    ]
  }
}
```

**Pattern di corrispondenza per le autorizzazioni:**

| Pattern             | Corrisponde a                                  |
| ------------------- | ---------------------------------------------- |
| `mcp__server__tool` | Uno strumento specifico su un server specifico |
| `mcp__server__*`    | Tutti gli strumenti su un server specifico     |
| `mcp__*`            | Tutti gli strumenti MCP su tutti i server      |

***

<div id="organization-restrictions">
  ## Restrizioni dell’organizzazione
</div>

Se fai parte di un team Enterprise, il tuo amministratore potrebbe limitare i server MCP a cui puoi connetterti. Un server che hai configurato può essere bloccato se MCP è disabilitato per il tuo team, oppure se non è incluso nell'allowlist del team o in un **MCP registry** obbligatorio; in tal caso non si connetterà e i suoi strumenti non saranno disponibili. Per maggiori dettagli, consulta [Team Settings — MCP Registry](/it/cli/enterprise/team-settings#mcp-registry).

***

<div id="troubleshooting">
  ## Risoluzione dei problemi
</div>

<AccordionGroup>
  <Accordion title="Autenticazione richiesta / errori OAuth con server remoti">
    Se durante la connessione a un server MCP remoto visualizzi errori come `Auth required` o `AuthRequired`, significa che il server richiede l'autenticazione OAuth.

    Esegui:

    ```bash theme={null}
    devin mcp login <server-name>
    ```

    Ogni client MCP si autentica in modo indipendente. Anche se ti sei già autenticato in Windsurf o Claude Code, per Devin CLI devi eseguire `devin mcp login` separatamente.

    Per verificare lo stato dell'autenticazione, prova a rimuovere e aggiungere di nuovo le credenziali:

    ```bash theme={null}
    devin mcp logout <server-name>
    devin mcp login <server-name>
    ```
  </Accordion>

  <Accordion title="Il server non si avvia">
    Verifica che il comando funzioni al di fuori di Devin CLI:

    ```bash theme={null}
    npx -y @modelcontextprotocol/server-github
    ```

    Verifica che tutte le variabili d'ambiente richieste siano impostate.
  </Accordion>

  <Accordion title="Strumenti non visualizzati">
    Chiedi all'agente di elencare i server MCP e gli strumenti. Il server potrebbe richiedere qualche istante per inizializzarsi.
  </Accordion>

  <Accordion title="Autorizzazione negata">
    Controlla la configurazione delle autorizzazioni. Per impostazione predefinita, gli strumenti MCP richiedono l'approvazione. Aggiungili a `permissions.allow` per approvarli automaticamente.
  </Accordion>

  <Accordion title="Fallback SSE legacy">
    Durante la connessione a un server HTTP, Devin CLI prova prima **Streamable HTTP**. Se il server risponde con un errore HTTP 4xx (ad es. 404 o 405), passa automaticamente a **SSE legacy** sullo **stesso URL configurato**. Questo segue le [linee guida di retrocompatibilità della spec MCP](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility).

    Il fallback si attiva solo in caso di risposte 4xx — errori di connessione, timeout e risposte 5xx vengono segnalati direttamente senza tentare SSE.

    Se l'endpoint SSE del server si trova in un percorso diverso (ad es. `/sse` invece di `/mcp`), imposta `"transport": "sse"` con l'URL SSE per connetterti direttamente senza il tentativo Streamable HTTP.

    Se entrambi i trasporti falliscono, il messaggio di errore include i dettagli di entrambi i tentativi per agevolare la risoluzione dei problemi.
  </Accordion>
</AccordionGroup>
