SQL MCP Server
SQL MCP Server
Сервер на основе Model Context Protocol, который предоставляет LLM-агентам (Claude Desktop, Claude Code или любому MCP-клиенту) доступ к базе данных Postgres через шесть инструментов только для чтения. Подключите к нему агента и задавайте вопросы вроде «какие клиенты сделали более пяти заказов в прошлом месяце?» — агент сам изучит схему и выполнит запросы к данным с помощью инструментов ниже.
Инструменты
Инструмент | Описание |
| Обзор всех таблиц: имя, описание, размер, количество столбцов |
| Столбцы, типы и связи внешних ключей для одной таблицы |
| Поиск таблиц/столбцов, имя которых соответствует ключевому слову |
| Просмотр реальных строк (по умолчанию 5) |
| Количество строк в таблице |
| Выполнение произвольного запроса |
Related MCP server: mcp-data-gateway
Почему это не «просто обёртка вокруг psycopg2»
Демо Text-to-SQL — обычное дело; по-настоящему сложная часть — и именно на ней сосредоточены усилия этого проекта — сделать execute_select безопасным для передачи LLM, которая будет генерировать произвольный SQL:
Роль Postgres только для чтения. Сервер подключается как
mcp_readonly— роль с привилегиями только наSELECT(см.scripts/init_schema.sql). Даже ошибка в описанных ниже проверках на уровне приложения не может привести к записи.Принудительный режим только для чтения на уровне сессии. Каждое соединение выполняет
SET TRANSACTION READ ONLY(db.py).Проверка выражений (
security.py): допускается только одно выражениеSELECT/WITH— без нескольких инструкций подряд (; DROP TABLE ...), без SQL-комментариев (блокируется протаскивание инструкций через комментарии), а список запрещённых ключевых слов покрываетINSERT/UPDATE/DELETE/DDL/GRANT/и т.д., включаяSELECT ... INTO(который молча создаёт таблицу).Проверка идентификаторов.
describe_table,sample_rowsиcount_rowsпринимают имя таблицы как параметр. Поскольку SQL-идентификаторы нельзя параметризовать плейсхолдерами, имена таблиц проверяются по строгому регулярному выражению и по актуальному списку разрешённых имён, полученному изinformation_schema, — а не просто экранированием строк.Ограничение ресурсов.
statement_timeoutв Postgres предотвращает вышедшие из-под контроля запросы, а на стороне сервера для каждого результата запроса применяется ограничение на количество строк, даже если в запросе LLM не указанLIMIT.
Быстрый старт
git clone <this-repo>
cd sql-mcp-server
pip install -r requirements.txt
# 1. Start Postgres with the sample schema
docker compose up -d
# 2. Generate sample e-commerce data (uses the postgres superuser, not mcp_readonly)
PGUSER=postgres PGPASSWORD=postgres python scripts/generate_sample_data.py
# 3. Configure the server to use the read-only role
cp .env.example .env
# edit .env if you changed the default mcp_readonly password
# 4. Run the tests
pytest
# 5. Run the server (stdio transport, for use with an MCP client)
python -m sql_mcp_server.serverПодключение к Claude Desktop
Добавьте в конфигурацию MCP Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"sql-explorer": {
"command": "python",
"args": ["-m", "sql_mcp_server.server"],
"cwd": "/absolute/path/to/sql-mcp-server",
"env": {
"PGHOST": "localhost",
"PGPORT": "5432",
"PGDATABASE": "sales",
"PGUSER": "mcp_readonly",
"PGPASSWORD": "change_me"
}
}
}
}Перезапустите Claude Desktop и задайте, например, такой вопрос: «Какие таблицы доступны и какая категория товаров приносит наибольшую выручку?»
Пример схемы
orders → order_items → products → categories, плюс customers. Выручка заказа = sum(order_items.quantity * order_items.unit_price). Генератор наполняет базу ~600 клиентами, ~3,500 заказами и несколькими намеренными странностями в данных (отсутствующие email, пара выделяющихся оптовых заказов), чтобы запросы выглядели так, будто работают с реальными данными.
Тестирование
tests/test_security.py и tests/test_tools.py запускаются без базы данных: они проверяют слой валидации напрямую, а функции инструментов — с замоканным слоем БД. Именно это и запускает CI. Сам db.py (слой psycopg2) проверяется на практике запуском сервера с Docker-инстансом Postgres; см. «Быстрый старт» выше.
Структура проекта
sql_mcp_server/
config.py Environment-based settings
security.py SQL/identifier validation (the core safety logic)
db.py psycopg2 access layer
server.py MCP tool definitions
scripts/
init_schema.sql Schema + read-only role setup
generate_sample_data.py Faker-based sample data
tests/
test_security.py Validation logic (18+ cases: injection, stacked
statements, comment smuggling, DDL/DML blocking, etc.)
test_tools.py Tool functions with mocked DBThis 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
- FlicenseNot gradedqualityDmaintenanceEnables interaction with PostgreSQL databases through MCP, allowing users to explore database structures, inspect table schemas, and execute read-only SQL queries.
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query a PostgreSQL database through a small set of controlled, read-only tools for schema inspection, row lookup, and aggregate statistics.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to execute SQL queries and inspect PostgreSQL database schemas via MCP tools.
- AlicenseNot gradedqualityCmaintenanceA read-only natural-language database agent that exposes PostgreSQL schema-discovery and SELECT tools via MCP, enabling users to query databases in plain English.MIT
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
MCP server for managing Prisma Postgres.
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/Kenza-21/MCP-SQL-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server