Data Studio

io.github.geek-funPublished by GitHub account geek-funv0.1.12Updated Nov 3, 2026

Unified MCP server for SQL and NoSQL databases, powered by dockit and sqlkit desktop apps

VerifiedSTDIODesktop onlyDatabasesDeveloper Tools

Overview

AI-generated overview

Local MCP server that lets an AI coding agent explore and query SQL and NoSQL databases through the dockit and sqlkit desktop apps.

What you can do
  • List connections, databases, schemas, tables, views, indexes, keys, procedures and functions, and read DDL or explain queries
  • Run SELECT queries and inspect sessions and slow queries on 70+ SQL databases via sqlkit
  • Search, read, count and inspect mappings, aliases, nodes and shards in Elasticsearch and OpenSearch
  • Find, aggregate, count, sample and inspect stats and indexes in MongoDB
  • Query, scan, describe and inspect backups, TTL and metrics in DynamoDB
  • Write, update, create, grant or revoke, and delete or drop objects, gated by permission mode and confirmation
When to use it
Useful when you want an AI agent to read schemas and run queries against your own databases in plain language, across SQL engines and Elasticsearch, MongoDB or DynamoDB, without pasting credentials into prompts.
Requirements
Runs locally as an npm package over stdio, so Node.js and npx are needed. The dockit and/or sqlkit desktop apps must be installed and running, with a database connection added and the MCP Bridge auto-start enabled; the bridge listens on localhost only. No API keys or environment variables are declared.
Before you install
The agent gets broad access to your data. Writes, index and schema changes need Data Read-Write mode; DELETE, DROP and TRUNCATE need Full Access and prompt for confirmation. Keep the default Read Only mode unless writes are intended, and check per-connection overrides. Credentials stay in the desktop apps and the model only sees a connection ID, but query results are sent to your LLM provider.

Installation

In SourceWeft

  1. Open Data Studio in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[Data Studio Agent logo]

Data Studio Agent

Let your AI coding agent securely access all your databases, in plain language.

Local-first. Enterprise-grade security. Open source.

[Release] [Downloads] [npm] [License] [Stars] [CI] [MCP Toplist]

[Image] [Image] [Image] [Image]

[Ask your database in plain language — live demo]

📖 Product Page · npm · dockit · sqlkit · Releases

English · 简体中文


This repository contains the Data Studio MCP Server, a Model Context Protocol server that gives AI coding agents direct access to your databases through the dockit and sqlkit desktop apps.

  • SQL (via sqlkit): 70+ databases (PostgreSQL, MySQL, SQL Server, Oracle, SQLite, DuckDB, ClickHouse, Snowflake, BigQuery, and more)
  • NoSQL (via dockit): Elasticsearch, OpenSearch, MongoDB, DynamoDB

Features

  • Any AI coding agent. Claude Code, Cursor, Windsurf, OpenCode, Codex, Cline, Pi, Qoder, GitHub Copilot, or any MCP client.
  • Any OS. macOS, Windows, Linux.
  • Any LLM model. Bring your own provider. No lock-in.
  • One MCP server, one config. Routes to both SqlKit (SQL) and DocKit (NoSQL) bridges over localhost.
  • Enterprise-grade security. See below.

Quick start

1. Prerequisites

Install and launch dockit and/or sqlkit, add a database connection, and make sure Settings → MCP Bridge → Auto-start is enabled (it is by default). Install both apps for the full SQL + NoSQL tool set.

2. Install the MCP server

bash
npm install -g @geek-fun/data-studio-mcp

Or run it without installing (npx downloads it on first run):

bash
npx -y @geek-fun/data-studio-mcp

3. Add it to your AI tool

OpenAI Codex, one command:

bash
codex mcp add data-studio -- npx -y @geek-fun/data-studio-mcp

Claude Code, one command:

bash
claude mcp add --transport stdio data-studio -- npx -y @geek-fun/data-studio-mcp

Cursor. Create .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

json
{  "mcpServers": {    "data-studio": {      "command": "npx",      "args": ["-y", "@geek-fun/data-studio-mcp"]    }  }}

Windsurf. Create ~/.codeium/windsurf/mcp_config.json (global only):

json
{  "mcpServers": {    "data-studio": {      "command": "npx",      "args": ["-y", "@geek-fun/data-studio-mcp"]    }  }}

OpenCode. Add to opencode.json (project) or ~/.config/opencode/opencode.json (global):

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "data-studio": {      "type": "local",      "command": ["npx", "-y", "@geek-fun/data-studio-mcp"],      "enabled": true    }  }}

DeepSeek Harness. Save the overlay as data-studio.cordis.yml:

yaml
- insert:    - id: data-studio-mcp      name: '@deepseek-ai/dsh-mcp-client'      config:        serverName: data-studio        transport: stdio        command: npx        args: ['-y', '@geek-fun/data-studio-mcp']

Run dsh web --patch "$PWD/data-studio.cordis.yml", or merge the insert patch into $DSH_HOME/cordis.patch.yml to keep it across runs. Tools appear as mcp__data-studio__* (DSH is developer preview — its config surface may change).

WorkBuddy / CodeBuddy CLI. One command:

bash
codebuddy mcp add --scope user data-studio -- npx -y @geek-fun/data-studio-mcp

Or add the same mcpServers JSON shown for Cursor above to the project-level .mcp.json (~/.codebuddy/.mcp.json for user scope).

Any other MCP client. Register a stdio server with command npx and args -y @geek-fun/data-studio-mcp.

4. Tune permissions (optional)

Open Settings → MCP Bridge in dockit/sqlkit to control what the agent can do:

Permission modeWhat the agent can do
Read Only (default)Explore schemas, run SELECT queries. No writes.
Data Read/WriteINSERT, UPDATE, index operations. No deletes/drops.
Full AccessEverything, including DELETE, DROP, TRUNCATE.

5. Start asking

Use plain language. The agent queries your databases for you:

  • "List all tables in my PostgreSQL database"
  • "Show me the last 10 orders from the Elasticsearch index orders*"
  • "Find all users older than 30 in MongoDB"
  • "Run this query and explain the results"

The agent reads schemas, runs queries, and explores your data, then shows you every query it executed.

Enterprise-grade security

The LLM gets broad access to your data, but it never sees your credentials. The policy model gates every capability by risk level.

  • Credentials never leave the apps. The LLM only ever sees an opaque connection_id. Real credentials are resolved inside dockit/sqlkit and never cross the MCP boundary. Your passwords and keys stay on your machine, in your app.
  • ID-based resource access. Agents access databases strictly by connection ID. Credentials never appear in prompts or tool arguments, so there is no path for the model to obtain or exfiltrate connection secrets.
  • Three-tier permission model. Read Only / Data Read-Write / Full Access modes gate every capability by risk level, with per-connection overrides. You can mark any connection read-only or allowlist specific actions.
  • Explicit user confirmation. Destructive operations (DELETE, DROP, TRUNCATE) surface as Ask in the policy. The client prompts the user for explicit confirmation before anything destructive runs.
  • Action-level statement classification. SQL is parsed and classified by statement kind (Read / Write / Delete / DDL) before execution. Write-only tools reject DELETE statements; delete tools reject DDL.
  • Local-only bridge. The bridge binds to 127.0.0.1 exclusively. It is unreachable from other machines, with no server to host and no API keys to manage.

Tools

All tools follow the data_studio__{app}__{backend}__{action} convention: app is the desktop app exposing the bridge (sqlkit or dockit), and backend is the data source behind it (sqlkit, es, mongo, dynamo). The two server-level tools (data_studio__list_connections, data_studio__get_status) have no app segment. The User confirmation column shows which operations surface an explicit confirmation prompt in your AI client before they run.

The exact tool set advertised at runtime depends on your apps' permission mode and configured connections — call data_studio__get_status to see what is currently available.

ToolBackendRiskRequires permissionUser confirmation
data_studio__list_connectionsServer🟢 SafeRead OnlyNo
data_studio__get_statusServer🟢 SafeRead OnlyNo
data_studio__dockit__dockit__list_connectionsdockit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_databasessqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_schemassqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_tablessqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__get_schemasqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__describe_tablesqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__explain_querysqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_indexessqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_foreign_keyssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_viewssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_proceduressqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_functionssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_triggerssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__get_table_infosqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__get_foreign_keyssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_sessionssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__get_slow_queriessqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__list_connectionssqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__execute_querysqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__get_object_ddlsqlkit🟢 SafeRead OnlyNo
data_studio__sqlkit__sqlkit__execute_writesqlkit🟡 ElevatedData Read-WriteNo
data_studio__sqlkit__sqlkit__kill_sessionsqlkit🟡 ElevatedData Read-WriteNo
data_studio__sqlkit__sqlkit__grant_privilegesqlkit🟡 ElevatedData Read-WriteNo
data_studio__sqlkit__sqlkit__revoke_privilegesqlkit🟡 ElevatedData Read-WriteNo
data_studio__sqlkit__sqlkit__execute_deletesqlkit🔴 DestructiveFull AccessYes
data_studio__sqlkit__sqlkit__execute_ddlsqlkit🔴 DestructiveFull AccessYes
data_studio__dockit__es__searchdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__get_documentdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__cat_indicesdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__get_mappingdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__cat_aliasesdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__get_aliasdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__countdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__cluster_healthdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__cat_nodesdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__cat_shardsdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__list_snapshotsdockit · Elasticsearch🟢 SafeRead OnlyNo
data_studio__dockit__es__index_documentdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__update_documentdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__create_indexdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__put_mappingdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__put_aliasdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__update_aliasesdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__bulkdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__reindexdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__restore_snapshotdockit · Elasticsearch🟡 ElevatedData Read-WriteNo
data_studio__dockit__es__delete_documentdockit · Elasticsearch🔴 DestructiveFull AccessYes
data_studio__dockit__es__delete_by_querydockit · Elasticsearch🔴 DestructiveFull AccessYes
data_studio__dockit__es__delete_indexdockit · Elasticsearch🔴 DestructiveFull AccessYes
data_studio__dockit__es__delete_aliasdockit · Elasticsearch🔴 DestructiveFull AccessYes
data_studio__dockit__mongo__list_databasesdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__list_collectionsdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__finddockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__collection_statsdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__database_statsdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__server_statusdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__repl_set_statusdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__shard_statusdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__count_documentsdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__list_indexesdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__sample_documentsdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__distinctdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__get_slow_queriesdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__list_usersdockit · MongoDB🟢 SafeRead OnlyNo
data_studio__dockit__mongo__aggregatedockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__insert_onedockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__update_manydockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__create_databasedockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__create_collectiondockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__update_documentdockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__rename_collectiondockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__clone_collectiondockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__create_indexdockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__drop_indexdockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__insert_manydockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__find_one_and_updatedockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__bulk_writedockit · MongoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__mongo__delete_manydockit · MongoDB🔴 DestructiveFull AccessYes
data_studio__dockit__mongo__drop_databasedockit · MongoDB🔴 DestructiveFull AccessYes
data_studio__dockit__mongo__drop_collectiondockit · MongoDB🔴 DestructiveFull AccessYes
data_studio__dockit__mongo__delete_documentdockit · MongoDB🔴 DestructiveFull AccessYes
data_studio__dockit__mongo__truncate_collectiondockit · MongoDB🔴 DestructiveFull AccessYes
data_studio__dockit__dynamo__execute_querydockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__describe_tabledockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__list_tablesdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__query_tabledockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__scan_tabledockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__batch_get_itemsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__describe_continuous_backupsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__describe_ttldockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__get_table_metricsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__list_backupsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__describe_backupdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__describe_limitsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__list_tagsdockit · DynamoDB🟢 SafeRead OnlyNo
data_studio__dockit__dynamo__execute_writedockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__create_itemdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__batch_write_itemsdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_itemdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__transact_write_itemsdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__create_gsidockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_gsidockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__create_tabledockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_table_configdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_ttldockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_pitrdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__update_streamsdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__restore_tabledockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__create_backupdockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__tag_resourcedockit · DynamoDB🟡 ElevatedData Read-WriteNo
data_studio__dockit__dynamo__execute_deletedockit · DynamoDB🔴 DestructiveFull AccessYes
data_studio__dockit__dynamo__delete_itemdockit · DynamoDB🔴 DestructiveFull AccessYes
data_studio__dockit__dynamo__delete_gsidockit · DynamoDB🔴 DestructiveFull AccessYes
data_studio__dockit__dynamo__delete_tabledockit · DynamoDB🔴 DestructiveFull AccessYes
data_studio__dockit__dynamo__truncate_tabledockit · DynamoDB🔴 DestructiveFull AccessYes
117 tools total. Read-only operations run automatically under Read Only mode. Elevated operations (writes, index/schema changes) require Data Read-Write. Destructive operations (DELETE, DROP, TRUNCATE) require Full Access and always surface an explicit user confirmation prompt.

How it works

code agent (Claude Code / Cursor / OpenCode ...)    |    | MCP stdio protocol    v@geek-fun/data-studio-mcp   ← npm package (pure TypeScript)    |    | HTTP (localhost)    +----------------+----------------+    v                v                |dockit:9120    sqlkit:9121            |(NoSQL bridge)  (SQL bridge)          |    |                |                |    v                v                |Elasticsearch    PostgreSQL           |MongoDB          MySQL                |DynamoDB         SQL Server           |OpenSearch       SQLite               |

The MCP server is a thin routing layer. All database drivers, SSH tunnels, and connection management live in the desktop apps, which expose a local HTTP bridge (127.0.0.1 only). The MCP server auto-discovers running backends via each app's port file.


For developers

This repository also contains the data-studio-agent Rust framework, the shared AI agent loop (provider adapters, streaming, tool calling, context compaction) that powers the built-in assistants in dockit and sqlkit.

See crates/data-studio-agent/README.md for installation, architecture, and integration guides.

License

Apache 2.0. See LICENSE.

Source: README.md at commit c3f962b

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.12LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts