mcp-devdb
mcp-devdb
Безопасный MCP-сервер только для чтения для локальных баз данных разработки. Программным агентам постоянно нужно видеть вашу базу разработки — схему, примеры данных, планы запросов, размеры таблиц — но наивный коннектор к базе данных дает им полный доступ на запись. mcp-devdb — это защищенная альтернатива: сервер Model Context Protocol, который предоставляет инструменты интроспекции за укрепленным SQL-шлюзом только для чтения, маскированием столбцов, ограничениями результатов и посессионным бюджетом запросов.
Бэкенды в v1: PostgreSQL (через postgres) и SQLite (через better-sqlite3). Интерфейс адаптера нейтрален к движку, поэтому MySQL можно добавить позже.
Быстрый старт
Создайте
mcp-devdb.jsonрядом с местом, где будет запускаться сервер (см.mcp-devdb.example.json):
{
"databases": {
"app": { "url": "postgres://dev:dev@localhost:5432/app_development" },
"cache": { "url": "sqlite:./data/cache.db" }
}
}Запустите его:
npx mcp-devdb --config ./mcp-devdb.jsonСервер общается по MCP через stdio; укажите вашему MCP-клиенту эту команду. Строки подключения находятся только в файле конфигурации или переменных окружения ("url": "env:MY_DB_URL", или резервный вариант MCP_DEVDB_URL без файла конфигурации) — модель никогда не может их предоставить.
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
Инструменты
Инструмент | Входные данные | Что возвращает |
|
| Схемы, таблицы, представления с оценками количества строк и размерами на диске |
|
| Столбцы, типы, допустимость NULL, значения по умолчанию, первичный ключ, внешние ключи, индексы |
|
| Первые N строк; ячейки длиннее 200 символов усекаются; чувствительные столбцы маскируются как |
|
| Защищенный запрос только для чтения; ограничение строк (200) + ограничение байт (256 КиБ); расходует бюджет запросов |
|
| План выполнения — PostgreSQL |
|
| Имя базы данных, размер, количество таблиц, самые большие таблицы, расширения (PG) |
database необязателен, когда настроена ровно одна база данных; при нескольких укажите нужную.
Конфигурация
mcp-devdb.json в рабочем каталоге или любой путь через --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— названия без учета регистра с подстановочными знаками*; правила, содержащие точку, соответствуютschema.table. Запрет имеет приоритет; непустой список разрешений является исключительным.maskPatterns— регулярные выражения без учета регистра, сопоставляемые с именами столбцов.Флаги CLI:
--config <path>,--no-mask(отключить маскирование столбцов),--help,--version.
Модель безопасности (кратко)
Полная модель угроз описана в SECURITY.md. Вкратце:
Шлюз только для чтения: каждый оператор
run_query/explain_queryтокенизируется (кавычки, экранированиеE'...', комментарии, строки в долларовых кавычках) и должен начинаться с SELECT / WITH / EXPLAIN / SHOW / VALUES; многооператорный ввод и ключевые слова записи/DDL где-либо на верхнем уровне отклоняются — CTE, за которым следует INSERT, обнаруживается;SELECT 'DROP TABLE x'не является ложным срабатыванием.Принудительное применение на уровне движка: файлы SQLite открываются только для чтения; сеансы PostgreSQL работают с
default_transaction_read_only=on, явными транзакциямиBEGIN READ ONLYи тайм-аутами операторов.Маскирование столбцов включено по умолчанию (
--no-maskдля отказа), ограничения результатов и посессионный бюджет запросов (по умолчанию 100; при исчерпании вам сообщат о необходимости перезапустить сервер).Учетные данные никогда не попадают к модели: строки подключения поступают только из локального конфига/окружения и удаляются из каждого сообщения об ошибке.
Смоук-тест
scripts/verify-stdio.mjs создает временную базу данных SQLite, запускает node dist/cli.js и выполняет реальное рукопожатие MCP через stdio с помощью сырого JSON-RPC. Фактический вывод:
$ 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 PASSEDОграничения
MySQL пока нет. Интерфейс
DbAdapterвsrc/adapters/types.ts— точка расширения.Только базы данных разработки. Шлюз блокирует запись на уровне SQL, но SELECT все равно может вызывать плохо помеченные функции или функции расширений с побочными эффектами (например,
dblink, открывающий собственное соединение не только для чтения). Допустимо для баз данных разработки; никогда не направляйте это на продакшн. См. SECURITY.md.Шлюз консервативен: столбцы без кавычек, названные как запрещенные ключевые слова (например, столбец, буквально названный
update), отклоняются — заключите их в кавычки ("update"), чтобы продолжить.SELECT ... FOR UPDATEотклоняется (он берет блокировки строк).Подсчет строк в SQLite использует
COUNT(*); на огромных файлахlist_tablesможет работать медленно.
Разработка
npm install
npm run lint && npm run typecheck && npm test && npm run build
node scripts/verify-stdio.mjsЛицензия
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