safeselect
SafeSelect MCP
Агенты могут смотреть. Они не могут изменять.
Отказоустойчивый доступ только для чтения к PostgreSQL и MongoDB для ИИ-агентов, работающих с кодом, через MCP.
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 | Поддерживается | Обнаружение, индексы/статистика, |
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 statusSafeSelect использует любой доступный 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 в следующем порядке:
database_infolist_tables, затемdescribe_table; проверьтеlist_table_indexesили ограниченную статистику, если это полезно для SQLlist_databases,list_collections, затемdiscover_document_schemaдля NoSQLselect/explainили ограниченный инструмент чтения MongoDB, соответствующий задаче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 |
|
Чтение MongoDB |
|
Анализ MongoDB |
|
Подключение |
|
Аудит |
|
Конфигурация |
|
Настройка |
|
Когда каталог .safeselect/ отсутствует, safeselect serve --environment <env> автоматически переходит в режим настройки и предоставляет только инструменты, безопасные для настройки.
[!IMPORTANT] Режим настройки не предоставляет инструменты запросов. Агенты могут помочь импортировать и проверить конфигурацию до того, как станут доступны инструменты проверки базы данных.
Основы CLI
Команда | Назначение |
| Запустить MCP-сервер |
| Проверить конфигурацию, секреты, туннели, sidecar и подключение к бэкенду |
| Вывести более подробную диагностику со стабильными кодами |
| Импортировать подключения DBeaver |
| Импортировать из docker-compose |
| Импортировать подключения MongoDB Compass |
| Установить запись MCP |
| Сохранить пароль базы данных |
| Сохранить SSH-пароль |
| Удалить установленные бинарные файлы, глобальное состояние, данные аудита и записи Keychain |
| Удалить только пользовательские бинарные файлы и сохранить конфигурацию |
Используйте safeselect --help или --help для конкретной команды, чтобы получить полную справку по CLI.
Uninstall проверяет как расположение бинарных файлов установщика релизов, так и Cargo.
Импорт MongoDB Compass поддерживает SSH-туннелированные подключения mongodb+srv://, разрешая
SRV-цель и переписывая локальную конечную точку с необходимыми параметрами TLS и прямого
подключения.
Конфигурация
Глобальное состояние по умолчанию хранится в ~/.config/safeselect/. Политика проекта хранится в .safeselect/ в корне репозитория:
<repo-root>/
└── .safeselect/
├── project.toml
└── environments/
└── <env>.tomlSafeSelect поднимается вверх от текущего каталога, чтобы найти .safeselect/. Используйте --project <path>, когда агент или скрипт должен нацеливаться на конкретный репозиторий.
Поддерживаемые агенты
Клиент | Пользовательская область | Область проекта | Интеграция |
OpenCode | Да | Да | JSON/JSONC |
OpenAI Codex | Да | Да | lossless TOML |
Claude Code | Да | Да | native |
Cursor | Да | Да |
|
Windsurf | Да | Нет | глобальная конфигурация MCP Windsurf |
GitHub Copilot | Да | Да |
|
Gemini CLI | Да | Да |
|
SafeSelect никогда не переключается молча на более широкую область. В частности,
--local для Windsurf завершается ошибкой с понятным пояснением, поскольку Windsurf не
документирует конфигурацию MCP в области проекта.
Сборка из исходного кода
./install.sh
safeselect --versionТребования: Rust 1.81+, Java 17+, Maven 3.8+. sshpass необязателен для SSH-туннелей на основе пароля.
Документация
Примечания к выпуску генерируются из CHANGELOG.md.
Лицензия
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.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Guard AI agents' PostgreSQL/MySQL access via MCP: SQL audit, auth, masking, write approval
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.166 PyPI4MIT
- FlicenseNot gradedqualityCmaintenanceProvides 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.-
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.145 npm3MIT
- AlicenseNot gradedqualityBmaintenanceProvides 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