Blogger MCP Server

by niyonabil
Verified
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initMCPServer = initMCPServer; const mcp_sdk_mock_1 = require("./mcp-sdk-mock"); const zod_1 = require("zod"); /** * Initialise le serveur MCP pour Blogger avec tous les outils nécessaires * @param bloggerService - Service d'interaction avec l'API Blogger * @param config - Configuration du serveur * @returns Instance du serveur MCP configurée */ function initMCPServer(bloggerService, config) { // Créer une nouvelle instance du serveur MCP const server = new mcp_sdk_mock_1.MCPServer({ name: "Blogger MCP Server", version: "1.0.1", // Configurer le mode de fonctionnement (stdio ou http) mode: config.mode }); // Outil pour lister les blogs server.addTool({ name: 'list_blogs', description: 'Liste tous les blogs accessibles', parameters: zod_1.z.object({}), handler: async () => { try { const blogs = await bloggerService.listBlogs(); return { blogs: blogs.items || [] }; } catch (error) { return { error: `Erreur lors de la récupération des blogs: ${error}` }; } } }); // Outil pour obtenir un blog spécifique server.addTool({ name: 'get_blog', description: 'Récupère les détails d\'un blog spécifique', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog à récupérer') }), handler: async ({ blogId }) => { try { const blog = await bloggerService.getBlog(blogId); return { blog }; } catch (error) { return { error: `Erreur lors de la récupération du blog ${blogId}: ${error}` }; } } }); // Outil pour créer un nouveau blog (avec message d'erreur explicatif) server.addTool({ name: 'create_blog', description: 'Crée un nouveau blog (note: l\'API Blogger ne supporte pas cette fonctionnalité)', parameters: zod_1.z.object({ name: zod_1.z.string().describe('Nom du blog'), description: zod_1.z.string().optional().describe('Description du blog') }), handler: async ({ name, description }) => { try { const result = await bloggerService.createBlog({ name, description: description || '' }); return result; // Retourne le message d'erreur explicatif } catch (error) { return { error: `Erreur lors de la création du blog: ${error}` }; } } }); // Outil pour lister les posts d'un blog server.addTool({ name: 'list_posts', description: 'Liste les posts d\'un blog', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), maxResults: zod_1.z.number().optional().describe('Nombre maximum de résultats à retourner') }), handler: async ({ blogId, maxResults }) => { try { const posts = await bloggerService.listPosts(blogId, maxResults); return { posts: posts.items || [] }; } catch (error) { return { error: `Erreur lors de la récupération des posts du blog ${blogId}: ${error}` }; } } }); // Outil pour rechercher des posts server.addTool({ name: 'search_posts', description: 'Recherche des posts dans un blog', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), query: zod_1.z.string().describe('Terme de recherche'), maxResults: zod_1.z.number().optional().describe('Nombre maximum de résultats à retourner') }), handler: async ({ blogId, query, maxResults }) => { try { const posts = await bloggerService.searchPosts(blogId, query, maxResults); return { posts: posts.items || [] }; } catch (error) { return { error: `Erreur lors de la recherche de posts dans le blog ${blogId}: ${error}` }; } } }); // Outil pour obtenir un post spécifique server.addTool({ name: 'get_post', description: 'Récupère un post spécifique', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), postId: zod_1.z.string().describe('ID du post') }), handler: async ({ blogId, postId }) => { try { const post = await bloggerService.getPost(blogId, postId); return { post }; } catch (error) { return { error: `Erreur lors de la récupération du post ${postId}: ${error}` }; } } }); // Outil pour créer un nouveau post server.addTool({ name: 'create_post', description: 'Crée un nouveau post dans un blog', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), title: zod_1.z.string().describe('Titre du post'), content: zod_1.z.string().describe('Contenu du post'), labels: zod_1.z.array(zod_1.z.string()).optional().describe('Labels à associer au post') }), handler: async ({ blogId, title, content, labels }) => { try { const postData = { title, content, labels: labels || [] }; const post = await bloggerService.createPost(blogId, postData); return { post }; } catch (error) { return { error: `Erreur lors de la création du post dans le blog ${blogId}: ${error}` }; } } }); // Outil pour mettre à jour un post server.addTool({ name: 'update_post', description: 'Met à jour un post existant', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), postId: zod_1.z.string().describe('ID du post'), title: zod_1.z.string().optional().describe('Nouveau titre du post'), content: zod_1.z.string().optional().describe('Nouveau contenu du post'), labels: zod_1.z.array(zod_1.z.string()).optional().describe('Nouveaux labels à associer au post') }), handler: async ({ blogId, postId, title, content, labels }) => { try { // Préparer les données de mise à jour const postData = { title, content, labels }; const post = await bloggerService.updatePost(blogId, postId, postData); return { post }; } catch (error) { return { error: `Erreur lors de la mise à jour du post ${postId}: ${error}` }; } } }); // Outil pour supprimer un post server.addTool({ name: 'delete_post', description: 'Supprime un post', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), postId: zod_1.z.string().describe('ID du post') }), handler: async ({ blogId, postId }) => { try { await bloggerService.deletePost(blogId, postId); return { success: true, message: `Post ${postId} supprimé avec succès` }; } catch (error) { return { error: `Erreur lors de la suppression du post ${postId}: ${error}` }; } } }); // Outil pour lister les labels d'un blog server.addTool({ name: 'list_labels', description: 'Liste les labels d\'un blog', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog') }), handler: async ({ blogId }) => { try { const labels = await bloggerService.listLabels(blogId); return { labels: labels.items || [] }; } catch (error) { return { error: `Erreur lors de la récupération des labels du blog ${blogId}: ${error}` }; } } }); // Outil pour obtenir un label spécifique server.addTool({ name: 'get_label', description: 'Récupère un label spécifique', parameters: zod_1.z.object({ blogId: zod_1.z.string().describe('ID du blog'), labelName: zod_1.z.string().describe('Nom du label') }), handler: async ({ blogId, labelName }) => { try { const label = await bloggerService.getLabel(blogId, labelName); return { label }; } catch (error) { return { error: `Erreur lors de la récupération du label ${labelName}: ${error}` }; } } }); return server; }