Serveur MCP
Le serveur MCP de Zendou permet à votre assistant IA (Claude Desktop, Claude Code, Cursor, tout client MCP) d'envoyer un email, de consulter votre solde, de relire le journal des envois et de vérifier l'état de vos domaines.
Bientôt disponible sur npm
@zendou/mcp n’est pas encore publié sur npm : les commandes ci-dessous ne fonctionneront qu’une fois le paquet disponible. Cette page décrit la configuration prévue.Qu’est-ce que le serveur MCP Zendou ?
MCP (Model Context Protocol) est un protocole qui permet à un assistant IA d’utiliser des outils externes. Le serveur MCP Zendou tourne sur votre machine, avec votre clé API. Il ne fait que traduire les demandes de l’assistant en appels à l’API publique de Zendou : toutes les règles (domaine vérifié, portée de la clé, crédits) restent appliquées par le serveur Zendou.
Il nécessite Node.js 18 ou plus. Le client MCP le lance lui-même avec npx : il n’y a rien à installer à la main.
Créer une clé API
- 1.Dans le tableau de bord, ouvrez Clés API puis Nouvelle clé.
- 2.Pour que l’assistant puisse lire le journal des envois et les domaines, cochez Autoriser la lecture. Sans cette case, la clé permet seulement d’envoyer des emails et de lire le solde.
- 3.Copiez la clé : elle n’est affichée qu’une fois.
La permission de lecture se choisit à la création et ne peut pas être ajoutée ensuite : si vous avez oublié la case, créez une nouvelle clé. Voir Clés API pour le détail.
Configuration des clients
Remplacez zd_live_VOTRE_CLE par votre clé. Une variable facultative, ZENDOU_API_URL, permet de changer l’adresse de l’API ; par défaut, le serveur utilise https://api.zendou.app. Ne la renseignez que pour l’API Zendou (voir la section Sécurité).
Formats vérifiés le 23/10/2026 aux documentations officielles.
Claude Desktop
claude_desktop_config.json se trouve à :- macOS :
~/Library/Application Support/Claude/claude_desktop_config.json - Windows :
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"zendou": {
"command": "npx",
"args": ["-y", "@zendou/mcp"],
"env": { "ZENDOU_API_KEY": "zd_live_VOTRE_CLE" }
}
}
}Quittez complètement Claude Desktop, puis relancez-le. En cas de souci, consultez les journaux mcp*.log dans ~/Library/Logs/Claude (macOS) ou %APPDATA%\Claude\logs (Windows).
Claude Code
claude mcp add --env ZENDOU_API_KEY=zd_live_VOTRE_CLE --transport stdio zendou -- npx -y @zendou/mcp
Les options de Claude Code viennent avant le nom du serveur, et -- sépare la commande du serveur. Si une autre option suit --env, elle la sépare du nom.
Pour partager la configuration d’un projet, un fichier .mcp.json à la racine, au même format mcpServers (une entrée sans type est lue comme stdio). Il accepte ${VAR} et ${VAR:-defaut} dans command, args et env : la clé y est lue dans votre environnement, ne la committez pas.
{
"mcpServers": {
"zendou": {
"command": "npx",
"args": ["-y", "@zendou/mcp"],
"env": { "ZENDOU_API_KEY": "${ZENDOU_API_KEY}" }
}
}
}Cursor
.cursor/mcp.json (dans le projet) ou ~/.cursor/mcp.json (global), avec l’interpolation ${env:NOM} :{
"mcpServers": {
"zendou": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@zendou/mcp"],
"env": { "ZENDOU_API_KEY": "${env:ZENDOU_API_KEY}" }
}
}
}Les six outils
| Outil | Ce qu’il permet | Clé requise |
|---|---|---|
| send_email | Envoie un email (from, to, subject, html ou text, replyTo, headers). | Toute clé active |
| get_balance | Lit le solde de crédits du compte. | Toute clé active |
| list_emails | Liste le journal des envois, avec filtres (status, channel, from, to, q) et pagination. | Clé avec lecture |
| get_email | Donne le détail et l'état de livraison d'un email. | Clé avec lecture |
| list_domains | Liste les domaines du compte et leur statut. | Clé avec lecture |
| get_domain | Donne le statut d'un domaine et les enregistrements DNS à créer. | Clé avec lecture |
Règles de send_email : un seul destinataire ; Nom <adresse> accepté (nom de 128 caractères au plus) ; domaine expéditeur vérifié ; html ou text requis ; headers limités à 20, parmi List-Unsubscribe, List-Unsubscribe-Post et X-* (hors X-SES-*), en ASCII imprimable.
Sécurité
- ✓La clé reste sur votre machine. Elle est lue dans l’environnement du processus et envoyée uniquement à l’API Zendou.
- ✓
ZENDOU_API_URLreçoit votre clé. Ne la renseignez que pour l’API Zendou, enhttps://seulement : le paquet refusehttp://, sauf pourlocalhostet127.0.0.1. Une adresse tierce lirait votre clé. - ✓La lecture est facultative. Elle se décide clé par clé, décochée par défaut. Une clé avec lecture qui fuit expose les destinataires et les sujets des emails de sa portée : ne l’activez que si vous en avez besoin, et préférez une clé dédiée à l’assistant.
- ✓Portée par domaine. Une clé limitée à certains domaines ne peut envoyer, ni lire, que pour ces domaines ; le reste répond comme s’il n’existait pas.
- ✓Aucune suppression ni création. Le serveur n’écrit rien d’autre que l’envoi d’un email : il ne peut ni créer ni supprimer un domaine, une clé ou un identifiant SMTP, ni recharger des crédits.
Ne committez jamais une clé
Erreurs fréquentes
| Statut | Cause | Que faire |
|---|---|---|
| 401 | Clé absente, inconnue ou révoquée. | Vérifiez ZENDOU_API_KEY dans la configuration du client MCP, puis redémarrez le client. Si la clé a été révoquée, créez-en une nouvelle. |
| 403 (lecture) | Outil de lecture appelé avec une clé créée sans la lecture. Message : « Cette clé API n'a pas l'autorisation de lecture : créez une clé avec la lecture autorisée. » | La lecture ne peut pas être ajoutée après coup : créez une nouvelle clé en cochant « Autoriser la lecture », puis remplacez la clé de la configuration. |
| 403 (hors portée) | Envoi depuis un domaine que la clé n'est pas autorisée à utiliser (code CREDENTIAL_DOMAIN_OUT_OF_SCOPE). | Utilisez une adresse d'un domaine de la portée de la clé, ou créez une clé couvrant ce domaine. En lecture, un domaine ou un email hors portée répond comme s'il n'existait pas (404). |
| 402 | Solde de crédits insuffisant pour envoyer un email. | Rechargez vos crédits depuis le tableau de bord. La lecture du solde reste possible. |
Le 403 d’une clé sans lecture renvoie :
{
"message": "Cette clé API n'a pas l'autorisation de lecture : créez une clé avec la lecture autorisée.",
"error": "Forbidden",
"statusCode": 403,
"errors": [
"Cette clé API n'a pas l'autorisation de lecture : créez une clé avec la lecture autorisée."
]
}Le 403 d’un envoi hors de la portée de la clé renvoie :
{
"message": "Cette clé API n'est autorisée que pour le domaine boutique-awa.gn.",
"error": "Forbidden",
"statusCode": 403,
"code": "CREDENTIAL_DOMAIN_OUT_OF_SCOPE",
"errors": [
"Cette clé API n'est autorisée que pour le domaine boutique-awa.gn."
]
}