| .forgejo/workflows | ||
| cmd/email-mcp | ||
| docs/superpowers | ||
| internal | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| install.sh | ||
| Makefile | ||
| mcp.toml | ||
| README.md | ||
email-mcp
Serveur MCP local pour lire une boîte mail via IMAP. Le serveur parle le protocole MCP standard sur stdio, avec des messages JSON-RPC 2.0 (initialize, notifications/initialized, tools/list, tools/call).
Le binaire s’appuie maintenant sur mcp-framework pour :
- la gestion de profils CLI
- le stockage JSON de configuration dans
os.UserConfigDir() - le stockage du mot de passe dans le wallet natif de l’OS
- le manifeste
mcp.toml - l’auto-update via
email-mcp update
Commandes
email-mcp setup: configure (ou met à jour) un profil IMAPemail-mcp config show: affiche la configuration IMAP résolue et la provenanceemail-mcp config test: lance les checks de configuration/connectivité (équivalent dedoctor)email-mcp config delete: supprime un profil local et son mot de passe stockéemail-mcp mcp: lance le serveur MCP surstdin/stdoutemail-mcp doctor: diagnostique la configuration locale, le wallet, le manifeste et l’accès IMAPemail-mcp update: met à jour le binaire courant depuis la dernière releaseemail-mcp version: affiche la version du binaire
La commande email-mcp help (ou -h / --help) affiche l’aide globale.
Outils MCP
list_mailboxes: lister les boîtes IMAP visibleslist_messages: lister les messages récents d’une boîteget_message: récupérer un message par UID IMAP
Configuration
La configuration est séparée en deux parties :
hostetusernamesont stockés dansconfig.jsonpasswordest stocké dans le wallet système
Le profil actif est résolu dans cet ordre :
--profileEMAIL_MCP_PROFILEcurrent_profiledansconfig.json[profiles].defaultdansmcp.tomldefault
Les credentials IMAP sont résolus ensuite via le résolveur multi-sources du framework (RC3) :
host:EMAIL_MCP_HOSTpuisconfig.jsonusername:EMAIL_MCP_USERNAMEpuisconfig.jsonpassword:EMAIL_MCP_PASSWORDpuis secret walletimap-password/<profile>
Configurer un profil
./email-mcp setup
Pour un profil nommé :
./email-mcp setup --profile work
Le binaire demande ensuite :
- l’hôte IMAP
- le nom d’utilisateur
- le mot de passe
Si un mot de passe existe déjà dans le wallet, laisser le champ vide le conserve.
Si le backend de secrets est en lecture seule ([secret_store].backend_policy = "env-only"), setup ne peut pas persister le mot de passe dans un wallet. Dans ce cas, exporte EMAIL_MCP_PASSWORD avant setup. La commande sauvegarde alors host/username et utilise le mot de passe depuis l’environnement.
Lancer le serveur MCP
./email-mcp mcp
Pour un profil nommé :
./email-mcp mcp --profile work
Si aucun credential n’a été configuré pour le profil résolu, le serveur renvoie l’erreur :
credentials not configured; run `email-mcp setup`
Inspecter la configuration résolue
./email-mcp config show
./email-mcp config show --profile work
Tester la configuration résolue
./email-mcp config test
./email-mcp config test --profile work
Auto-update
email-mcp update lit mcp.toml depuis le répertoire du binaire courant, puis remonte les répertoires parents. Si aucun manifeste n’est trouvé, la commande échoue.
./email-mcp update
Le manifeste de ce repo utilise le driver Gitea du framework :
binary_name = "email-mcp"
[update]
source_name = "email-mcp releases"
driver = "gitea"
repository = "AI/email-mcp"
base_url = "https://gitea.lclr.dev"
asset_name_template = "{binary}-{os}-{arch}{ext}"
checksum_asset_name = "{asset}.sha256"
checksum_required = true
token_env_names = ["GITEA_TOKEN"]
Diagnostic
email-mcp doctor vérifie :
- la lisibilité du fichier de configuration
- le profil IMAP résolu
- la disponibilité du wallet système
- la présence du mot de passe stocké
- la validité du manifeste
mcp.toml - la connectivité IMAP avec les credentials résolus
./email-mcp doctor
./email-mcp doctor --profile work
La commande retourne un code de sortie non nul si au moins un check échoue.
Pour l’update, la validation du manifeste accepte :
- soit
update.latest_release_url - soit un couple driver/référentiel (
update.driver,update.repository) avec les champs requis (ex.update.base_urlpour Gitea)
Installation
Installateur interactif
Le repo inclut un assistant interactif install.sh :
./install.sh
Tu peux aussi l’exécuter directement depuis la branche main :
curl -fsSL https://gitea.lclr.dev/AI/email-mcp/raw/branch/main/install.sh | bash
Claude Code CLI
Ajoute le serveur MCP en pointant vers le binaire et la sous-commande mcp :
claude mcp add email-mcp -- /absolute/path/to/bin/email-mcp mcp
La configuration se fait une fois séparément via email-mcp setup.
Configuration JSON manuelle
Ajoute le bloc suivant à ta configuration MCP (~/.claude.json côté utilisateur, ou .mcp.json dans un projet) :
{
"mcpServers": {
"email-mcp": {
"command": "/absolute/path/to/bin/email-mcp",
"args": ["mcp"]
}
}
}
Releases
Une release est générée automatiquement quand tu pousses un tag v* sur le repo Gitea.
Les assets publiés sont :
build/email-mcp-linux-amd64build/email-mcp-linux-amd64.sha256mcp.toml
Compiler depuis les sources
make build
Le binaire est généré dans build/email-mcp-<goos>-<goarch> avec une version injectée depuis git describe.
Pour cross-compiler :
make build GOOS=windows GOARCH=amd64
Pour lancer les tests :
make test