Installare Sending nel tuo agente

Aggiungere il server MCP di Sending a Claude, ChatGPT, Cursor, VS Code e agli altri client.

Sending non si installa: è un server MCP remoto. Non c'è niente da scaricare, nessun pacchetto npm, nessun processo da tenere acceso. Al client servono due informazioni:

Endpointhttps://sending.dev/api/mcp
TransportStreamable HTTP
AuthAuthorization: Bearer sk_... (API key) oppure OAuth 2.1
L'unico transport supportato è Streamable HTTP. Non pubblichiamo un endpoint SSE: se un client sa parlare solo stdio o SSE, usa il ponte mcp-remote.

Quale credenziale scegliere

API key se il client accetta header personalizzati (Claude Code, Cursor, VS Code, mcp-remote). La crei in Impostazioni › API Keys, scegli lì gli scope, e la vedi in chiaro solo alla creazione. Punta sempre allo stesso workspace: è la scelta giusta per un progetto o una macchina di build.

OAuth 2.1 se il client apre una schermata di consenso nel browser (ChatGPT, claude.ai, Claude Desktop). Non incolli nessun segreto: autorizzi con il tuo account e i permessi li scegli nella schermata di consenso. È anche l'unica strada nei client che non permettono di mandare header.

Nessuna delle due aggira i guardrail d'invio (dominio verificato, suppression, idempotenza, quota di piano).

Claude Code

# con API key
claude mcp add --transport http sending https://sending.dev/api/mcp \
  --header "Authorization: Bearer sk_la_tua_api_key"

Aggiungi --scope user per averlo in tutti i progetti, --scope project per scriverlo nel .mcp.json del repo (condiviso col team: in quel caso non metterci la key in chiaro). Verifica con claude mcp list: deve rispondere ✔ Connected.

A mano, in .mcp.json o ~/.claude.json:

{
  "mcpServers": {
    "sending": {
      "type": "http",
      "url": "https://sending.dev/api/mcp",
      "headers": { "Authorization": "Bearer sk_la_tua_api_key" }
    }
  }
}
Il campo type non è opzionale: una voce con url ma senza type viene letta come server stdio e saltata. Se metti l'header Authorization e la key è sbagliata, Claude Code segnala la connessione come fallita e non ripiega su OAuth: togli l'header per usare il consenso.

Claude Desktop e claude.ai

Vanno per connettore, quindi OAuth.

Apri i connettori

Settings › Connectors, poi Add custom connector.

Incolla l'endpoint

https://sending.dev/api/mcp, con nome Sending.

Autorizza

Il browser apre la schermata di consenso di Sending: scegli il workspace e spunta i permessi che vuoi dare all'agente.

Il client si registra da solo (RFC 7591), quindi non devi creare nessuna app OAuth.

ChatGPT

I connettori personalizzati stanno dietro il developer mode e accettano solo OAuth o nessuna autenticazione: non c'è modo di passare una API key, usa il consenso.

Abilita il developer mode

In ChatGPT web: Settings › Apps › Advanced settings › Developer mode.

Aggiungi il server

Create / Add custom connector, URL https://sending.dev/api/mcp, autenticazione OAuth.

Autorizza e scegli i permessi

Al primo uso ChatGPT apre la nostra schermata di consenso.

Da API (Responses) l'endpoint si passa come tool, e lì la API key torna utilizzabile:

{
  "model": "gpt-5",
  "tools": [{
    "type": "mcp",
    "server_label": "sending",
    "server_url": "https://sending.dev/api/mcp",
    "authorization": "sk_la_tua_api_key",
    "require_approval": "always"
  }],
  "input": "Quante email mi restano questo mese?"
}
require_approval: "never" toglie il passaggio umano davanti a tool che spediscono davvero. Se lo fai, tieni la key su scope di sola lettura oppure limita gli invii con i cap del piano.

Cursor

In .cursor/mcp.json (progetto) o ~/.cursor/mcp.json (globale):

{
  "mcpServers": {
    "sending": {
      "url": "https://sending.dev/api/mcp",
      "headers": { "Authorization": "Bearer sk_la_tua_api_key" }
    }
  }
}

Poi Settings › MCP: il server deve comparire verde con i tool elencati.

VS Code (GitHub Copilot)

In .vscode/mcp.json. La chiave è servers, non mcpServers, e con inputs la key la digiti al primo avvio invece di committarla:

{
  "inputs": [
    { "id": "sending-key", "type": "promptString", "description": "Sending API key", "password": true }
  ],
  "servers": {
    "sending": {
      "type": "http",
      "url": "https://sending.dev/api/mcp",
      "headers": { "Authorization": "Bearer ${input:sending-key}" }
    }
  }
}

Client solo stdio (Cline, Windsurf, Gemini CLI)

Chi non parla HTTP remoto passa da mcp-remote, che fa da ponte: stdio da una parte, il nostro endpoint dall'altra.

{
  "mcpServers": {
    "sending": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://sending.dev/api/mcp",
        "--header", "Authorization: Bearer sk_la_tua_api_key"
      ]
    }
  }
}

Senza --header il ponte avvia il flusso OAuth nel browser al primo collegamento.

Un client qualsiasi

Se il tuo agente non è nell'elenco, i parametri sono questi e bastano: URL https://sending.dev/api/mcp, transport streamable HTTP, header Authorization: Bearer <api key o access token>. Chi implementa MCP per intero trova tutto in automatico:

Per dare all'agente REST e MCP in un colpo solo c'è il prompt pronto.

Prompt pronto per il tuo agente

Tutta la conoscenza REST + MCP in un blocco, da incollare in Cursor o Claude Code. Oppure leggi /llms-full.txt.

Verifica che funzioni

Chiedi all'agente di chiamare get_usage: è read-only, non spedisce niente e risponde con piano, quota del mese e limiti di capacità. Se torna un JSON, l'installazione è a posto.

Permessi

Con una API key i permessi sono gli scope scelti alla creazione, in API Keys.

Con il collegamento OAuth (il client apre la schermata di consenso) i permessi li scegli tu al momento dell'autorizzazione: la schermata elenca il catalogo completo, con pre-selezionato ciò che il client ha richiesto. Serve perché i client MCP non conoscono gli scope di Sending e in genere chiedono solo l'identità: senza spuntare nulla, i tool rispondono forbidden: {"need":"..."}.

Puoi cambiare i permessi di una connessione già attiva da Connessioni MCP, senza revocare e ricollegare: valgono dalla chiamata successiva.

Per creare una campagna servono campaigns:write (creazione), contacts:read (per risalire al listId della lista) ed email:send (invio).

Se qualcosa non va

SintomoCausaRimedio
Il server non compare fra i toolvoce JSON senza type: "http"aggiungi type, riavvia il client
401key revocata, o header assenterigenera la key, o completa il flusso OAuth
forbidden: {"need":"..."}permessi mancanti sul bindingConnessioni MCP, spunta l'area richiesta; non ricollegare il client
402quota del piano superatavedi get_usage e Piani
Connessione fallita subito dopo claude mcp addheader Authorization con key non validacorreggi la key, oppure toglila e usa OAuth