Per agenti AI
Server MCP di SendHQ
Dai a un agente AI il controllo completo e sicuro di un workspace SendHQ: invia e ricevi email, verifica domini, pubblica template e indaga sulla deliverability con 59 strumenti a tipizzazione rigorosa. Scritto prima di tutto per gli agenti; gli umani sono benvenuti.
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpChe cos'è questo server
Il server MCP di SendHQ permette a un agente AI di gestire un workspace SendHQ tramite il Model Context Protocol: inviare email (singole, batch, da template, risposte, allegati, nuovi tentativi idempotenti), leggere e cercare la posta inviata e ricevuta (oggetti, corpi e nomi degli allegati) e i relativi eventi di consegna, organizzare la posta in etichette con regole di archiviazione automatica, gestire bozze e allegati privati, creare e pubblicare template ospitati, aggiungere e verificare domini e il relativo DNS, configurare la ricezione e gli indirizzi in entrata, consultare deliverability, bounce, segnalazioni di spam e soppressioni, e leggere utilizzo dell'account, stato della fatturazione, analytics e metadati delle chiavi API.
È un server stdio locale integrato nel binario della CLI sendhq. Il tuo client MCP avvia sendhq mcp come processo figlio e comunica in JSON-RPC su stdin/stdout. Ogni chiamata a uno strumento diventa una richiesta documentata all'API REST di SendHQ su https://sendhq.cc/api/v1, autenticata con la chiave API del tuo workspace: il server MCP ha quindi esattamente i permessi di quella chiave, non uno di più.
- 59 strumenti in 8 gruppi, generati da un unico catalogo pubblicato anche come tools.json.
- JSON Schema rigorosi: argomenti sconosciuti, tipi errati e campi obbligatori mancanti vengono rifiutati in locale, prima che qualcosa arrivi a SendHQ.
- Errori strutturati con un
codestabile, lostatusHTTP, unaexplanation, unremedyconcreto e l'indicazione se un nuovo tentativo può essere utile. - Ogni strumento che invia email reali o distrugge dati lo dichiara nelle prime parole della sua descrizione e riporta le annotazioni di sicurezza MCP.
- La modalità
--read-onlynasconde tutti gli strumenti che inviano o modificano dati. - Non viene registrato nulla. stdout trasporta solo messaggi di protocollo; la chiave API e il contenuto dei messaggi non finiscono mai in un log.
https://sendhq.cc/api/mcp (consultazione di prezzi e documentazione, nessun accesso all'account). Il server descritto in questa pagina è quello completo, con ambito limitato all'account; gira in locale oppure come connettore ospitato descritto più sotto.Usare SendHQ in Claude e ChatGPT
Nessuna installazione necessaria: SendHQ esegue questo server anche come connettore ospitato su https://mcp.sendhq.cc/mcp, con gli stessi strumenti. Accedi con il tuo account SendHQ invece di incollare una chiave.
Claude
- Apri Impostazioni → Connettori e cerca SendHQ nella directory, oppure scegli Aggiungi connettore personalizzato e incolla
https://mcp.sendhq.cc/mcp. - Fai clic su Connetti, accedi a SendHQ, controlla l'accesso richiesto e fai clic su Consenti.
- Chiedi a Claude di controllare la tua inbox, inviare un'email dal tuo dominio verificato o spiegarti un bounce.
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
Approvazione e disconnessione
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - Gli strumenti che inviano email reali o eliminano dati sono etichettati come tali. Se l'assistente debba chiederti conferma prima si imposta per singolo strumento nell'assistente: in Claude, scegli Richiede approvazione per quegli strumenti in Impostazioni → Connettori → SendHQ.
- Il connettore riceve una propria chiave API, con il nome dell'assistente (ad esempio “Claude (AI connector)”). Eliminala in Chiavi API per disconnetterlo immediatamente.
- Non può creare né revocare chiavi API né modificare la fatturazione. Gli allegati vengono inviati e restituiti in base64; non c'è accesso ai file locali.
- I workspace non a pagamento (prova di integrazione) possono consegnare solo all'email dell'account o a un indirizzo del simulatore di AWS SES.
Domande: postmaster@sendhq.cc. Privacy: sendhq.cc/privacy.
Installazione
Installa il binario sendhq (Linux, macOS e Windows su x86-64 e arm64). L'installer verifica il checksum della release e, per impostazione predefinita, colloca il binario in ~/.local/bin.
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorCrea una chiave API nella dashboard su https://sendhq.cc/app#/keys. Il server MCP non può creare chiavi. L'unico comando che avvia il server è:
SENDHQ_API_KEY=re_your_key sendhq mcpDi solito non lo esegui mai a mano: è il client MCP ad avviarlo. Se lo lanci in un terminale, resta in attesa di JSON-RPC su stdin.
Configura il tuo client
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyAggiungi --scope user per renderlo disponibile in tutti i progetti, oppure --scope project per scriverlo nel file .mcp.json del progetto. Per un .mcp.json condiviso, fai riferimento alla chiave tramite l'ambiente invece di committarla; Claude Code espande ${VAR} in .mcp.json.
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }Oppure da riga di comando: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.
Claude Desktop
Modifica claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) e riavvia l'app. Le app desktop non ereditano il PATH della tua shell, quindi usa il percorso assoluto del binario (which sendhq).
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}Qualsiasi altro client MCP
Configura un server stdio con il comando sendhq, gli argomenti ["mcp"] (facoltativamente "--read-only") e le variabili d'ambiente riportate sotto. Il server supporta le versioni del protocollo MCP 2024-11-05, 2025-03-26, 2025-06-18 e 2025-11-25, e implementa initialize, ping, tools/list e tools/call. I risultati degli strumenti contengono sia un blocco di testo JSON sia structuredContent.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}Non esiste un trasporto HTTP ospitato per il server con ambito limitato all'account. Un endpoint MCP remoto con permessi di scrittura richiederebbe OAuth per utente, che SendHQ non offre; il binario locale tiene la chiave sulla macchina che già la custodisce.
Ambiente e flag
| Variabile o flag | Obbligatorio | Significato |
|---|---|---|
SENDHQ_API_KEY | sì | Chiave API del workspace (re_…). Serve a tutti gli strumenti tranne get_service_health. Senza di essa il server si avvia comunque, ma ogni chiamata restituisce un auth_error strutturato che spiega come risolvere. |
SENDHQ_API_BASE_URL | no | URL di base dell'API. Predefinito: https://sendhq.cc/api/v1. Usalo solo per un deployment locale o di staging. SENDHQ_BASE_URL è accettato come alias legacy. |
SENDHQ_MCP_READ_ONLY | no | 1, true o yes equivalgono a --read-only. |
--read-only | no | Espone solo gli strumenti che non inviano email e non modificano lo stato. Anche gli strumenti nascosti vengono rifiutati se chiamati per nome. |
SENDHQ_PROFILE / --profile | no | Usa una chiave salvata da sendhq auth login nel keyring del sistema operativo invece di SENDHQ_API_KEY. Se esistono entrambe, prevale la variabile d'ambiente. |
La chiave viene inviata solo come intestazione Authorization: Bearer all'URL di base configurato. Non viene mai stampata, registrata nei log, ripetuta negli errori o inclusa nei risultati degli strumenti.
Modello di sicurezza per gli agenti
- Invia email reali.
send_email,send_batchesend_template_testconsegnano posta a persone reali e consumano crediti di consegna. Le loro descrizioni iniziano conSENDS REAL EMAIL. Chiamali solo quando l'utente ha chiesto esplicitamente di inviare quel messaggio specifico, con destinatari, mittente e contenuto confermati. - Distruttivi.
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxeremove_suppressionsono contrassegnati condestructiveHint: truee le loro descrizioni iniziano conDESTRUCTIVE. Chiedi prima conferma all'utente.remove_suppressionindebolisce un blocco di sicurezza ed è appropriato solo quando una persona conferma che l'indirizzo funziona di nuovo. - Modificano lo stato. Creare o aggiornare bozze, template, domini e inbox, pubblicare template e avviare la verifica modificano il workspace, ma non inviano posta.
- Sola lettura. Tutto il resto è
readOnlyHint: truee si può chiamare liberamente. - Questo server non modifica mai il DNS.
add_domainrestituisce i record che una persona deve pubblicare;get_domain_connect_linkrestituisce un URL di consenso che una persona deve aprire e approvare presso il proprio provider DNS. - Questo server non modifica mai la fatturazione.
get_accountlegge solo piano, utilizzo e stato dell'abbonamento. - I workspace non a pagamento (prova di integrazione) possono consegnare solo all'email del titolare dell'account (
get_account→user.email) o a un indirizzo del simulatore di AWS SES comesuccess@simulator.amazonses.com, e non possono inviare allegati. - Accettato non significa consegnato. Un invio riuscito restituisce un ID; le prove di consegna, bounce e segnalazione di spam arrivano più tardi in
list_email_events. Non affermare mai che un messaggio è arrivato in inbox o che una persona lo ha letto. - Non passare a un altro indirizzo From per aggirare una pausa
423, e non aggiungere mai di nuovo destinatari che si sono disiscritti o hanno segnalato spam.
Le chiavi API sono escluse
Per scelta progettuale non esistono strumenti che creano, modificano, ruotano, revocano o eliminano chiavi API. Un agente non deve generare né distruggere credenziali. list_api_keys restituisce solo nomi, prefissi non segreti e data dell'ultimo utilizzo. La gestione delle chiavi resta nella dashboard, in mano a una persona che ha effettuato l'accesso.
Flussi di lavoro
1. Primo invio
get_service_healthconferma che l'API è raggiungibile (funziona senza chiave).get_accountmostra il piano (access.tier), la quota residua euser.email. Durante la prova, quell'email è l'unico destinatario reale consentito.list_sending_identitieselenca gli indirizzi From che puoi usare. Se è vuoto, completa prima il flusso del dominio.- Conferma con l'utente mittente, destinatario, oggetto e corpo, poi chiama
send_emailcon unaidempotency_key. list_email_eventscon l'idrestituito mostradelivery,bounce,complaintorejectnon appena il provider lo segnala (di solito da pochi secondi a qualche minuto).
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. Verifica del dominio dall'inizio alla fine
add_domainconname: "example.com". Il risultato include i record DNS (CNAME DKIM, verifica SES, SPF, DMARC consigliato).get_dns_providercon ildomain_idrileva il provider DNS autoritativo e restituisce l'host relativo esatto da inserire per ogni record presso quel provider.- Se
providers.domainConnect.availableè true,get_domain_connect_linkrestituisce un URL di consenso. Passalo alla persona: non cambia nulla finché non approva presso il provider. Altrimenti, dai alla persona i record da pubblicare. Non pubblicare mai un secondo record SPF: unisciinclude:amazonses.comal valorev=spf1esistente. verify_domainricontrolla DNS e SES. Lo stato passa dapending,checkingepropagatingaverified. Interrogaverify_domainoget_domainogni 30–60 secondi; il DNS può richiedere da qualche minuto a qualche ora.- Quando
statusèverified, gli indirizzi del dominio compaiono inlist_sending_identities.
3. Bounce, segnalazioni di spam e soppressioni
list_blocked_recipientsrestituisce ogni indirizzo bloccato con il relativo motivo (bounce,complaint,unsubscribe) e un conteggio riassuntivo.list_suppressionsrestituisce le soppressioni per hard bounce e per segnalazione di spam;deliverability_statsfornisce i tassi di consegna, bounce e segnalazioni di spam degli ultimi 30 giorni;list_sender_reputationmostra quali indirizzi From sono rallentati o in pausa.- Un invio che contiene un destinatario soppresso fallisce con
422 recipient_suppressed. Rimuovi quel destinatario e invia di nuovo. - Chiama
remove_suppressionsolo quando una persona conferma che una casella in bounce ora funziona. Le soppressioni per segnalazione di spam sono permanenti (409 complaint_suppression_locked).
4. Ricevere email in entrata
- Il dominio (spesso un sottodominio come
inbound.example.com) deve essere verificato. setup_inboundpredispone la ricezione e restituisce un record MX, che una persona pubblica.verify_inboundfinchéstatusnon èready.create_inboxcondomain_idelocal_part(ad esempiosupport) creasupport@inbound.example.com.- Interroga periodicamente
list_emailscondirection: "in"eunread: true(facoltativamenteinbox_id). Leggi un messaggio conget_email, la sua conversazione conget_thread, gli allegati condownload_attachment, e segnalo come gestito conmark_email(read: true). - Rispondi nel thread con
send_emailereply_to_email_id; SendHQ imposta In-Reply-To, References e il thread.
5. Webhook e notifiche degli eventi
Al momento SendHQ non offre webhook configurabili dai clienti, quindi non esiste uno strumento per i webhook. Le notifiche del provider vengono elaborate all'interno di SendHQ ed esposte tramite letture. Usa invece il polling: list_email_events per l'esito di un messaggio, list_emails con status (ad esempio bounced) o after per le modifiche recenti, list_emails con direction: "in" e unread: true per la nuova posta in entrata e list_blocked_recipients per le nuove soppressioni. Non interrogare più di circa una volta al minuto per ogni domanda.
6. Diagnosticare un errore di consegna
- Trova il messaggio:
list_emailscondirection: "out"etooquery, oppureget_emailse hai l'ID.status: failedsignifica che SendHQ o il provider lo ha rifiutato all'invio; l'errore dell'email spiega il motivo. list_email_events:bounce(permanente o transitorio, con la diagnostica del provider),complaint,rejectodelivery. Se non ci sono ancora eventi, il provider non ha ancora segnalato nulla: attendi e ricontrolla.- Se è fallita la chiamata di invio stessa, leggi il
codedell'errore:sender_domain_unverified→ completa la verifica del dominio;recipient_suppressed→ l'indirizzo ha già generato un hard bounce o una segnalazione di spam;sender_paused→ controllalist_sender_reputatione correggi l'origine della lista;trial_recipient_restricted→ limiti della prova;quota_exhausted→ utilizzo inget_account. get_domaincontrolla che DKIM, SPF e DMARC siano ancora pubblicati;deliverability_statsmostra se il problema riguarda un solo messaggio o è una tendenza.- Riporta ciò che mostrano le prove. Un evento
deliverysignifica che il server del destinatario ha accettato il messaggio, non che è arrivato in inbox o è stato letto.
7. Gestire un bucket di lavoro (etichette)
create_labelconname(ad esempioAgent/Orders) eskip_inbox: true. Così l'etichetta diventa un bucket: la posta ricevuta che la ottiene viene archiviata, quindi compare solo nell'etichetta e mai nella Inbox della persona.- Invia la posta di lavoro con
send_email(osend_batch) elabels: ["Agent/Orders"]. Le risposte a quella conversazione ereditano automaticamente l'etichetta e saltano la Inbox. - Per la posta che nasce fuori dalle tue conversazioni, aggiungi una regola di archiviazione:
create_label_ruleconinbox_id(un indirizzo dedicato comeorders@…),from,toosubject. Passaapply_to_existing: trueper archiviare anche la posta già ricevuta. - Lavora sul bucket:
list_emailsconlabel: "Agent/Orders",direction: "in"eunread: true; leggi conget_emailoget_thread, rispondi consend_emailereply_to_email_id, e chiamamark_emailread: trueuna volta gestito. - Sposta un messaggio fuori posto dentro o fuori con
label_email(add/remove). Aggiungere l'etichetta di un bucket a un messaggio ricevuto lo archivia anche. - Facoltativamente,
set_inbox_forwardinginvia a un'altra casella una copia di tutto ciò che riceve un indirizzo (la destinazione conferma prima via email).
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. Allegati e template
Con un piano a pagamento, allega fino a 10 file con attachments di send_email (ognuno richiede content_base64 o un file_path locale; filename ha come valore predefinito il nome base del file). Per i template ospitati: create_template → update_template_draft → render_template per l'anteprima con dati di esempio → send_template_test (invia un test reale) → publish_template, quindi invia con send_email o send_batch usando template: {key, data} ed esattamente un destinatario to.
Risultati, paginazione ed errori
Una chiamata riuscita restituisce l'oggetto JSON dell'API come structuredContent e come blocco di testo JSON. Ogni strumento list_* accetta limit (1–200, predefinito 50) e offset, e aggiunge un oggetto pagination. Continua a chiamarlo con offset: pagination.next_offset finché has_more è true.
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}Una chiamata non riuscita restituisce isError: true con un errore strutturato. Segui remedy invece di ritentare alla cieca; ritenta solo quando retryable è true.
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}Campi di errore facoltativi: request_id (da citare al supporto), retry_after_seconds, problems (elenco delle violazioni di schema per invalid_arguments) e idempotent_replayed (vedi Idempotenza).
Idempotenza
send_email e send_batch accettano idempotency_key (massimo 200 caratteri), inviata come intestazione Idempotency-Key. Genera una chiave stabile per ogni messaggio logico, ad esempio invoice-4812-receipt.
- Un nuovo tentativo deve riutilizzare la stessa chiave E un corpo della richiesta identico. La stessa chiave con una qualsiasi modifica (destinatario, oggetto, corpo, intestazione, dati del template, perfino i valori degli argomenti) restituisce
409 idempotency_conflict. - Stessa chiave, stesso corpo, originale completato: SendHQ restituisce il risultato memorizzato senza inviare di nuovo. È così che ritenti in sicurezza dopo un timeout o un
network_error. - Stessa chiave mentre l'originale è ancora in esecuzione:
409 idempotency_in_progress, ritentabile dopo una breve attesa. - Un nuovo messaggio logico richiede una nuova chiave.
- Anche gli errori memorizzati vengono riprodotti. Se il primo tentativo è fallito, ritentare con la stessa chiave restituisce lo stesso errore con
idempotent_replayed: trueeretryable: false. Controllalist_emails(direction: out) per confermare che non sia partito nulla, correggi la causa e poi invia con una chiave nuova. - Il server non ritenta mai una POST di sua iniziativa. Solo le chiamate GET di sola lettura vengono ritentate automaticamente (fino a 3 tentativi in caso di errori di rete, 429 e 5xx).
send_emailconattachmentsinline non accetta unaidempotency_key, perché esegue più richieste. Per inviare allegati in modo sicuro rispetto ai nuovi tentativi:create_draft→upload_attachment→send_emailcondraft_ideidempotency_key.
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Limiti di frequenza e quote
SendHQ non pubblica un limite fisso di richieste al secondo (rate limit) per l'API. I limiti che un agente incontra davvero sono limiti di utilizzo, restituiti come 429:
- Consegne mensili per destinatario per piano. Ogni indirizzo To, Cc e Bcc conta come una consegna. Confronta
get_account→usage.recipientDeliveriesconusage.emailQuotaMonth. - Destinatari giornalieri per indirizzo From esatto, stabiliti dallo stato di reputazione di quel mittente (
list_sender_reputation→dailyLimit, 2.000 per impostazione predefinita sui piani a pagamento). - Prova di integrazione: 100 destinatari in totale, solo verso l'email dell'account o gli indirizzi del simulatore SES.
- Allegati: al massimo 10 file e 10 MB per messaggio; 10 GB al mese di trasferimento di allegati ponderato per destinatario sui piani a pagamento.
- Per richiesta: To + Cc + Bcc fino a 100 indirizzi;
send_batchfino a 100 messaggi. - Circuit breaker della reputazione: in una finestra mobile di 7 giorni, bounce o segnalazioni di spam sopra soglia rallentano o mettono in pausa un indirizzo From (
423 sender_paused). Si ripristina automaticamente quando i tassi scendono.
quota_exhausted non è ritentabile finché il periodo non si azzera o il piano non cambia. rate_limited è ritentabile dopo retry_after_seconds; per gli invii, ritenta con la stessa idempotency_key e un corpo identico.
Catalogo degli errori
code è stabile: basa la logica su di esso, non su message.
| code | HTTP | Ritentare? | Significato e cosa fare |
|---|---|---|---|
invalid_arguments | — | no | Gli argomenti non hanno superato in locale il JSON Schema dello strumento; nulla è arrivato a SendHQ. Correggi i campi elencati in problems. |
auth_error | 401 | no | Chiave API mancante, revocata o errata. Imposta SENDHQ_API_KEY per il processo del server; le chiavi le crea una persona nella dashboard. |
trial_recipient_restricted | 402 | no | La prova di integrazione può consegnare solo all'email dell'account o a un indirizzo del simulatore SES. Invia lì, oppure il titolare attiva un piano a pagamento. |
payment_required | 402 | no | La funzionalità richiede un piano a pagamento (ad esempio gli allegati). Invia senza, oppure passa a un piano superiore. |
sender_domain_not_owned | 403 | no | Il dominio mittente non appartiene a questo workspace. Usa list_sending_identities o add_domain. |
sender_domain_unverified | 403 | no | Il dominio mittente non è ancora verificato. get_domain, pubblica i record mancanti, verify_domain. |
domain_limit_reached | 403 | no | Raggiunto il limite di domini del piano. Rimuovi un dominio inutilizzato (con approvazione) o passa a un piano superiore. |
marketing_not_enabled | 403 | no | La classe marketing non è abilitata per questo dominio o piano. Usa transactional solo se il messaggio lo è davvero. |
forbidden | 403 | no | La policy non consente l'operazione. Modifica la richiesta. |
not_found | 404 | no | L'ID non appartiene a questo workspace. Elenca la risorsa per trovare l'ID corretto; ripristina prima i template archiviati. |
idempotency_conflict | 409 | no | Chiave riutilizzata con un corpo diverso. Reinvia l'originale esatto, oppure usa una nuova chiave per un nuovo messaggio. |
idempotency_in_progress | 409 | sì | La richiesta originale è ancora in esecuzione. Attendi, poi ritenta con la stessa chiave e lo stesso corpo. |
revision_conflict | 409 | no | La bozza del template è cambiata da quando l'hai letta. get_template, unisci le modifiche, salva di nuovo. |
complaint_suppression_locked | 409 | no | Il destinatario ha segnalato spam. Non inviargli mai più email. |
inbound_not_ready | 409 | no | La ricezione in entrata non è pronta. setup_inbound, pubblica l'MX, verify_inbound. |
conflict | 409 | no | La risorsa esiste già o è nello stato sbagliato. Leggila e adegua la richiesta. |
attachments_too_large | 413 | no | Più di 10 file o 10 MB. Rimuovi o riduci gli allegati. |
recipient_suppressed | 422 | no | Un destinatario ha già generato un hard bounce o una segnalazione di spam. Rimuovilo; vedi list_blocked_recipients. |
recipient_unsubscribed | 422 | no | Un destinatario si è disiscritto dalla posta di marketing. Rimuovilo in modo permanente. |
validation_failed | 422 | no | Contenuto rifiutato, ad esempio dati del template che violano il contratto delle variabili. Correggi l'input. |
sender_paused | 423 | no | Questo indirizzo From è in pausa per il circuit breaker di bounce/segnalazioni di spam a 7 giorni. Fermati, correggi la lista, attendi il ripristino automatico. |
quota_exhausted | 429 | no | Raggiunto il limite mensile, giornaliero per mittente, degli allegati o della prova. Controlla get_account; attendi l'azzeramento o passa a un piano superiore. |
rate_limited | 429 | sì | Rallenta; attendi retry_after_seconds. Invii: stessa chiave, stesso corpo. |
server_error | 5xx | sì | Errore temporaneo di SendHQ o del provider. Applica un backoff e ritenta; per gli invii usa la stessa chiave e lo stesso corpo. Se idempotent_replayed è true, usa una nuova chiave dopo aver confermato che non è stato inviato nulla. |
network_error | — | sì | Richiesta o risposta persa. Ritenta; per gli invii la stessa idempotency_key lo rende sicuro. |
invalid_request | 400 | no | Richiesta malformata. Leggi message e correggila. |
tool_error | — | no | Errore locale all'interno del server MCP (ad esempio un file_path illeggibile). Leggi message. |
Riferimento degli strumenti
Ogni strumento con la sua classe di sicurezza, l'endpoint REST che chiama, i parametri, la struttura della risposta e un oggetto params di esempio per tools/call. I parametri sono esatti: il server rifiuta tutto ciò che non è elencato.
Email e thread: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Etichette e regole di archiviazione automatica: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Bozze, allegati e identità mittente: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Template ospitati: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Domini e DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
Email in entrata: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Deliverability, bounce e soppressioni: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Account, utilizzo, analytics e chiavi: get_account, get_analytics, list_api_keys, get_service_health
Nessuno strumento corrisponde a questo filtro.
Email e thread
send_emailInvia un'email
SENDS REAL EMAIL. Invia un messaggio da un dominio verificato: html/testo diretto, un template ospitato pubblicato, una risposta in un thread esistente o un messaggio con allegati. Passa idempotency_key così un nuovo tentativo non può inviare due volte; un nuovo tentativo deve riutilizzare la stessa chiave E una richiesta identica, altrimenti SendHQ restituisce 409. attachments è una scorciatoia che crea una bozza, carica ogni file e invia con quella bozza; non può essere combinato con idempotency_key o draft_id (per inviare allegati in modo sicuro rispetto ai nuovi tentativi usa create_draft + upload_attachment + send_email con draft_id). I workspace non a pagamento (prova di integrazione) possono consegnare solo all'email dell'account o a un indirizzo del simulatore di AWS SES, e non possono inviare allegati.
Fornisci almeno uno tra: html, text, template.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
from | string | sì | Mittente, ad es. Acme <hello@example.com>. Il dominio deve essere verificato in questo workspace (vedi list_sending_identities). (max 998 caratteri) |
to | string[] | sì | Destinatari. Ogni voce è un indirizzo, facoltativamente con un nome visualizzato. To+cc+bcc possono essere al massimo 100 in totale; ogni destinazione consuma un credito di consegna. (1–100 elementi) |
cc | string[] | no | Destinatari in copia. (0–100 elementi) |
bcc | string[] | no | Destinatari in copia nascosta. (0–100 elementi) |
subject | string | no | Oggetto. Omettilo quando invii un template. (max 998 caratteri) |
text | string | no | Corpo in testo semplice. Fornisci text, html o template. |
html | string | no | Corpo HTML. SendHQ lo sanifica e ne ricava il testo quando text è omesso. |
reply_to | string | no | Indirizzo Reply-To. |
headers | object | no | Intestazioni personalizzate sicure aggiuntive (valori stringa), ad es. {"X-Entity-Ref-ID": "123"}. Le intestazioni di instradamento come From/To/Message-ID sono gestite da SendHQ. |
message_class | string | no | transactional (predefinito) o marketing. Marketing richiede un piano o un dominio abilitato al marketing e aggiunge la gestione delle disiscrizioni. (uno tra transactional, marketing) |
reply_to_email_id | string | no | Rispondi all'interno di una conversazione esistente: l'ID em_… del messaggio a cui rispondi. SendHQ imposta In-Reply-To/References e il thread. |
thread_id | string | no | ID esplicito del thread in cui archiviare il messaggio. |
draft_id | string | no | Invia con questo messaggio gli allegati di una bozza salvata (dr_…). La bozza viene eliminata dopo un invio riuscito. |
template | object | no | Invia un template ospitato pubblicato invece di html/testo diretto. Richiede esattamente un destinatario to e nessun cc/bcc; l'oggetto lo fornisce il template. Fornisci almeno uno tra: id, key. |
template.id | string | no | ID del template (tmpl_…). Fornisci id o key. |
template.key | string | no | Chiave del template, ad esempio account-welcome. Fornisci id o key. |
template.version_id | string | no | ID facoltativo della release pubblicata (tmplv_…). Per impostazione predefinita usa la release pubblicata corrente. |
template.data | object | no | Valori per le variabili tipizzate del template. |
labels | string[] | no | Nomi di etichetta o ID lbl_… in cui archiviare questo messaggio. I nomi sconosciuti vengono creati. Le risposte nella conversazione ereditano le etichette, e l'etichetta di un bucket (skip_inbox) tiene quelle risposte fuori dalla Inbox. Max 10. (0–10 elementi) |
idempotency_key | string | no | Intestazione Idempotency-Key (max 200 caratteri). Riutilizzala solo per ritentare esattamente questa richiesta. (max 200 caratteri) |
attachments | object[] | no | File da allegare (max 10 file, 10 MB in totale). Ognuno richiede content_base64 (più filename) o un file_path locale. (0–10 elementi) Fornisci almeno uno tra: content_base64, file_path. |
attachments[].filename | string | no | Nome del file mostrato al destinatario. Obbligatorio con content_base64; per impostazione predefinita è il nome base di file_path. (max 255 caratteri) |
attachments[].content_type | string | no | Tipo MIME, ad es. application/pdf. Predefinito: application/octet-stream. |
attachments[].content_base64 | string | no | Contenuto del file in base64 standard. |
attachments[].file_path | string | no | Percorso assoluto di un file locale leggibile dal processo del server MCP. |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchInvia un batch di email personalizzate
SENDS REAL EMAIL. Invia da 1 a 100 messaggi indipendenti in una sola richiesta (usalo per personalizzare il template per ogni destinatario). Ogni elemento ha la stessa struttura di send_email (senza attachments/idempotency_key). Gli elementi riescono o falliscono singolarmente: HTTP 207 indica un successo parziale; controlla ogni data[i].ok e data[i].error. Una sola idempotency_key copre l'intero corpo del batch.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
emails | object[] | sì | Messaggi da inviare. (1–100 elementi) Fornisci almeno uno tra: html, text, template. |
idempotency_key | string | no | Idempotency-Key per l'intero batch (max 200 caratteri). (max 200 caratteri) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsElenca e cerca le email
Elenca le email inviate (direction: out) e ricevute (direction: in), dalle più recenti, con filtri. La posta ricevuta è classificata: leggi la inbox della persona con direction: in, archived: false, category: primary; fai triage con important: true; lo spam è nascosto a meno di category: spam o include_spam: true. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
direction | string | no | in per la posta ricevuta, out per quella inviata. (uno tra in, out) |
status | string | no | Filtro di stato, ad es. queued, sent, delivered, bounced, complained, failed. |
domain | string | no | Solo i messaggi di questo dominio, o di un elenco di domini separati da virgole (corrispondenza con uno qualsiasi). |
inbox_id | string | no | Solo i messaggi ricevuti da questa inbox (inb_…). |
label | string | no | Solo i messaggi con questa etichetta: un ID lbl_… o il nome esatto, oppure un elenco separato da virgole (corrispondenza con uno qualsiasi). Usa list_labels per vedere le cartelle. |
archived | boolean | no | false = la vista Inbox (posta ricevuta non archiviata), true = solo archiviata. Omettilo per tutta la posta. |
category | string | no | primary (persone), updates (newsletter, invii massivi, automatici) o spam; oppure un elenco separato da virgole. Lo spam è nascosto se non richiesto. |
important | boolean | no | true = solo i messaggi contrassegnati come importanti (risposte a conversazioni avviate da te e mittenti segnati come importanti). |
include_spam | boolean | no | Includi lo spam nei risultati (per ricerche in tutte le cartelle). |
from | string | no | L'indirizzo del mittente contiene questo valore. |
to | string | no | L'indirizzo del destinatario contiene questo valore. |
unread | boolean | no | true = solo non letti, false = solo letti. |
after | string | no | Timestamp ISO-8601; solo i messaggi creati dopo. (date-time) |
before | string | no | Timestamp ISO-8601; solo i messaggi creati prima. (date-time) |
query | string | no | Ricerca a testo libero in oggetti, corpi, indirizzi di mittente/destinatario e nomi file degli allegati. (max 200 caratteri) |
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailRecupera un'email
Recupera un messaggio con intestazioni, corpo html/testo, stato, metadati del thread e metadati degli allegati (scarica i byte con download_attachment).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email_id | string | sì | ID dell'email (inizia con em_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailSegna come letto, archiviato, spam o importante
Aggiorna un messaggio: read, archived, category (primary, updates, spam; solo posta ricevuta) e important. Segnalare spam o contrassegnare come importante insegna a SendHQ qualcosa su quel mittente per la posta futura; passa learn: false per modificare solo questo messaggio. Passa almeno un campo.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email_id | string | sì | ID dell'email (inizia con em_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
read | boolean | no | true = letto, false = non letto. |
archived | boolean | no | true = archivia (salta la Inbox), false = riporta nella Inbox. |
category | string | no | Sposta un messaggio ricevuto in primary, updates o spam. (uno tra primary, updates, spam) |
important | boolean | no | Contrassegna o rimuovi il contrassegno di importante dal messaggio. |
learn | boolean | no | false = non memorizzare questa valutazione per il mittente (predefinito true). |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailElimina un'email
DESTRUCTIVE: elimina definitivamente da SendHQ un messaggio conservato e i suoi allegati archiviati. Non richiama un messaggio già consegnato.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email_id | string | sì | ID dell'email (inizia con em_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsElenca gli eventi di consegna di un'email
Eventi del provider per un messaggio inviato: delivery, bounce, complaint, reject, open, click. Sono le prove che dicono se un messaggio è stato consegnato o perché non lo è stato. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email_id | string | sì | ID dell'email (inizia con em_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadRecupera una conversazione
Recupera tutti i messaggi di una conversazione in ordine cronologico (inviati e ricevuti), ognuno con i metadati degli allegati.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
thread_id | string | sì | ID del thread (di solito l'ID em_… del primo messaggio; vedi threadId su qualsiasi email). (max 128 caratteri) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}Etichette e regole di archiviazione automatica
list_labelsElenca le etichette
Elenca le etichette (cartelle) del workspace con il numero totale e di non letti e le relative regole di archiviazione automatica. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelRecupera un'etichetta
Recupera un'etichetta con i conteggi e le regole di archiviazione automatica.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
label_id | string | sì | ID dell'etichetta (inizia con lbl_) o il nome esatto dell'etichetta. (max 128 caratteri) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelCrea un'etichetta
Crea un'etichetta in stile cartella. Imposta skip_inbox: true per trasformarla in un bucket di proprietà di un agente: invia con labels: [name] e le risposte vengono archiviate nell'etichetta e tenute fuori dalla Inbox. Le regole facoltative di archiviazione automatica archiviano la nuova posta inviata/ricevuta (ogni condizione di una regola deve corrispondere). Imposta apply_to_existing per archiviare anche la posta già conservata.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome dell'etichetta, ad es. Billing o Clients/Acme. Univoco per workspace (senza distinzione tra maiuscole e minuscole). (max 64 caratteri) |
color | string | no | Colore esadecimale, ad esempio #1a73e8. Facoltativo. |
skip_inbox | boolean | no | Modalità bucket: la posta ricevuta che ottiene questa etichetta (tramite una regola, rispondendo a una conversazione inviata con questa etichetta o a mano) viene archiviata, così compare solo nell'etichetta e non nella Inbox. |
rules | object[] | no | Regole facoltative di archiviazione automatica (max 20). Ognuna richiede almeno uno tra inbox_id, from, to, subject. (0–20 elementi) |
rules[].direction | string | no | Solo posta in (ricevuta) o out (inviata). Omettilo per entrambe. (uno tra in, out) |
rules[].inbox_id | string | no | Solo la posta ricevuta da questa inbox (inb_…). Archivia ogni indirizzo di ricezione nella propria cartella. |
rules[].from | string | no | Il mittente contiene questo testo (senza distinzione tra maiuscole e minuscole), ad es. @stripe.com. (max 200 caratteri) |
rules[].to | string | no | To/Cc contiene questo testo (senza distinzione tra maiuscole e minuscole). (max 200 caratteri) |
rules[].subject | string | no | L'oggetto contiene questo testo (senza distinzione tra maiuscole e minuscole). (max 200 caratteri) |
rules[].skip_inbox | boolean | no | Archivia la posta ricevuta corrispondente, così compare solo nella cartella dell'etichetta e non nella Inbox. |
apply_to_existing | boolean | no | Archivia anche la posta già conservata che corrisponde alle regole. |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelRinomina un'etichetta, cambiane il colore o rendila un bucket
Rinomina un'etichetta, cambiane il colore o attiva/disattiva la modalità bucket (skip_inbox). Attivare la modalità bucket archivia la posta ricevuta già presente nell'etichetta.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
label_id | string | sì | ID dell'etichetta (inizia con lbl_) o il nome esatto dell'etichetta. (max 128 caratteri) |
name | string | no | Nuovo nome. (max 64 caratteri) |
color | string | no | Nuovo colore esadecimale. |
skip_inbox | boolean | no | Modalità bucket: la posta ricevuta che ottiene questa etichetta (tramite una regola, rispondendo a una conversazione inviata con questa etichetta o a mano) viene archiviata, così compare solo nell'etichetta e non nella Inbox. |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelElimina un'etichetta
DESTRUCTIVE: elimina un'etichetta e le sue regole. Le email vengono mantenute; perdono solo questa etichetta.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
label_id | string | sì | ID dell'etichetta (inizia con lbl_) o il nome esatto dell'etichetta. (max 128 caratteri) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleAggiungi una regola di archiviazione automatica
Aggiungi una regola a un'etichetta, così la nuova posta corrispondente viene archiviata automaticamente. Ogni condizione impostata deve corrispondere. Usa inbox_id per dare a un indirizzo di ricezione la propria cartella; aggiungi skip_inbox per tenerla fuori dalla Inbox.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
label_id | string | sì | ID dell'etichetta (inizia con lbl_) o il nome esatto dell'etichetta. (max 128 caratteri) |
direction | string | no | Solo posta in (ricevuta) o out (inviata). Omettilo per entrambe. (uno tra in, out) |
inbox_id | string | no | Solo la posta ricevuta da questa inbox (inb_…). Archivia ogni indirizzo di ricezione nella propria cartella. |
from | string | no | Il mittente contiene questo testo (senza distinzione tra maiuscole e minuscole), ad es. @stripe.com. (max 200 caratteri) |
to | string | no | To/Cc contiene questo testo (senza distinzione tra maiuscole e minuscole). (max 200 caratteri) |
subject | string | no | L'oggetto contiene questo testo (senza distinzione tra maiuscole e minuscole). (max 200 caratteri) |
skip_inbox | boolean | no | Archivia la posta ricevuta corrispondente, così compare solo nella cartella dell'etichetta e non nella Inbox. |
apply_to_existing | boolean | no | Archivia anche la posta già conservata che corrisponde. |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleElimina una regola di archiviazione automatica
DESTRUCTIVE: rimuove una regola di archiviazione automatica. La posta già archiviata mantiene l'etichetta.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
label_id | string | sì | ID dell'etichetta (inizia con lbl_) o il nome esatto dell'etichetta. (max 128 caratteri) |
rule_id | string | sì | ID della regola (inizia con lrule_), da get_label. (max 128 caratteri) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailAggiungi o rimuovi etichette da un'email
Sposta un messaggio tra cartelle: aggiungi e/o rimuovi etichette per nome o per ID lbl_…. I nomi sconosciuti in add vengono creati, a meno che create sia false.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email_id | string | sì | ID dell'email (inizia con em_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
add | string[] | no | Etichette da aggiungere. (0–10 elementi) |
remove | string[] | no | Etichette da rimuovere. (0–10 elementi) |
create | boolean | no | Crea le etichette sconosciute in add (predefinito true). |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}Bozze, allegati e identità mittente
list_sending_identitiesElenca le identità mittente verificate
Indirizzi e domini da cui questo workspace può inviare in questo momento (domini verificati, il loro From predefinito e gli indirizzi delle inbox attive). Chiamalo prima di send_email per scegliere un from valido.
Nessun parametro.
{
"name": "list_sending_identities",
"arguments": {}
}create_draftCrea una bozza
Crea una bozza del composer. Le bozze contengono gli allegati: crea una bozza, chiama upload_attachment, poi send_email con draft_id. Non invia nulla.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
from | string | no | Indirizzo del mittente su un dominio verificato (può essere vuoto durante la stesura). |
to | string[] | no | Destinatari. (0–100 elementi) |
cc | string[] | no | Destinatari in copia. (0–100 elementi) |
bcc | string[] | no | Destinatari in copia nascosta. (0–100 elementi) |
subject | string | no | Oggetto. (max 998 caratteri) |
html | string | no | Corpo HTML. |
text | string | no | Corpo in testo semplice. |
reply_to_email_id | string | no | ID dell'email a cui risponde questa bozza. |
thread_id | string | no | ID del thread a cui appartiene questa bozza. |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsElenca le bozze
Elenca le bozze del composer, dalle aggiornate più di recente. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftRecupera una bozza
Recupera una bozza con i metadati dei suoi allegati.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
draft_id | string | sì | ID della bozza (inizia con dr_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftSostituisci il contenuto della bozza
Sostituisce contenuto e destinatari di una bozza. È una sostituzione completa: i campi omessi vengono svuotati, quindi leggi prima get_draft e invia tutti i campi che vuoi mantenere. Gli allegati non vengono toccati.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
draft_id | string | sì | ID della bozza (inizia con dr_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
from | string | no | Indirizzo del mittente su un dominio verificato (può essere vuoto durante la stesura). |
to | string[] | no | Destinatari. (0–100 elementi) |
cc | string[] | no | Destinatari in copia. (0–100 elementi) |
bcc | string[] | no | Destinatari in copia nascosta. (0–100 elementi) |
subject | string | no | Oggetto. (max 998 caratteri) |
html | string | no | Corpo HTML. |
text | string | no | Corpo in testo semplice. |
reply_to_email_id | string | no | ID dell'email a cui risponde questa bozza. |
thread_id | string | no | ID del thread a cui appartiene questa bozza. |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftScarta una bozza
DESTRUCTIVE: scarta una bozza ed elimina definitivamente i suoi allegati archiviati.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
draft_id | string | sì | ID della bozza (inizia con dr_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentCarica un allegato in una bozza
Carica un file in una bozza (max 10 file e 10 MB in totale per messaggio). Fornisci content_base64 o un file_path locale. Al momento dell'invio gli allegati richiedono un piano a pagamento.
Fornisci almeno uno tra: content_base64, file_path.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
draft_id | string | sì | ID della bozza (inizia con dr_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
filename | string | no | Nome del file mostrato al destinatario. Per impostazione predefinita è il nome base di file_path. (max 255 caratteri) |
content_type | string | no | Tipo MIME, ad es. application/pdf. Predefinito: application/octet-stream. |
content_base64 | string | no | Contenuto del file in base64 standard. |
file_path | string | no | Percorso assoluto di un file locale leggibile dal processo del server MCP. |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentScarica un allegato
Scarica un allegato privato (inviato, ricevuto o di una bozza). Restituisce il contenuto in base64, oppure scrive il file quando è impostato save_to_path (rifiuta di sovrascrivere a meno che overwrite sia true).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
attachment_id | string | sì | ID dell'allegato (inizia con att_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
save_to_path | string | no | Percorso locale assoluto facoltativo in cui scrivere il file invece di restituirlo in base64. |
overwrite | boolean | no | Consente di sostituire un file esistente in save_to_path. Predefinito: false. |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentElimina un allegato
DESTRUCTIVE: elimina definitivamente un allegato archiviato (ad esempio per togliere un file da una bozza prima dell'invio).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
attachment_id | string | sì | ID dell'allegato (inizia con att_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}Template ospitati
list_templatesElenca i template ospitati
Elenca i template email ospitati con stato di pubblicazione e utilizzo. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
lifecycle | string | no | active (predefinito), archived o all. (uno tra active, archived, all) |
query | string | no | Cerca per nome o chiave. (max 120 caratteri) |
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateCrea un template ospitato
Crea un template con una bozza modificabile, facoltativamente a partire da un modello iniziale (welcome, reset, receipt o blank). Pubblicalo prima di inviare tramite chiave.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome leggibile. (max 120 caratteri) |
key | string | no | Chiave di invio stabile: lettere minuscole, numeri e trattini; inizia con una lettera (2–64 caratteri). Se omessa, viene ricavata dal nome. |
starter | string | no | Contenuto iniziale. (uno tra blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateRecupera un template
Recupera la bozza corrente di un template (con revision), la release pubblicata attiva, lo storico delle release e l'utilizzo. Accetta ID o chiave.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID del template (tmpl_…) o chiave. (max 128 caratteri) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftSalva la bozza di un template
Salva la bozza modificabile del template con concorrenza ottimistica: passa la revision corrente ottenuta da get_template (409 significa che qualcun altro ha salvato prima; rileggi e ritenta). È una sostituzione completa del contenuto della bozza: i campi omessi vengono svuotati, quindi invia tutti i campi che vuoi mantenere. Usa i segnaposto {{variable}}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
revision | integer | sì | Revisione corrente della bozza, da get_template. (1–…) |
name | string | no | Nome del template. (max 120 caratteri) |
subject_template | string | no | Oggetto con segnaposto. (max 998 caratteri) |
preheader_template | string | no | Testo di anteprima. (max 240 caratteri) |
html_template | string | no | Corpo HTML con segnaposto. |
text_template | string | no | Corpo in testo semplice con segnaposto. |
from | string | no | Mittente predefinito per gli invii di questo template. |
reply_to | string | no | Reply-To predefinito. |
variables | object[] | no | Contratto delle variabili tipizzate. Ogni elemento: {key (minuscole/underscore), label, type: text|number|url|boolean, required (predefinito true), fallback, description}. |
variables[].key | string | sì | |
variables[].label | string | no | |
variables[].type | string | no | (uno tra text, number, url, boolean) |
variables[].required | boolean | no | |
variables[].fallback | any | no | |
variables[].description | string | no | |
sample_data | object | no | Valori di esempio usati per anteprime e test. |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftAvvia una nuova bozza dalla release pubblicata
Crea una nuova bozza modificabile copiata dalla release pubblicata corrente (409 se esiste già una bozza o se non è pubblicato nulla).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateRenderizza l'anteprima di un template
Renderizza l'output esatto del server (oggetto, html, testo) per la bozza, la release pubblicata o una versione specifica con i dati forniti. Non invia nulla. Restituisce 422 con findings quando i dati violano il contratto delle variabili.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
version_id | string | no | ID di versione facoltativo; per impostazione predefinita la bozza, poi la release pubblicata. |
data | object | no | Valori delle variabili; per impostazione predefinita i dati di esempio della versione. |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testInvia un'email di test del template
SENDS REAL EMAIL. Invia ai destinatari indicati uno snapshot della bozza (o di una versione specifica) con il prefisso [Test]. Conta ai fini dell'utilizzo; i workspace in prova possono inviare solo all'email dell'account o a un indirizzo del simulatore SES.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
to | string[] | sì | Destinatari del test. (1–100 elementi) |
from | string | no | Mittente su un dominio verificato; per impostazione predefinita il From del template. |
version_id | string | no | ID di versione facoltativo. |
data | object | no | Valori delle variabili; per impostazione predefinita i dati di esempio. |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templatePubblica una release del template
Pubblica la bozza corrente come release immutabile che verrà usata da send_email con template.key. Fallisce con 422 e i findings in caso di errori di validazione, oppure con 409 se romperebbe il contratto delle variabili attivo di un template già usato in produzione.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateArchivia un template
Blocca i nuovi invii che usano questo template (lo storico viene conservato; reversibile con restore_template). Qualsiasi integrazione che invia con questa chiave inizierà a fallire con 404.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateRipristina un template archiviato
Rende di nuovo attivo un template archiviato.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
template_id | string | sì | ID o chiave del template. (max 128 caratteri) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}Domini e DNS
list_domainsElenca i domini
Elenca i domini di invio con lo setup_status aggregato (verified | checking | pending), lo stato DNS di ogni record e lo stato della ricezione in entrata. Può essere lento: i domini non verificati vengono ricontrollati in tempo reale. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainRecupera i dettagli di configurazione del dominio
Recupera un dominio con i record DNS esatti da pubblicare (tipo, nome, valore), lo stato attuale di ogni record visto da due resolver pubblici, i dns_issues con le correzioni e lo stato della ricezione in entrata.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainAggiungi un dominio di invio
Registra per l'invio un dominio che controlli. Restituisce i record DNS (CNAME SES Easy DKIM) che il titolare deve pubblicare. Non modifica direttamente il DNS. Conta ai fini del limite di domini del piano.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome di dominio semplice, ad es. example.com o mail.example.com. (max 253 caratteri) |
default_from | string | no | Indirizzo mittente predefinito facoltativo su questo dominio. |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainVerifica un dominio
Esegue subito un controllo di verifica SES/DNS in tempo reale. Si può ripetere senza rischi; interroga ogni 30–60 s dopo le modifiche DNS (la propagazione può richiedere da qualche minuto a qualche ora). L'invio è consentito quando lo stato è verified.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainElimina un dominio
DESTRUCTIVE: rimuove il dominio dal workspace, compresa la sua route di ricezione in entrata. Gli invii da quel dominio falliscono subito dopo. Non elimina i record DNS presso il tuo provider DNS.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerRileva il provider DNS e gli host dei record
Rileva il provider DNS autoritativo del dominio e restituisce l'host relativo da inserire presso quel provider per ogni record, il record DMARC consigliato, le indicazioni per l'MX in entrata e se è disponibile la configurazione con un clic (Domain Connect).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkOttieni un link per configurare il DNS con un clic
Quando get_dns_provider riporta providers.domainConnect.available, crea un URL di consenso firmato. Passalo alla persona: lo apre e approva la modifica DNS presso il proprio provider. Non cambia nulla finché non approva. 409 se non supportato.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}Email in entrata
setup_inboundAbilita la ricezione in entrata per un dominio
Predispone la ricezione in entrata SES per un dominio verificato. Usa il dominio radice quando non ha un MX in conflitto, altrimenti inbound.<domain>. Restituisce il record MX che il titolare deve pubblicare; non modifica il DNS.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundVerifica l'MX in entrata
Ricontrolla il record MX in entrata. Lo stato diventa ready quando entrambi i resolver pubblici lo vedono.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesElenca gli indirizzi in entrata
Elenca gli indirizzi di ricezione, facoltativamente per un solo dominio. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | no | Filtro facoltativo per ID del dominio. |
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxRecupera una inbox
Recupera un indirizzo in entrata.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
inbox_id | string | sì | ID della inbox (inizia con inb_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxCrea un indirizzo in entrata
Crea un indirizzo come support@<receiving domain> su un dominio con stato di ricezione ready (esegui prima setup_inbound e verify_inbound). La posta ricevuta compare in list_emails con direction in.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
domain_id | string | sì | ID del dominio (inizia con dom_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
local_part | string | sì | Parte prima della @, ad es. support. (max 64 caratteri) |
name | string | no | Nome visualizzato facoltativo. |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxRinomina, attiva o disattiva una inbox
Rinomina una inbox o imposta il suo stato su active / disabled.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
inbox_id | string | sì | ID della inbox (inizia con inb_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
name | string | no | Nuovo nome visualizzato. |
status | string | no | Nuovo stato. (uno tra active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingInoltra una inbox a un altro indirizzo
SENDS REAL EMAIL quando inoltri a una persona diversa dal titolare dell'account: imposta dove viene inoltrata la posta ricevuta da una inbox. L'indirizzo del titolare si attiva subito; qualsiasi altro indirizzo riceve un'email di conferma e l'inoltro resta pending finché qualcuno non conferma da quell'indirizzo. Passa forward_to: null per disattivare l'inoltro. Le copie inoltrate partono dall'indirizzo della inbox con il mittente originale come Reply-To.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
inbox_id | string | sì | ID della inbox (inizia con inb_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
forward_to | string,null | sì | Indirizzo email di destinazione dell'inoltro, oppure null per disattivarlo. (max 254 caratteri) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxElimina una inbox
DESTRUCTIVE: elimina un indirizzo in entrata. La posta già ricevuta viene conservata; la nuova posta diretta all'indirizzo non viene più archiviata lì.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
inbox_id | string | sì | ID della inbox (inizia con inb_), come restituito da uno strumento di elenco o di creazione. (max 128 caratteri) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}Deliverability, bounce e soppressioni
deliverability_statsRecupera le statistiche di consegna degli ultimi 30 giorni
Totali degli ultimi 30 giorni per l'intero workspace: sent, delivery, bounce, complaint, reject, open, click e deliveryRate (%).
Nessun parametro.
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationElenca la reputazione dei mittenti
Stato della reputazione per indirizzo From esatto: active, throttled (limite giornaliero ridotto) o paused (gli invii restituiscono 423), con il motivo e il limite giornaliero. Controllalo quando gli invii falliscono con 423 o 429. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsElenca le soppressioni
Lista di soppressione del workspace: destinatari bloccati dopo un bounce permanente o una segnalazione di spam. Gli invii verso di loro falliscono con 422. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionRimuovi una soppressione per bounce
DESTRUCTIVE (indebolisce un blocco di sicurezza): rimuove una soppressione per bounce, così l'indirizzo può ricevere di nuovo posta. Fallo solo quando la persona conferma che l'indirizzo ora è valido. Le soppressioni per segnalazione di spam non possono essere rimosse (409).
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | sì | Indirizzo del destinatario soppresso. (max 320 caratteri) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsElenca i destinatari bloccati
Tutti i destinatari che SendHQ rifiuterà: bounce, segnalazioni di spam e disiscrizioni dal marketing a livello di dominio, con un riepilogo per tipo. Legge fino ai 500 più recenti. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}Account, utilizzo, analytics e chiavi
get_accountRecupera account, utilizzo e fatturazione
Email del titolare dell'account, piano/livello di accesso, consegne per destinatario usate nel periodo corrente rispetto alla quota, domini usati rispetto al limite, trasferimento di allegati, riepilogo della reputazione, stato dell'abbonamento, piani pubblicati e conteggi del workspace. Usalo per controllare la quota residua o a chi può consegnare la prova (l'email dell'account).
Nessun parametro.
{
"name": "get_account",
"arguments": {}
}get_analyticsRecupera le analytics di invio
Analytics della dashboard per gli ultimi 7, 30 o 90 giorni: totali di inviate/ricevute/consegnate/bounce/bloccate/aperte/cliccate/segnalazioni di spam, una timeline giornaliera, i principali domini di invio e gli oggetti più frequenti.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
days | integer | no | Finestra in giorni: 7, 30 (predefinito) o 90. (uno tra 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysElenca i metadati delle chiavi API
Elenca nomi, prefissi non segreti e data dell'ultimo utilizzo delle chiavi API. Sola lettura: questo server MCP non può creare, ruotare o revocare chiavi; lo fa una persona nella dashboard. Paginato: il risultato include pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
limit | integer | no | Dimensione della pagina. Predefinita: 50. (predefinito 50; 1–200) |
offset | integer | no | Numero di record da saltare. Usa pagination.next_offset della pagina precedente. (predefinito 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthControlla lo stato del servizio SendHQ
Controlla che l'API di SendHQ sia attiva e quale provider di posta è in uso. Non richiede una chiave API valida.
Nessun parametro.
{
"name": "get_service_health",
"arguments": {}
}Inventario della copertura dell'API
Ogni operazione dell'API pubblica e lo strumento che la copre. Tutto ciò che un utente può fare nella dashboard e che ha un'API è coperto; le esclusioni riportate sotto sono intenzionali.
| Endpoint | Strumento | Note |
|---|---|---|
| POST /emails | send_email | Invia un'email |
| POST /emails/batch | send_batch | Invia fino a 100 messaggi personalizzati |
| GET /emails | list_emails | Elenca le email inviate e ricevute |
| GET /emails/:id | get_email | Recupera un'email e i suoi allegati |
| PATCH /emails/:id | mark_email | Aggiorna lettura, archiviazione, spam, categoria o importanza |
| POST /emails/:id/labels | label_email | Aggiungi o rimuovi etichette da un'email |
| DELETE /emails/:id | delete_email | Elimina un'email conservata |
| GET /emails/:id/events | list_email_events | Elenca gli eventi di consegna di un'email |
| GET /threads/:id | get_thread | Recupera una conversazione in ordine cronologico |
| GET /labels | list_labels | Elenca le etichette con il numero di messaggi e le regole di archiviazione |
| POST /labels | create_label | Crea un'etichetta, facoltativamente con regole di archiviazione automatica |
| GET /labels/:id | get_label | Recupera un'etichetta per ID o per nome |
| PATCH /labels/:id | update_label | Rinomina un'etichetta, cambiane il colore o trasformala in un bucket |
| DELETE /labels/:id | delete_label | Elimina un'etichetta senza eliminarne le email |
| POST /labels/:id/rules | create_label_rule | Aggiungi una regola di archiviazione automatica a un'etichetta |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | Elimina una regola di archiviazione automatica |
| POST /drafts | create_draft | Crea una bozza del composer |
| GET /drafts | list_drafts | Elenca le bozze del composer |
| GET /drafts/:id | get_draft | Recupera una bozza e i suoi allegati |
| PUT /drafts/:id | update_draft | Sostituisci il contenuto della bozza |
| DELETE /drafts/:id | delete_draft | Scarta una bozza |
| POST /drafts/:id/attachments | upload_attachment | Carica un allegato in una bozza |
| GET /attachments/:id | download_attachment | Scarica un allegato privato |
| DELETE /attachments/:id | delete_attachment | Elimina un allegato privato |
| GET /sending-identities | list_sending_identities | Elenca le identità mittente verificate |
| GET /templates | list_templates | Elenca i template ospitati |
| POST /templates | create_template | Crea un template ospitato |
| GET /templates/:id | get_template | Recupera bozze, release e utilizzo |
| PUT /templates/:id/draft | update_template_draft | Salva automaticamente la bozza di un template |
| POST /templates/:id/draft | create_template_draft | Crea una nuova bozza dalla release pubblicata |
| POST /templates/:id/render | render_template | Renderizza l'output esatto del server |
| POST /templates/:id/test | send_template_test | Invia uno snapshot di test |
| POST /templates/:id/publish | publish_template | Pubblica una release immutabile del template |
| POST /templates/:id/archive | archive_template | Archivia un template |
| POST /templates/:id/restore | restore_template | Ripristina un template archiviato |
| POST /domains | add_domain | Aggiungi un dominio di invio |
| GET /domains | list_domains | Elenca i domini e lo stato DNS in cache |
| GET /domains/:id | get_domain | Recupera i dettagli di configurazione del dominio |
| POST /domains/:id/verify | verify_domain | Aggiorna la verifica SES e DNS |
| POST /domains/:id/inbound/setup | setup_inbound | Predisponi la ricezione in entrata SES |
| POST /domains/:id/inbound/verify | verify_inbound | Verifica l'instradamento MX in entrata |
| DELETE /domains/:id | delete_domain | Elimina un dominio |
| GET /dns/provider | get_dns_provider | Rileva il provider DNS autoritativo e gli host relativi dei record |
| GET /dns/domain-connect/connect | get_domain_connect_link | Crea un link di consenso Domain Connect per configurare il DNS con un clic |
| POST /inboxes | create_inbox | Crea un indirizzo in entrata |
| GET /inboxes | list_inboxes | Elenca gli indirizzi in entrata |
| GET /inboxes/:id | get_inbox | Recupera un indirizzo in entrata |
| PATCH /inboxes/:id | update_inbox | Rinomina, attiva o disattiva una inbox |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | Inoltra a un altro indirizzo la posta ricevuta da una inbox |
| DELETE /inboxes/:id | delete_inbox | Elimina una inbox conservandone i messaggi |
| GET /deliverability/stats | deliverability_stats | Recupera le statistiche di consegna degli ultimi 30 giorni |
| GET /deliverability/reputation | list_sender_reputation | Elenca lo stato della reputazione per identità mittente esatta |
| GET /suppressions | list_suppressions | Elenca le soppressioni del workspace |
| DELETE /suppressions/:email | remove_suppression | Rimuovi una soppressione per bounce idonea |
| GET /blocked-recipients | list_blocked_recipients | Elenca bounce, segnalazioni di spam e disiscrizioni |
| GET /account | get_account | Recupera account, utilizzo, stato della fatturazione e conteggi del workspace con una chiave API |
| GET /analytics | get_analytics | Recupera le analytics di invio della dashboard per 7, 30 o 90 giorni |
| GET /profile | get_account | Gemello di GET /account riservato alle sessioni; il server MCP legge la route con chiave API. |
| POST /billing/checkout | non esposto | Per scelta progettuale, le modifiche alla fatturazione sono disponibili solo tramite sessione e richiedono il titolare dell'account nella dashboard. Lo stato della fatturazione si può leggere con get_account. |
| POST /billing/cancel | non esposto | Per scelta progettuale, le modifiche alla fatturazione sono disponibili solo tramite sessione e richiedono il titolare dell'account nella dashboard. Lo stato della fatturazione si può leggere con get_account. |
| POST /keys | non esposto | Escluso intenzionalmente: un agente non deve generare né distruggere credenziali. Le chiavi le gestisce una persona nella dashboard. |
| GET /keys | list_api_keys | Elenca i metadati delle chiavi API |
| DELETE /keys/:id | non esposto | Escluso intenzionalmente: un agente non deve generare né distruggere credenziali. Le chiavi le gestisce una persona nella dashboard. |
Non disponibile per scelta
| Funzionalità | Endpoint | Motivo |
|---|---|---|
| Creare, ruotare, revocare o eliminare chiavi API | POST /keys, DELETE /keys/:id | Escluso intenzionalmente: un agente non deve generare né distruggere credenziali. Le chiavi le gestisce una persona nella dashboard. |
| Avviare un checkout o annullare un abbonamento | POST /billing/checkout, POST /billing/cancel | Per scelta progettuale, le modifiche alla fatturazione sono disponibili solo tramite sessione e richiedono il titolare dell'account nella dashboard. Lo stato della fatturazione si può leggere con get_account. |
| DNS con un clic di Cloudflare (OAuth) | GET /api/dns/cloudflare/connect | Richiede una sessione interattiva nel browser e il consenso OAuth di Cloudflare. Usa invece i record di get_domain, gli host di get_dns_provider o get_domain_connect_link. |
| Registrazione, accesso, disconnessione, collegamento dell'account Google | /api/auth/* | Autenticazione di una persona nel browser; il server MCP si autentica con una chiave API. |
| Modulo di contatto del supporto | POST /api/contact | Modulo pubblico del sito di marketing destinato alle persone, non un'operazione del workspace. |
Catalogo leggibile dalle macchine: /docs/mcp/tools.json (schemi, annotazioni, mappatura degli endpoint, esclusioni). Versione Markdown di questa pagina: /docs/mcp.md. Con la CLI installata, sendhq commands --format json stampa lo stesso catalogo.