Skip to main content
Glama
dkautomation23

mcp-data-server

mcp-data-server

Пример проекта, демонстрирующий шаблоны производственного веб-скрапинга / автоматизации.

MCP-сервер, предоставляющий Клод (или любому MCP-клиенту) доступ только для чтения к бизнес-базе данных — с гарантиями, которые делают подключение LLM к реальным корпоративным данным приемлемым: подключение только для чтения, белый список таблиц, маскировка PII, ограничение количества строк, тайм-аут запроса и полный журнал аудита.

Спросите "какие страны заказывают больше всего и сколько нам стоили возвраты в прошлом квартале?" в Claude Desktop и получите ответ из реальной базы данных — без возможности для модели записывать, удалять, подключать или читать таблицу, к которой она не была допущена.


Зачем это нужно

Главное препятствие в большинстве проектов "подключите ИИ к нашим данным" — это не проводка, а первый вопрос от владельца базы данных: что мешает ему прочитать или сломать то, что не следует? Этот сервер отвечает на этот вопрос в коде.

Related MCP server: Database Assistant MCP Server

Четыре независимых барьера

#

Барьер

Что предотвращает

1

Подключение открыто mode=ro

любую запись, даже если все проверки выше него обойдены

2

Разбор запроса

несколько операторов, всё, что не является SELECT / WITH

3

Черный список ключевых слов

ATTACH, PRAGMA, DDL, VACUUM, GRANT

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

Доступные инструменты

Инструмент

Назначение

list_tables()

читаемые таблицы + количество строк

describe_table(table)

столбцы, типы, какие маскируются, 3 примера строк

run_sql(sql)

один SELECT только для чтения, с ограничением и аудитом

search(table, column, term, limit)

поиск подстроки без написания SQL

summarize_column(table, column)

нули, количество уникальных значений, минимум/максимум, топ-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 stdio

Python 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", "***"]] }

Конфигурация

Переменная

По умолчанию

Назначение

DATABASE_PATH

demo.db

Файл SQLite для открытия (всегда открывается только для чтения)

ALLOWED_TABLES

все

Белый список, разделенный запятыми; всё остальное невидимо

MASKED_COLUMNS

Список таблица.столбец, заменяемый на *** в каждом результате

MAX_ROWS

200

Жесткое ограничение на вызов; результаты сверх него помечаются как truncated

QUERY_TIMEOUT_SECONDS

10

Более длинный запрос отменяется

AUDIT_LOG_PATH

audit.log

Журнал только для добавления каждого оператора; пустое значение отключает его

Тесты

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.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    -
    quality
    A
    maintenance
    Provides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.
    3
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables 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.
    11
    1
  • A
    license
    -
    quality
    B
    maintenance
    Enables 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.
    48
    Apache 2.0
  • F
    license
    -
    quality
    C
    maintenance
    Enables read-only access to company data across PostgreSQL, MongoDB Atlas, and flat files through MCP tools, allowing AI assistants to query and retrieve information via natural language.

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/dkautomation23/mcp-data-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server