n8n-nodes-mcp-eu
Version:
Servicio MCP para consultar las noticias del periodico El Universal Cartagena
87 lines (86 loc) • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
const zod_1 = require("zod");
async function fetchWithTimeout(url, timeoutMs = 120000) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
try {
const response = await fetch(url, { signal: controller.signal });
clearTimeout(timeoutId);
return response;
}
catch (error) {
clearTimeout(timeoutId);
if (error instanceof Error && error.name === 'AbortError') {
return {
content: [
{
type: "text",
text: `⚠️ La solicitud tardó demasiado y fue cancelada (timeout).`,
},
],
};
}
throw error;
}
}
const server = new mcp_js_1.McpServer({
name: 'MCP Noticias EU Server',
version: '1.0.0',
description: 'Servidor MCP para consultar últimas noticias de El Universal Cartagena',
});
server.tool('fetch_news', 'consultar las últimas noticias de El Universal Cartagena', {
queryString: zod_1.z
.string()
.describe('información sobre las ultimas noticias de El Universal Cartagena'),
}, async ({ queryString }, _extra) => {
console.error('[MCP_SERVER] Received fetch_news call for:', queryString);
try {
const apiServiciosExternos = `https://api.eluniversal.com.co/servicios-externos/mas-leidas?host=eluniversal`;
const newsResponse = await fetchWithTimeout(apiServiciosExternos);
if (!(newsResponse instanceof Response)) {
return newsResponse;
}
if (!newsResponse.ok) {
return {
content: [
{
type: "text",
text: `⚠️ No se pudo obtener las noticias de El Universal Cartagena: ${newsResponse.status} ${newsResponse.statusText}`,
},
],
};
}
const newsData = await newsResponse.json();
console.error('[MCP_SERVER] API data received.');
if (!Array.isArray(newsData) || newsData.length === 0) {
return {
content: [{ type: "text", text: `No se encontró información para: ${queryString}.` }],
};
}
return {
content: [{ type: "text", text: JSON.stringify(newsData, null, 2) }],
};
}
catch (error) {
console.error('[MCP_SERVER] Error during fetch_news execution:', error);
let errorMessage = 'Error desconocido';
if (error instanceof Error) {
errorMessage = error.message;
}
else {
errorMessage = String(error);
}
return {
content: [{ type: "text", text: `Error interno del servidor MCP: ${errorMessage}` }],
};
}
});
const transport = new stdio_js_1.StdioServerTransport();
(async () => {
await server.connect(transport);
console.error('Noticias MCP Server running on stdio');
})();
//# sourceMappingURL=mcp_server.js.map