konsol-mcp
by grynn-in
README.md
# konsol-cli
Command-line client for configuring the [konsol](https://github.com/grynn-in/konsol) Frappe app.
All configuration goes through konsol — never dbt or ClickHouse directly.
## Install
```bash
cd konsol_cli
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
Optional MCP server:
```bash
pip install -e ".[mcp]"
```
## Two ways to connect
### 1. Local Docker (default)
Talks to konsol by running `bench execute` inside your Docker stack.
```bash
konsol dimension list --compose-file ../repo/docker-compose.yml
```
### 2. Remote HTTP API
Talks to any running konsol site over the Frappe API. Use this from your laptop against a remote server, in CI, or with MCP.
**First, create API keys in Frappe:**
1. Log into the site as an EPM Admin user
2. Go to **User** → your user → **Settings** tab → **API Access**
3. Click **Generate Keys** and save the key + secret
**Then run commands:**
```bash
konsol --backend api \
--url http://localhost:8069 \
--site konsolidat.local \
--api-key YOUR_KEY \
--api-secret YOUR_SECRET \
dimension list
```
When connecting to `localhost:8069`, keep `--site` set — the CLI sends it as the `Host` header so Frappe routes to the right site.
**Optional config file** — copy `config.example.toml` to `~/.config/konsol/config.toml` (connection settings only).
**Credentials (pick one, never commit):**
```bash
cp secrets.example.env ~/.config/konsol/secrets.env && chmod 600 ~/.config/konsol/secrets.env
# or: secrets.example.toml → ~/.config/konsol/secrets.toml
```
The CLI loads `secrets.env` first, then `secrets.toml`. Shell env vars take precedence.
**Grok MCP** — configs use `${KONSOL_API_KEY}` placeholders. Before starting Grok:
```bash
source scripts/load-konsol-secrets.sh # exports vars, does not print them
grok mcp doctor konsol
```
See `.grok/config.toml` (project-scoped, safe to commit) — not plaintext secrets.
## Commands
```bash
# Dimensions
konsol dimension list
konsol dimension show dim_cost_center
konsol dimension create dim_project --source-column Project --label "Project"
konsol dimension publish dim_project
konsol dimension unpublish dim_project
# Measures
konsol measure list
konsol measure create period_headcount --expression "sum(headcount)" --label "Headcount"
konsol measure unpublish period_headcount
# Fact tables
konsol fact list
konsol fact show headcount
konsol fact create my_fact --label "My Fact" --source-type Statistical \
--clickhouse-table epm_staging.fact_x --scenario-key statistical
konsol fact publish my_fact
konsol fact unpublish my_fact
# Connectors & ERP sources
konsol connector list
konsol connector show CONN-00001
konsol connector create --name "ERPNext Demo" --erp-type erpnext --entity-id ENT01
konsol connector delete CONN-00001
konsol source list
# Config (GitOps YAML)
konsol config export -o model.yaml
konsol config diff model.yaml
konsol config apply model.yaml [--publish] [--prune] [--dry-run]
# Schema
konsol schema apply
konsol schema status
```
## MCP (AI clients)
Install the optional extra, then add `mcp.example.json` to your MCP client config (Cursor, Claude Desktop, etc.):
```bash
pip install -e ".[mcp]"
```
Set `KONSOL_URL`, `KONSOL_SITE`, `KONSOL_API_KEY`, and `KONSOL_API_SECRET` in the server env block, then run `konsol-mcp` (stdio transport).
Connector Airbyte tools (v0.10.0+): `test_connector_writeback`, `provision_connector_airbyte` — require the matching konsol app endpoints on your site.
Debug with the MCP Inspector:
```bash
npx @modelcontextprotocol/inspector konsol-mcp
```
## Environment variables
| Variable | Purpose |
|----------|---------|
| `KONSOL_BACKEND` | `bench` (default) or `api` |
| `KONSOL_SITE` | Frappe site name |
| `KONSOL_URL` | Site URL for api backend |
| `KONSOL_API_KEY` | Frappe API key |
| `KONSOL_API_SECRET` | Frappe API secret |
| `KONSOL_COMPOSE_FILE` | Path to docker-compose.yml for bench backend |
## Docker deploy note
`bench get-app` installs konsol from **git HEAD**, not uncommitted files. Commit konsol changes before `docker compose build frappe_backend`.
## Architecture
```
konsol-cli / konsol-mcp
→ bench execute or HTTP /api/method/konsol.cli_api.*
→ konsol.config_service → Frappe DocTypes
→ publish / apply_schema → dbt vars, ClickHouse DDL, Pipeline Build Request
```
## Tests
```bash
cd konsol_cli && .venv/bin/python -m pytest tests/ -q
cd repo/docker/frappe/konsol && PYTHONPATH=konsol .venv/bin/python -m pytest konsol/tests/test_config_service.py -q
```This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues