Direct Engine Access

For developers and power users, ChakataStat can expose the native engine directly: watch what crosses the engine boundary, and let other programs drive the app. These features are gated behind Advanced mode because they are powerful.

Advanced mode

Turn it on in Settings → Advanced. It is off by default. Enabling it reveals the Engine Diagnostics panel; turning it off hides it again. Your data and analyses are unaffected either way.

The SQL console was removed. Earlier versions had an Advanced-mode SQL console (a raw SELECT against your data). It was retired with the engine's move away from Polars. For SQL-style work, export to Parquet (File → Export) and query the file with any SQL tool, or use the Python client's to_polars().

Engine diagnostics

View → Engine Diagnostics (Advanced mode only) opens a panel showing:

  • the engine's description (which native library is loaded);
  • the frame schema exactly as the engine sees it — every column and its storage type;
  • a live, timed log of recent engine operations, each expandable to the raw JSON request that crossed the FFI boundary.

This turns the opaque native seam into something you can inspect and debug — handy when an analysis behaves unexpectedly and you want to see precisely what was sent.

Driving ChakataStat from another program (MCP)

ChakataStat can run as an MCP server — a headless host that exposes its analysis tools over JSON-RPC so an external agent or program can drive it:

ChakataStat --mcp dataset.ckd
  • Every analysis tool is advertised to the MCP client, which can run them and read the results as data.
  • The dataset itself is an MCP resource: a client can list the variables and read the rows without spending a tool call.
  • A read-only profile (ChakataStat --mcp --read-only) serves only analyses and blocks transforms that would change data.
  • User-defined tools — a saved .cks script registered as a named tool — are advertised to MCP clients (and the AI assistant) too.

This is the same seam the AI assistant uses internally and the same one the Python client (see Reproducibility) drives. One caveat: --mcp opens its own dataset headless; it is not attached to a separately running GUI window's live data.

Where the design is written down

The full rationale — why Python is an external client rather than embedded, and how tool allowlisting works — is in the project's design notes, which ship with the source rather than with the application.