Serveur MCP (Model Context Protocol) pour gérer des articles de blog avec recherche et création.
Ce projet est un exemple d'implémentation d'un serveur MCP utilisant le SDK Java (sans framework Spring ou autre).
Le Model Context Protocol (MCP) définit une architecture en couches avec une séparation claire des responsabilités :
McpServer: Gère les opérations du protocoleMcpSession: Gère les interactions synchrones et asynchrones- Support des modèles de programmation synchrone (
McpSyncServer) et asynchrone (McpAsyncServer)
- Abstraction de la sérialisation des messages JSON-RPC
- Transport Stdio : Communication via stdin/stdout (utilisé dans ce projet)
- Alternatives : HTTP SSE, Streamable-HTTP pour architectures distribuées
Le SDK supporte les capacités MCP suivantes :
- Tools : Découverte et exécution d'outils (utilisé ici)
- Resources : Gestion de ressources avec URIs et subscriptions
- Prompts : Templates de prompts pour interactions IA
- Completion : Suggestions de complétion
- Logging : Système de logs
- Progress : Suivi de progression des opérations
Ce serveur illustre les bonnes pratiques du SDK Java MCP :
-
Modularité sans dépendances de framework
- Utilisation du module
mcp-coreuniquement - Pas de dépendance à Spring ou autre framework web
- Transport stdio inclus par défaut
- Utilisation du module
-
Initialisation du serveur
// 1. Créer le transport StdioServerTransportProvider transport = new StdioServerTransportProvider(McpJsonMapper.getDefault()); // 2. Créer le serveur avec capabilities McpSyncServer server = McpServer.sync(transport) .serverInfo("blog-mcp-server", "1.0.0") .capabilities(ServerCapabilities.builder() .tools(true) .build()) .build();
-
Enregistrement des outils
- Définition des outils avec schéma JSON pour les paramètres
- Handlers pour la logique métier
- Gestion des erreurs avec
CallToolResult
-
Négociation des capacités
- Vérification de compatibilité de version du protocole
- Échange de fonctionnalités lors de l'initialisation
- Validation et gestion d'erreurs type-safe
- Simplicité : Pas de configuration complexe de framework
- Légèreté : Dépendances minimales
- Portabilité : JAR exécutable standalone
- Compréhension : Code clair pour apprendre le protocole MCP
- Performance : Communication directe via stdio pour processus locaux
📚 Documentation officielle : MCP Java SDK Overview
mvn clean packageLe JAR exécutable sera généré dans target/mcp-server-1.0-SNAPSHOT-executable.jar
Ajoutez cette configuration à votre fichier de configuration Claude Desktop :
Sur macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
Sur Windows : %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"blog-mcp-server": {
"command": "java",
"args": [
"-jar",
"/<absolute_path>/mcp-server/target/mcp-server-1.0-SNAPSHOT-executable.jar"
]
}
}
}Créez un script run-server.sh :
#!/bin/bash
java -jar /<absolute_path>/mcp-server/target/mcp-server-1.0-SNAPSHOT-executable.jarPuis dans la configuration Claude :
{
"mcpServers": {
"blog-mcp-server": {
"command": "/chemin/vers/run-server.sh"
}
}
}Rechercher des articles de blog par mot-clé et/ou type.
Paramètres :
query(string, optionnel) : Mot-clé à recherchertype(string, optionnel) : Type d'article (TECHNICALouSCIENTIFIC)
Exemple :
{
"query": "Java",
"type": "TECHNICAL"
}Créer un nouvel article de blog.
Paramètres :
title(string, requis) : Titre de l'articlecontent(string, requis) : Contenu de l'articletype(string, requis) : Type d'article (TECHNICALouSCIENTIFIC)
Exemple :
{
"title": "Introduction à Spring Boot",
"content": "Spring Boot est un framework...",
"type": "TECHNICAL"
}Pour tester le serveur manuellement :
java -jar target/mcp-server-1.0-SNAPSHOT-executable.jarLe serveur communique via stdin/stdout selon le protocole MCP.
Le serveur démarre avec 3 articles pré-chargés :
- "Introduction au serveur Java MCP" (TECHNICAL)
- "Comprendre les algorithmes d'apprentissage automatique" (SCIENTIFIC)
- "Créer des API RESTful avec Spring Boot" (TECHNICAL)
-
Vérifiez que le JAR est bien généré :
ls -l target/mcp-server-1.0-SNAPSHOT-executable.jar
-
Vérifiez que le JAR peut s'exécuter :
java -jar target/mcp-server-1.0-SNAPSHOT-executable.jar
Le serveur devrait afficher :
Serveur MCP Blog démarré et en attente de connexions -
Vérifiez le chemin dans la configuration Claude :
- Le chemin doit être absolu
- Vérifiez les permissions d'exécution
- Vérifiez que Java est dans le PATH
-
Vérifiez les logs de Claude Desktop :
- Sur macOS :
~/Library/Logs/Claude/ - Cherchez les erreurs liées au serveur MCP
- Sur macOS :
-
Redémarrez Claude Desktop après avoir modifié la configuration
- Java : 21
- MCP SDK : 0.16.0
- Maven : 3.x
src/main/java/com/rickenbazolo/mcp/
├── BlogMcpServer.java # Serveur MCP principal
├── Article.java # Modèle Article (record)
└── ArticleRepository.java # Repository en mémoire