Skip to main content

vibedasher-mcp

An MCP server that exposes the Vibedasher data engine — datasets, CSV upload + ETL, headless SQL query, and dashboard (viz) management — as tools a customer's AI (Claude Code, Cursor, ...) can drive directly.

This is the control plane (VD-601, PIVOT/PLAN.md EP-6). It wraps the published vibedasher Python SDK and calls only the public, metered /api/v1/* API.

Install: pip install vibedasher-mcp — live on PyPI since 2026-08-09, as are vibedasher (PyPI) and @vibedasher/client (npm).

The eject tools (VD-602) ship in this package, not separately: eject_viz, eject_viz_files, eject_instructions and get_viz_files are registered by register_eject_tools() in eject.py. They pull a viz's code plus an SDK-wiring manifest so your AI can recreate the dashboard natively in your stack.

Tools

Tool What it does
list_datasets List datasets the key can read (id, name, cleanSQLName, status).
get_dataset(dataset_id) One dataset's metadata + column schema.
upload_dataset(name, csv_content, ...) Create a CSV dataset, upload, load, poll to READY.
run_query(dataset_ids, sql, params) Inline alias-only SQL across your datasets (plural datasetIds, joins allowed) → typed columns + rows.
list_vizzes(include_unpublished=False) List dashboards.
get_viz(viz_id) One viz's metadata.
create_viz(name, dataset_ids, seed_id/dashboard_config, ...) Create a viz (AI dashboard-build entry).
build_viz(viz_id, branch) Compile a viz branch into a renderable bundle.
eject_viz(viz_id, branch, out_dir, overwrite, max_chars) (eject) The viz's runnable source tree + package.json + Tailwind config + wiring manifest. Pass out_dir — see Delivery.
eject_viz_files(viz_id, paths, branch, out_dir, ...) (eject) Ejected file contents on demand — the follow-up call when eject_viz came back paged.
eject_instructions() (eject) How to recreate an ejected dashboard in your app — the query contract, auth modes, region sharding, and the host-bundler traps.
get_viz_files(viz_id, branch, out_dir, ...) (eject) Raw file tree for a viz branch. Same delivery budget as eject_viz.

Delivery: an ejected tree does not fit in one response

Measured against prod on 2026-08-18: eject_viz(1275) is 44 files / 517,351 characters (~129k tokens) and eject_viz(1282) is 45 files / 556,363 characters (~139k tokens). MCP clients cap a tool result, so the single-shot payload was either dropped outright by a strict client or ate the agent's entire context. Every eject response now carries a delivery block, and the three file tools take the same three parameters.

Mode How Cost
disk (preferred) out_dir=<ABSOLUTE path> ~30k characters regardless of tree size — measured 32,308 for viz 1275
paged (default) omit out_dir; files fills to max_chars (60,000), the rest land in delivery.pendingPaths 10 calls for viz 1275, none over budget
unbounded max_chars=0 the pre-0.2.0 payload, on request only
eject_viz(viz_id=1275, out_dir="/abs/path/to/app/dashboard")   # one call, whole tree on disk

out_dir resolves on the machine running the MCP server; with the standard stdio launch (command: vibedasher-mcp) that is your machine, because the client spawns the server as a local subprocess. Relative paths are refused, existing files are refused unless overwrite=True, and any path escaping out_dir aborts the write before a byte lands.

Paging is the fallback, not the goal: round trips do not reduce total tokens (the content still crosses the model), they only keep each individual response deliverable. Hand delivery.pendingPaths straight back to eject_viz_files(viz_id, paths=...) and repeat until it is empty. A response with a non-empty pendingPaths is a page, not a tree.

Override the budget per call with max_chars or globally with VIBEDASHER_MCP_MAX_RESPONSE_CHARS.

run_query reuses the SDK's hand-written query() transport (VD-301): the caller never sees inline-vs-presigned delivery, MessagePack, or retries — one call in, typed rows out. Each dataset id resolves server-side to that dataset's cleanSQLName alias under the VD-203 RLS/alias-rewrite; SQL references only aliases.

Auth

API key only, via X-Api-Key (handled by the SDK's create_client). Set:

export VIBEDASHER_API_KEY=...           # mint via `POST /v1/api-keys` or the console
export VIBEDASHER_REGION=eu-central-1   # or us-east-1
# export VIBEDASHER_BASE_URL=...        # optional override (on-prem/staging)

The key is read once at first tool call and is never logged or echoed in any tool result.

Metering

Every tool hits the public, metered endpoints (create_dataset is credit-gated; run_query is metered via the usage/credits event). The MCP adds no side channel and bypasses no metering.

Run

pip install vibedasher-mcp        # (monorepo dev: also make `vibedasher` importable)
vibedasher-mcp                    # stdio MCP server
# or:  python -m vibedasher_mcp

MCP client config (Claude Code / Cursor):

{
  "mcpServers": {
    "vibedasher": {
      "command": "vibedasher-mcp",
      "env": { "VIBEDASHER_API_KEY": "...", "VIBEDASHER_REGION": "eu-central-1" }
    }
  }
}

Development

The package depends on the sibling SDK at ../sdk/py. Tests wire that path automatically (tests/conftest.py), so from packages/mcp:

python -m pytest tests/ -q

Note: fastmcp is a client-side dependency of this standalone package; it is not bundled into the API Lambdas, so the export_requirements.py step in the root CLAUDE.md does not apply here.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vibedasher_mcp-0.3.0.tar.gz (309.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vibedasher_mcp-0.3.0-py3-none-any.whl (184.9 kB view details)

Uploaded Python 3

File details

Details for the file vibedasher_mcp-0.3.0.tar.gz.

File metadata

  • Download URL: vibedasher_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 309.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/7.0.0-28-generic

File hashes

Hashes for vibedasher_mcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a6f16df625fc73e58a7dd8e9c63dc619ab9d20f96e9e1035bff2c3c93d0bc0ff
MD5 7a865e5c502cbedea9d734d4b5a1e074
BLAKE2b-256 d221ae683146286de9fc067ff7d3840bbd76347b8dd42155c2e1a309a90bcc6e

See more details on using hashes here.

File details

Details for the file vibedasher_mcp-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: vibedasher_mcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 184.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/7.0.0-28-generic

File hashes

Hashes for vibedasher_mcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 13f20f3757a904f4a90acaedab50b6b23e018c2ac1034112dbba9cd54a12df29
MD5 d2e12557c37e1d9d69d4e918fa4dacfe
BLAKE2b-256 347a85b57b8e9dc34e869a1acdcf0688e2d66f87bfd4792ad3ddc83e7c4bf717

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.1

2 files

0.6.0

2 files

0.5.7

2 files

0.5.6

2 files

0.5.5

2 files

0.5.4

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

This release

0.3.0 This release

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page