Skip to main content
Glama
N8nApiTool.ts3.52 kB
import { MCPTool } from "mcp-framework"; import axios from "axios"; import { z } from "zod"; interface N8nApiInput { endpoint: string; method: "GET" | "POST" | "PUT" | "DELETE"; data?: any; params?: Record<string, string>; } class N8nApiTool extends MCPTool<N8nApiInput> { name = "n8n_api"; description = "Interagit directement avec l'API n8n"; schema = { endpoint: { type: z.string(), description: "Point de terminaison de l'API (ex: /workflows, /executions)", }, method: { type: z.enum(["GET", "POST", "PUT", "DELETE"]), description: "Méthode HTTP à utiliser", }, data: { type: z.any().optional(), description: "Données à envoyer pour les requêtes POST et PUT", }, params: { type: z.record(z.string()).optional(), description: "Paramètres de requête URL", }, }; private apiUrl = process.env.N8N_API_URL || "http://localhost:5678/api/v1"; private apiKey = process.env.N8N_API_KEY || ""; private getAxiosConfig(params?: Record<string, string>) { return { headers: { "X-N8N-API-KEY": this.apiKey, "Content-Type": "application/json", }, params, }; } async execute({ endpoint, method, data, params }: N8nApiInput) { try { const url = `${this.apiUrl}${endpoint.startsWith('/') ? endpoint : '/' + endpoint}`; console.log(`Tentative de connexion à l'API n8n: ${url}`); console.log(`Méthode: ${method}`); console.log(`Paramètres: ${JSON.stringify(params || {})}`); let response; switch (method) { case "GET": response = await axios.get(url, this.getAxiosConfig(params)); break; case "POST": response = await axios.post(url, data, this.getAxiosConfig(params)); break; case "PUT": response = await axios.put(url, data, this.getAxiosConfig(params)); break; case "DELETE": response = await axios.delete(url, this.getAxiosConfig(params)); break; default: throw new Error(`Méthode HTTP non supportée: ${method}`); } console.log(`Réponse reçue avec succès, statut: ${response.status}`); return { success: true, statusCode: response.status, data: response.data, }; } catch (error: any) { console.error('Erreur lors de l\'appel à l\'API n8n:', error); // Afficher des informations détaillées sur l'erreur if (error.response) { // La requête a été faite et le serveur a répondu avec un code d'état // qui n'est pas dans la plage 2xx console.error(`Statut: ${error.response.status}`); console.error(`Données: ${JSON.stringify(error.response.data)}`); console.error(`En-têtes: ${JSON.stringify(error.response.headers)}`); } else if (error.request) { // La requête a été faite mais aucune réponse n'a été reçue console.error('Aucune réponse reçue du serveur'); console.error(error.request); } else { // Une erreur s'est produite lors de la configuration de la requête console.error('Erreur de configuration de la requête:', error.message); } return { success: false, error: error.message, statusCode: error.response?.status, details: error.response?.data || "Erreur inconnue", }; } } } export default N8nApiTool;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lowprofix/n8n-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server