Skip to main content
Glama
Cloudera Data Visualization MCP Server

Cloudera Data Visualization MCP Server

by kevintalbert

Cloudera Data Visualization MCP Server

A Model Context Protocol server that exposes the full Cloudera Data Visualization (CDV) REST API to AI agents. This lets LLMs list, create, update, and delete CDV resources—groups, users, roles, segments, filter associations, workspaces, datasets, visuals, and data connections—as well as run jobs, query the data API, import/export migrations, and perform operational debugging tasks.

Tools

Groups

Tool

Description

list_groups

List all groups

get_group(object_id)

Get a group by ID

create_group(body)

Create a new group

update_group(object_id, body)

Update a group by ID

delete_group(object_id)

Delete a group by ID

Users

Tool

Description

list_users

List all users

get_user(object_id)

Get a user by ID

update_user(object_id, body)

Update a user by ID

edit_user_profile(username, body)

Edit a user's profile by username

Roles

Tool

Description

list_roles

List all roles

get_role(object_id)

Get a role by ID

create_role(body)

Create a new role

update_role(object_id, body)

Update a role by ID

delete_role(object_id)

Delete a role by ID

Segments

Tool

Description

list_segments

List all segments

get_segment(object_id)

Get a segment by ID

create_segment(body)

Create a new segment

update_segment(object_id, body)

Update a segment by ID

delete_segment(object_id)

Delete a segment by ID

Filter Associations

Tool

Description

list_filter_associations

List all filter associations

get_filter_association(object_id)

Get a filter association by ID

create_filter_association(body)

Create a new filter association

update_filter_association(object_id, body)

Update a filter association by ID

delete_filter_association(object_id)

Delete a filter association by ID

Workspaces

Tool

Description

list_workspaces

List all workspaces

get_workspace(object_id)

Get a workspace by ID

create_workspace(body)

Create a new workspace

update_workspace(object_id, body)

Update a workspace by ID

delete_workspace(object_id)

Delete a workspace by ID

Datasets

Tool

Description

list_datasets

List all datasets

get_dataset(object_id)

Get a dataset by ID

create_dataset(body)

Create a new dataset

update_dataset(object_id, body)

Update a dataset by ID

delete_dataset(object_id)

Delete a dataset by ID

Visuals

Tool

Description

list_visuals

List all visuals (charts/dashboards)

get_visual(object_id)

Get a visual by ID

create_visual(body)

Create a new visual (raw API body)

update_visual(object_id, body)

Update a visual by ID

delete_visual(object_id)

Delete a visual by ID

create_smart_visual(dataset_id, visual_type, title, columns, workspace_id?)

Create a chart visual — only exposes patterns confirmed to work via the API

Supported visual_type values for create_smart_visual:

Type

Use case

Notes

trellis-bars

Bar chart — one measure vs. one dimension

Measure on x, dimension on y

trellis-groupedbars

Grouped bars — one SUM measure, split by color dimension

Use "shelf": "color_shelf" for grouping

pie

Pie chart — SUM measure by dimension

Dimension auto-placed on color_shelf

All other CDV chart types require configuration in CDV's interactive builder and are blocked here to prevent broken visuals.

What is blocked and why:

Pattern

Error returned

Alternative

count aggregate

CDV generates count([col]) that Impala rejects

Use sum on a numeric column

trellis-lines, scatter, etc.

Unsupported visual type

Use CDV's builder; use query_dataapi for the data

Columns starting with avg_, sum_, etc. as measure targets

CDV tokenizer bug produces avg([avg_col])

Choose a different column

Date/timestamp columns as dimensions

CDV bracket conversion fails for TIMESTAMP

Use CDV's builder for time-series

filters parameter

WHERE ([col]) bracket SQL Impala rejects

Use query_dataapi for filtered queries; add filters in CDV's builder

Deleting dashboards

Cascade-deletes ALL linked chart visuals

Record visual IDs first; use delete_visual carefully

Connections

Tool

Description

list_connections

List all data connections

get_connection(object_id)

Get a connection by ID

create_connection(body)

Create a new connection

update_connection(object_id, body)

Update a connection by ID

delete_connection(object_id)

Delete a connection by ID

export_connection(object_id)

Export a connection definition by ID

Migrations

Tool

Description

export_migration

Export all CDV artifacts as a migration bundle

import_migration(body)

Import a CDV migration bundle

Data API

Tool

Description

query_dataapi_get(params)

Query /apps/dataapi via GET with optional parameters

query_dataapi_post(body)

Query /apps/dataapi via POST with a JSON body

query_data_get(params)

Query /api/data via GET with optional parameters

query_data_post(body)

Query /api/data via POST with a JSON body

Jobs

Tool

Description

run_job(body)

Trigger a job run

run_extract(body)

Run an existing extract job

create_extract(body)

Create a new extract job definition

Debugging / Operations

Tool

Description

get_gc_monitor

Retrieve GC monitor statistics

post_gc_monitor(body)

Trigger a GC monitor action

get_gc_stats

Retrieve GC statistics

post_gc_stats(body)

Trigger a GC stats action

get_log_levels

Get log levels for all loggers

set_log_level(body)

Set the default log level

get_logger_level(logger_name)

Get log level for a specific logger

set_logger_level(logger_name, body)

Set log level for a specific logger

get_toggle_cprofile

Get current cProfile tracing state

toggle_cprofile(body)

Toggle cProfile tracing on/off

reset_dataconnection_cache(connection_id)

Reset the cache for a data connection

reset_dataset_cache(dataset_id)

Reset the cache for a dataset

Related MCP server: Tableau MCP Server

Examples

Cloudera Agent Studio — AI Assisted Supply Chain

The screenshots below show the CDV MCP Server being used inside Cloudera Agent Studio as part of an AI-powered supply chain workflow. The user asked a natural language question and the agent automatically:

  1. Discovered the available connections and datasets

  2. Explored the procurement_transactions table schema

  3. Planned the right visualization type and column mapping

  4. Called create_smart_visual to build a stacked bar chart in CDV

  5. Called create_dashboard to make it visible in the Logistics MCP Demo workspace

Prompt: "Which suppliers are driving the most urgent spend? Build a stacked bar chart in Data viz."

Step 1 — Agent plans the visualization

The agent reasons through the dataset, identifies supplier_name as the dimension, priority_code as the color grouping, and total_price (sum) as the measure, then maps these to a trellis-groupedbars visual type.

Agent Studio — planning the urgent spend visualization

Step 2 — Visual created and linked in CDV

The agent confirms the visualization details, creates the chart via create_smart_visual, wraps it in a dashboard with create_dashboard, and returns a direct link to the new artifact in the Logistics MCP Demo workspace.

Agent Studio — urgent spend chart created in CDV


Agent Workflow Guidance

CDV Data Hierarchy

CDV organizes data in three layers, each building on the one below:

Connection  (links to an external database, e.g. Impala, Hive, Spark SQL)
  └── Dataset  (points to a specific table or query within that connection)
        └── Visual / Dashboard  (chart or dashboard built on a dataset)

Agents must respect this hierarchy when exploring or creating resources.

Discovery — Always Check Before Creating

Before creating anything, always discover what already exists at each level.

Step 1 — Connections

Call list_connections to see what data sources are registered in CDV.
Present the list to the user and identify which connection holds their data.
Only offer create_connection if no suitable connection exists and the user explicitly asks for one.

Step 2 — Datasets

Call list_datasets to see what datasets already exist (these are built on top of connections).
Present the results and ask the user which dataset to use.
Only offer create_dataset if no suitable dataset exists on the right connection and the user explicitly confirms they want a new one. Note that create_dataset requires a dc_id — the connection ID from Step 1.

Step 3 — Visuals / Dashboards

Call list_visuals to see what charts/dashboards already exist before building new ones.
Only call create_smart_visual or create_visual once the dataset has been confirmed.

Never assume anything needs to be created. CDV instances typically already have connections, datasets, and even visuals the user can reuse.

Correct flow:

User: "Build me a bar chart of shipment costs"
Agent: list_connections()            ← discover data sources
Agent: "I found these connections: ..."
Agent: list_datasets()               ← discover existing datasets
Agent: "Which dataset should I use?"
User: "Use supplier_shipping_performance"
Agent: list_workspaces()             ← identify target workspace
Agent: create_smart_visual(...)      ← now build the visual

Incorrect flow (avoid):

User: "Build me a bar chart of shipment costs"
Agent: create_connection(...)        ← ❌ never skip discovery
Agent: create_dataset(...)           ← ❌ never create without confirming first
Agent: create_smart_visual(...)

Workspace Discovery — Same Rule Applies

Always call list_workspaces before creating a visual or dashboard. Identify the correct workspace ID from the list; only call create_workspace if the user explicitly requests a new one.

Visual Creation Workflow

When create_smart_visual is used:

  1. Call list_connections → understand available data sources.

  2. Call list_datasets → confirm dataset with user (note which dc_id it belongs to).

  3. Call list_workspaces → identify the target workspace ID.

  4. Call create_smart_visual with dataset_id, workspace_id, and column specs.

    • If the Smart Visual API returns 404 (not available on all CDV instances), the tool automatically falls back to the standard admin API using the provided workspace_id.

Environment Variables

Variable

Required

Description

CDV_BASE_URL

Yes

Base URL of your CDV deployment (e.g. https://my-cdv.example.com)

CDV_API_KEY

Yes

CDV API key — sent as Authorization: apikey <key>

MCP_TRANSPORT

No

Transport protocol: stdio (default), http, or sse

Usage with Claude Desktop

Add the following to the mcpServers section of your claude_desktop_config.json:

{
  "mcpServers": {
    "cdv-mcp-server": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/kevintalbert/cdv-mcp-server@main",
        "run-server"
      ],
      "env": {
        "CDV_BASE_URL": "https://my-cdv-instance.example.com",
        "CDV_API_KEY": "your-api-key-here",
        "CDV_USERNAME": "vizapps_admin",
        "CDV_PASSWORD": "vizapps_admin"
      }
    }
  }
}

Option 2: Local installation (after cloning the repository)

{
  "mcpServers": {
    "cdv-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/CDV-MCP-Server",
        "run",
        "src/cdv_mcp_server/server.py"
      ],
      "env": {
        "CDV_BASE_URL": "https://my-cdv-instance.example.com",
        "CDV_API_KEY": "your-api-key-here",
        "CDV_USERNAME": "vizapps_admin",
        "CDV_PASSWORD": "vizapps_admin"
      }
    }
  }
}

For Option 2, replace /path/to/CDV-MCP-Server with your local path.

Local Development

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

# Run the server (stdio transport, default)
uv run run-server

# Run with HTTP transport
MCP_TRANSPORT=http uv run run-server

You can also create a .env file in the project root with your credentials:

CDV_BASE_URL=https://my-cdv-instance.example.com
CDV_API_KEY=your-api-key-here
CDV_USERNAME=vizapps_admin
CDV_PASSWORD=your-cdv-password

Transport

The MCP server's transport protocol is configurable via the MCP_TRANSPORT environment variable:

  • stdio (default) — communicate over standard input/output. Useful for local tools, CLI scripts, and integrations like Claude Desktop.

  • http — expose an HTTP server. Useful for web-based deployments and microservices.

  • sse — use Server-Sent Events (SSE) transport. Useful for existing web-based deployments that rely on SSE.

Authentication

The server uses two separate authentication mechanisms with different capability levels:

Credential

Env Var

Required

Unlocks

CDV Admin API Key

CDV_API_KEY

Always

Data exploration, admin CRUD, connections, datasets, workspaces, users, groups, migrations, jobs

CDV Username + Password

CDV_USERNAME / CDV_PASSWORD

Optional

create_smart_visual, create_dashboard, create_visual, update_visual, delete_visual

Without CDV_USERNAME / CDV_PASSWORD

When session credentials are absent, chart and dashboard creation tools are not registered in the MCP server at all — they will not appear in the agent's tool list. The server operates in a read/explore-only mode for visuals:

  • ✅ query_dataapi — run SQL queries, explore data

  • ✅ list_connections, list_datasets, list_workspaces — discover resources

  • ✅ list_visuals, get_visual — inspect existing dashboards

  • ✅ All admin tools (users, groups, roles, datasets, etc.)

  • ❌ create_smart_visual — not available

  • ❌ create_dashboard — not available

  • ❌ create_visual / update_visual / delete_visual — not available

Why two credentials?

CDV's admin API (arc/adminapi/v1/visuals) creates visual metadata (title, type, dataset) but does not persist shelf configurations (which columns appear on which axes). Shelf data is stored through CDV's UI API (arc/reports/report/{id}), which requires a browser-style session login. Without CDV_USERNAME/CDV_PASSWORD, visuals would be created as empty skeletons that render blank in CDV's frontend.

The session is cached in memory and reused across tool calls within a server process.


Copyright (c) 2025 - Cloudera, Inc. All rights reserved.

Available Tools

66 tools
create_connectionA

Create a new CDV data connection.

IMPORTANT: Do NOT call this without first calling list_connections() and confirming with the user that no existing connection points to their target data source.

body fields: name (str), type (str), connection_info (object with host, port, etc.).

Inputs: body (required). Returns: result

create_dashboardA

Create a CDV dashboard that groups one or more chart visuals into a single visible view.

Use this tool after create_smart_visual() to make charts visible in the CDV workspace UI. Chart visuals created via the API are standalone artifacts; they only appear in the CDV workspace when placed inside a dashboard.

visual_ids: list of visual IDs to include (in display order, left-to-right, top-to-bottom). Record these IDs — deleting the dashboard also deletes all linked visuals. workspace_id: the workspace where the dashboard will be created (from list_workspaces()). dataset_id: optional — the primary dataset for the dashboard (for global filter context). Use the dataset_id shared by most of the included visuals. description: optional short description shown in the workspace.

Visuals are automatically tiled in a 2-column grid. Odd trailing visuals span full width.

WARNING: Deleting a dashboard (via delete_visual) permanently deletes all linked chart visuals. Always save the visual IDs before deleting a dashboard.

Returns the new dashboard's id and url.

Example workflow:

  1. call list_workspaces() → choose workspace_id

  2. call list_datasets() → confirm dataset_id with the user

  3. call create_smart_visual() × N → collect visual_ids

  4. call create_dashboard(title="My Dashboard", workspace_id=4, visual_ids=[131, 132, 133], dataset_id=12)

Inputs: title (required), workspace_id (required), visual_ids (required), dataset_id, +1 more. Returns: result

create_datasetA

Create a new CDV dataset backed by an existing data connection.

A dataset points to a specific table or SQL query within a connection (dc_id). Visuals and dashboards are built on top of datasets.

IMPORTANT: Do NOT call this without first calling list_connections() to identify the right connection (dc_id) and list_datasets() to confirm no suitable dataset already exists. Always get explicit user confirmation before creating a new dataset.

body fields: dc_id (int), name (str), type (str), detail (str, e.g. schema.table), description (str), info (object), lvname (str), settings (object).

Inputs: body (required). Returns: result

create_extractC

Create a CDV data extract job.

Inputs: src_dataset_id (required), tgt_dataconnection_id (required), tgt_dbname (required), tgt_tablename (required), +4 more. Returns: result

create_filter_associationC

Create a new CDV filter association linking a segment to users or groups.

Inputs: body (required). Returns: result

create_groupA

Create a new CDV group.

body fields:

  • name (str, required): group name

  • users (list[{id: int}], optional): list of user IDs to add

Inputs: body (required). Returns: result

create_roleB

Create a new CDV role. body fields: name, permissions (list).

Inputs: body (required). Returns: result

create_segmentB

Create a new CDV row-level security segment. body fields: name, filter_definition.

Inputs: body (required). Returns: result

create_smart_visualA

Create a CDV chart visual that reliably renders data without SQL errors.

This tool only exposes visual types and column configurations that are confirmed to work through the CDV API. Unsupported patterns are rejected with a clear error and guidance on what to use instead.

SUPPORTED visual_type values:

  • "trellis-bars" Best for one measure vs. one dimension (horizontal bars).

  • "trellis-groupedbars" One SUM measure grouped by a color dimension.

  • "pie" One SUM measure broken down by one dimension.

NOT SUPPORTED via this tool (use CDV's interactive builder instead):

  • trellis-lines, trellis-areas (time-series; timestamp dimensions fail via API)

  • scatter, histogram, boxplot (require CDV builder shelf configuration)

  • table, crosstab (use query_dataapi for tabular results)

  • All other chart types

Each entry in columns must have:

  • column_name (str, required): exact column name in the dataset.

  • aggregate_function (str, optional): sum | avg | min | max Columns WITH this field are measures; columns WITHOUT are dimensions. IMPORTANT: "count" is not supported — use "sum" on a numeric column instead.

  • shelf (str, optional): explicit shelf override. Use "color_shelf" to add a grouping/color dimension to bar or pie charts.

COLUMN COMPATIBILITY RULES (enforced, CDV-side constraints):

  • At least one measure (column with aggregate_function) is required.

  • Column names that start with avg_, sum_, min_, max_, count_ CANNOT be used as aggregate targets (CDV's tokenizer confuses them with functions). Example: avg(avg_lead_time_days) fails. Use a different column.

  • Date/timestamp columns (names with "date", "time", "year", etc.) should NOT be used as dimensions — CDV fails to generate valid SQL for them. Use CDV's builder for time-series charts.

FILTERS ARE NOT SUPPORTED: CDV's filter SQL generation always produces bracket notation in the WHERE clause that Impala cannot parse. After creating the visual, open it in CDV's interactive builder to add filters manually.

EXAMPLES:

Total spend by supplier (bar chart): columns=[ {"column_name": "supplier_name"}, {"column_name": "total_price", "aggregate_function": "sum"}, ]

Supplier spend grouped by priority (grouped bar): visual_type="trellis-groupedbars", columns=[ {"column_name": "supplier_name"}, {"column_name": "priority_code", "shelf": "color_shelf"}, {"column_name": "total_price", "aggregate_function": "sum"}, ]

Spend breakdown by item (pie chart): visual_type="pie", columns=[ {"column_name": "item_description"}, {"column_name": "total_price", "aggregate_function": "sum"}, ]

VISIBILITY: Chart visuals do NOT appear in the CDV workspace until you call create_dashboard() with their IDs. Always follow up with create_dashboard().

Returns the created visual's metadata including its id, visual_id, and url.

Inputs: dataset_id (required), visual_type (required), title (required), columns (required), +1 more. Returns: result

create_visualA

Create a CDV visual using the raw admin API.

Required body fields: title (str), type (str), dataset_id (int), workspace_id (int). Optional: description (str), data (object — visual spec), perm (list[str]).

Inputs: body (required). Returns: result

create_workspaceB

Create a new CDV workspace.

body fields: name (str), desc (str), editable (bool), perms (list[str]), acl (list of [entry_type, permission, name] triplets).

Inputs: body (required). Returns: result

delete_connectionB

Delete a CDV data connection by its numeric ID.

Inputs: object_id (required). Returns: result

delete_datasetB

Delete a CDV dataset by its numeric ID.

Inputs: object_id (required). Returns: result

delete_filter_associationB

Delete a CDV filter association by its numeric ID.

Inputs: object_id (required). Returns: result

delete_groupB

Delete a CDV group by its numeric ID.

Inputs: object_id (required). Returns: result

delete_roleB

Delete a CDV role by its numeric ID.

Inputs: object_id (required). Returns: result

delete_segmentB

Delete a CDV segment by its numeric ID.

Inputs: object_id (required). Returns: result

delete_visualA

Delete a CDV visual or dashboard by its numeric ID.

WARNING — CASCADE DELETION: Deleting a dashboard (type="dashboard") also permanently deletes ALL chart visuals linked to it as widgets. If you need to preserve the chart visuals, note their IDs before deleting the dashboard.

Inputs: object_id (required). Returns: result

delete_workspaceB

Delete a CDV workspace by its numeric ID.

Inputs: object_id (required). Returns: result

edit_user_profileB

Edit the profile of a CDV user identified by username (e.g. update email, name).

Inputs: username (required), body (required). Returns: result

export_connectionC

Export a CDV data connection definition by its numeric ID.

Inputs: object_id (required). Returns: result

export_migrationA

Export all CDV visual artifacts (dashboards, datasets, connections) as a migration bundle.

Inputs: no named parameters. Returns: result

get_connectionB

Get a single CDV data connection by its numeric ID.

Inputs: object_id (required). Returns: result

get_datasetC

Get a single CDV dataset by its numeric ID.

Inputs: object_id (required). Returns: result

get_filter_associationB

Get a single CDV filter association by its numeric ID.

Inputs: object_id (required). Returns: result

get_gc_monitorA

Check whether GC monitoring is currently enabled on the CDV server.

Inputs: no named parameters. Returns: result

get_gc_statsA

Retrieve the current GC debug flags from the CDV server.

Inputs: no named parameters. Returns: result

get_groupA

Get a single CDV group by its numeric ID.

Inputs: object_id (required). Returns: result

get_logger_levelB

Retrieve the current log level for a specific logger by name.

Inputs: logger_name (required). Returns: result

get_log_levelsA

Retrieve the current log level for the root logger on the CDV server.

Inputs: no named parameters. Returns: result

get_roleB

Get a single CDV role by its numeric ID.

Inputs: object_id (required). Returns: result

get_segmentA

Get a single CDV segment by its numeric ID.

Inputs: object_id (required). Returns: result

get_toggle_cprofileA

Check whether cProfile profiling is enabled for a CDV server function. Defaults to sqlrun.views_jsonselect / jsonselect_parallel if not specified.

Inputs: module, owner, func. Returns: result

get_userA

Get a single CDV user by their numeric ID.

Inputs: object_id (required). Returns: result

get_visualA

Get a single CDV visual by its numeric ID.

Inputs: object_id (required). Returns: result

get_workspaceA

Get a single CDV workspace by its numeric ID.

Inputs: object_id (required). Returns: result

import_migrationC

Import a CDV migration bundle.

Inputs: dataconnection_name (required), json_data, sanity_check. Returns: result

list_connectionsA

STEP 1 of every data workflow — list all CDV data connections.

A data connection is the top-level link to an external database (Impala, Hive, etc.). The connection's numeric ID (dc_id / dataconnection_id) is used when: • Querying raw SQL via query_dataapi(dataconnection_id=, query="SELECT ...") • Creating a new dataset with create_dataset(body={"dc_id": , ...})

WORKFLOW — always run this FIRST, then:

  1. list_connections() → identify the right connection and its ID

  2. list_datasets() → find existing datasets built on that connection

  3. query_dataapi(...) → explore table columns and sample data

  4. list_workspaces() → get workspace_id for visual creation

  5. create_smart_visual(...) → create charts

  6. create_dashboard(...) → make charts visible in CDV

Never create a new connection unless the user explicitly requests it and no existing connection points to their data source.

Inputs: no named parameters. Returns: result

list_datasetsA

STEP 2 of the workflow — list all datasets (named tables/views) available in CDV.

In CDV: Connection → Dataset → Visual → Dashboard A dataset is a named pointer to a specific table or SQL query within a connection. Visuals and dashboards are built on datasets (using their numeric dataset_id).

AFTER calling this tool, you will have dataset names and IDs, but NOT column names. ALWAYS follow up with: query_dataapi(dataconnection_id=<dc_id>, query="SELECT * FROM <schema.table> LIMIT 3") to discover the exact column names before creating any visual.

Workflow reminder:

  1. list_connections() → find dc_id (connection ID for SQL queries)

  2. list_datasets() → find dataset_id and table name (THIS TOOL)

  3. query_dataapi(...) → discover column names and sample data ← DO THIS NEXT

  4. list_workspaces() → find workspace_id for visual creation

  5. create_smart_visual(...)

  6. create_dashboard(...)

Only call create_dataset() if no suitable dataset exists AND the user explicitly confirms they want a new one. Always confirm with the user before creating anything.

Inputs: no named parameters. Returns: result

list_filter_associationsA

List all filter associations (segment-to-user/group mappings) defined in CDV.

Inputs: no named parameters. Returns: result

list_groupsA

List all groups defined in CDV.

Inputs: no named parameters. Returns: result

list_rolesB

List all roles defined in CDV.

Inputs: no named parameters. Returns: result

list_segmentsB

List all row-level security segments defined in CDV.

Inputs: no named parameters. Returns: result

list_usersB

List all users defined in CDV.

Inputs: no named parameters. Returns: result

list_visualsA

List CDV visuals (dashboards). Optionally filter by dataset_id or workspace_id.

IMPORTANT — CDV API LIMITATION: This endpoint only returns dashboard-type visuals (type="dashboard"). Standalone chart visuals created via create_smart_visual() are NOT included in this listing even when they exist in the workspace.

To work with standalone chart visuals:

  • Use get_visual(object_id) with the id returned when the visual was created.

  • Use create_dashboard() to group multiple chart visuals into a visible dashboard.

After creating chart visuals with create_smart_visual(), always call create_dashboard() to combine them into a single navigable dashboard so the user can see them in the CDV UI.

Inputs: dataset_id, workspace_id. Returns: result

list_workspacesA

STEP 4 of every visualization workflow — get the workspace_id required by create_smart_visual.

CDV workspaces organize visuals and dashboards (similar to folders). The workspace_id returned here is a REQUIRED parameter for create_smart_visual() and create_dashboard(). Without it, visual creation will fail.

Call this before creating any visual. Choose the workspace that matches the project context (e.g. a dedicated project workspace or "Public").

Inputs: no named parameters. Returns: result

query_dataapiA

STEP 3 & 5 of the workflow — explore columns, answer filtered questions, get raw data.

This is the MOST IMPORTANT tool for data exploration and filtered analysis. It runs arbitrary SQL against the database and returns structured results.

Returns: {"columns": [...], "rows": [{col: val}, ...]}

══ USE THIS TOOL FOR ══════════════════════════════════════════════════════

  1. COLUMN DISCOVERY (Step 3) — always do this before creating any visual: query_dataapi(dataconnection_id=10, query="SELECT * FROM schema.table_name LIMIT 3") → reveals exact column names, data types, and sample values. → column names are case-sensitive; use EXACTLY as returned here.

  2. FILTERED QUESTIONS — when the user asks about a specific subset of data: "Show shipping codes for Mock Vendor X" "What is Turbine Oil's price trend?" "Which priority-1 orders are overdue?" → create_smart_visual() CANNOT apply filters (CDV API limitation). → Use this tool with a WHERE clause instead, then present results as a table.

  3. COUNT / FREQUENCY questions — when the user wants counts: "What are the most common shipping codes?" → create_smart_visual() does NOT support COUNT aggregation. → Use this tool: query="SELECT col, COUNT(*) as cnt FROM ... GROUP BY col ORDER BY cnt DESC"

  4. TIME-SERIES queries — price trends, monthly patterns, etc.: → Time-based CDV visuals are blocked via the API. → Use this tool to fetch the trend data, then describe it or format it for Plotly.

  5. HEATMAPS / CROSS-TABS — e.g. "spend by destination and shipping code": → CDV has no heatmap type via the API. → Use this tool to get the pivot data, format it for plotly.graph_objects.Heatmap.

══ HOW TO USE ═════════════════════════════════════════════════════════════

Connection-based SQL (RECOMMENDED — most flexible): query_dataapi(dataconnection_id=<id_from_list_connections>, query="SELECT col1, SUM(col2) FROM schema.table WHERE col3='val' GROUP BY col1 ORDER BY 2 DESC LIMIT 20")

Important SQL notes: • Table names use schema.table format (e.g. logistics.procurement_transactions) • SQL reserved words (date, time, year, etc.) must be backtick-quoted: ✓ SELECT date, time FROM ... NOT: SELECT date, time FROM ... • Use standard Impala/Hive SQL syntax

Dataset-based query (simpler, but less flexible): query_dataapi(dataset=<id_from_list_datasets>, dimensions="col1,col2", aggregates="SUM(col3) as total", limit=20)

Inputs: dataset, dataconnection_id, query, limit, +3 more. Returns: result

query_enhanced_data_apiB

Query data via the CDV Enhanced Data API (/api/data).

version: '0' for legacy API (provide dataset, limit, dimensions, aggregates), '1' for enhanced API (provide dsreq — a JSON-formatted dataset request string).

Inputs: version (required), dataset, dsreq, limit, +2 more. Returns: result

reset_dataconnection_cacheA

Reset the query result cache for a specific CDV data connection. Requires ds_manage permission.

Inputs: connection_id (required). Returns: result

reset_dataset_cacheB

Reset the query result cache for a specific CDV dataset. Requires ds_manage permission.

Inputs: dataset_id (required). Returns: result

run_extractB

Run one or more CDV data extract jobs by their comma-separated IDs.

Inputs: extract_ids (required). Returns: result

run_jobB

Trigger a rerun of one or more CDV scheduled jobs. Provide exactly one of schedule_ids (comma-separated IDs) or schedule_names (comma-separated names).

Inputs: schedule_ids, schedule_names. Returns: result

set_gc_monitorB

Enable or disable GC monitoring on the CDV server.

Inputs: enabled (required). Returns: result

set_gc_statsB

Set GC debug flags on the CDV server. Requires sys_viewlogs permission.

Inputs: debug_flags (required). Returns: result

set_logger_levelC

Set the log level for a specific named logger. Requires sys_viewlogs permission. level must be one of: CRITICAL, DEBUG, ERROR, FATAL, INFO, WARN, WARNING.

Inputs: logger_name (required), level (required). Returns: result

set_log_levelA

Set the log level for the root logger. Requires sys_viewlogs permission. level must be one of: CRITICAL, DEBUG, ERROR, FATAL, INFO, WARN, WARNING.

Inputs: level (required). Returns: result

toggle_cprofileB

Toggle cProfile profiling on/off for a CDV server function. Requires sys_viewlogs permission. If profiling is already enabled, calling this disables it. strip_dirnames, print_callees, print_callers: 'yes' or 'no'.

Inputs: module, owner, func, strip_dirnames, +2 more. Returns: result

update_connectionC

Update an existing CDV data connection by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_datasetC

Update an existing CDV dataset by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_filter_associationC

Update an existing CDV filter association by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_groupA

Update an existing CDV group by its numeric ID. Provide fields to change (e.g. name, users).

Inputs: object_id (required), body (required). Returns: result

update_roleC

Update an existing CDV role by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_segmentC

Update an existing CDV segment by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_userC

Update an existing CDV user by their numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_visualC

Update an existing CDV visual by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

update_workspaceC

Update an existing CDV workspace by its numeric ID.

Inputs: object_id (required), body (required). Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 66 tools

    Disambiguation4/5

    Tools are mostly distinct, targeting different resources (connections, datasets, visuals, etc.). However, 'create_visual' and 'create_smart_visual' overlap in purpose, and 'query_dataapi' vs 'query_enhanced_data_api' could cause confusion. Also 'edit_user_profile' and 'update_user' have fuzzy boundaries.

    Naming Consistency4/5

    Most tools follow a clear 'verb_noun' pattern (e.g., 'list_connections', 'delete_visual'). However, there are minor inconsistencies like 'edit_user_profile' instead of 'update_user_profile', and 'get_gc_monitor' vs 'get_gc_stats' (mixed underscores). Overall, the pattern is largely consistent.

    Tool Count3/5

    With 66 tools, the server is quite heavy. While the toolset covers many administrative and data operations, the high count suggests some tools could be merged or removed without losing functionality. It's at the upper boundary of acceptable scope.

    Completeness4/5

    The toolset provides CRUD for most resources (connections, datasets, visuals, workspaces, users, groups, roles, segments). Notable gaps include lack of a tool to list all standalone chart visuals (only dashboards are listed) and no filter support for visuals. Export/import is limited to bulk migration. Overall, core workflows are covered.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with Databricks workspaces programmatically, providing comprehensive tools for cluster management, notebook operations, job orchestration, Unity Catalog data governance, user management, permissions control, and FinOps cost analytics.
      298 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI applications to integrate with Tableau through tools, resources, and prompts for querying data, exploring content, and retrieving visualizations from Tableau workbooks and datasources.
      33,264 npm
      372
      Apache 2.0
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to create and manage Kibana dashboards, Lens visualizations, and data views via the Kibana Saved Objects API. It allows for programmatically listing existing resources and assembling new visualizations into dashboards through natural language commands.
      -