Connectez n'importe quel compte e-mail, collez une URL dans un client MCP compatible OAuth et autorisez. Les clients sans OAuth utilisent plutôt une clé API. Référence complète des outils et guide de connexion ci-dessous.
Aucun SDK requis. MCPEmails parle le MCP standard via HTTP, donc il s'intègre dans tout agent compatible MCP.
Inscrivez-vous sur mcpemails.com, puis allez dans Tableau de bord → Boîtes → Connecter une boîte. Choisissez Gmail, iCloud, Fastmail ou toute boîte IMAP, puis effectuez le flux OAuth ou collez un mot de passe d'application. Votre boîte est prête en moins d'une minute.
Connecter votre boîte →Dans Tableau de bord → Clés d'API, cliquez sur « Créer une clé ». Nommez-la, sélectionnez les portées dont votre agent a besoin (read:email, search:email, send:email, manage:folders, delete:email, manage:drafts, manage:contacts, schedule:email ) et copiez la clé. Elle n'est affichée qu'une seule fois.
# Your key looks like this:
mcpe_live_AbCdEfGhIjKlMnOpQrStUvWxYz123456Choisissez l'onglet de votre client ci-dessous. Les clients MCP qui prennent en charge OAuth 2.0 (claude.ai, Claude Desktop, Cursor et autres) n'ont qu'à coller l'URL et autoriser, aucune clé API nécessaire. Les clients sans OAuth, ainsi que l'accès par script, utilisent la clé API de l'étape 02.
# OAuth-capable clients (claude.ai, Claude Desktop, Cursor…)
# No API key required. Paste the URL, click Connect, authorize.
#
# Example: claude.ai
# 1. Go to claude.ai → Customize → Connectors
# 2. Click "Add connector" and paste this URL:
#
# https://mcpemails.com/api/mcp
#
# 3. Click Connect and sign in with your mcpemails account.
# 4. Every tool your approved scopes allow is live immediately.
#
# Claude Desktop and Cursor follow the same OAuth flow when
# the server URL is configured in their MCP settings.Aucun copier-coller d'UUID de boîte. Votre agent appelle d'abord inbox_list pour découvrir chaque boîte connectée et son UUID, puis vous demandez : « Vérifie ma boîte et résume les 5 derniers messages non lus. »
# The agent calls inbox_list first, so no hardcoded UUIDs.
# System prompt (optional, for multi-inbox setups):
You have access to email via MCPEmails.
Start by calling inbox_list to discover available inboxes.Tout le trafic passe par un unique point de terminaison Streamable HTTP. Authentifiez-vous avec un jeton bearer issu de votre tableau de bord.
https://mcpemails.com/api/mcpEnvoyez un corps de requête JSON-RPC 2.0. Méthodes prises en charge : initialize, tools/list, tools/call.
structuredContentcurl -X POST https://mcpemails.com/api/mcp \
-H "Authorization: Bearer mcpe_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"clientInfo": { "name": "my-agent", "version": "1.0" },
"capabilities": {}
}
}'MCPEmails fonctionne uniquement en requête/réponse : chaque résultat provient d'un appel d'outil effectué par votre agent. Il n'y a ni webhooks, ni notifications push, ni événements initiés par le serveur : un e-mail entrant ne déclenche jamais un appel d'agent de lui-même. Pour réagir aux nouveaux messages, faites interroger votre agent périodiquement, p. ex. en appelant email_read avec action: "list" et unread_only: true à l'intervalle dont votre flux a besoin (attention aux limites de débit ci-dessus).
Ce sont des capacités adaptées à chaque fournisseur au sein de la même interface MCP compacte et basée sur les actions, et non un catalogue d’outils distinct pour chaque cas particulier.
Activez l’approbation par boîte dans le tableau de bord pour retenir les envois, réponses, transferts, envois de brouillons et envois programmés. L’agent reçoit un résultat en attente, puis un membre de l’espace de travail l’approuve ou le rejette dans le tableau de bord avant tout envoi.
Appelez inbox_list pour consulter un profil versionné de chaque boîte. Il indique si les opérations normalisées sont exactes, différentes ou indisponibles, afin que les agents puissent choisir des flux portables sans faire comme si tous les fournisseurs étaient identiques.
Lisez une pièce jointe sélectionnée sous forme de texte temporaire pour les fichiers texte pris en charge, CSV, HTML, JSON et PDF avec couche de texte, ou téléchargez l’original conservé par le fournisseur sous forme de .eml portable. L’extraction n’exécute aucun code intégré et n’applique pas d’OCR aux images.
Réutilisez une idempotency_key pour réessayer sans risque la même requête sortante pendant 24 heures. Les exécutions d’organisation en masse conservent leur statut dans le tableau de bord et acceptent les demandes d’annulation ; aucun contenu de message ni terme de recherche n’est conservé dans ces enregistrements.
Les clients qui prennent en charge les prompts MCP peuvent proposer des routines intégrées pour un tri attentif de la boîte, la revue des conversations en suspens, la préparation de brouillons de réponse, des propositions de classement et la revue des envois programmés. Les prompts n’accordent jamais de permissions et ne s’exécutent jamais tout seuls.
Créez une réponse non envoyée dans sa conversation d’origine pour relecture humaine. Les envois, réponses et transferts Gmail ne peuvent choisir qu’une identité Send As vérifiée par le fournisseur et renvoyée par inbox_list ; les autres fournisseurs utilisent leur adresse connectée.
Les clients MCP qui prennent en charge OAuth 2.0 (claude.ai, Claude Desktop, Cursor et autres) se connectent automatiquement via le code d'autorisation + PKCE. Aucune clé API, aucun fichier de configuration. Collez l'URL et cliquez sur Connecter.
https://mcpemails.com/api/mcp comme URL du serveurComment ça fonctionne en coulisses
claude.ai s'enregistre via RFC 7591 Dynamic Client Registration, donc vous ne préenregistrez jamais d'ID client.
L'autorisation utilise OAuth 2.0 Authorization Code + PKCE (RFC 7636), donc aucun secret client n'est jamais transmis.
Les jetons sont limités exactement aux autorisations que vous approuvez : read:email, search:email, send:email, manage:folders, delete:email, manage:drafts, manage:contacts, schedule:email et manage:automations.
Cibler une boîte est facultatif. Quand votre clé n'a qu'une seule boîte, chaque outil par boîte la résout automatiquement, sans avoir besoin d’inbox_id. Avec plusieurs boîtes, passez inbox_id (l'UUID renvoyé par inbox_list) ou inbox (l'adresse e-mail de la boîte). La plupart des outils prennent un argument action qui sélectionne l'opération ; les badges indiquent les portées dont chacun a besoin, et tools/list ne renvoie que les outils pour lesquels votre clé (ou jeton OAuth) est autorisée. Cliquez sur « Afficher l'exemple » pour voir une requête et une réponse complètes.
inbox_listread:emailemail_readread:emailsearch:emailemail_organizemanage:foldersemail_deletedelete:emailemail_composesend:emailfolderread:emailmanage:foldersdraftmanage:draftsscheduleschedule:emailcontact_searchmanage:contactsautomationmanage:automationssignatureread:emailsend:emailinbox_listread:emailRenvoie toutes les boîtes auxquelles la clé API ou le jeton OAuth actuel a accès. Appelez-le en premier pour découvrir les valeurs inbox_id, afin de ne jamais copier-coller d'UUID depuis le tableau de bord. Chaque résultat inclut l'adresse e-mail, le fournisseur, une marque de service facultative (icloud/yahoo/zoho/yandex/generic/fastmail) et un objet capabilities décrivant les fonctionnalités prises en charge par cette boîte.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
provider | enum | optionnel | Filtre facultatif : ne renvoie que les boîtes servies par ce fournisseur. L'un de : gmail, fastmail, imap. Omettez-le pour lister toutes les boîtes auxquelles la clé a accès. |
include_capabilities | boolean | optionnel | Si chaque boîte inclut son objet capabilities (les fonctionnalités prises en charge). Par défaut true ; mettez false pour une liste compacte ne contenant que inbox_id, adresse e-mail, nom affiché, fournisseur et marque de service. |
email_readread:emailsearch:emailLire, lister et rechercher des messages dans une boîte. Définissez action : 'list' pour des résumés de messages récents (les plus récents d'abord, avec filtrage par dossier/non lus et pagination), 'read' pour le contenu complet d'un message_id (corps texte, HTML assaini facultatif et pièces jointes), 'read_batch' pour récupérer jusqu'à 50 message_ids en un seul appel, 'search' pour des filtres structurés et indépendants du fournisseur (from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before), ou 'attachment' pour télécharger une seule pièce jointe (par attachment_index ou filename) en données base64, jusqu'à 25 Mo. En lecture seule : ne modifie jamais rien. L'action 'search' est aussi débloquée seule par la portée plus restreinte search:email. Les corps longs sont renvoyés par fenêtres : vérifiez body_truncated, puis renvoyez body_next_offset comme body_offset pour continuer.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "list" (résumés de messages récents), "read" (contenu complet d'un message_id), "read_batch" (plusieurs message_ids), "search" (filtres structurés) ou "attachment" (télécharger une pièce jointe en base64). Détermine quels autres arguments s'appliquent. |
inbox_id | string (uuid) | optionnel | UUID de la boîte à lire. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour découvrir les ID de boîte. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
message_id | string | optionnel | ID de message du fournisseur à lire (action 'read' ou 'attachment'), issu d'un list ou search précédent. |
message_ids | array[string] | optionnel | ID de message du fournisseur à lire (action 'read_batch'), issus d'un list ou search précédent. Max 50 par appel. |
folder | string | optionnel | Dossier à lister (action 'list'). Par défaut "INBOX". Autres valeurs : "SENT", "DRAFTS", "TRASH". |
unread_only | boolean | optionnel | Ne renvoyer que les messages non lus (action 'list'). Par défaut false. |
limit | integer | optionnel | Nombre max de résultats à renvoyer (action 'list' ou 'search'). Par défaut 20, max 100. |
offset | integer | optionnel | Décalage de pagination commençant à zéro (action 'list' ou 'search'). Par défaut 0. |
include_html | boolean | optionnel | Inclure le corps HTML assaini (action 'read'/'read_batch'). Par défaut false. |
include_attachments | boolean | optionnel | Inclure les données des pièces jointes en base64 (action 'read'/'read_batch'). En 'read_batch', la limite totale de 10 Mo est partagée entre tous les messages de l'appel. Par défaut false. |
mark_as_read | boolean | optionnel | Marquer le ou les messages comme lus après récupération (action 'read'/'read_batch'). Par défaut false. |
from | string | optionnel | Expéditeur à faire correspondre (action 'search') : adresse e-mail, nom affiché ou fragment (p. ex. "alice@example.com" ou "Alice"). |
to | string | optionnel | Destinataire principal (To) à faire correspondre (action 'search') : adresse e-mail, nom affiché ou fragment. |
cc | string | optionnel | Destinataire en copie (Cc) à faire correspondre (action 'search') : adresse e-mail, nom affiché ou fragment. |
subject | string | optionnel | Texte à faire correspondre dans l'objet (action 'search'). Les expressions de plusieurs mots sont prises telles quelles. |
body | string | optionnel | Texte libre à trouver dans le corps du message (action 'search'). (Sur Gmail, cela correspond à l'ensemble du message, pas seulement au corps.) |
text | string | optionnel | Texte libre à faire correspondre n'importe où dans le message, en-têtes et corps (action 'search'). |
unread | boolean | optionnel | Action 'search' : true = uniquement les messages non lus ; false = uniquement les lus ; omettez pour les deux. |
has_attachment | boolean | optionnel | Action 'search' : true = uniquement les messages avec pièce jointe. Non pris en charge sur IMAP générique (ignoré ici). |
flagged | boolean | optionnel | Action 'search' : true = uniquement les messages marqués/suivis. Non pris en charge sur Outlook/Graph (ignoré ici). |
since | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (action 'search') ; renvoie les messages reçus le/après (>=) cet instant. P. ex. "2026-06-01". |
before | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (action 'search') ; renvoie les messages reçus strictement avant (<) cet instant. |
query | string | optionnel | Chaîne de requête native du fournisseur (action 'search', solution de secours). Préférez les champs structurés ci-dessus. Combinée avec eux quand c'est pris en charge ; ignorée sur Fastmail. |
include_folders | array | optionnel | Restreindre une recherche à ces noms de dossier (action 'search'). Par défaut : rechercher dans tous les dossiers. |
email_organizemanage:foldersDéplacer, copier, marquer ou archiver des messages. Définissez action : 'move'/'move_batch' (vers un destination_folder_id), 'copy'/'copy_batch' (dupliquer dans un destination_folder_id, en laissant l'original en place ; IMAP, Outlook et Fastmail uniquement), 'flag' (définir lu/non lu/marqué via flag_action sur des message_ids), 'archive' (sortir de la boîte de réception, non destructif), ou 'search_and_move' (appliquer à chaque message correspondant à une recherche structurée, ce qui évite les ID de message obsolètes). Chaque action nécessite la portée correspondante : manage:folders pour les déplacements et les copies, send:email pour flag/archive. La suppression des messages a son propre outil email_delete.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "move", "move_batch", "copy", "copy_batch", "flag", "archive" ou "search_and_move". Détermine quels autres arguments s'appliquent et quelle portée est requise. |
inbox_id | string (uuid) | optionnel | UUID de la boîte qui contient les messages. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
message_id | string | optionnel | ID de message du fournisseur pour une action sur un seul message (move, copy, archive), issu d'un list, read ou search précédent. |
message_ids | array[string] | optionnel | ID de message du fournisseur pour une action par lot (move_batch, copy_batch, flag). Max 500 par appel. |
destination_folder_id | string | optionnel | Dossier de destination (move, move_batch, copy, copy_batch, search_and_move) : un alias canonique (inbox, sent, drafts, trash, archive, spam), un nom de dossier/libellé (p. ex. 'Receipts') ou un ID de dossier natif du fournisseur issu de l'action list de folder. Les noms et alias sont résolus automatiquement. |
flag_action | enum | optionnel | Pour l'action 'flag' : la modification à appliquer à chaque message : "read" ou "unread" pour définir le statut de lecture, ou "flag"/"unflag" pour ajouter ou retirer une étoile/un indicateur de suivi. |
from | string | optionnel | Expéditeur à faire correspondre (search_and_move) : adresse e-mail, nom affiché ou fragment. |
to | string | optionnel | Destinataire principal (To) à faire correspondre (search_and_move) : adresse e-mail, nom affiché ou fragment. |
cc | string | optionnel | Destinataire en copie (Cc) à faire correspondre (search_and_move) : adresse e-mail, nom affiché ou fragment. |
subject | string | optionnel | Texte à faire correspondre dans l'objet (search_and_move). |
body | string | optionnel | Texte libre à trouver dans le corps du message (search_and_move). (Sur Gmail, cela correspond à l'ensemble du message.) |
text | string | optionnel | Texte libre à faire correspondre n'importe où dans le message, en-têtes et corps (search_and_move). |
unread | boolean | optionnel | Actions de recherche : true = uniquement non lus ; false = uniquement lus ; omettez pour les deux. |
has_attachment | boolean | optionnel | Actions de recherche : true = uniquement les messages avec pièce jointe. Non pris en charge sur IMAP générique (ignoré ici). |
flagged | boolean | optionnel | Actions de recherche : true = uniquement les messages marqués/suivis. Non pris en charge sur Outlook/Graph (ignoré ici). |
since | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (actions de recherche) ; correspond aux messages reçus le/après (>=) cet instant. |
before | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (actions de recherche) ; correspond aux messages reçus strictement avant (<) cet instant. |
query | string | optionnel | Chaîne de requête native du fournisseur (actions de recherche, solution de secours). Préférez les champs structurés ci-dessus. Ignorée sur Fastmail. |
include_folders | array | optionnel | Restreindre la recherche à ces noms de dossier (actions de recherche). Par défaut : tous les dossiers. |
limit | integer | optionnel | Pour search_and_move : nombre maximal de correspondances à traiter. Par défaut 500, max 500. |
email_deletedelete:emailSupprimer des messages, dans son propre outil, distinct d'email_organize, car la suppression est destructive. Définissez action : 'delete'/'delete_batch' (Corbeille par défaut, ou permanent), ou 'search_and_delete' (supprimer chaque message correspondant à une recherche structurée, ce qui évite les ID de message obsolètes). Les suppressions vont à la Corbeille sauf si vous passez permanent : true, ce qui est irréversible. Chaque action nécessite la portée delete:email, et l'outil entier est signalé comme destructif à votre client MCP, qui gère la confirmation de l'utilisateur avant toute suppression.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "delete", "delete_batch" ou "search_and_delete". Détermine quels autres arguments s'appliquent. |
inbox_id | string (uuid) | optionnel | UUID de la boîte qui contient les messages. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
message_id | string | optionnel | ID de message du fournisseur pour une suppression unique (action 'delete'), issu d'un list, read ou search précédent. |
message_ids | array[string] | optionnel | ID de message du fournisseur pour une suppression par lot (action 'delete_batch'). Max 500 par appel. |
permanent | boolean | optionnel | Si true, suppression définitive (contourne la Corbeille ; peut être irréversible) ; si false ou omis, déplacement vers la Corbeille. La suppression définitive est disponible sur IMAP et Fastmail ; Gmail et Outlook ne prennent en charge que la corbeille. Par défaut false. |
from | string | optionnel | Expéditeur à faire correspondre (search_and_delete) : adresse e-mail, nom affiché ou fragment. |
to | string | optionnel | Destinataire principal (To) à faire correspondre (search_and_delete) : adresse e-mail, nom affiché ou fragment. |
cc | string | optionnel | Destinataire en copie (Cc) à faire correspondre (search_and_delete) : adresse e-mail, nom affiché ou fragment. |
subject | string | optionnel | Texte à faire correspondre dans l'objet (search_and_delete). |
body | string | optionnel | Texte libre à trouver dans le corps du message (search_and_delete). (Sur Gmail, cela correspond à l'ensemble du message.) |
text | string | optionnel | Texte libre à faire correspondre n'importe où dans le message, en-têtes et corps (search_and_delete). |
unread | boolean | optionnel | Action de recherche : true = uniquement non lus ; false = uniquement lus ; omettez pour les deux. |
has_attachment | boolean | optionnel | Action de recherche : true = uniquement les messages avec pièce jointe. Non pris en charge sur IMAP générique (ignoré ici). |
flagged | boolean | optionnel | Action de recherche : true = uniquement les messages marqués/suivis. Non pris en charge sur Outlook/Graph (ignoré ici). |
since | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (action de recherche) ; correspond aux messages reçus le/après (>=) cet instant. |
before | string (ISO date) | optionnel | Date ou date-heure ISO 8601 (action de recherche) ; correspond aux messages reçus strictement avant (<) cet instant. |
query | string | optionnel | Chaîne de requête native du fournisseur (action de recherche, solution de secours). Préférez les champs structurés ci-dessus. Ignorée sur Fastmail. |
include_folders | array | optionnel | Restreindre la recherche à ces noms de dossier (action de recherche). Par défaut : tous les dossiers. |
limit | integer | optionnel | Pour search_and_delete : nombre maximal de correspondances à traiter. Par défaut 500, max 500. |
email_composesend:emailEnvoyer un nouveau message ou répondre à des messages existants. Définissez action : 'send' pour un nouvel e-mail (to/subject/body, éventuellement cc/bcc/html_body/reply_to/attachments), 'reply' pour répondre à un message_id (les en-têtes de fil sont définis automatiquement ; éventuellement reply_all), ou 'forward' pour transférer un message_id à de nouveaux destinataires (en réattachant éventuellement les fichiers d'origine). La signature de la boîte est ajoutée automatiquement : sur les réponses et les transferts, elle se place après votre texte et avant le bloc cité, selon le mode de réponse de la signature ; passez include_signature: false pour la supprimer sur un message court ponctuel. Les trois sont irréversibles une fois envoyées.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "send", "reply" ou "forward". Détermine quels autres arguments s'appliquent. |
inbox_id | string (uuid) | optionnel | UUID de la boîte depuis laquelle envoyer. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
message_id | string | optionnel | ID de message du fournisseur du message d'origine (action 'reply' ou 'forward'), issu d'un list, read ou search précédent. |
to | array[string] | optionnel | Adresses e-mail des destinataires (requis pour 'send' et 'forward'). Max 50. |
subject | string | optionnel | Objet de l'e-mail (action 'send'). Max 998 caractères. En reply/forward, il est dérivé de l'original. |
body | string | optionnel | Corps en texte brut. Pour 'reply', c'est votre réponse ; pour 'forward', une note facultative ajoutée au-dessus du message transféré. |
cc | array[string] | optionnel | Destinataires en copie (send, forward). Par défaut []. |
bcc | array[string] | optionnel | Destinataires en copie cachée (send, forward). Par défaut []. |
html_body | string | optionnel | Version HTML du corps (multipart/alternative). L'appelant est responsable d'un HTML sûr. |
reply_to | string | optionnel | Adresse de l'en-tête Reply-To (action 'send'). |
reply_all | boolean | optionnel | Répondre à tous les destinataires d'origine, To + Cc (action 'reply'). Par défaut false. |
include_attachments | boolean | optionnel | Réattacher les pièces jointes du message d'origine (action 'forward'). Les fichiers dépassant le budget de 10 Mo sont omis. Par défaut false. |
include_signature | boolean | optionnel | Indique s'il faut ajouter la signature configurée de la boîte à ce message. Par défaut true ; mettez false pour envoyer ce seul message sans la signature. |
attachments | array | optionnel | Pièces jointes. Chaque élément : { filename, mime_type, data (base64) }. Max 20 éléments, 10 Mo au total. |
idempotency_key | string | optionnel | Clé opaque facultative (1–200 caractères) pour une seule requête sortante logique. Ne la réutilisez que pour réessayer exactement la même action avec les mêmes arguments dans les 24 heures ; une réutilisation avec des arguments différents est rejetée. |
folderread:emailmanage:foldersGérer les dossiers de la boîte (libellés sur Gmail). Définissez action : 'list' (chaque dossier avec son ID natif du fournisseur, son nom affiché, son type et ses nombres de messages : utilisez les ID comme argument folder lors du listage et comme destination de déplacement), 'create' (name), 'rename' (folder_id, new_name) ou 'delete' (folder_id, irréversible ; les messages qu'il contient peuvent être perdus selon le fournisseur). 'list' nécessite read:email ; create/rename/delete nécessitent manage:folders, et delete est signalé comme destructif à votre client MCP.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "list", "create", "rename" ou "delete". Détermine quels autres arguments s'appliquent et quelle portée est requise. |
inbox_id | string (uuid) | optionnel | UUID de la boîte dont les dossiers sont gérés. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
name | string | optionnel | Nom du nouveau dossier ou libellé (action 'create'). 1–255 caractères. |
folder_id | string | optionnel | ID de dossier/libellé natif du fournisseur (action 'rename' ou 'delete'), issu de l'action list de folder. |
new_name | string | optionnel | Nouveau nom affiché (action 'rename'). 1–255 caractères. |
draftmanage:draftsGérer les brouillons dans le dossier Drafts de la boîte. Définissez action : 'list' (brouillons enregistrés, chacun avec son draft_id, son objet, ses destinataires et sa date de création), 'create' (subject/body requis, éventuellement to/cc/bcc/html_body), 'update' (draft_id plus les champs à écraser) ou 'send' (draft_id, supprime le brouillon et l'envoie, irréversible). La signature de la boîte est intégrée à la création ou à la mise à jour du brouillon, elle est donc déjà présente dans le dossier Drafts et n'est pas réajoutée à l'envoi ; passez include_signature: false pour créer un brouillon sans elle. Sur les boîtes basées sur IMAP, un draft_id change à chaque mise à jour, utilisez donc toujours le plus récent ; Gmail et Outlook conservent un draft_id stable.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "list", "create", "reply", "update" ou "send". Détermine quels autres arguments s'appliquent. |
inbox_id | string (uuid) | optionnel | UUID de la boîte qui contient les brouillons. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
draft_id | string | optionnel | ID de brouillon du fournisseur (action 'update' ou 'send'), issu de l'action create, update ou list la plus récente. Sur les boîtes IMAP, il change après chaque mise à jour, utilisez donc toujours le plus récent. |
subject | string | optionnel | Objet du brouillon (action 'create'/'update'). |
body | string | optionnel | Corps en texte brut du brouillon (action 'create'/'update'). |
to | array[string] | optionnel | Adresses des destinataires (action 'create'/'update'). Par défaut []. |
cc | array[string] | optionnel | Destinataires en copie (action 'create'/'update'). Par défaut []. |
bcc | array[string] | optionnel | Destinataires en copie cachée (action 'create'/'update'). Par défaut []. |
html_body | string | optionnel | Corps HTML facultatif (action 'create'/'update'). |
include_signature | boolean | optionnel | Indique s'il faut intégrer la signature configurée de la boîte au brouillon (action 'create'/'update'). Par défaut true ; mettez false pour enregistrer un brouillon sans la signature. |
idempotency_key | string | optionnel | Clé opaque facultative (1–200 caractères) pour un seul envoi de brouillon. Ne la réutilisez que pour réessayer exactement le même envoi dans les 24 heures ; une réutilisation avec des arguments différents est rejetée. |
limit | integer | optionnel | Nombre maximal de brouillons à renvoyer (action 'list'). Par défaut 20, max 50. |
scheduleschedule:emailProgrammer un e-mail pour une livraison ultérieure via une file d'attente côté serveur. Définissez action : 'create' (to/subject/body plus un horodatage send_at au format ISO 8601 : les destinataires et le corps sont validés immédiatement, et les envois invalides ne sont pas mis en file), 'list' (envois programmés en attente, les plus proches d'abord, éventuellement filtrés par boîte) ou 'cancel' (scheduled_send_id, seuls les envois encore 'pending' peuvent être annulés). Le distributeur s'exécute chaque minute, la livraison peut donc avoir lieu jusqu'à 60 secondes après send_at.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "create", "list" ou "cancel". Détermine quels autres arguments s'appliquent. |
inbox_id | string (uuid) | optionnel | UUID de la boîte depuis laquelle envoyer (action 'create') ou par laquelle filtrer (action 'list'). Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
to | array[string] | optionnel | Adresses e-mail des destinataires (action 'create'). Max 50. |
subject | string | optionnel | Objet de l'e-mail (action 'create'). Max 998 caractères. |
body | string | optionnel | Corps en texte brut de l'e-mail (action 'create'). |
send_at | string (ISO 8601) | optionnel | Date-heure ISO 8601 avec fuseau horaire à laquelle envoyer (action 'create'). Doit être dans le futur, p. ex. "2026-06-02T09:00:00Z". |
cc | array[string] | optionnel | Destinataires en copie (action 'create'). Par défaut []. |
bcc | array[string] | optionnel | Destinataires en copie cachée (action 'create'). Par défaut []. |
html_body | string | optionnel | Version HTML facultative du corps (action 'create'). |
reply_to | string | optionnel | Adresse facultative de l'en-tête Reply-To (action 'create'). |
attachments | array | optionnel | Pièces jointes (action 'create'). Même schéma que l'action send. Max 20 éléments, 10 Mo au total. |
scheduled_send_id | string (uuid) | optionnel | UUID de l'envoi programmé à annuler (action 'cancel'). |
idempotency_key | string | optionnel | Clé opaque facultative pour la création d’un seul envoi programmé. Ne la réutilisez que pour réessayer exactement la même requête de création dans les 24 heures. |
limit | integer | optionnel | Nombre maximal de résultats (action 'list'). Par défaut 20, max 100. |
contact_searchmanage:contactsTrouvez des correspondants par nom ou e-mail grâce à une analyse en direct de votre boîte : il n'y a pas de liste de contacts stockée. Chaque appel analyse une fenêtre récente de courrier correspondant et renvoie les personnes qui correspondent, triées par contact le plus récent, chacune avec son nom affiché, son e-mail, le nombre de messages correspondants et l'horodatage du dernier contact. Les nombres reflètent les messages correspondants dans cette fenêtre, pas tout votre historique, et rien n'est stocké entre les appels.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
query | string | requis | Fragment de nom ou d'e-mail, comparé sans tenir compte de la casse au nom affiché et à l'adresse. Au moins 1 caractère. |
inbox_id | string (uuid) | optionnel | Facultatif. Restreindre l'analyse en direct à une seule boîte. Omettez-le pour analyser les boîtes auxquelles la clé a accès (un nombre limité). |
inbox | string | optionnel | Adresse e-mail de la boîte à laquelle se restreindre, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
limit | integer | optionnel | Nombre maximal de contacts à renvoyer. Par défaut 20, max 50. |
automationmanage:automationsCréez et gérez des règles de tri planifiées et sans surveillance. Une règle est une recherche enregistrée plus une action fixe, réévaluée à une cadence fixe et sans aucun modèle dans la boucle : le courrier est mis en correspondance, jamais interprété. Définissez action : 'create' (name, filter, rule_action et interval_minutes ; une règle est toujours créée désactivée), 'list', 'get', 'update', 'enable', 'disable', 'delete' (l'historique des exécutions est conservé), 'runs' (compteurs des exécutions récentes) ou 'preview' (une simulation qui indique ce que le filtre trouve à l'instant et n'applique rien). Les actions de règle disponibles sont move, label (un libellé Gmail, une catégorie Outlook ou un mot-clé IMAP), mark_read, forward et draft_reply. Supprimer du courrier n'est pas proposé à une automatisation. Un transfert est toujours retenu pour approbation humaine, quel que soit le réglage d'approbation de la boîte, et draft_reply se contente d'écrire un brouillon. Prévisualisez avant d'activer. Chaque action exige manage:automations.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Opération à effectuer : « create », « list », « get », « update », « enable », « disable », « delete », « runs » ou « preview ». Détermine quels autres arguments s'appliquent. |
automation_id | string (uuid) | optionnel | UUID de la règle visée, tel que renvoyé par 'create' ou 'list'. Obligatoire pour get, update, enable, disable, delete et runs. Facultatif pour preview : passez-le pour simuler une règle enregistrée plutôt qu'un filtre improvisé. |
inbox_id | string (uuid) | optionnel | UUID de la boîte surveillée par la règle ('create'), ou de la boîte à prévisualiser. Facultatif quand la clé ne couvre qu'une boîte ; sinon passez ce champ ou inbox. |
inbox | string | optionnel | Adresse e-mail de la boîte, alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
name | string | optionnel | Nom lisible de la règle, de 1 à 80 caractères. Obligatoire pour 'create'. |
filter | object | optionnel | La recherche enregistrée, avec les mêmes critères structurés que ceux acceptés par l'action 'search' d'email_read : from, to, cc, subject, body, text, unread, has_attachment, flagged, since, before. Au moins un critère est exigé, car un filtre vide correspondrait à toute votre boîte. Les requêtes natives du fournisseur en texte brut ne sont pas acceptées ici : une règle se réexécute sans surveillance pendant des mois, et une chaîne brute est un dialecte que rien ne valide. |
rule_action | object | optionnel | L'unique action fixe appliquée à chaque correspondance, sous forme d'objet typé dont le type vaut move (plus folder), label (plus label ; écrit comme un libellé Gmail, une catégorie Outlook ou un mot-clé IMAP), mark_read, forward (plus to, et un note facultatif) ou draft_reply (plus template). Il s'appelle rule_action parce que action sélectionne déjà l'opération. Aucune action de suppression n'existe, et une telle demande est refusée et non ignorée. Un transfert est toujours retenu pour approbation, et draft_reply écrit seulement un brouillon. Un modèle ne substitue que {{sender_name}}, {{sender_email}}, {{subject}} et {{date}}, chacun échappé en HTML ; tout le reste est du texte littéral et le corps des messages n'est jamais interpolé. |
interval_minutes | enum | optionnel | Minutes entre deux exécutions, dans l'échelle fixe 15, 30, 60, 180, 360, 720 ou 1440. Obligatoire pour 'create'. Une échelle plutôt qu'un entier libre, pour qu'une règle d'une minute ne pousse pas le fournisseur à limiter le débit. |
max_messages_per_run | integer | optionnel | Nombre de messages correspondants qu'une exécution peut traiter : de 1 à 200, 25 par défaut. C'est le rayon d'impact : il plafonne la quantité de courrier qu'un filtre mal réglé peut toucher avant qu'une personne ne lise le journal d'exécution. |
limit | integer | optionnel | Pour l'action 'runs' : nombre d'exécutions à renvoyer, de la plus récente à la plus ancienne. Par défaut 20, maximum 100. |
signatureread:emailsend:emailLire ou configurer la signature e-mail de la boîte, qui est ajoutée côté serveur à chaque envoi, réponse, transfert, brouillon et message programmé. Définissez action : 'get' (renvoie le texte et le HTML de la signature actuelle, si elle est activée, le mode de réponse/transfert et sa source, 'manual', 'gmail_import' ou null) ou 'set' (écrire signature_text et/ou signature_html, et éventuellement signature_enabled et signature_reply_mode). Les signatures prennent en charge le HTML enrichi : gras, italique, titres, listes, couleurs, alignement, liens et images/logos hébergés référencés par des URL https, de sorte qu'un agent peut définir une signature entièrement mise en forme en passant signature_html. Le même éditeur enrichi est disponible dans le tableau de bord. Définir une signature marque sa source comme 'manual', ce qui remplace définitivement l'import automatique de Gmail pour cette boîte. 'get' nécessite read:email ; 'set' nécessite send:email.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
action | enum | requis | Quelle opération effectuer : "get" (lire la signature actuelle) ou "set" (l'écrire). Détermine quels autres arguments s'appliquent et quelle portée est requise. |
inbox_id | string (uuid) | optionnel | UUID de la boîte dont la signature est lue ou définie. Facultatif : résolu automatiquement quand la clé n'a qu'une seule boîte ; sinon passez celui-ci ou inbox. Appelez inbox_list pour obtenir les ID de boîte disponibles. |
inbox | string | optionnel | Adresse e-mail de la boîte à utiliser, comme alternative pratique à inbox_id. Facultatif ; ignoré si inbox_id est fourni. |
signature_text | string | optionnel | Corps de signature en texte brut (action 'set'). Omettez-le pour ne rien changer ; passez une chaîne vide pour l'effacer. Si seul le texte est fourni, une version HTML est dérivée automatiquement à l'envoi. |
signature_html | string | optionnel | Corps de signature en HTML enrichi facultatif (action 'set'). Accepte la mise en forme (gras, italique, souligné, titres, listes, couleurs, alignement, liens) et des images hébergées via des balises <img> dont le src est une URL https (pas de base64 ni de CID) ; il est nettoyé à l'enregistrement. Omettez-le pour ne rien changer ; passez une chaîne vide pour l'effacer. |
signature_enabled | boolean | optionnel | Indique si la signature est ajoutée au courrier sortant (action 'set'). Par défaut true ; mettez false pour cesser de l'ajouter sans supprimer le texte. |
signature_reply_mode | enum | optionnel | Quand inclure la signature dans les réponses et les transferts (action 'set') : "always" (chaque réponse/transfert), "first_only" (par défaut, uniquement le premier message d'un fil, pour éviter la double signature) ou "never". |
Une automatisation touche votre boîte selon un calendrier, sans personne pour regarder. Ce n'est pas la même catégorie de risque qu'un agent avec lequel vous discutez, aussi les garanties ci-dessous sont-elles appliquées par le serveur plutôt que confiées à la règle que vous écrivez.
Une règle est une requête enregistrée plus une action fixe. À l'exécution, le serveur lance cette requête sur votre boîte et applique cette action aux correspondances. Rien ne lit votre courrier pour décider ensuite quoi en faire. Le contenu des e-mails est mis en correspondance, jamais interprété comme une instruction : l'injection de prompt est donc structurellement absente du chemin sans surveillance, et non simplement filtrée, notée ou atténuée. Il n'y a rien dans la boucle à qui un texte injecté puisse parler.
Cela mérite d'être dit clairement, car la forme dangereuse dans cette catégorie est un agent qui lit du courrier entrant non fiable puis agit dessus sans aucun humain présent. Des incidents publics, comme EchoLeak et le serveur MCP Postmark porteur d'une porte dérobée, ont légitimement rendu les acheteurs méfiants envers exactement cela. En session interactive, un modèle lit bien votre courrier, ce qui est tout l'intérêt du produit, et là une personne est présente et le contenu est marqué comme donnée non fiable. Le chemin planifié est celui qui s'exécute seul, et il ne contient aucun modèle.
La suppression n'est pas une action disponible, par conception. Déplacer, libeller, marquer comme lu, transférer et rédiger un brouillon de réponse forment l'ensemble complet. La suppression est la seule action qu'une règle défaillante rend irréversible : elle est donc exclue au niveau de la validation, où une action qui ne fait que nommer la suppression est refusée plutôt qu'ignorée en silence.
Un transfert issu d'une automatisation est placé dans la file d'approbation et ne quitte votre boîte qu'après validation par un membre de l'espace de travail, quel que soit le réglage d'approbation d'envoi de la boîte. Le nombre de destinataires est plafonné par règle. Une règle sans surveillance ne peut pas sortir du courrier de votre organisation toute seule.
Une règle draft_reply écrit un brouillon non envoyé dans la conversation d'origine, et s'arrête là. Rien n'est envoyé sans surveillance, chez aucun fournisseur, sous aucune configuration.
Un modèle de réponse est stocké tel quel et n'est jamais évalué. Seuls {{sender_name}}, {{sender_email}}, {{subject}} et {{date}} sont substitués, chacun échappé en HTML. Le corps des messages n'est jamais interpolé et il n'existe aucune syntaxe d'expression à évaluer : rien de ce qui arrive dans votre boîte ne peut transformer un modèle en calcul.
Chaque exécution consigne ce que le filtre a trouvé, ce qui est arrivé à chaque message et ce qui a été mis en attente d'approbation, avec les compteurs de correspondances, traités, réussis, échoués et ignorés. Les actions réversibles conservent l'état nécessaire pour les annuler. L'historique survit à la règle à laquelle il appartient, car il est le compte rendu de ce qui a été fait à votre boîte. Consultez-le avec l'action 'runs' ou dans le tableau de bord.
Chaque règle s'exécute au nom de la clé d'API qui l'a créée. Elle ne peut jamais dépasser les portées ni l'accès aux boîtes dont cette clé dispose déjà, chacune de ses actions est comptabilisée, soumise aux limites de débit et écrite dans le journal d'audit exactement comme un appel interactif, et révoquer la clé arrête la règle.
Après 5 exécutions en échec consécutives, la règle est désactivée automatiquement et le motif est consigné. Une règle pointée sur une boîte qui ne répond plus s'arrête, au lieu de réessayer toutes les 15 minutes indéfiniment.
Chaque règle porte un nombre maximal de messages qu'une exécution peut traiter, de 1 à 200 et 25 par défaut : un filtre plus large que prévu touche au plus ce nombre de messages avant que vous ne voyiez le journal. Une règle est en outre créée désactivée, et la prévisualisation est une simulation qui montre ce que le filtre trouve à l'instant sans rien appliquer.
Les échecs d'authentification, de portée et de limite de débit renvoient un objet error JSON-RPC avec un code numérique. Les échecs d'exécution d'outil (boîte introuvable, erreur du fournisseur, plafond d'usage équitable atteint, etc.) renvoient un result normal avec isError: true et un message lisible dans content[0].text.
| Code | Type | Quand cela survient | Réessayable |
|---|---|---|---|
-32001 | JSON-RPC error | Clé API manquante, mal formée, révoquée ou expirée. Également renvoyé lorsque la clé API n'a pas la portée requise pour l'outil appelé. | Non |
-32601 | JSON-RPC error | Méthode JSON-RPC inconnue (par ex. appel d'une méthode autre qu'initialize, tools/list, tools/call) | Non |
-32602 | JSON-RPC error | Nom d'outil inconnu, ou paramètre manquant / invalide dans tools/call | Non |
-32003 | JSON-RPC error | Limite de débit par clé ou par espace de travail dépassée (HTTP 429). data.error_code vaut toujours « rate_limit_exceeded ». Attendez data.retry_after secondes, ou lisez l'en-tête Retry-After, avant de réessayer. | |
isError: true | Tool result | L'outil s'est exécuté mais a rencontré une erreur (boîte introuvable, message introuvable, échec d'authentification du fournisseur, destinataire invalide, pièce jointe trop volumineuse, fournisseur 5xx). La description de l'erreur se trouve dans content[0].text. | Non |
isError: true | Tool result | L'espace de travail a atteint son plafond d'usage équitable sur les actions facturables pour la période de facturation en cours. Renvoyé comme un résultat d'outil normal avec isError: true, et non comme une erreur JSON-RPC, les détails se trouvant sous _meta["com.mcpemails/usage_limit"] : error_code « usage_limit_reached » et reset_at. Réessayer ne peut pas réussir avant reset_at. | Non |
// Tool execution error: inbox not found
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "Inbox not found or not accessible." }],
"isError": true
}
}
// Rate limit: JSON-RPC error object with data (HTTP 429). Safe to retry
// after retry_after seconds.
{
"jsonrpc": "2.0",
"id": 3,
"error": {
"code": -32003,
"message": "Rate limit exceeded",
"data": {
"error_code": "rate_limit_exceeded",
"window": "per_minute",
"limit": 100,
"used": 100,
"retry_after": 34
}
}
}
// Fair-use ceiling: a normal tool result (HTTP 200) with isError: true.
// NOT a JSON-RPC error, and NOT retryable until reset_at.
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [{
"type": "text",
"text": "Usage limit reached for this workspace. Calls resume at reset_at."
}],
"isError": true,
"_meta": {
"com.mcpemails/usage_limit": {
"error_code": "usage_limit_reached",
"reset_at": "2026-09-01T00:00:00.000Z",
"dashboard_url": "https://mcpemails.com/dashboard/usage"
}
}
}
}Appliqué par clé API quelle que soit la formule. En cas de dépassement, le serveur renvoie HTTP 429 avec le code d'erreur JSON-RPC -32003, data.error_code: "rate_limit_exceeded" et un champ data.retry_after (secondes). Respectez cette valeur avant de réessayer : il s'agit d'une courte pause réessayable.
Une limite de pointe d'usage équitable par espace de travail, agrégée sur toutes vos clés API. En cas de dépassement, les appels renvoient le code d'erreur -32003 avec data.error_code: "rate_limit_exceeded", data.window: "per_minute" et un compte à rebours data.retry_after (secondes). Personal, Pro et Team relèvent le plafond.
Chaque espace de travail dispose d'un plafond d'usage équitable sur les actions facturables par période de facturation. Il se situe très au-dessus de l'usage réel et ne s'achète pas, mais un agent emballé peut l'atteindre. L'atteindre n'est pas une erreur JSON-RPC : l'appel renvoie HTTP 200 avec un résultat d'outil normal portant isError: true et un bloc _meta["com.mcpemails/usage_limit"] contenant error_code: "usage_limit_reached" et reset_at. Il n'y a pas de retry_after, car réessayer ne peut pas réussir avant reset_at. Traitez cela comme un arrêt, pas comme un backoff.
Pour les erreurs rate_limit_exceeded, attendez data.retry_after secondes avant de réessayer. Utilisez un backoff exponentiel pour provider_error. Ne réessayez pas automatiquement les envois email_compose en cas de provider_error, car le message a peut-être déjà été accepté par le fournisseur. Ne réessayez jamais usage_limit_reached : cela ne se débloque qu'à reset_at.
Commencez avec la formule Gratuit : une boîte connectée, pour toujours et sans carte bancaire. Personal en connecte trois pour 5 $ par mois, Pro connecte toutes les boîtes que vous possédez, et Team ajoute des membres, des rôles et un espace de travail par client.