Every analysis tool takes a `schemaId`, so the first call is always the metadata one — that is the documented order and skipping it is where the tools fail. The credentials are Lumenore's, requested from their support, and the analytics run on Lumenore's backend, so the server is a thin local proxy: it processes in memory and stores nothing, but the data leaves your machine for Lumenore either way.
An MCP server over Lumenore's analytics platform. It converts a natural-language question into structured data against a Lumenore dataset, and offers six further tools that run specific analyses — trends, predictions, outliers, correlations, change detection and Pareto — over the same datasets.
- The available datasets and their schema IDs, which every other call needs — `get_dataset_metadata`
- A question in English turned into structured data for one `schemaId` — `nlq_to_data`
- Temporal patterns and forecasts — `get_trend_data`, `get_prediction_data`
- Anomalies, relationships and pattern shifts — `get_outlier_data`, `get_correlation_data`, `get_change_data`
- 80/20 impact analysis — `get_pareto_data`
- A consistent envelope on every tool: `status` is `success`, `validation_error` or `error`, so a failed call is distinguishable from an empty answer
Lumenore client credentials — `LUMENORE_CLIENT_ID` and `LUMENORE_SECRET`, obtained from Lumenore support — in a `.env` file, plus `SERVER_URL` if your instance is not the default `https://preview.lumenore.com`. Python 3.13+, `pip install -r requirements.txt`, then `python main.py`. The server listens on port 8080 and clients connect to `http://localhost:8080/mcp` over Streamable HTTP; the MCP connection itself takes no auth, since the credentials are used server-side against Lumenore.
