mcp-data-server
mcp-data-server
Пример проекта, демонстрирующий шаблоны производственного веб-скрапинга / автоматизации.
MCP-сервер, предоставляющий Клод (или любому MCP-клиенту) доступ только для чтения к бизнес-базе данных — с гарантиями, которые делают подключение LLM к реальным корпоративным данным приемлемым: подключение только для чтения, белый список таблиц, маскировка PII, ограничение количества строк, тайм-аут запроса и полный журнал аудита.
Спросите "какие страны заказывают больше всего и сколько нам стоили возвраты в прошлом квартале?" в Claude Desktop и получите ответ из реальной базы данных — без возможности для модели записывать, удалять, подключать или читать таблицу, к которой она не была допущена.
Зачем это нужно
Главное препятствие в большинстве проектов "подключите ИИ к нашим данным" — это не проводка, а первый вопрос от владельца базы данных: что мешает ему прочитать или сломать то, что не следует? Этот сервер отвечает на этот вопрос в коде.
Related MCP server: Vela MCP Server
Четыре независимых барьера
# | Барьер | Что предотвращает |
1 | Подключение открыто | любую запись, даже если все проверки выше него обойдены |
2 | Разбор запроса | несколько операторов, всё, что не является |
3 | Черный список ключевых слов |
|
4 | Белый список + маскировка + ограничения | таблицы, к которым вы не дали доступ, столбцы с PII, слишком большие результаты, неконтролируемые запросы |
Каждый выполненный оператор добавляется в журнал аудита с количеством строк и продолжительностью, чтобы владелец данных мог точно видеть, о чем спрашивала модель.
2026-08-18T11:22:41 6 rows in 1ms SELECT country, COUNT(*) FROM customers GROUP BY 1 LIMIT 201
2026-08-18T11:22:44 error: rejected DELETE FROM customersДоступные инструменты
Инструмент | Назначение |
| читаемые таблицы + количество строк |
| столбцы, типы, какие маскируются, 3 примера строк |
| один |
| поиск подстроки без написания SQL |
| нули, количество уникальных значений, минимум/максимум, топ-5 значений |
Плюс ресурс schema://tables, чтобы клиент мог загрузить всю схему, не используя вызов инструмента.
Быстрый старт
git clone https://github.com/dkautomation23/mcp-data-server.git
cd mcp-data-server
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m mcp_data_server.seed # creates demo.db
cp .env.example .env # then point DATABASE_PATH at your file
python -m mcp_data_server # serves over stdioPython 3.10+. Демонстрационная база данных содержит таблицы customers, orders, order_items и намеренно конфиденциальную таблицу internal_notes, используемую ниже для демонстрации блокировки доступа через белый список.
Подключение к Claude Desktop
Добавьте в claude_desktop_config.json (полный пример в examples/claude_desktop_config.json):
{
"mcpServers": {
"business-data": {
"command": "python",
"args": ["-m", "mcp_data_server"],
"cwd": "C:/path/to/mcp-data-server",
"env": {
"DATABASE_PATH": "C:/path/to/your.db",
"ALLOWED_TABLES": "customers,orders,order_items",
"MASKED_COLUMNS": "customers.email,customers.phone"
}
}
}
}Подключение к Claude Code
claude mcp add business-data -- python -m mcp_data_serverКак выглядит сессия
Реальный вывод работающего сервера (см. examples/demo_session.md для полной стенограммы):
// run_sql("SELECT status, COUNT(*) n, ROUND(SUM(total_eur)) revenue FROM orders GROUP BY 1 ORDER BY 3 DESC")
{
"sql": "SELECT status, COUNT(*) n, ROUND(SUM(total_eur)) revenue FROM orders GROUP BY 1 ORDER BY 3 DESC LIMIT 201",
"columns": ["status", "n", "revenue"],
"rows": [["paid", 92, 149914.0], ["pending", 39, 64596.0], ["refunded", 31, 45911.0]],
"row_count": 3, "truncated": false, "elapsed_ms": 0
}
// run_sql("DELETE FROM customers")
{ "error": "only SELECT (or WITH ... SELECT) statements are allowed" }
// run_sql("SELECT * FROM internal_notes")
{ "error": "table 'internal_notes' is not in the allowlist (allowed: customers, orders, order_items)" }
// run_sql("SELECT id, name, email FROM customers LIMIT 2")
{ "rows": [[1, "Customer 001", "***"], [2, "Customer 002", "***"]] }Конфигурация
Переменная | По умолчанию | Назначение |
|
| Файл SQLite для открытия (всегда открывается только для чтения) |
| все | Белый список, разделенный запятыми; всё остальное невидимо |
| – | Список |
|
| Жесткое ограничение на вызов; результаты сверх него помечаются как |
|
| Более длинный запрос отменяется |
|
| Журнал только для добавления каждого оператора; пустое значение отключает его |
Тесты
pytest -q............................... [100%]
31 passed in 1.77sТри уровня: проверки SQL (инъекции, второй оператор, сокрытие в комментариях, запрещенные таблицы), уровень базы данных на реальном заполненном файле (включая попытку записи, которую отклоняет сам SQLite), и семь тестов, управляющих сервером через реальный протокол MCP — тот же процесс рукопожатия, list_tools и call_tool, который выполняет десктопный клиент.
Адаптация к инфраструктуре клиента
Postgres / MySQL: замените подключение в
db.pyна пулированный драйвер и сессиюSET TRANSACTION READ ONLY; уровень валидации остается неизменным.Бизнес-специфичные инструменты: добавьте функцию с
@mcp.tool()вserver.py— хорошо названныйtop_customers(period)лучше, чем заставлять модель писать SQL.HTTP-транспорт вместо stdio:
mcp.run(transport="streamable-http"), затем поместите его за свою собственную аутентификацию.
Лицензия
MIT — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Ask questions in plain language, get answers from your business database. No SQL required.
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables read-only exploration and querying of PostgreSQL or MySQL databases via MCP, with schema discovery, safe SQL validation, natural language to SQL conversion, and CSV export.111-
- AlicenseNot gradedqualityDmaintenanceEnables governed, agent-agnostic data exploration by allowing users to ask natural language questions through MCP-compatible agents, executing safe, permission-scoped queries against data sources and returning interactive charts.3 npmApache 2.0
- AlicenseNot gradedqualityAmaintenanceProvides a secure, policy-driven read-only gateway that exposes multiple databases to AI tools via MCP, with governed select, search, and aggregate operations and no free-form SQL.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables natural-language querying of Postgres and MongoDB databases in read-only mode, with PII masking and row/timeout guardrails, from any MCP client.-