MCP Multi DB

Communauté Données et bases de données

Unified read-only tools for PostgreSQL, MySQL and SQLite: list databases and tables, describe tables and run queries, enforced at SQL and database level.

Installation

Les étapes d'installation sont dans la documentation ci-dessous. Documentation

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. mcp-multi-db
  2. Tools
  3. Quick start
  4. Configuration reference
  5. Example prompts
  6. Security
  7. Docker
  8. Development
  9. Documentation
  10. Contributing
  11. License

mcp-multi-db

One MCP server for all your SQL databases — read-only and safe by default.

Connect an AI agent to PostgreSQL, MySQL, and SQLite at the same time through a single Model Context Protocol server. List your databases in one config file and the agent picks which one to query by database_id. Every query is enforced read-only at the database level, so it's safe to point at real data.

  • Multi-engine, one server — Postgres, MySQL, and SQLite side by side; no separate server per database.
  • Read-only & safe by default — two-layer enforcement (SQL-text guard + database-level read-only transactions) plus row limits and query timeouts. See SECURITY.md.
  • Schema-aware — the agent can discover databases, tables/views, and column metadata before it writes a query.
  • Zero query language to learn — just ask in natural language.

The clip drives the real server over stdio (via the MCP SDK) against a seeded SQLite database. Regenerate it with npm run build && vhs examples/demo.tape.

Tools

ToolDescription
list_databasesList configured database connections
list_tablesList tables/views in a database
describe_tableShow column metadata for a table
run_queryRun read-only SQL (SELECT, WITH, EXPLAIN)

Quick start

No install needed — npx fetches the package on first use.

1. Create databases.json

Copy the example and edit with your connection details:

cp databases.example.json databases.json
{
  "databases": [
    {
      "id": "local-sqlite",
      "type": "sqlite",
      "path": "/absolute/path/to/app.db",
      "label": "Local dev SQLite"
    },
    {
      "id": "analytics-pg",
      "type": "postgres",
      "connectionString": "postgresql://user:pass@localhost:5432/analytics",
      "label": "Analytics Warehouse"
    },
    {
      "id": "reporting-mysql",
      "type": "mysql",
      "connectionString": "mysql://user:pass@localhost:3306/reporting",
      "label": "Reporting MySQL"
    }
  ]
}

Never commit databases.json — it contains credentials. It's already gitignored if you cloned the repo. Prefer read-only database users (see Security).

2. Register the server with your MCP client

The server speaks MCP over stdio, so it works with any MCP-capable client. Use npx mcp-multi-db as the command and pass MCP_DB_CONFIG (the path to your databases.json). See mcp.example.json and databases.example.json for templates.

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "mcp-multi-db": {
      "command": "npx",
      "args": ["-y", "mcp-multi-db"],
      "env": {
        "MCP_DB_CONFIG": "/absolute/path/to/databases.json"
      }
    }
  }
}

Restart Claude Desktop afterward.

Claude Code

claude mcp add mcp-multi-db \
  --env MCP_DB_CONFIG=/absolute/path/to/databases.json \
  -- npx -y mcp-multi-db

Cursor

Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project), then open Cursor Settings → Tools & MCP, restart the server, and use Agent mode:

{
  "mcpServers": {
    "mcp-multi-db": {
      "command": "npx",
      "args": ["-y", "mcp-multi-db"],
      "env": {
        "MCP_DB_CONFIG": "/absolute/path/to/databases.json"
      }
    }
  }
}

Cline / Windsurf / other MCP clients

Any client that supports stdio MCP servers uses the same shape: command npx, args ["-y", "mcp-multi-db"], and env MCP_DB_CONFIG pointing at your databases.json. Consult your client's docs for where its MCP config lives.

Prefer a pinned global install? npm install -g mcp-multi-db, then use command mcp-multi-db with no args.

Configuration reference

Config is loaded from one of two environment variables, in order:

  1. MCP_DB_CONFIG — path to a JSON file (recommended).
  2. MCP_DATABASES — inline JSON (useful when a file path is awkward).

The JSON may be either { "databases": [ ... ] } or a bare array. Each entry:

FieldRequiredNotes
idyesUnique; the agent references this as database_id
typeyespostgres \mysql \sqlite
connectionStringpostgres/mysqlStandard connection URI
pathsqliteAbsolute path to the .db file
labelnoHuman-friendly name shown to the agent
descriptionnoExtra context shown to the agent

Example prompts

  • "List my configured databases"
  • "What tables are in local-sqlite?"
  • "Describe the users table in analytics-pg"
  • "Run SELECT COUNT(*) FROM orders on reporting-mysql"

Security

  • Read-only only. INSERT, UPDATE, DELETE, DDL, etc. are blocked — both by a SQL-text guard and by running each query inside a database-level read-only transaction (SQLite opens read-only). A SELECT that calls a side-effecting function is still refused.
  • Row limits. Results are capped (default 100, max 1000).
  • Query timeouts. Statements are bounded (30s) to avoid runaway queries.
  • Use least privilege anyway. Prefer dedicated read-only DB users and read replicas. Full details and reporting in SECURITY.md.

Docker

A multi-stage Dockerfile is included. Build and run with your databases.json mounted in:

docker build -t mcp-multi-db .

docker run --rm -i \
  -v /absolute/path/to/databases.json:/config/databases.json:ro \
  mcp-multi-db

The image runs as a non-root user, ships only the built JS and runtime node_modules (no toolchain), and speaks MCP over stdio just like the npx install — so it slots into any MCP client by replacing the command and args with the appropriate docker run -i invocation.

Development

npm install
npm run build     # tsc -> build/, the artifact MCP clients run
npm test          # builds, then runs the node:test suite

Tests use Node's built-in test runner (no extra dependencies) and cover the read-only SQL guard and the SQLite adapter end to end. CI runs build + tests on every push and pull request.

Adding another database engine is a contained change: add the config variant in src/config.ts, implement the SqlDatabasePort interface in a new adapter under src/adapters/, and register it in the adapter factory. New adapters must enforce read-only at the connection level — not rely on the text guard alone. See docs/extending.md for the full checklist.

Documentation

  • Architecture — components, request lifecycle, and the port-family design (with diagrams).
  • Extending — add a SQL engine or a non-SQL family.
  • Security — the two-layer read-only model and safe deployment.

The full index is in docs/.

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md for setup, the read-only invariants, and how to add a database engine.

License

ISC — see LICENSE.

Questions fréquentes

Qu'est-ce que MCP Multi DB ?

Unified read-only tools for PostgreSQL, MySQL and SQLite: list databases and tables, describe tables and run queries, enforced at SQL and database level.

Comment installer MCP Multi DB ?

Suivez les étapes d'installation de sa documentation, affichée sur cette page et dans son dépôt.

MCP Multi DB est-il open source ?

Oui. Son code est sur GitHub sous licence ISC.

Qui maintient MCP Multi DB ?

Il est publié par mahAnuj. AI.tn le référence sans le maintenir ni le recommander.

Issu des listes communautaires awesome-mcp-servers et du dépôt GitHub du projet. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.