mcp-devdb
mcp-devdb
Sicherer, schreibgeschützter MCP-Server für lokale Entwicklungsdatenbanken. Coding-Agenten müssen ständig auf deine Entwicklungsdatenbank zugreifen — Schema, Beispieldaten, Abfragepläne, Tabellengrößen — aber ein naiver Datenbank-Connector gewährt ihnen vollen Schreibzugriff. mcp-devdb ist die abgesicherte Alternative: ein Model Context Protocol-Server, der Introspection-Tools hinter einer gehärteten schreibgeschützten SQL-Absicherung, Spaltenmaskierung, Ergebnislimits und einem Pro-Sitzung-Abfragebudget bereitstellt.
Backends in v1: PostgreSQL (via postgres) und SQLite (via better-sqlite3). Das Adapter-Interface ist engine-neutral, sodass MySQL später hinzugefügt werden kann.
Schnellstart
Erstelle
mcp-devdb.jsonneben dem Ort, an dem der Server läuft (siehemcp-devdb.example.json):
{
"databases": {
"app": { "url": "postgres://dev:dev@localhost:5432/app_development" },
"cache": { "url": "sqlite:./data/cache.db" }
}
}Führe es aus:
npx mcp-devdb --config ./mcp-devdb.jsonDer Server spricht MCP über stdio; richte deinen MCP-Client auf diesen Befehl aus. Verbindungsstrings leben nur in der Konfigurationsdatei oder in Umgebungsvariablen ("url": "env:MY_DB_URL" oder der MCP_DEVDB_URL-Fallback ohne Konfigurationsdatei) — das Modell kann niemals einen bereitstellen.
Claude Code
claude mcp add devdb -- npx mcp-devdb --config /absolute/path/to/mcp-devdb.jsonClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"devdb": {
"command": "npx",
"args": ["mcp-devdb", "--config", "/absolute/path/to/mcp-devdb.json"]
}
}
}Related MCP server: MCP PostgreSQL
Tools
Tool | Eingabe | Rückgabe |
|
| Schemas, Tabellen, Zeilenschätzungen und Größen auf der Platte |
|
| Spalten, Typen, Nullability, Defaults, PK, FKs, Indizes |
|
| Erste N Zeilen; Zellen > 200 Zeichen gekürzt; sensible Spalten als |
|
| Abgesicherte schreibgeschützte Abfrage; Zeilenlimit (200) + Bytelimit (256 KiB); verbraucht Abfragebudget |
|
| Ausführungsplan — PostgreSQL |
|
| Datenbankname, Größe, Tabellenanzahl, größte Tabellen, Erweiterungen (PG) |
database ist optional, wenn genau eine Datenbank konfiguriert ist; bei mehreren musst du die gewünschte angeben.
Konfiguration
mcp-devdb.json im Arbeitsverzeichnis oder ein beliebiger Pfad via --config:
{
"databases": {
"app": {
"url": "postgres://dev:dev@localhost:5432/app_development",
"allowTables": ["users", "orders", "public.events_*"],
"denyTables": ["audit_log"]
},
"billing": { "url": "env:BILLING_DEV_DATABASE_URL" }
},
"maskPatterns": ["password", "secret", "token", "key", "hash", "ssn", "card"],
"queryBudget": 100,
"rowLimit": 200,
"byteLimit": 262144,
"statementTimeoutMs": 5000
}allowTables/denyTables— case-insensitive Namen mit*-Wildcards; Regeln mit einem Punkt matchenschema.table. Deny gewinnt; eine nicht-leere Allowlist ist exklusiv.maskPatterns— case-insensitive Regexes, die gegen Spaltennamen gematcht werden.CLI-Flags:
--config <path>,--no-mask(Spaltenmaskierung deaktivieren),--help,--version.
Sicherheitsmodell (Zusammenfassung)
Das vollständige Bedrohungsmodell findest du in SECURITY.md. Kurz zusammengefasst:
Schreibschutz-Guard: Jede
run_query/explain_query-Anweisung wird tokenisiert (Anführungszeichen,E'...'-Escapes, Kommentare, Dollar-quotierte Strings) und muss mit SELECT / WITH / EXPLAIN / SHOW / VALUES beginnen; Multi-Statement-Eingaben und Schreib-/DDL-Schlüsselwörter an beliebiger Stelle auf oberster Ebene werden abgelehnt — ein CTE gefolgt von INSERT wird abgefangen,SELECT 'DROP TABLE x'ist kein Fehlalarm.Absicherung auf Engine-Ebene: SQLite-Dateien werden schreibgeschützt geöffnet; PostgreSQL-Sitzungen laufen mit
default_transaction_read_only=on, explizitenBEGIN READ ONLY-Transaktionen und Statement-Timeouts.Spaltenmaskierung standardmäßig aktiviert (
--no-maskzum Deaktivieren), Ergebnislimits und ein Pro-Sitzung-Abfragebudget (Standard 100; bei Erschöpfung wirst du aufgefordert, den Server neu zu starten).Zugangsdaten erreichen niemals das Modell: Verbindungsstrings stammen ausschließlich aus lokaler Konfiguration/Umgebung und werden aus jeder Fehlermeldung entfernt.
Smoke-Test
scripts/verify-stdio.mjs erstellt eine temporäre SQLite-Datenbank, startet node dist/cli.js und führt einen echten MCP-Handshake über stdio mit rohem JSON-RPC durch. Tatsächliche Ausgabe:
$ node scripts/verify-stdio.mjs
initialize -> mcp-devdb 0.1.0 (protocol 2025-06-18)
tools/list -> db_overview, describe_table, explain_query, list_tables, run_query, sample_rows
tools/call list_tables ->
{
"database": "demo",
"dialect": "sqlite",
"tableCount": 2,
"tables": [
{
"schema": null,
"name": "orders",
"type": "table",
"rowEstimate": 3,
"sizeBytes": 4096,
"sizePretty": "4.0 KiB"
},
{
"schema": null,
"name": "users",
"type": "table",
"rowEstimate": 2,
"sizeBytes": 4096,
"sizePretty": "4.0 KiB"
}
]
}
tools/call run_query "DROP TABLE users" -> isError=true
Query rejected by read-only guard: Only read-only statements are allowed; the statement must start with one of: SELECT, WITH, EXPLAIN, SHOW, VALUES
SMOKE TEST PASSEDEinschränkungen
Noch kein MySQL. Das
DbAdapter-Interface insrc/adapters/types.tsist der Erweiterungspunkt.Nur Entwicklungsdatenbanken. Der Guard blockiert Schreiboperationen auf SQL-Ebene, aber ein SELECT kann dennoch schlecht gekennzeichnete Funktionen oder Erweiterungsfunktionen mit Seiteneffekten aufrufen (z. B.
dblink, das eine eigene nicht-schreibgeschützte Verbindung öffnet). Für Entwicklungsdatenbanken akzeptabel; niemals für Produktion verwenden. Siehe SECURITY.md.Der Guard ist konservativ: Unquotierte Spalten, die wie verbotene Schlüsselwörter benannt sind (z. B. eine Spalte namens
update), werden abgelehnt — quote sie ("update"), um fortzufahren.SELECT ... FOR UPDATEwird abgelehnt (es setzt Zeilensperren).SQLite-Zeilenanzahlen verwenden
COUNT(*); bei sehr großen Dateien kannlist_tableslangsam sein.
Entwicklung
npm install
npm run lint && npm run typecheck && npm test && npm run build
node scripts/verify-stdio.mjsLizenz
MIT — Copyright (c) 2026 Aminyx
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceA lightweight Postgres MCP server for safe database exploration and query analysis, read-only by default, with multi-database support.43MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for PostgreSQL that enables safe database introspection and querying via natural language.539MIT
- AlicenseAqualityAmaintenanceRead-only MCP server that lets AI agents safely query SQLite, PostgreSQL, and MySQL/MariaDB. Enforces read-only transactions with column masking, row caps, query timeouts, EXPLAIN-based cost rejection, and rate limiting.7321MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for SQL databases (SQLite/PostgreSQL) that enables listing tables, describing schemas, and executing SELECT queries with safety guardrails.MIT
Related MCP Connectors
MCP server for managing Prisma Postgres.
MCP server for interacting with the Supabase platform
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aminyx/mcp-devdb'
If you have feedback or need assistance with the MCP directory API, please join our Discord server