Claude Code sends extra fields (e.g. "title") in initialize params that caused the server to reject the request due to DisallowUnknownFields. Use lenient JSON decoding for protocol messages while keeping strict validation for tool arguments. Also defer KWallet credential loading from server startup to tool invocation time, and negotiate protocol versions per MCP spec instead of rejecting unknown ones. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .gitea/workflows | ||
| cmd/email-mcp | ||
| docs/superpowers | ||
| internal | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| Makefile | ||
| 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 projet expose trois outils :
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
Le stockage des credentials repose sur KDE Wallet via D-Bus. La V1 cible Linux avec session KDE Wallet disponible.
Sommaire
Prérequis
- Linux
- une session D-Bus utilisateur active
- KDE Wallet accessible sur cette session
- Go 1.25+
- un compte IMAP fonctionnel
Configuration
Étape 1 : enregistrer les credentials
Le setup est interactif :
./email-mcp setup
Le binaire demande ensuite :
- l'hôte IMAP
- le nom d'utilisateur
- le mot de passe
Les credentials sont stockés dans KDE Wallet sous le profil default.
Si KDE Wallet n'est pas disponible, le setup échoue explicitement et n'écrit rien ailleurs.
Étape 2 : lancer le serveur MCP
Le serveur MCP s'exécute sur stdin/stdout avec le handshake MCP standard :
./email-mcp mcp
Si aucun credential n'a été configuré, le serveur renvoie l'erreur :
credentials not configured; run `email-mcp setup`
Installation
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
Le setup doit être exécuté une fois séparément avant d'utiliser le serveur.
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.
Exemple pour démarrer en v1.0 :
git tag v1.0
git push origin v1.0
Le workflow build alors email-mcp pour linux/amd64 et joint le binaire build/email-mcp-linux-amd64 comme asset de la release.
Compiler depuis les sources
make build
Le binaire est généré dans build/email-mcp-<goos>-<goarch>.
Pour cross-compiler :
make build GOOS=windows GOARCH=amd64
Pour lancer les tests :
make test
Outils
list_mailboxes
Liste les boîtes IMAP visibles pour le compte configuré. Aucun paramètre.
list_messages
Liste les messages récents d'une boîte.
| Paramètre | Type | Description |
|---|---|---|
mailbox |
string | Requis. Nom de la boîte IMAP |
limit |
number | Nombre maximum de messages à retourner. Par défaut : 20 |
Retourne des résumés de messages avec un uid IMAP stable, le sujet et l'expéditeur.
get_message
Récupère un message précis à partir de sa boîte et de son UID IMAP.
| Paramètre | Type | Description |
|---|---|---|
mailbox |
string | Requis. Nom de la boîte IMAP |
uid |
number | Requis. UID IMAP du message |
Retourne :
- les métadonnées du message
- les headers dans l'ordre d'origine
- un body texte décodé de manière conservative pour les contenus MIME courants