Skip to main content
Glama

SafeSelect MCP

Агенты могут смотреть. Они не могут изменять.

Отказоустойчивый доступ только для чтения к PostgreSQL и MongoDB для ИИ-агентов, работающих с кодом, через MCP.

CI CRAP Security Rust Java MCP Homebrew asdf License

SafeSelect предоставляет агентам, работающим с кодом, ограниченный инструмент для работы с базами данных: обнаружение структуры, проверка данных, приближенных к производственным, объяснение запросов, диагностика подключения и восстановление устаревших соединений — без предоставления инструментов с правом записи или прямого доступа к учетным данным базы данных.

Большинство MCP-серверов для баз данных позволяют легко подключить агента к базе. SafeSelect создан для более сложной задачи: позволить агенту проверять данные, приближенные к производственным, не превращая базу данных в неограниченную поверхность инструментов.

[!NOTE] SafeSelect — это граница безопасности для доступа агента, а не замена прав базы данных. Используйте пользователей базы данных с минимальными привилегиями, когда это возможно; SafeSelect по-прежнему ограничивает избыточные учетные данные, когда агенты подключаются через него.

Текущая поддержка бэкендов: PostgreSQL и MongoDB.

Related MCP server: db-mcp

Где это полезно

  • Отладка приложения на реалистичных данных без раскрытия инструментов изменения.

  • Позволяет агенту проверять схемы, индексы, планы запросов и ограниченные строки во время разработки.

  • Исследование коллекций MongoDB через ограниченные чтения и выборочный вывод схемы.

  • Повторное использование существующих подключений DBeaver, Docker Compose или MongoDB Compass.

  • Предоставление агентам контекста базы данных при сохранении контроля над политиками, лимитами, секретами и аудитом.

Почему SafeSelect?

SafeSelect намеренно уже, чем универсальные MCP-серверы для баз данных. Это не конструктор инструментов, не SQL-среда и не удаленный шлюз к базе данных. Это локальная граница безопасности для агентов, которым нужна видимость базы данных, а не власть над ней.

Приоритет SafeSelect

Что это означает

Локальный транспорт stdio

Нет сетевого слушателя или открытого MCP-порта

Инструменты только для чтения

Агенты не получают инструменты базы данных с правом записи

Безопасность независимо от учетных данных

Даже учетные данные DBA ограничены поверхностью инструментов SafeSelect только для чтения

Принудительное закрытие при сбое

Нарушения политики завершают процесс

Изоляция секретов

Пароли хранятся в Keychain или переменных окружения

Политика в рамках проекта

Каждый репозиторий определяет свою допустимую поверхность данных

Встроенный сайдкар

Один установленный бинарник достигает драйверов JDBC и MongoDB за политикой Rust

Что делает его отличным?

Универсальные MCP-серверы для баз данных

SafeSelect

Часто предоставляют настраиваемые инструменты

Предоставляет фиксированную поверхность инструментов только для чтения

Могут поддерживать удаленные HTTP-транспорты

Использует локальный MCP stdio по умолчанию

Обычно оптимизированы для широкого покрытия бэкендов

Оптимизирован для соблюдаемой политики и безопасности агента

Часто полагаются на пользователей базы данных с минимальными привилегиями

Обеспечивает поведение только для чтения даже при избыточных учетных данных

Часто держат настройку подключения отдельно

Импортирует из DBeaver, Docker Compose и MongoDB Compass

Могут логировать запросы для отладки

Хеширует текст запроса перед записью в аудит

Считают сбои безопасности восстанавливаемыми ошибками

Закрывается при сбое и завершает MCP-процесс

Обещание продукта простое: агенты могут смотреть, но не могут изменять. Даже если настроенный пользователь базы данных — DBA, агент все равно получает только ограниченные операции чтения SafeSelect.

[!TIP] Это полезно, когда у команд уже есть подключения DBeaver, Docker Compose или MongoDB Compass, и им нужно предоставить их агентам без перепроектирования пользователей базы данных.

Поддержка бэкендов

Бэкенд

Статус

Инструменты

PostgreSQL

Поддерживается

Обнаружение, индексы/статистика, select и explain

MongoDB

Поддерживается

Обнаружение, find, агрегация, distinct/count, explain, профилирование, вывод схемы и анонимизированные фикстуры

Архитектура

Агент общается с SafeSelect через MCP stdio. SafeSelect обеспечивает соблюдение политики на Rust, хранит секреты вне файлов проекта и достигает баз данных через встроенный Java-сайдкар: JDBC для SQL-бэкендов и драйвер MongoDB для MongoDB. Канал Rust-Java — это JSON-lines через stdin/stdout: никаких сокетов, никаких открытых портов.

Быстрый старт

brew install antonillos/tap/safeselect

# Import a project database
safeselect import-dbeaver ~/Downloads/dbeaver-export.zip
# or:
# safeselect import-compose
# safeselect import-compass --path "$HOME/.config/MongoDB Compass"

# Verify the environment
safeselect check --environment testing

# Install the MCP entry. If this is the only environment, its name is inferred.
safeselect agent install opencode

# Verify exactly what was installed and where.
safeselect agent status

SafeSelect использует любой доступный Java 17+ runtime вместо того, чтобы требовать конкретную формулу Homebrew openjdk@17. Если Java отсутствует или слишком старая, установите или выберите Java 17+ runtime перед запуском команд базы данных.

Сгенерированное имя MCP по умолчанию — safeselect-<project>-<environment>.

Сгенерированная запись MCP — это stdio-сервер, ограниченный одним проектом и окружением:

{
  "mcpServers": {
    "safeselect-myapp-testing": {
      "command": "safeselect",
      "args": ["serve", "--project", "/path/to/myapp", "--environment", "testing"]
    }
  }
}

SafeSelect использует официальный контракт конфигурации MCP каждого клиента, фиксирует абсолютный путь к репозиторию и по умолчанию использует пользовательскую область. Добавьте --local для записи в рамках проекта, если клиент это поддерживает. См. Интеграция с ИИ-агентами для точных путей, областей и ручной настройки.

Рабочий процесс агента

Агенты должны использовать SafeSelect в следующем порядке:

  1. database_info

  2. list_tables, затем describe_table; проверьте list_table_indexes или ограниченную статистику, если это полезно для SQL

  3. list_databases, list_collections, затем discover_document_schema для NoSQL

  4. select / explain или ограниченный инструмент чтения MongoDB, соответствующий задаче

  5. check, connect или reconnect, когда соединение устарело

Агенты должны обнаруживать структуру отношений или коллекций перед запросом незнакомых данных и использовать next_suggestion из каждого ответа обнаружения вместо угадывания имен столбцов или полей. Описания SQL — это метаданные каталога; схемы MongoDB выводятся из ограниченной, неисчерпывающей выборки.

Документы запросов MongoDB должны оставаться полными вложенными JSON-значениями. Клиенты, которые уплощают вложенные аргументы инструментов, могут передавать filter, projection и sort как JSON-кодированные строки объектов, а pipeline — как JSON-кодированную строку массива. redact_fields также принимает JSON-кодированную строку массива. Уплощенные ключи отклоняются, чтобы потерянный фильтр или редактирование никогда не стали менее ограниченным запасным вариантом.

Серверный JavaScript MongoDB никогда не доступен: $where, $function и $accumulator рекурсивно отклоняются в фильтрах, проекциях, сортировках и конвейерах агрегации до того, как они попадут в драйвер MongoDB. При отклонении перестройте запрос с декларативными операторами MQL; в SafeSelect нет настройки, включающей JavaScript.

Ответы на запросы включают row_count, byte_count, elapsed_ms и человекочитаемое значение elapsed, чтобы агенты могли оценить размер результата и задержку.

Каждый успех и ошибка MCP включает одну контекстную next_suggestion. Агенты должны следовать этому единственному безопасному действию, никогда не повторять вслепую недопустимый запрос и останавливаться, когда предложение является терминальным. Для клиентов, которые показывают только сводку ошибок MCP, SafeSelect также включает доверенное следующее предложение в эту сводку, не раскрывая деталей, полученных из базы данных.

Модель безопасности

  • Закрытие при сбое: нарушения безопасности завершают MCP-процесс.

  • Только чтение: SQL разрешает SELECT, EXPLAIN и WITH; NoSQL-бэкенды разрешают обнаружение и чтение документов только для чтения.

  • Нет серверного JavaScript: MongoDB $where, $function и $accumulator отклоняются на Rust и снова в Java-сайдкаре.

  • Ограниченный доступ: схемы, отношения, базы данных и коллекции могут быть разрешены или запрещены.

  • Жесткие лимиты: количество строк, размер результата в байтах и таймауты применяются; команды чтения MongoDB получают тот же таймаут, что и maxTimeMS.

  • Изоляция секретов: пароли хранятся в macOS Keychain или переменных окружения, никогда в конфигурации проекта.

  • Проверка драйверов: драйверы JDBC проверяются по SHA-256 перед использованием.

  • Аудит: текст запроса хешируется перед записью; текущая сессия предоставляет ограниченные метаданные аудита через audit_status и audit_recent.

Преднамеренные ограничения

  • SafeSelect не предоставляет запись в базу данных, миграции, администрирование или произвольное выполнение команд.

  • PostgreSQL и MongoDB — поддерживаемые бэкенды на сегодня; широкое количество коннекторов не является целью.

  • MCP-транспорт — локальный stdio. SafeSelect не является удаленным шлюзом к базе данных.

  • Обнаружение схемы MongoDB основано на выборке и ограничено, а не является исчерпывающей гарантией схемы.

  • SafeSelect дополняет минимальные привилегии на уровне базы данных; он не заменяет их.

MCP-инструменты

Область

Инструменты

SQL

list_tables, describe_table, list_table_indexes, get_database_stats, get_table_stats, select, explain

Чтение MongoDB

list_databases, list_collections, find_documents, aggregate_documents, distinct_documents, count_documents, explain_documents

Анализ MongoDB

profile_document_field, discover_document_schema, generate_document_fixture, list_collection_indexes, get_database_stats, get_collection_stats

Подключение

database_info, check, connect, disconnect, reconnect

Аудит

audit_status, audit_recent

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

config_validate, config_show, config_set_password, config_rename_environment, config_delete_environment, config_reset

Настройка

import_compose, driver_list, driver_add, driver_download, agent_detect, agent_install, agent_status, agent_uninstall

Когда каталог .safeselect/ отсутствует, safeselect serve --environment <env> автоматически переходит в режим настройки и предоставляет только инструменты, безопасные для настройки.

[!IMPORTANT] Режим настройки не предоставляет инструменты запросов. Агенты могут помочь импортировать и проверить конфигурацию до того, как станут доступны инструменты проверки базы данных.

Основы CLI

Команда

Назначение

safeselect serve --environment <env>

Запустить MCP-сервер

safeselect check --environment <env>

Проверить конфигурацию, секреты, туннели, sidecar и подключение к бэкенду

safeselect doctor --environment <env>

Вывести более подробную диагностику со стабильными кодами

safeselect import-dbeaver <zip>

Импортировать подключения DBeaver

safeselect import-compose [--path <path>]

Импортировать из docker-compose

safeselect import-compass [--path <path>]

Импортировать подключения MongoDB Compass

safeselect agent install <client> --environment <env>

Установить запись MCP

safeselect config set-password --environment <env>

Сохранить пароль базы данных

safeselect config set-ssh-password --environment <env>

Сохранить SSH-пароль

safeselect uninstall

Удалить установленные бинарные файлы, глобальное состояние, данные аудита и записи Keychain

safeselect uninstall --binary-only

Удалить только пользовательские бинарные файлы и сохранить конфигурацию

Используйте safeselect --help или --help для конкретной команды, чтобы получить полную справку по CLI.

Uninstall проверяет как расположение бинарных файлов установщика релизов, так и Cargo. Импорт MongoDB Compass поддерживает SSH-туннелированные подключения mongodb+srv://, разрешая SRV-цель и переписывая локальную конечную точку с необходимыми параметрами TLS и прямого подключения.

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

Глобальное состояние по умолчанию хранится в ~/.config/safeselect/. Политика проекта хранится в .safeselect/ в корне репозитория:

<repo-root>/
└── .safeselect/
    ├── project.toml
    └── environments/
        └── <env>.toml

SafeSelect поднимается вверх от текущего каталога, чтобы найти .safeselect/. Используйте --project <path>, когда агент или скрипт должен нацеливаться на конкретный репозиторий.

Поддерживаемые агенты

Клиент

Пользовательская область

Область проекта

Интеграция

OpenCode

Да

Да

JSON/JSONC mcp

OpenAI Codex

Да

Да

lossless TOML mcp_servers

Claude Code

Да

Да

native claude mcp scopes

Cursor

Да

Да

.cursor/mcp.json

Windsurf

Да

Нет

глобальная конфигурация MCP Windsurf

GitHub Copilot

Да

Да

servers в MCP JSON

Gemini CLI

Да

Да

.gemini/settings.json

SafeSelect никогда не переключается молча на более широкую область. В частности, --local для Windsurf завершается ошибкой с понятным пояснением, поскольку Windsurf не документирует конфигурацию MCP в области проекта.

Сборка из исходного кода

./install.sh
safeselect --version

Требования: Rust 1.81+, Java 17+, Maven 3.8+. sshpass необязателен для SSH-туннелей на основе пароля.

Документация

Примечания к выпуску генерируются из CHANGELOG.md.

Лицензия

MIT — см. LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.
    166 PyPI
    4
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only database access for AI agents across multiple databases (Postgres, MySQL, MongoDB, Elasticsearch) with enforced read-only guarantees and separate tools for prod and non-prod environments.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.
    145 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to PostgreSQL databases via MCP, enforcing least-privilege roles, row-level security, masked views, and SQL AST guardrails to prevent data leakage and unauthorized operations, enabling AI agents to safely query sensitive production data.
    MIT