Skip to main content
Glama

Datanika MCP Server

mcp-name: io.datanika/datanika-mcp

MCP server for Datanika — browse connections, preview data, compile and validate dbt transformations, monitor runs, and manage pipelines from Claude Desktop.

Read-only by default. Pass --allow-write to enable creating resources and triggering pipeline runs.

Install

# From PyPI (recommended)
uvx datanika-mcp --help

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

Related MCP server: dagsmith

Claude Desktop Configuration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "datanika": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/datanika-io/datanika-core#subdirectory=datanika-mcp",
        "datanika-mcp",
        "--url", "https://app.datanika.io",
        "--api-key", "YOUR_API_KEY"
      ]
    }
  }
}

With write access

{
  "mcpServers": {
    "datanika": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/datanika-io/datanika-core#subdirectory=datanika-mcp",
        "datanika-mcp",
        "--url", "https://app.datanika.io",
        "--api-key", "YOUR_API_KEY",
        "--allow-write"
      ]
    }
  }
}

Environment variables

You can also configure via environment variables:

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

Available Tools

Always available (read-only)

Tool

Description

get_agent_tiers

Get the 5-tier agent capability stack

get_connection_types

List supported connection types with config schemas

list_connections

List all connections in the org

get_connection

Get connection details by ID

introspect_connection

List schemas/tables of a source connection

preview_connection

Preview first N rows of a table

query_connection

Execute a read-only SQL query

compile_transformation

Compile a dbt transformation (no execution)

preview_transformation

Compile + execute, return preview rows

list_uploads

List all uploads

list_pipelines

List all pipelines

list_transformations

List all transformations

list_runs

List runs with optional filters

get_run

Get run details by ID

get_run_logs

Get run logs

list_catalog

List catalog entries (source tables + dbt models)

get_catalog_entry

Get catalog entry details

Requires --allow-write

Tool

Description

create_connection

Create a new data connection

create_upload

Create a new upload (extract + load)

create_pipeline

Create a new pipeline (dbt orchestration)

create_transformation

Create a new dbt SQL transformation

bulk_import

Bulk-create resources from JSON v2 format

trigger_upload

Trigger an upload run

trigger_pipeline

Trigger a pipeline run

trigger_transformation

Trigger a transformation run

Self-hosted

Point --url at your instance. Use the backend port (8000) — 3000 is the Reflex frontend and serves no /api/v1:

datanika-mcp --url http://localhost:8000 --api-key etf_your_key

Releasing (maintainers)

datanika-mcp publishes to PyPI via GitHub Actions Trusted Publishing (OIDC — no stored API token). To cut a release (from master):

  1. Bump version in pyproject.toml.

  2. Tag and push — the tag version must match pyproject.toml:

    git tag mcp-v0.2.0
    git push origin mcp-v0.2.0
  3. The Release datanika-mcp to PyPI workflow builds the sdist + wheel and publishes. Verify: uvx datanika-mcp --help resolves from PyPI.

First-release setup: a one-time PyPI trusted-publisher must be configured (project datanika-mcp, repo datanika-io/datanika-core, workflow release-mcp.yml, environment pypi) before the first tag will publish. See the infra human-locker.

License

AGPL-3.0 — same as the core Datanika platform.

Available Tools

25 tools
bulk_importA

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.

Inputs: payload (required). Returns: result

compile_transformationA

Compile a dbt transformation — resolves Jinja, ref(), source(). No execution.

Args: transformation_id: The transformation to compile.

Inputs: transformation_id (required). Returns: result

create_connectionA

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.).

Inputs: name (required), config (required), connection_type (required). Returns: result

create_pipelineA

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.

Inputs: name (required), destination_connection_id (required), command, description. Returns: result

create_transformationA

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').

Inputs: name (required), sql_body (required), description, schema_name, +1 more. Returns: result

create_uploadA

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.

Inputs: name (required), source_connection_id (required), destination_connection_id (required), dlt_config, +1 more. Returns: result

get_agent_tiersB

Get the 5-tier agent capability stack — describes what the API can do.

Inputs: no named parameters. Returns: result

get_catalog_entryA

Get details of a specific catalog entry.

Args: entry_id: The catalog entry ID.

Inputs: entry_id (required). Returns: result

get_connectionC

Get details of a specific connection by ID.

Inputs: connection_id (required). Returns: result

get_connection_typesA

List all supported connection types with their config schemas.

Inputs: no named parameters. Returns: result

get_runB

Get details of a specific run by ID.

Args: run_id: The run ID to look up.

Inputs: run_id (required). Returns: result

get_run_logsC

Get the logs of a specific run.

Args: run_id: The run ID whose logs to fetch.

Inputs: run_id (required). Returns: result

introspect_connectionA

List schemas and tables of a source connection.

Args: connection_id: The connection to introspect. schema: Optional schema name to filter tables.

Inputs: connection_id (required), schema. Returns: result

list_catalogA

List all catalog entries (source tables and dbt models).

Inputs: no named parameters. Returns: result

list_connectionsC

List all connections in the organization.

Inputs: no named parameters. Returns: result

list_pipelinesA

List all pipelines (dbt transform orchestration) in the organization.

Inputs: no named parameters. Returns: result

list_runsA

List pipeline/upload/transformation runs with optional filters.

Args: target_type: Filter by type — 'upload', 'pipeline', or 'transformation'. status: Filter by status — 'pending', 'running', 'success', 'failed', 'cancelled'. limit: Max results (default 50, max 200).

Inputs: limit, status, target_type. Returns: result

list_transformationsA

List all dbt transformations in the organization.

Inputs: no named parameters. Returns: result

list_uploadsA

List all uploads (extract + load jobs) in the organization.

Inputs: no named parameters. Returns: result

preview_connectionB

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).

Inputs: table (required), connection_id (required), limit, schema. Returns: result

preview_transformationA

Compile and execute a transformation, returning preview rows.

Args: transformation_id: The transformation to preview. limit: Max rows to return (default 100, max 1000).

Inputs: transformation_id (required), limit. Returns: result

query_connectionA

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).

Inputs: query (required), connection_id (required). Returns: result

trigger_pipelineA

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.

Inputs: pipeline_id (required), wait. Returns: result

trigger_transformationA

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.

Inputs: transformation_id (required), wait. Returns: result

trigger_uploadA

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.

Inputs: upload_id (required), wait. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 25 tools

    Disambiguation5/5

    Each tool targets a distinct resource-action pair, and the descriptions clearly separate similar operations (e.g., preview vs. compile vs. trigger transformation; preview vs. query connection). The list_*/get_*/create_*/trigger_* families each map to unique entities or operations with no meaningful overlap. Even the similarly named list tools are differentiated by resource type and arguments.

    Naming Consistency5/5

    All 25 tools follow the same verb_noun pattern in snake_case, e.g., list_uploads, get_connection, create_pipeline, trigger_transformation. The verbs are consistently used across entity types, and there are no mixed conventions like camelCase or inconsistent verb forms. The naming is highly predictable and aids agent tool selection.

    Tool Count4/5

    At 25 tools, the set is on the higher end of typical MCP servers, but each tool covers a distinct operation across connections, uploads, pipelines, transformations, runs, and catalog. The count feels slightly heavy yet justified for a data platform with multiple resource types and lifecycle actions. It is not bloated with redundant tools; rather, it is a thorough but near-upper-limit surface.

    Completeness3/5

    The server provides comprehensive read and create operations (list, get, create, trigger) for all core entities, and useful extras like preview, compile, introspect, and bulk import. However, there are no update or delete operations for connections, uploads, pipelines, or transformations, which is a notable gap for full lifecycle management. Agents cannot modify or remove existing resources, which may force workarounds or leave dead ends.

    Maintenance

    ActivityActive
    ResponsivenessMixed handling

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server with 32 tools for ETL ingestion, AI-generated data quality rules, AI transformations, vector search, and natural-language SQL. Works across Postgres, MongoDB, Kafka, S3/MinIO, HashiCorp Vault, and five vector stores (Qdrant, Weaviate, Milvus, Chroma, pgvector).
      13
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server providing read-only Snowflake metadata tools (schemas, tables, queries, lineage) for agentic data pipeline generation, enabling natural-language-to-pipeline workflows with dbt, Airflow, and Great Expectations.
      1
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A governed MCP server exposing Databricks operations as tools for jobs orchestration, SQL execution, notebook creation, Unity Catalog governance, lineage, clusters, and DLT pipelines, with safety features like dry-run and audit logging.
      -
    • F
      license
      A
      quality
      B
      maintenance
      An MCP server that exposes a dbt project's run state as tools, enabling AI assistants to answer questions like 'is the warehouse healthy?' or 'what broke and why?' via plain English, using read-only access to dbt artifacts and warehouse data.
      4
      -