UNPKG

mcp-politico

Version:

MCP Tool especializado en el análisis político colombiano para asesores del gobierno. Compatible con n8n (MCP Client - STDIO).

70 lines (56 loc) 2.04 kB
#!/usr/bin/env node require('dotenv').config(); const axios = require('axios'); const argv = require('yargs/yargs')(process.argv.slice(2)).argv; const endpoint = process.env.MCP_ENDPOINT || 'https://mcp.allconex.com'; const getInput = async () => { const chunks = []; return new Promise((resolve) => { process.stdin.on('data', (chunk) => chunks.push(chunk)); process.stdin.on('end', () => { try { const input = Buffer.concat(chunks).toString(); resolve(JSON.parse(input)); } catch (err) { process.stdout.write(JSON.stringify({ error: '❌ Entrada JSON inválida.' }) + '\n'); process.stdout.end?.(); process.exit(1); } }); }); }; const sendOutput = (data) => { process.stdout.write(JSON.stringify(data, null, 2) + '\n'); process.stdout.end?.(); // Forzar cierre de stdout en entornos como n8n process.exit(0); }; const sendError = (message) => { process.stdout.write(JSON.stringify({ error: `❌ Error: ${message}` }) + '\n'); process.stdout.end?.(); process.exit(1); }; const main = async () => { try { const request = await getInput(); const token = process.env.MCP_TOKEN || request.token || argv.token; if (!token) return sendError('🔒 Token no definido. Usa MCP_TOKEN, "--token=" o inclúyelo en el JSON.'); if (request.type === 'list-tools') { const res = await axios.get(`${endpoint}/list-tools`, { headers: { Authorization: `Bearer ${token}` } }); return sendOutput(res.data); } if (request.type === 'execute-tool') { const { tool, input } = request; const res = await axios.post(`${endpoint}/execute-tool`, { tool, input }, { headers: { Authorization: `Bearer ${token}` } }); return sendOutput(res.data); } return sendError('❌ Tipo de operación no soportado. Usa "list-tools" o "execute-tool".'); } catch (err) { const errorMessage = err?.response?.data?.error || err.message; return sendError(errorMessage); } }; main();