# datanika-io/datanika-core [Health: Active]

**Category:** 📊 Data Platforms  
**Repository:** https://github.com/datanika-io/datanika-core/tree/master/datanika-mcp  
**GitHub Stars:** 0  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/datanika-io-datanika-core

## Description
Read-only-by-default MCP server for Datanika, the open-source ELT + dbt platform: browse connections, preview data, run and compile dbt transforms, monitor runs, and manage pipelines. 25 tools; opt-in --allow-write enables create/trigger.

## Tools
Capabilities this server exposes over MCP:

- **get_agent_tiers** — Get the 5-tier agent capability stack — describes what the API can do.
- **get_connection_types** — List all supported connection types with their config schemas.
- **list_connections** — List all connections in the organization.
- **get_connection** — Get details of a specific connection by ID.
- **introspect_connection** — List schemas and tables of a source connection.

    Args:
        connection_id: The connection to introspect.
        schema: Optional schema name to filter tables.
    
- **preview_connection** — Preview the first N rows of a table from a source connection.

    Args:
        connection_id: The connection to query.
        table: Table name to preview.
        schema: Optional schema name.
        limit: Max rows to return (default 100).
    
- **query_connection** — Execute a read-only SQL query against a source connection.

    Args:
        connection_id: The connection to query.
        query: A single SELECT statement (no mutations allowed).
    
- **compile_transformation** — Compile a dbt transformation — resolves Jinja, ref(), source(). No execution.

    Args:
        transformation_id: The transformation to compile.
    
- **preview_transformation** — Compile and execute a transformation, returning preview rows.

    Args:
        transformation_id: The transformation to preview.
        limit: Max rows to return (default 100, max 1000).
    
- **list_uploads** — List all uploads (extract + load jobs) in the organization.
- **list_pipelines** — List all pipelines (dbt transform orchestration) in the organization.
- **list_transformations** — List all dbt transformations in the organization.
- **list_runs** — List pipeline/upload/transformation runs with optional filters.

    Args:
        target_type: Filter by type — 'upload', 'pipeline', or 'transformation'.
        status: Filter by status — 'pending', 'running', 'cancelling', 'success', 'failed',
            'cancelled'. A 'cancelling' run was asked to stop and is still finishing its work.
        limit: Max results (default 50, max 200).
    
- **get_run** — Get details of a specific run by ID.

    Args:
        run_id: The run ID to look up.
    
- **get_run_logs** — Get the logs of a specific run.

    Args:
        run_id: The run ID whose logs to fetch.
    
- **list_catalog** — List all catalog entries (source tables and dbt models).
- **get_catalog_entry** — Get details of a specific catalog entry.

    Args:
        entry_id: The catalog entry ID.
    
- **create_connection** — Create a new data connection.

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        name: Human-readable name for the connection.
        connection_type: One of the supported types (e.g. 'postgres', 'mysql', 'stripe').
        config: Connection-specific configuration (host, port, credentials, etc.).
    
- **create_upload** — Create a new upload (extract + load job).

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        name: Upload name.
        source_connection_id: ID of the source connection.
        destination_connection_id: ID of the destination connection.
        dlt_config: Optional dlt extraction config (load_mode, table_name, etc.).
        description: Optional description.
    
- **create_pipeline** — Create a new pipeline (dbt transform orchestration).

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        name: Pipeline name.
        destination_connection_id: ID of the destination connection.
        command: dbt command — 'run', 'build', 'test', 'seed', 'snapshot', 'compile'.
        description: Optional description.
    
- **create_transformation** — Create a new dbt SQL transformation.

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        name: Model name (letters, digits, underscores, hyphens; must start with letter or _).
        sql_body: dbt-compatible SQL (supports ref(), source(), Jinja).
        materialization: 'view', 'table', 'incremental', 'ephemeral', or 'snapshot'.
        description: Optional description.
        schema_name: Target schema (default 'staging').
    
- **bulk_import** — Bulk-import connections, uploads, pipelines, and transformations in one call.

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it. Uses the JSON v2 import format.
    Validates everything first — if any errors, nothing is created.

    Args:
        payload: JSON v2 import payload with version, connections, uploads,
                 pipelines, transformations sections. See AI_IMPORT_GUIDE.md.
    
- **trigger_upload** — Trigger an upload run.

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        upload_id: The upload to run.
        wait: If true, block until the run completes (up to 120s). The result
            is returned either way -- a run that FAILED comes back as
            ``{"status": "failed", "error_message": ...}``, not as an error.
            Check ``status``; do not assume a returned result means success.
            A wait that times out returns ``{"timed_out": true}`` with the run
            still going.
    
- **trigger_pipeline** — Trigger a pipeline run (dbt build/run/test).

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        pipeline_id: The pipeline to run.
        wait: If true, block until the run completes (up to 120s). The result
            is returned either way -- a run that FAILED comes back as
            ``{"status": "failed", "error_message": ...}``, not as an error.
            Check ``status``; do not assume a returned result means success.
            A wait that times out returns ``{"timed_out": true}`` with the run
            still going.
    
- **trigger_transformation** — Trigger a transformation run.

    Write tool: available only when this session was granted write access —
    the local server's --allow-write flag, or an OAuth consent in which the
    user approved write. Read-only sessions refuse it.

    Args:
        transformation_id: The transformation to run.
        wait: If true, block until the run completes (up to 120s). The result
            is returned either way -- a run that FAILED comes back as
            ``{"status": "failed", "error_message": ...}``, not as an error.
            Check ``status``; do not assume a returned result means success.
            A wait that times out returns ``{"timed_out": true}`` with the run
            still going.
    

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "datanika-core": {
    "command": "uvx",
    "args": ["--from","git+https://github.com/datanika-io/datanika-core#subdirectory=datanika-mcp","datanika-mcp"],
    "env": {
      "DATANIKA_URL": "",
      "DATANIKA_API_KEY": "",
      "DATANIKA_ALLOW_WRITE": ""
    }
  }
}
```

**Requires environment variables:** `DATANIKA_URL`, `DATANIKA_API_KEY`, `DATANIKA_ALLOW_WRITE` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What datanika-io/datanika-core does

The datanika-io/datanika-core MCP server exposes Datanika’s data-platform and dbt operations to an MCP-compatible AI client. It is designed for inspecting an organization’s connections, source structures, uploaded data, transformations, pipelines, catalog entries, and execution history.

Its default mode is read-only. In that mode, an agent can retrieve connection metadata, inspect schemas and tables, preview table rows, run read-only SQL, compile dbt transformations, preview transformation results, and examine pipeline or transformation runs. Write and execution-management operations become available only when the server is started with `--allow-write`.

## How it works

The server communicates with a Datanika instance through its API. The target instance and API credentials can be supplied as command-line options or environment variables. Hosted deployments can use `https://app.datanika.io`; self-hosted deployments should point to the backend API port, typically `8000`, rather than the Reflex frontend port `3000`.

The MCP process can be launched with `uvx` from the published PyPI package or directly from the repository’s `datanika-mcp` subdirectory. Claude Desktop can register the process as an MCP server using a `command` and `args` configuration. The same stdio process model can be used by compatible MCP clients.

## Setup and configuration

Install or run the server with one of these commands:

```bash
uvx datanika-mcp --help
uvx --from "git+https://github.com/datanika-io/datanika-core#subdirectory=datanika-mcp" datanika-mcp --help
```

A basic invocation supplies the Datanika URL and API key:

```bash
datanika-mcp --url https://app.datanika.io --api-key YOUR_API_KEY
```

The equivalent environment variables are `DATANIKA_URL`, `DATANIKA_API_KEY`, and `DATANIKA_ALLOW_WRITE`. Set the write variable to `true`, or pass `--allow-write`, when the client must create resources or trigger runs. Keep the default read-only mode when agents should only inspect or validate data workflows.

## Tools and capabilities

Read-only tools cover:

- Agent capability tiers and supported connection types
- Connection lists, connection details, schemas, and tables
- Table-row previews and read-only SQL queries
- dbt transformation compilation and result previews
- Upload, pipeline, transformation, and run listings
- Run details and logs
- Catalog entries for source tables and dbt models

With write access enabled, the server adds tools for creating connections, uploads, pipelines, and dbt SQL transformations. It can also bulk-import resources from JSON v2 format and trigger upload, pipeline, and transformation runs.

## Limitations and notes

Write operations are not available by default and should be enabled deliberately. Transformation previews compile and execute a transformation to return preview rows, while compilation alone does not execute it. For self-hosted installations, using the frontend port instead of the backend API port will not provide the required `/api/v1` endpoints.

The project is licensed under AGPL-3.0, matching the core Datanika platform.

_Full upstream README: https://allmcps.com/mcp/datanika-io-datanika-core/readme_

