Files
mcp-ine/src/examples.ts
2025-10-09 03:06:19 +02:00

249 líneas
6.2 KiB
TypeScript
Original Blame Histórico

Este archivo contiene caracteres Unicode invisibles
Este archivo contiene caracteres Unicode invisibles que son indistinguibles para los humanos, pero que pueden ser procesados de forma diferente por un ordenador. Si crees que esto es intencional, puedes ignorar esta advertencia. Usa el botón de Escape para revelarlos.
/**
* Ejemplos de uso del MCP INE Server
* Ejecutar con: node dist/examples.js
*/
import axios from 'axios';
const MCP_ENDPOINT = 'http://localhost:3000/mcp/v1';
/**
* Función helper para llamar al servidor MCP
*/
async function callMCPTool(toolName: string, args: any = {}) {
try {
const response = await axios.post(MCP_ENDPOINT, {
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: toolName,
arguments: args
},
id: Date.now()
});
return response.data;
} catch (error: any) {
console.error(`Error llamando a ${toolName}:`, error.message);
return null;
}
}
/**
* Ejemplo 1: Obtener últimos datos del IPC
*/
async function ejemplo1_datosIPC() {
console.log('\n📊 Ejemplo 1: Últimos datos del IPC\n');
const result = await callMCPTool('ine_datos_serie', {
idSerie: 'IPC251856',
nult: 12,
tip: 'A',
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
console.log(JSON.parse(result.result.content[0].text));
}
}
/**
* Ejemplo 2: Listar operaciones disponibles
*/
async function ejemplo2_operaciones() {
console.log('\n📋 Ejemplo 2: Operaciones Disponibles\n');
const result = await callMCPTool('ine_operaciones_disponibles', {
idioma: 'ES',
geo: 0,
det: 1
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log(`Total de operaciones: ${data.data?.length || 0}`);
console.log('Primeras 5 operaciones:');
data.data?.slice(0, 5).forEach((op: any) => {
console.log(`- ${op.Nombre} (${op.Id})`);
});
}
}
/**
* Ejemplo 3: Obtener variables de la operación IPC
*/
async function ejemplo3_variablesIPC() {
console.log('\n🏷 Ejemplo 3: Variables de la Operación IPC\n');
const result = await callMCPTool('ine_variables_operacion', {
idOperacion: 'IPC',
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log('Variables del IPC:');
data.data?.slice(0, 10).forEach((variable: any) => {
console.log(`- ${variable.Nombre} (ID: ${variable.Id})`);
});
}
}
/**
* Ejemplo 4: Obtener datos de una tabla
*/
async function ejemplo4_datosTabla() {
console.log('\n📈 Ejemplo 4: Datos de Tabla 50902\n');
const result = await callMCPTool('ine_datos_tabla', {
idTabla: '50902',
nult: 3,
tip: 'A',
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log('Últimos 3 períodos de la tabla 50902:');
console.log(JSON.stringify(data, null, 2));
}
}
/**
* Ejemplo 5: Obtener información de una operación
*/
async function ejemplo5_infoOperacion() {
console.log('\n📖 Ejemplo 5: Información de la Operación IPC\n');
const result = await callMCPTool('ine_operacion', {
idOperacion: 'IPC',
det: 2,
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log('Información del IPC:');
console.log(JSON.stringify(data, null, 2));
}
}
/**
* Ejemplo 6: Buscar series con filtros
*/
async function ejemplo6_seriesConFiltros() {
console.log('\n🔍 Ejemplo 6: Series del IPC con Filtros\n');
const result = await callMCPTool('ine_datos_metadata_operacion', {
idOperacion: 'IPC',
p: 1, // Periodicidad mensual
nult: 1,
g1: '115:29', // Madrid
g2: '3:84', // Variación mensual
tip: 'A',
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log('Datos del IPC para Madrid:');
console.log(JSON.stringify(data, null, 2));
}
}
/**
* Ejemplo 7: Listar herramientas disponibles
*/
async function ejemplo7_listarHerramientas() {
console.log('\n🛠 Ejemplo 7: Herramientas MCP Disponibles\n');
try {
const response = await axios.post(MCP_ENDPOINT, {
jsonrpc: '2.0',
method: 'tools/list',
params: {},
id: 1
});
const tools = response.data.result.tools;
console.log(`Total de herramientas: ${tools.length}\n`);
tools.forEach((tool: any) => {
console.log(`- ${tool.name}`);
console.log(` ${tool.description}`);
console.log('');
});
} catch (error: any) {
console.error('Error listando herramientas:', error.message);
}
}
/**
* Ejemplo 8: Obtener periodicidades
*/
async function ejemplo8_periodicidades() {
console.log('\n⏰ Ejemplo 8: Periodicidades Disponibles\n');
const result = await callMCPTool('ine_periodicidades', {
idioma: 'ES'
});
if (result?.result?.content?.[0]?.text) {
const data = JSON.parse(result.result.content[0].text);
console.log('Periodicidades:');
data.data?.forEach((per: any) => {
console.log(`- ${per.Nombre} (ID: ${per.Id})`);
});
}
}
/**
* Ejecutar todos los ejemplos
*/
async function ejecutarTodos() {
console.log('='.repeat(60));
console.log(' EJEMPLOS DE USO DEL MCP INE SERVER');
console.log('='.repeat(60));
console.log('\n⚠ Asegúrate de que el servidor esté corriendo en el puerto 3000');
console.log(' Comando: npm start\n');
// Verificar que el servidor esté activo
try {
await axios.get('http://localhost:3000/health');
console.log('✅ Servidor MCP INE activo\n');
} catch (error) {
console.error('❌ Error: El servidor no está activo. Inicia el servidor con: npm start');
process.exit(1);
}
await ejemplo7_listarHerramientas();
await ejemplo1_datosIPC();
await ejemplo2_operaciones();
await ejemplo3_variablesIPC();
await ejemplo4_datosTabla();
await ejemplo5_infoOperacion();
await ejemplo8_periodicidades();
await ejemplo6_seriesConFiltros();
console.log('\n' + '='.repeat(60));
console.log(' FIN DE LOS EJEMPLOS');
console.log('='.repeat(60));
}
// Ejecutar si se llama directamente
if (import.meta.url === `file://${process.argv[1]}`) {
ejecutarTodos().catch(console.error);
}
export {
callMCPTool,
ejemplo1_datosIPC,
ejemplo2_operaciones,
ejemplo3_variablesIPC,
ejemplo4_datosTabla,
ejemplo5_infoOperacion,
ejemplo6_seriesConFiltros,
ejemplo7_listarHerramientas,
ejemplo8_periodicidades
};