Configuración rápida
Conecta Luminon con tu herramienta de IA
Usa los fragmentos siguientes para una instalación rápida con copiar y pegar. La referencia completa de MCP sigue más abajo en esta página.
Instalación general
Inicio rápido
Usa el servidor MCP mediante npx. El renderer es opcional y resulta útil cuando quieres una vista previa local del dashboard en el navegador.
Usa los fragmentos específicos de cada cliente más abajo para Claude Desktop, Gemini CLI, Codex o Perplexity Desktop.
npx @luminondev/mcp-dashboard mcp
npx @luminondev/mcp-dashboard start renderer Claude Desktop
Añade Luminon a Claude Desktop como un servidor MCP local vía stdio y luego reinicia Claude.
Ruta de configuración por defecto: macOS: ~/Library/Application Support/Claude/claude_desktop_config.json | Windows: %APPDATA%/Claude/claude_desktop_config.json
Si ya tienes otros servidores MCP configurados, integra esto dentro de tu objeto mcpServers existente.
{
"mcpServers": {
"luminon": {
"command": "npx",
"args": ["@luminondev/mcp-dashboard", "mcp"]
}
}
} Gemini CLI
Añade Luminon a la configuración de Gemini CLI para que arranque automáticamente como servidor MCP.
Ruta de configuración por defecto: macOS/Linux: ~/.gemini/settings.json | Windows: %USERPROFILE%\.gemini\settings.json
Conserva cualquier configuración existente de Gemini CLI y agrega luminon dentro de mcpServers.
{
"mcpServers": {
"luminon": {
"command": "npx",
"args": ["@luminondev/mcp-dashboard", "mcp"]
}
}
} Codex
Configura Luminon una vez en Codex y reutilízalo desde la CLI o la extensión del IDE.
Ruta de configuración por defecto: ~/.codex/config.toml
Codex también admite agregar servidores MCP con comandos, pero el archivo de configuración es la opción más limpia para copiar y pegar.
[mcp_servers.luminon]
command = "npx"
args = ["@luminondev/mcp-dashboard", "mcp"] Perplexity Desktop
Perplexity Desktop actualmente admite conectores MCP locales desde la configuración de la app de Mac en lugar de un archivo JSON.
Dónde agregarlo: App de Mac de Perplexity -> Settings -> Connectors -> Add Connector
Perplexity documenta soporte local de MCP para la app de macOS. Ingresa el comando siguiente en el formulario Add Connector.
npx @luminondev/mcp-dashboard mcp Documentación de MCP Dashboard
Resumen
Luminon es un espacio de trabajo para dashboards con enfoque local compuesto por cuatro piezas:
- Un servidor MCP para crear y editar dashboards y datasets
- Un paquete compartido de esquemas con contratos Zod
- Un renderer en React y una pequeña API en Express para la vista previa local
- Una CLI que inicia el servidor MCP y el renderer con un directorio de datos compartido
Este documento describe el código que existe hoy en este repositorio. Excluye de forma intencional comportamientos antiguos o confusos que ya no están expuestos.
Estructura del repositorio
packages/shared: esquemas Zod compartidos, tipos de gráficos, contratos de filtros, esquemas de plantillas y tipos de TypeScriptpackages/mcp-server: el servidor de herramientas MCP y la lógica de almacenamiento de dashboards/datasetspackages/renderer: la interfaz web, la compilación estática del demo y el servidor API localpackages/cli: la CLIluminonusada para ejecutar el servidor MCP y el rendererdata/: datasets y dashboards semilla del repositorio para instalaciones nuevas y el demo estáticodocs/: documentación del repositorio
Desarrollo local
Instala dependencias y compila todos los workspaces:
npm install
npm run build
Ejecuta solo el servidor MCP:
npm run dev:mcp
Ejecuta solo el renderer:
npm run dev:renderer
Ejecuta ambos para desarrollo local:
npm run dev:stack
Puntos finales locales actuales:
- UI del renderer:
http://localhost:5173 - API del renderer:
http://localhost:4010 - Transporte MCP: solo stdio
Uso de la CLI
El paquete publicado expone una CLI luminon. En este repo, el binario compilado es packages/cli/dist/index.js.
Comandos principales:
luminon mcp
luminon start renderer
luminon stop renderer
luminon stop mcp
luminon status
Distribución recomendada:
- Ejecuta
luminon mcpdentro de la herramienta de IA como proceso MCP por stdio - Ejecuta
luminon start rendererpor separado cuando quieras la vista previa en el navegador
Uso directo del paquete:
npx @luminondev/mcp-dashboard mcp --mode lite
npx @luminondev/mcp-dashboard start renderer
start stack se desaconseja de forma intencional en la CLI porque MCP sobre stdio debe ser administrado por el cliente de IA anfitrión.
Modos de herramientas
El servidor MCP soporta tres modos de exposición:
full: expone todas las herramientas MCPlite: expone solo el conjunto principal de herramientas con menos tokensultra-lite: un conjunto más pequeño de creación e inspección para clientes muy limitados
Usa lite o ultra-lite cuando trabajes con clientes que tienen cuotas diarias ajustadas.
Ejemplo:
LUMINON_MCP_MODE=lite luminon mcp
En la configuración del cliente de IA, usa la misma variable de entorno en el proceso del servidor MCP.
Valores aceptados:
fullliteultra-lite
La CLI también soporta un flag de modo que tiene prioridad sobre la variable de entorno:
luminon mcp --mode lite
luminon mcp --mode ultra-lite
Orden de prioridad:
--modeLUMINON_MCP_MODE- valor por defecto
full
Directorio de datos y persistencia
Por defecto, los datos de usuario se almacenan en:
~/Documents/luminon
Puedes cambiarlo con:
MCP_DATA_DIR=/custom/path
El almacén activo contiene estos archivos:
dashboards.jsondatasets.jsondashboard_versions.jsondataset_snapshots.jsondeleted_dashboards.json
Comportamiento de los seeds
El repositorio incluye archivos semilla en data/.
Comportamiento actual al iniciar:
- Si el store del usuario no existe, se inicializa desde los archivos del repositorio
- Si el store del usuario ya existe, los dashboards semilla faltantes del repo se agregan por
id - Si el store del usuario ya existe, los datasets semilla faltantes del repo se agregan por
id - Los dashboards y datasets existentes del usuario no se sobrescriben
- El dataset integrado de solo lectura
default_businesssiempre se inyecta si falta
Esto importa para upgrades: cambiar los seeds del repo y reiniciar el servidor MCP actualizado basta para que los nuevos id aparezcan en el store del usuario.
Seeds de demo integrados
El repositorio incluye actualmente estos datasets semilla de demo:
coffee_roastery_labhr_datasetsales_complexmarketing_campaign_performance
El repositorio incluye actualmente estos dashboards semilla de demo:
Coffee Roastery LabHR Workforce OverviewSales Performance HubMarketing Campaign Command Center
También existe un dataset integrado de solo lectura:
default_business
Y una plantilla integrada:
business-3x3
Demo estático
El renderer soporta un modo estático controlado por:
VITE_STATIC_DEMO=true
En el modo demo estático:
- La UI carga
demo-data.jsonen lugar de llamar a la API en vivo - El archivo se genera automáticamente a partir de los dashboards y datasets semilla del repositorio
- Los filtros del dashboard siguen funcionando porque el filtrado se aplica del lado del cliente en el renderer
- Actualizar los seeds del repo y recompilar el renderer actualiza la salida del demo estático
El payload del demo estático lo genera:
packages/renderer/scripts/generate-static-demo.mjs
La compilación del renderer ya ejecuta este script antes de Vite:
packages/renderer/package.json
API del renderer
El renderer local incluye una API usada por la UI del navegador.
Rutas actuales:
GET /api/healthGET /api/dashboardsGET /api/dashboards/:idPATCH /api/dashboards/:idDELETE /api/dashboards/:id/filters/:filterIdGET /api/datasetsPATCH /api/datasets/:idGET /api/events
Notas:
GET /api/dashboards/:iddevuelve solo dashboards publicadosGET /api/dashboardsdevuelve la lista local de dashboards usada por la UI principalGET /api/eventses un endpoint SSE usado para refrescos en vivo
Ejemplo: refrescar un dataset demo sin MCP (sin tokens de IA)
Reemplaza el dataset coffee_roastery_lab cada mes usando la API local.
Bash:
#!/usr/bin/env bash
set -euo pipefail
CSV_FILE="$1"
API_URL="${API_URL:-http://localhost:4010/api/datasets/coffee_roastery_lab}"
jq -Rs --arg mode "replace" '{csv: ., mode: $mode, allowSchemaChange: true}' < "$CSV_FILE" \
| curl -sS -X PATCH "$API_URL" \
-H "Content-Type: application/json" \
--data-binary @- \
| jq -r '.dataset.id + " updated at " + (.dataset.updatedAt // "unknown")'
Python:
import requests, json, pathlib, sys
csv_path = pathlib.Path(sys.argv[1])
api_url = "http://localhost:4010/api/datasets/coffee_roastery_lab"
body = {
"csv": csv_path.read_text(encoding="utf-8"),
"mode": "replace",
"allowSchemaChange": True,
}
r = requests.patch(api_url, json=body, timeout=30)
r.raise_for_status()
print(r.json()["dataset"]["updatedAt"])
Ejecuta esto con cron (ejemplo, día 1 a las 03:00):
0 3 1 * * /usr/local/bin/update_coffee.sh /path/to/coffee_roastery_lab.csv >> /var/log/update_coffee.log 2>&1
Superficie de herramientas MCP
Estas son las herramientas MCP expuestas hoy por packages/mcp-server/src/index.ts.
Herramientas de dashboards
create_dashboardupdate_dashboardadd_chartadd_chart_to_dashboarddelete_chartdelete_dashboardlist_dashboardssnapshot_dashboardlist_dashboard_versionsrestore_dashboard_versionundo_dashboardrestore_deleted_dashboardlist_dashboard_filtersupdate_dashboard_filters
Herramientas de datasets
register_datasetupdate_datasetrestore_dataset_snapshotlist_datasetslist_dataset_contentdescribe_dataset
Plantillas y lenguaje natural
list_templatescreate_dashboard_from_templatedashboard_nl
Creación de gráficos y estilo
create_chartlist_theme_presetsset_chart_themeset_chart_presentationreset_chart_presentation
En modo lite, el conjunto de herramientas expuesto se reduce a:
create_dashboardupdate_dashboarddelete_dashboardlist_dashboardslist_templatescreate_dashboard_from_templatedashboard_nlregister_datasetupdate_datasetrestore_dataset_snapshotlist_datasetslist_dataset_contentdescribe_datasetcreate_chartlist_dashboard_filtersupdate_dashboard_filters
En modo ultra-lite, el conjunto se reduce todavía más a:
create_dashboardlist_dashboardslist_templatescreate_dashboard_from_templateregister_datasetlist_datasetsdescribe_datasetlist_dataset_contentcreate_chartlist_dashboard_filtersupdate_dashboard_filters
Cobertura de dashboard_nl
dashboard_nl es el principal punto de entrada no técnico. Actualmente maneja:
- listar dashboards
- listar datasets
- describir un dataset
- listar plantillas
- listar presets de tema
- crear un dashboard
- crear un dashboard desde una plantilla
- registrar un dataset desde CSV
- renombrar un dashboard
- cambiar columnas del dashboard o auto-layout
- aplicar cambios de tema y presentación del dashboard
- crear gráficos
bar,line,area,scatter,radar,donut,funnel,kpi_card,table,comboy multi-bar agrupados/apilados
Acepta solicitudes en inglés y también estilo español mediante coincidencia ligera de intención. El payload de respuesta está resumido de forma intencional para reducir el uso de MCP en clientes con cuotas ajustadas.
Operaciones de dashboard
create_dashboard
Crea un dashboard con estos campos opcionales:
namesubtitlethemePresetpresentationchartslayoutfilterspublished
Si no se pasa layout, el valor por defecto es una grilla 3x3 sin elementos.
update_dashboard
Actualiza propiedades a nivel de dashboard en una sola llamada. Los campos actuales soportados son:
namesubtitlethemePresetpresentationcolumnslayoutautoLayout
No existe una herramienta MCP separada llamada set_dashboard_theme o set_dashboard_presentation; usa update_dashboard.
add_chart vs add_chart_to_dashboard
add_chartagrega un payload de gráfico sin colocación automáticaadd_chart_to_dashboardagrega un gráfico y lo ubica automáticamente en la grilla, salvo que pases una colocación personalizada
Eliminación y recuperación de dashboards
delete_dashboardrequiereconfirm: "DELETE"- Los dashboards eliminados se almacenan en
deleted_dashboards.json restore_deleted_dashboardrestaura desde ese almacén eliminado y puede opcionalmente renombrar el dashboard o asignar un nuevoid
Modelo de snapshots
Los snapshots de dashboard están diseñados como un único punto por dashboard.
Comportamiento actual:
snapshot_dashboardsobrescribe el snapshot existente para ese dashboardlist_dashboard_versionsdevuelve ese snapshot actual si existerestore_dashboard_versionrestaura desde el snapshotundo_dashboardrestaura el último snapshot almacenado
Esto no es un historial completo de versiones. Es un único punto de rollback por dashboard.
Operaciones de dataset
register_dataset
Los datasets pueden crearse a partir de:
- texto CSV crudo
- filas JSON
update_dataset
Modos de actualización actuales:
replaceappend
Comportamiento importante:
- Debe proporcionarse exactamente una fuente:
csvorows - Los cambios de esquema requieren
allowSchemaChange: true - Los datasets integrados de solo lectura no se pueden actualizar
- El servidor guarda un snapshot de rollback antes de la mutación
restore_dataset_snapshot
Restaura el último snapshot guardado para un dataset. También es un undo de un solo nivel, no un historial completo.
Tipos de gráficos que realmente existen
Tipos de gráficos almacenados y renderizados:
barbar_groupedbar_stackedlineareascatterradardonutfunnelkpi_cardtablecombo
funnel y combo son características reales en la base de código actual. Existen en:
- esquemas compartidos
- creación de gráficos del lado del servidor
- lógica de renderizado
Tipos de create_chart
La herramienta MCP unificada create_chart acepta:
barlineareascatterradardonutfunnelkpi_cardtablecombomulti_bar
Diferencia importante:
multi_bares un alias de entrada para crear gráficos de varias series- El tipo almacenado pasa a ser
bar_groupedobar_stackedsegún el modo solicitado
Soporte de plantillas
Las plantillas son un subconjunto más reducido que create_chart.
El esquema actual de plantillas soporta estos tipos de gráfico:
kpi_cardtablebarlineareascatterradardonut
Entonces:
funnel,comboy los multi-bar de varias series están disponibles a través decreate_chart- No forman parte del esquema actual de tipos de gráfico para plantillas
Filtros de dashboard
Los filtros de dashboard se almacenan en el dashboard y son diferentes de los filtros de origen de un gráfico.
Campos actuales de filtros de dashboard:
idfieldfieldTypeopvaluevalueToapplyTo
Tipos actuales de filtros de dashboard:
stringnumberdate
Operadores actuales de filtros de dashboard:
eqneqgteltebetweeninnot_in
Notas:
gtyltno son operadores de filtros de dashboardapplyTopuede restringir un filtro a ids específicos de gráficos o datasetsbetweenusavalueyvalueToinynot_inaceptan arreglos en el esquema
UI de filtros del renderer
El renderer actualmente mapea los operadores de filtros de dashboard a estos controles:
eq,in,not_in: un<select>simplebetween: dos inputs de textogte,lte,neq: un input de texto
Comportamiento importante del renderer hoy:
insí muestra un selector en el renderer- Ese selector es de selección única, no múltiple
not_intambién usa una UI de selección única- Si un filtro se define con un valor tipo arreglo en el JSON almacenado, el motor de filtros lo soporta, pero la UI integrada del renderer sigue exponiendo solo un valor seleccionado a la vez
Filtros de origen de gráfico
Los filtros de origen de gráfico se usan dentro de create_chart y en las definiciones source de los gráficos. Son un esquema distinto al de los filtros de dashboard.
Operadores actuales de filtros de origen:
eqneqgtgteltltein
Los filtros de origen también soportan un dateRange opcional.
Agregación y ordenamiento
Los gráficos generados a partir de datasets soportan estas agregaciones donde aplique:
sumavgcount
Las etiquetas parecidas a meses se ordenan cronológicamente tanto en el servidor MCP como en el renderer cuando los valores se ven como:
JanJanuary2025-Jan- cadenas de mes similares
Por eso los dashboards demo basados en meses ahora quedan en orden de calendario en vez de orden alfabético.
Presets de tema y presentación
IDs actuales de presets de tema:
cleanbusinessdark_analyticspastelhigh_contrasttextured
Comportamiento de tema y presentación:
- Los dashboards pueden establecer
themePresetypresentationmediantecreate_dashboardyupdate_dashboard - Los gráficos individuales pueden sobreescribir tema y presentación mediante:
set_chart_themeset_chart_presentationreset_chart_presentation
Límites prácticos impuestos por el servidor
Los límites de seguridad actuales incluyen:
- máximo 12 gráficos por dashboard
- máximo 50,000 filas por dataset
- tamaño máximo de CSV de 20 MB para registrar o reemplazar un dataset
- gráficos de tabla limitados a 500 filas
También hay límites específicos por tipo de gráfico para evitar degradación del renderer con payloads grandes.
Plantilla integrada actual
El repositorio incluye actualmente una plantilla:
business-3x3
Espera el dataset default_business con estas columnas:
yearmonthcountrychannelcategorysalesorders
Los metadatos de plantilla almacenados en packages/shared/templates.json ahora están en inglés y coinciden con el resto del contenido público de la demo.
Solución de problemas
Un dataset o dashboard semilla no aparece
Revisa estos puntos:
- Reinicia el servidor MCP para que la sincronización de seeds vuelva a ejecutarse
- Confirma qué directorio de datos está usando el proceso en ejecución
- Asegúrate de que el cliente de IA esté lanzando este repositorio actualizado o el paquete publicado actualizado
- Verifica el
iddel dataset o dashboard en eldatasets.jsonodashboards.jsonactivo
El renderer muestra filtros, pero el comportamiento parece más limitado que el esquema
Eso es esperado en un caso:
- El esquema de filtros de dashboard soporta valores tipo arreglo para
inynot_in - El renderer integrado actualmente expone esos operadores con un control de selección única, no de selección múltiple
Un tipo de gráfico parece faltar
Estado actual de implementación:
funnelexistecomboexiste- los multi-series agrupados y apilados existen como
bar_groupedybar_stacked multi_barsolo es el tipo de entrada al crear encreate_chart
Claude u otro cliente consume la cuota demasiado rápido
La causa histórica principal fueron respuestas MCP demasiado grandes, especialmente listados de datasets que devolvían payloads completos de filas. El servidor ahora devuelve resúmenes más pequeños para respuestas pesadas, y list_datasets devuelve metadatos en lugar de contenido completo.
Si un cliente todavía tiene una cuota diaria baja:
- usa
LUMINON_MCP_MODE=lite - usa
LUMINON_MCP_MODE=ultra-litepara los clientes más restrictivos - prioriza
list_datasetsydescribe_datasetantes de exploraciones más amplias - usa
list_dataset_contentsolo para el dataset que realmente quieras inspeccionar
Modelo mental recomendado
Usa el proyecto en este orden:
- Registra o inspecciona un dataset
- Crea un dashboard
- Agrega gráficos con
create_charto con payloads crudos usandoadd_chart_to_dashboard - Agrega filtros de dashboard con
update_dashboard_filters - Previsualiza en el renderer
- Usa snapshots y herramientas de restore cuando iteres
Si quieres el punto de entrada menos técnico, usa dashboard_nl y deja que el servidor traduzca la solicitud a las herramientas de menor nivel.