Sandbox
@mgorabbani/askdb

MCP server for safe database access

AskDB sits between your database and an MCP client. It copies MongoDB or PostgreSQL into a sandbox, lets you choose which fields are visible, and exposes a single `/mcp` endpoint for agents to query.

73 stars1 forksTypeScriptUpdated 2mo ago
Who it's for

Builders who want their agent to read database data through a controlled MCP endpoint.

What it delivers

You can let an agent explore real database records without giving it write access or exposing hidden fields.

What it does

Sandboxed database copy

Clones MongoDB or PostgreSQL into Docker so the agent reads a copy, not production.

Field and collection controls

Lets you hide or show fields and collections, with hidden data stripped from responses.

PII auto-detection

Pre-hides fields like email, password, ssn, and phone when a database is connected.

Read-only query validation

Allows read queries such as `find`, `aggregate`, `count`, and `distinct` while blocking writes and dangerous stages.

Audit trail

Logs each MCP query with timing, target, and row count.

OAuth and API keys

Supports remote OAuth flows and local bearer tokens for MCP clients.

Code Mode

Provides an `execute-typescript` tool for running sandboxed TypeScript that combines multiple queries.

How to get it

  1. 1On a fresh Ubuntu 22.04+ or Debian 12+ VPS
    curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/install.sh | sudo bash
  2. 2In your DNS provider, add an A record pointing to your VPS IP
    name:   askdb         (or any subdomain)
    value:  <VPS public IP>
    proxy:  **OFF**       — Cloudflare users: grey cloud, not orange.
                            The orange proxy blocks Let's Encrypt HTTP-01.
  3. 3Run
    sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/install.sh)
  4. 4Run
    # stop containers, keep data
    sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/uninstall.sh)
    
    # stop containers AND delete the askdb-data volume + /opt/askdb
    sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/uninstall.sh) --purge
  5. 5Your data lives in the askdb-data Docker volume. Back it up with
    docker run --rm -v askdb-data:/data alpine tar czf - /data > askdb-backup.tgz

README

AskDBAskDB — Give AI agents safe access to your database.

Your database, sandboxed. Your fields, controlled. One MCP endpoint for every AI tool.

AskDB — self-hosted bridge between your database and any MCP-speaking AI agent

https://github.com/user-attachments/assets/baa53f34-b0b4-41ee-89b3-60d133e8004d

MIT License Stars Docker Compose MCP Streamable HTTP

Install · Try Locally · Connect AI · Security · FAQ


About AskDB

AskDB is a self-hosted bridge between your MongoDB or PostgreSQL database and any AI agent that speaks MCP. It clones your production data into an isolated sandbox, lets you control exactly which fields the AI can see, and exposes a single /mcp endpoint that plugs into Claude, ChatGPT, Cursor, and anything else.

No data masking. No fake data. Hidden fields are simply omitted from every response — the AI never knows they exist. Every query is audited.

Get started in 3 steps

StepWhat happens
01ConnectPaste your MongoDB or PostgreSQL connection string in the dashboard
02ConfigureBrowse real sample data, toggle which fields the AI can see
03QueryGive your AI agent https://<your-domain>/mcp — done

Works with  ·  Claude Desktop  ·  Claude Code  ·  ChatGPT  ·  Cursor  ·  any MCP client


Features

  • Sandbox isolation. Production data cloned into a Docker container. AI reads the copy, never the original.
  • Field-level control. Toggle any field or collection visible/hidden — changes take effect immediately, no re-sync.
  • PII auto-detection. Fields like email, password, ssn, phone are detected and pre-hidden automatically.
  • MongoDB + PostgreSQL. One MCP tool surface across engines. list-databases, collection-schema, find, aggregate, count, distinct, sample-documents, execute-typescript, save-insight.
  • Query validation. Allowlist-only reads. Write operations and dangerous pipeline stages rejected.
  • Audit trail. Every MCP query logged with timestamp, execution time, target, and row count.
  • OAuth + API keys. Remote clients (Claude, Cursor) use OAuth. Local configs use bearer tokens (SHA-256 hashed, shown once).
  • Multi-database. Connect every database you own — Mongo and Postgres side by side. Each tool accepts a connectionId.
  • Interactive result viewer. find / aggregate / sample-documents results render as a sortable table in MCP Apps–capable hosts (Claude Desktop, Claude on web, VS Code Copilot). Non-Apps clients get plain JSON.
  • Code Mode. An execute-typescript tool lets the AI run a sandboxed TypeScript program that composes multiple queries in one round trip. Details →

How It Works

┌─────────────────────────────────────────────────┐
│                   Your Server                     │
│                                                   │
│  ┌──────────────┐       ┌───────────────┐        │
│  │  Dashboard    │──────>│  SQLite       │        │
│  │  + API + MCP  │       │  (config only) │        │
│  │  :3100        │       └───────────────┘        │
│  └──────────────┘                                 │
│                          ┌───────────────┐        │
│                          │  Sandbox      │<── clone from prod
│                          │  Mongo / PG   │        │
│                          └───────────────┘        │
└─────────────────────────────────────────────────┘
         ^
         | MCP (Streamable HTTP)
   Claude / ChatGPT / Cursor
  1. Connect — paste your MongoDB or PostgreSQL connection string
  2. Clone — AskDB runs the per-engine dump/restore (mongodump/mongorestore for Mongo, pg_dump/pg_restore for Postgres) into an isolated Docker container
  3. Configure — browse your schema with real sample data, toggle fields visible or hidden
  4. Query — give your AI agent the MCP URL — hidden fields are stripped from every response

The AI never knows hidden fields exist.


Install on a VPS (one command)

On a fresh Ubuntu 22.04+ or Debian 12+ VPS:

curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/install.sh | sudo bash

The installer will install Docker if missing, prompt for your domain and Let's Encrypt email, generate all secrets, and bring up the stack behind Caddy with auto-provisioned HTTPS. Total time on a fresh VPS is 2–3 minutes.

Don't have a VPS yet? exe.dev spins up a ready-to-go Ubuntu/Debian VPS in a couple of clicks — a quick way to get to the one-liner above.

Set up your domain

  1. In your DNS provider, add an A record pointing to your VPS IP:

    name:   askdb         (or any subdomain)
    value:  <VPS public IP>
    proxy:  **OFF**       — Cloudflare users: grey cloud, not orange.
                            The orange proxy blocks Let's Encrypt HTTP-01.
    
  2. Verify DNS has propagated: dig +short askdb.example.com

  3. Open ports 80 and 443 on your VPS firewall.

  4. Run the installer above.

Create your admin account

The first time you open https://<your-domain>, the dashboard redirects you to /setup to create the admin account. Do this before connecting Claude or Cursor — you'll use the same account for the OAuth prompt. After the first signup, further registrations are rejected.

Alternative install modes

  • Caddy (default): auto-provisioned HTTPS. Requires a domain with A record.
  • Proxyless: you run your own reverse proxy (Coolify, Traefik, nginx). AskDB binds 127.0.0.1:3100.
  • Quick test (nip.io): zero setup — the installer detects your VPS public IP and issues a real Let's Encrypt cert for <ip>.nip.io. No DNS, no domain. Ideal for trial runs. Ports 80/443 still required.
  • Cloudflare Tunnel: no open ports, no public IP needed. See below.

Cloudflare Tunnel in 90 seconds

If you already have a domain on Cloudflare (free plan works):

  1. Open Cloudflare dashboard → click the Ask AI button in the top bar.
  2. Prompt it: "Create a new Cloudflare Tunnel named askdb, route the hostname askdb.example.com to http://askdb:3100, and give me the connector token." Replace askdb.example.com with the subdomain you want.
  3. Copy the token it returns (long eyJ... string).
  4. Run the installer, pick option 3) Cloudflare Tunnel, paste the token, enter the same subdomain. The VPS handles Docker, routing, and certs — Cloudflare handles TLS and DNS automatically.

No firewall changes. No A records. The subdomain starts serving over HTTPS within a minute.

Upgrade

sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/install.sh)

The installer is idempotent — re-running it pulls the latest images and restarts. Secrets, data, and your .env are preserved.

Uninstall

# stop containers, keep data
sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/uninstall.sh)

# stop containers AND delete the askdb-data volume + /opt/askdb
sudo bash <(curl -fsSL https://github.com/mgorabbani/askdb/releases/latest/download/uninstall.sh) --purge

Backups

Your data lives in the askdb-data Docker volume. Back it up with:

docker run --rm -v askdb-data:/data alpine tar czf - /data > askdb-backup.tgz

Try it locally with Docker

Want to kick the tires before pointing a domain at a VPS? This runs AskDB on your own machine in a few minutes — no installer, no DNS, no HTTPS.

Requires Docker Desktop (macOS / Windows) or Docker Engine + Compose plugin (Linux).

git clone https://github.com/mgorabbani/askdb.git
cd askdb

cat > .env <<EOF
COMPOSE_PROFILES=proxyless
DOMAIN=localhost
BETTER_AUTH_URL=http://localhost:3100
TRUSTED_ORIGINS=http://localhost:3100,http://127.0.0.1:3100
EOF

docker compose up --build -d
# wait ~45s for first build + healthcheck
open http://localhost:3100

Create an admin account in the dashboard, add a database connection, and try the MCP URL at http://127.0.0.1:3100/mcp. Local MCP clients (Claude Code / Cursor with a fixed bearer token) work; remote OAuth flows need HTTPS, so use the VPS install for Claude Desktop / Cursor remote.

Stop with docker compose down (keeps data) or docker compose down -v (wipes volumes).


Connecting Your AI Agent

Claude, Cursor, and any other remote-MCP client connect to https://<your-domain>/mcp. Paste that URL as a custom connector and complete the OAuth approval in your browser. No port, no path rewriting, no API key.

For clients that expect a fixed bearer token (Claude Code, Cursor local configs), create an API key in the dashboard and add it to your config:

{
  "askdb": {
    "type": "streamable-http",
    "url": "https://YOUR_SERVER/mcp",
    "headers": {
      "Authorization": "Bearer ask_sk_YOUR_KEY"
    }
  }
}

Security

These invariants always hold:

  1. Production databases are never written to — read-only connections only
  2. Hidden fields never appear in MCP responses — stripped at query time
  3. Hidden collections are never listed or queryable
  4. All queries are validated — only find, aggregate, count, distinct allowed
  5. Dangerous aggregation stages are blocked$merge, $out, $collStats, $currentOp, $listSessions
  6. $lookup on hidden collections is rejected
  7. Connection strings are encrypted at rest (AES-256-GCM), never logged
  8. API keys are hashed (SHA-256), shown once, never stored in plaintext
  9. Every MCP query is logged to the audit trail

Docker socket hardening: the compose file includes a tecnativa/docker-socket-proxy sidecar so AskDB never has direct access to /var/run/docker.sock — only the API endpoints it needs are exposed.


Roadmap

  • MongoDB + PostgreSQL adapters with sandbox isolation
  • Field-level visibility, PII auto-detection, query validation, audit trail
  • MCP server (9 tools) + Code Mode + MCP Apps result viewer
  • Multi-database (plain-language descriptions, per-tool connectionId)
  • One-command installer (Caddy / proxyless / Cloudflare Tunnel)
  • MySQL adapter
  • Multi-user / team management
  • Sync schedules (6h / 12h / daily / weekly)
  • Cloud hosted version
  • Row-level filtering
  • SSO / SAML

Community & Contributing


License

AskDB is licensed under the MIT License.

The MIT License means you can self-host, fork, modify, and use AskDB freely — including in commercial and proprietary projects — provided you keep the copyright and license notice.

Star History

Star History Chart



Open source under the MIT License. Built for people who want AI to understand their data, not own it.

Files in the repo

Repository payload34 top-level entries
  • .github
  • .husky
  • cli
  • deploy
  • docker
  • docs
  • packages
  • scripts
  • server
  • specs
  • tasks
  • ui
  • .dockerignore
  • .env.example
  • .gitignore
  • .oxfmtrc.json
  • .oxlintrc.json
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • docker-compose.yml
  • Dockerfile
  • install.sh
  • LICENSE
  • package.json
  • pnpm-lock.yaml
  • pnpm-workspace.yaml
  • README.md
  • SECURITY.md
  • spec.md
  • tsconfig.base.json
  • uninstall.sh

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k
t8y2/dbxConnectors

20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。

19k