SafeSelect

Acceso seguro a bases de datos, de solo lectura y con cierre ante fallos, para agentes de IA a través de MCP.

Documentación

SafeSelect

Los agentes pueden mirar. No pueden modificar.

Acceso de solo lectura a PostgreSQL y MongoDB para agentes de codificación.

Depura con contexto real de base de datos, sin exponer herramientas de escritura.
Política local y limitada al proyecto, incluso cuando tus credenciales existentes permiten escrituras.

Comenzar → · Demo · Agentes · Seguridad · Documentación · Sitio web

CI CRAP License: MIT

Lo que puedes hacer

  • Inspeccionar PostgreSQL — descubre tablas, índices y planes de consulta; lee filas limitadas.
  • Explorar MongoDB — descubre colecciones, infiere esquemas muestreados y ejecuta lecturas limitadas.
  • Reutilizar tus conexiones — importa desde DBeaver, Docker Compose o MongoDB Compass.
  • Conectar tu agente de codificación — instala una entrada MCP fijada al proyecto/entorno.
  • Mantener el control — stdio local, política de proyecto, secretos externos y metadatos de auditoría.

[!IMPORTANT] El modo de solo lectura aplica a las herramientas de base de datos de SafeSelect, no al shell de un agente, a otros servidores MCP ni a credenciales directas. Comienza con datos de desarrollo o una réplica saneada y usa usuarios de base de datos con privilegios mínimos. Revisa el modelo de amenazas y límites antes de conectar datos sensibles.

Vélo en acción

Incorporación completa: de Homebrew a un agente protegido

SafeSelect onboarding: Homebrew, DBeaver SSH import, Keychain and OpenCode

Instala SafeSelect desde Homebrew, importa una conexión DBeaver respaldada por SSH, mantén la contraseña en el Llavero de macOS, instala la integración de OpenCode y observa al agente leer un pedido pagado mientras su intento de DELETE es rechazado. Los clips enfocados del agente y del backend permanecen en la galería de demos completa.

Inicio rápido

Ejecuta la configuración desde la raíz de tu repositorio. Necesitarás una conexión PostgreSQL o MongoDB y un runtime Java 17+ para los comandos de base de datos.

1. Instalar

En macOS con Homebrew:

brew install antonillos/tap/safeselect
Otros métodos de instalación: binarios precompilados y asdf

Binarios precompilados (macOS y Linux glibc)

Descarga un binario precompilado específico para tu plataforma, para macOS o Linux basado en glibc, desde la última versión de GitHub. El instalador verificado selecciona la arquitectura macOS o Linux glibc correspondiente, comprueba el resumen SHA-256 publicado y se instala en ~/.local/bin:

curl -fsSL https://raw.githubusercontent.com/antonillos/safeselect/main/packaging/install/install-release.sh | sh

Establece PREFIX para elegir otro directorio de instalación. SafeSelect aún necesita un runtime Java 17+ en el momento de la ejecución.

asdf (macOS y Linux)

asdf plugin add safeselect https://github.com/antonillos/asdf-safeselect.git
asdf install safeselect latest
SAFESELECT_VERSION="$(asdf latest safeselect | sed -n '$p')"
asdf set -u safeselect "${SAFESELECT_VERSION}"
asdf reshim safeselect "${SAFESELECT_VERSION}"

SafeSelect usa cualquier runtime Java 17+ disponible en lugar de requerir una fórmula específica del gestor de paquetes. Si Java falta o es demasiado antiguo, instala o selecciona un runtime Java 17+ antes de ejecutar comandos de base de datos. En macOS con Homebrew, puedes instalar uno con brew install openjdk@17.

2. Importar una fuente de conexión

Elige la fuente que ya usas; no necesitas ejecutar las tres:

Fuente de conexiónComando
Exportación de DBeaversafeselect import-dbeaver ~/Downloads/dbeaver-export.zip
PostgreSQL en Docker Composesafeselect import-compose
MongoDB Compasssafeselect import-compass --path "$HOME/.config/MongoDB Compass"

Usa tu exportación real o el directorio de Compass. Sigue los siguientes pasos del importador para la configuración del controlador y la contraseña antes de continuar. Mantén los secretos fuera de los archivos del proyecto. Para un recorrido respaldado por SSH, consulta DBeaver → Codex.

3. Verificar y conectar tu agente

# Check configured environments; this can open SSH tunnels and contact databases.
safeselect check

# Install for OpenCode (replace with codex for OpenAI Codex).
safeselect agent install opencode

# Inspect the installed MCP entry and its configuration location.
safeselect agent status

¿Múltiples entornos? Usa safeselect check --environment <name> para evitar verificar bases de datos no relacionadas, y añade --environment <name> a agent install para seleccionar el destino previsto. La instalación infiere el nombre solo cuando hay un entorno.

Abre o reinicia tu agente y aprueba el servidor MCP si se te solicita. La instalación usa el ámbito de usuario por defecto; consulta agentes compatibles y la guía de configuración del cliente para el ámbito de proyecto y los pasos específicos del cliente.

4. Probar una primera lectura

Pregunta a tu agente:

Usa SafeSelect para identificar el backend conectado y descubrir sus tablas o colecciones disponibles. Describe una, luego detente antes de consultar el contenido de filas o documentos. Sigue las siguientes sugerencias solo dentro de ese ámbito exclusivo de descubrimiento.

El éxito se ve así: el agente llama a database_info, usa las herramientas de descubrimiento de esquemas correspondientes e informa la estructura que encontró. No se necesitan herramientas de escritura ni contraseñas de base de datos en la conversación.

¿Atascado? Ejecuta safeselect doctor --environment <name> para diagnósticos concisos (esto puede contactar la base de datos), luego sigue el siguiente paso indicado. No relajes la política para superar un rechazo. Consulta recuperación del agente.

¿Qué se instala? Configuración y ámbito de MCP

El nombre MCP generado por defecto es safeselect-<project>-<environment>.

La entrada MCP generada es un servidor stdio limitado a un proyecto y entorno:

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

SafeSelect usa el contrato de configuración MCP oficial de cada cliente, fija la ruta absoluta del repositorio y usa el ámbito de usuario por defecto. Añade --local para una entrada de ámbito de proyecto donde el cliente lo admita. Consulta integración con agentes de IA para rutas exactas, ámbitos y configuración manual.

Documentación

Quiero…Empieza aquí
Elegir un cliente o configurar MCP manualmenteIntegración con agentes de IA
Importar una conexión DBeaver respaldada por SSHRecorrido DBeaver → Codex
Ver otros clientes y backendsGalería de demos
Entender el límite y sus restriccionesPrueba de seguridad y modelo de amenazas
Comparar enfoques MCP de bases de datosComparación
Encontrar un comando o herramientaEsenciales de CLI · Galería visual de comandos · Herramientas MCP
Compilar o contribuirContribuir

Dónde ayuda

  • Depurar una aplicación con datos realistas sin exponer herramientas de mutación.
  • Permitir que un agente inspeccione esquemas, índices, planes de consulta y filas limitadas durante el desarrollo.
  • Explorar colecciones de MongoDB mediante lecturas limitadas e inferencia de esquemas muestreados.
  • Reutilizar conexiones existentes de DBeaver, Docker Compose o MongoDB Compass.
  • Dar a los agentes de codificación contexto de base de datos mientras mantienes política, límites, secretos y auditoría bajo tu control.

¿Por qué SafeSelect?

SafeSelect es intencionalmente más limitado que los servidores MCP de bases de datos de propósito general. No es un constructor de herramientas, un banco de trabajo SQL ni una puerta de enlace remota de bases de datos. Es un límite de seguridad local para agentes que necesitan visibilidad de la base de datos, no poder sobre ella.

SafeSelect priorizaQué significa
Transporte stdio localSin listener de red ni puerto MCP abierto
Herramientas de solo lecturaLos agentes no reciben herramientas de base de datos con capacidad de escritura
Seguridad independiente de credencialesIncluso las credenciales DBA están restringidas a la superficie de herramientas de solo lectura de SafeSelect
Cumplimiento de cierre ante fallosLas violaciones de política terminan el proceso
Aislamiento de secretosLas contraseñas permanecen en el Llavero o en variables de entorno
Política limitada al proyectoCada repositorio define su propia superficie de datos permitida
Sidecar integradoUn binario instalado alcanza los controladores JDBC y MongoDB detrás de la política Rust

¿Qué lo hace diferente?

La combinación importa: inspección de PostgreSQL y MongoDB, una superficie fija de lectura de base de datos, stdio local, política de proyecto, importación de conexiones y evidencia de seguridad reproducible. Los modos de solo lectura y los controles en capas también existen en otros proyectos; no son exclusivos de SafeSelect.

Consulta la comparación fechada para DBHub, MongoDB MCP Server, Postgres MCP Pro y SchemaBrain, incluido cuándo cada uno es una mejor opción.

Los agentes pueden mirar, pero no pueden modificar a través de las herramientas de base de datos de SafeSelect. Este límite no cubre un shell, otro servidor MCP ni credenciales directas también disponibles para el agente. Usa usuarios de base de datos con privilegios mínimos y revisa el modelo de amenazas y límites.

Soporte de backends

BackendEstadoHerramientas
PostgreSQLCompatibleDescubrimiento, índices/estadísticas, select y explain
MongoDBCompatibleDescubrimiento, find, agregación, distinct/count, explain, perfilado, inferencia de esquemas y fixtures anonimizados

Arquitectura

SafeSelect Architecture

El agente habla con SafeSelect a través de MCP stdio. SafeSelect aplica la política en Rust, almacena secretos fuera de los archivos del proyecto y llega a las bases de datos mediante un sidecar Java integrado: JDBC para backends SQL y el controlador MongoDB para MongoDB. El canal de Rust a Java es JSON-lines sobre stdin/stdout: sin sockets, sin puertos abiertos.

Contexto MCP guiado

Los clientes que admiten prompts MCP pueden invocar read_only_database_debugging para una lista de verificación de investigación segura. Los clientes también pueden leer safeselect://guide/read-only-database-debugging para el mismo flujo de trabajo estático y notas sobre el límite. Ninguna de estas capacidades expone datos de base de datos, credenciales ni acceso de escritura; usa las herramientas de base de datos a continuación para descubrimiento y lecturas limitadas.

Flujo de trabajo del agente

Los agentes deben usar SafeSelect en este orden:

  1. database_info
  2. list_tables y luego describe_table; inspecciona list_table_indexes o estadísticas limitadas cuando sea útil para SQL
  3. list_databases, list_collections y luego discover_document_schema para NoSQL
  4. select / explain, o la herramienta de lectura MongoDB limitada que coincida con la tarea
  5. check, connect o reconnect cuando la conectividad esté desactualizada

Los agentes deben descubrir la estructura de relaciones o colecciones antes de consultar datos desconocidos y usar el next_suggestion de cada respuesta de descubrimiento en lugar de adivinar nombres de columnas o campos. Las descripciones SQL son metadatos de catálogo; los esquemas MongoDB se infieren de una muestra limitada y no exhaustiva.

Los documentos de consulta MongoDB deben permanecer como valores JSON anidados completos. Los clientes que aplanan argumentos de herramientas anidados pueden pasar filter, projection y sort como cadenas de objetos codificadas en JSON y pipeline como una cadena de matriz codificada en JSON. redact_fields también acepta una matriz de cadenas codificada en JSON. Las claves aplanadas se rechazan para que un filtro o redacción perdido nunca pueda convertirse en un respaldo menos restringido.

El JavaScript del lado del servidor de MongoDB nunca está disponible: $where, $function y $accumulator se rechazan recursivamente en filtros, proyecciones, ordenamientos y canalizaciones de agregación antes de que el controlador MongoDB los reciba. Cuando se rechazan, reconstruye la solicitud con operadores MQL declarativos; SafeSelect no tiene ninguna configuración que habilite JavaScript.

Las respuestas de consulta incluyen row_count, byte_count, elapsed_ms y un valor elapsed legible por humanos para que los agentes puedan razonar sobre el tamaño del resultado y la latencia.

Cada éxito y error de MCP incluye un next_suggestion contextual. Los agentes deben seguir esa única acción segura, nunca repetir ciegamente una solicitud no válida y detenerse cuando la sugerencia sea terminal. Para clientes que solo muestran un resumen de error de MCP, SafeSelect también incluye la siguiente sugerencia confiable en ese resumen sin exponer detalles derivados de la base de datos.

Modelo de seguridad

  • Fail closed: las violaciones de seguridad terminan el proceso MCP.
  • Solo lectura: SQL permite SELECT, EXPLAIN y WITH; los backends NoSQL permiten descubrimiento y lecturas de documentos de solo lectura.
  • Sin JavaScript en el servidor: $where, $function y $accumulator de MongoDB se rechazan en Rust y nuevamente en el sidecar de Java.
  • Acceso limitado: se pueden permitir o denegar esquemas, relaciones, bases de datos y colecciones.
  • Límites estrictos: se aplican límites de filas, bytes de resultados y tiempos de espera; los comandos de lectura de MongoDB reciben el mismo tiempo de espera que maxTimeMS.
  • Aislamiento de secretos: las contraseñas viven en el Llavero de macOS o en variables de entorno, nunca en la configuración del proyecto.
  • Verificación de controladores: los controladores JDBC se verifican mediante SHA-256 antes de su uso.
  • Rastro de auditoría: el texto de la consulta se cifra antes de registrarse; la sesión actual expone metadatos de auditoría limitados a través de audit_status y audit_recent.

Límites deliberados

  • SafeSelect no expone escrituras en bases de datos, migraciones, administración ni ejecución arbitraria de comandos.
  • PostgreSQL y MongoDB son los backends compatibles hoy; una amplia cantidad de conectores no es el objetivo.
  • El transporte MCP es stdio local. SafeSelect no es una puerta de enlace remota de bases de datos.
  • El descubrimiento de esquemas de MongoDB se muestrea y limita, no es una garantía exhaustiva de esquema.
  • SafeSelect complementa el privilegio mínimo nativo de la base de datos; no lo reemplaza.

Herramientas MCP

ÁreaHerramientas
SQLlist_tables, describe_table, list_table_indexes, list_table_partitions, get_database_stats, get_table_stats, get_maintenance_diagnostics, select, explain
Lecturas MongoDBlist_databases, list_collections, find_documents, aggregate_documents, distinct_documents, count_documents, explain_documents
Análisis MongoDBprofile_document_field, discover_document_schema, generate_document_fixture, list_collection_indexes, get_database_stats, get_collection_stats
Conexióndatabase_info, check, connect, disconnect, reconnect
Auditoríaaudit_status, audit_recent
Configuraciónconfig_validate, config_show, config_set_password, config_rename_environment, config_delete_environment, config_reset
Configuración inicialimport_compose, driver_list, driver_add, driver_download, agent_detect, agent_install, agent_status, agent_uninstall

get_maintenance_diagnostics admite PostgreSQL 15, 16, 17 y 18.

Cuando no existe un directorio .safeselect/, safeselect serve busca servicios PostgreSQL de Compose. Si los encuentra, entra automáticamente en modo de configuración inicial: los importa, escribe la configuración del proyecto e inicia un servidor MCP solo de configuración. De lo contrario, imprime instrucciones de configuración y sale. Una configuración existente pero vacía o inválida se rechaza, no se reemplaza por la configuración inicial.

[!IMPORTANT] El modo de configuración inicial no expone herramientas de consulta. Los agentes pueden ayudar a importar y validar la configuración antes de que las herramientas de inspección de bases de datos estén disponibles.

Esenciales de CLI

ComandoPropósito
safeselect serve [--environment <env>]Iniciar el servidor MCP
safeselect check [--environment <env>]Verificar configuración, secretos, túneles, sidecar y conectividad del backend para todos los entornos de forma predeterminada
safeselect doctor [--environment <env>]Imprimir hallazgos concisos con códigos estables para cada entorno de forma predeterminada
safeselect posture [--environment <env>]Inspeccionar la postura de PostgreSQL para cada entorno de forma predeterminada
safeselect import-dbeaver <zip>Importar conexiones de DBeaver
safeselect import-compose [--path <path>]Importar desde docker-compose
safeselect import-compass [--path <path>]Importar conexiones de MongoDB Compass
safeselect agent install <client> [--environment <env>]Instalar una entrada MCP
safeselect config set-password [--environment <env>]Almacenar la contraseña de la base de datos
safeselect config set-ssh-password [--environment <env>]Almacenar la contraseña SSH
safeselect uninstallEliminar binarios instalados, estado global, datos de auditoría y entradas del Llavero
safeselect uninstall --binary-onlyEliminar solo binarios locales del usuario y conservar la configuración

Galería visual de comandos

La CLI es más fácil de escanear por tarea que como una lista larga. La galería de comandos web usa las mismas capturas de demostración sintética. query se mantiene separado porque es un flujo de trabajo SQL directo; los agentes normalmente deberían descubrir el esquema primero a través de las herramientas MCP.

Importar conexiones — Trae una conexión existente de DBeaver, Docker Compose o MongoDB Compass al proyecto.

import-dbeaver

Importa una exportación de DBeaver en .safeselect/.

safeselect import-dbeaver ~/Downloads/connections.zip

Terminal capture for safeselect import-dbeaver <zip>

El importador conserva la forma de la conexión mientras deja las contraseñas fuera de los archivos del proyecto.

import-compose

Descubre servicios PostgreSQL desde Docker Compose.

safeselect import-compose --path .

Terminal capture for safeselect import-compose [--path <path>]

El descubrimiento de Compose convierte un servicio local existente en un entorno de proyecto.

import-compass

Importa conexiones de MongoDB Compass.

safeselect import-compass --path ~/.config/MongoDB Compass

Terminal capture for safeselect import-compass [--path <path>]

Las importaciones de Compass conservan los detalles de conexión de MongoDB sin exponer credenciales.

Preparar el proyecto — Valida la política local, instala controladores y conecta un cliente de IA sin repetir banderas de configuración.

config

Valida, inspecciona y mantiene la configuración del proyecto.

safeselect config show --project demo --environment postgres

Terminal capture for safeselect config <COMMAND>

La vista de configuración informa un resumen de política seguro y redactado antes de que el servidor se inicie.

driver

Registra y verifica controladores JDBC.

safeselect driver list

Terminal capture for safeselect driver <COMMAND>

El registro de controladores muestra el proveedor y el artefacto local verificado.

agent

Detecta clientes e instala su entrada MCP.

safeselect agent detect

Terminal capture for safeselect agent <COMMAND>

La detección lista los clientes disponibles antes de una instalación MCP explícita limitada al proyecto.

Verificar y diagnosticar — Comprueba la ruta completa desde la política del proyecto hasta la base de datos, luego inspecciona la postura efectiva de PostgreSQL.

check

Prueba configuración, secretos, túneles, sidecar y conectividad del backend.

safeselect check

Terminal capture for safeselect check [--environment <env>]

Las comprobaciones siguen la convención e inspeccionan cada entorno a menos que se seleccione uno deliberadamente.

doctor

Imprime hallazgos concisos con códigos de diagnóstico estables.

safeselect doctor

Terminal capture for safeselect doctor [--environment <env>]

Doctor convierte una conexión fallida en una próxima acción corta en lugar de un muro de registros.

posture

Inspecciona la postura de seguridad efectiva de PostgreSQL.

safeselect posture --strict

Terminal capture for safeselect posture [--environment <env>]

Postura muestra la política de solo lectura efectiva, los límites y la postura de la base de datos antes del uso del agente.

Gestionar una conexión — Inicia el servidor MCP local o ejercita el ciclo de vida de la conexión temporal directamente.

serve

Inicia el servidor MCP local para un entorno de proyecto.

safeselect serve

Terminal capture for safeselect serve [--environment <env>]

El servidor habla stdio local: la respuesta de inicialización MCP expone las capacidades de SafeSelect, no un listener de red.

connect

Prueba una conexión JDBC temporal.

safeselect connect

Terminal capture for safeselect connect [--environment <env>]

Connect verifica el sidecar JDBC temporal contra el fixture en vivo sin tomar el control de una sesión MCP activa.

disconnect

Cierra una conexión JDBC temporal.

safeselect disconnect

Terminal capture for safeselect disconnect [--environment <env>]

Disconnect cierra limpiamente el sidecar JDBC temporal e informa el paso del ciclo de vida completado.

reconnect

Reinicia el sidecar y verifica la conectividad.

safeselect reconnect

Terminal capture for safeselect reconnect [--environment <env>]

Reconnect reinicia el sidecar y verifica el fixture en vivo en lugar de ocultar una base de datos obsoleta.

Explorar SQL: descubrir, inspeccionar y diagnosticar — Usa query cuando ya conoces el SQL limitado que quieres inspeccionar. Los agentes normalmente deberían descubrir el esquema primero a través de las herramientas MCP.

query

Ejecuta una declaración SQL de solo lectura limitada y muestra sus resultados.

safeselect query --sql "SELECT order_id, status, subtotal FROM public.demo_orders WHERE status = 'paid' LIMIT 3"

Terminal capture for safeselect query --sql <SQL>

La solicitud SQL limitada devuelve tres filas de fixture sintético con conteos de filas y bytes; las escrituras siguen rechazadas.

list_tables (MCP)

Descubre tablas PostgreSQL a través de MCP.

list_tables({"schema":"public"})

Discover PostgreSQL tables through MCP.

Respuesta MCP real, formateada como tabla: cinco relaciones sintéticas en public. Descubre los nombres exactos antes de inspeccionar columnas.

describe_table (MCP)

Inspecciona nombres de columnas, tipos y nulabilidad a través de MCP.

describe_table({"schema":"public","table":"demo_orders"})

Inspect column names, types and nullability through MCP.

Respuesta MCP real, formateada como tabla: ocho columnas incluyendo UUID, JSONB y un rango de marcas de tiempo. No se consultan filas de datos.

get_maintenance_diagnostics (MCP)

Inspecciona señales de ANALYZE y VACUUM sin ejecutar mantenimiento.

get_maintenance_diagnostics({"schema":"public"})

Inspect ANALYZE and VACUUM signals without running maintenance.

Extracto de respuesta MCP real: las cinco tablas de fixture están por debajo de los umbrales de mantenimiento. Este diagnóstico de solo lectura nunca ejecuta ANALYZE o VACUUM; revisa la evidencia con un DBA.

Explorar NoSQL: descubrir, inferir y leer — Sigue el descubrimiento de MongoDB desde bases de datos hasta documentos limitados, con inferencia de esquema muestreada antes de las lecturas.

list_databases (MCP)

Descubre bases de datos MongoDB a través de MCP.

list_databases()

MongoDB list_databases response

Respuesta MCP real: la demo aislada expone una base de datos permitida. Elígela antes de descubrir colecciones.

list_collections (MCP)

Descubre colecciones en una base de datos MongoDB permitida.

list_collections({"database":"safeselect_demo"})

MongoDB list_collections response

Respuesta MCP real: se listan cuatro colecciones sintéticas sin leer documentos.

discover_document_schema (MCP)

Infiere campos y tipos frecuentes de una muestra MongoDB limitada.

discover_document_schema({"database":"safeselect_demo","collection":"orders","sample_size":5})

MongoDB sampled document schema

Respuesta MCP real: los campos muestreados y los tipos observados guían la siguiente lectura limitada; la inferencia es explícitamente no exhaustiva.

find_documents (MCP)

Lee documentos MongoDB limitados con un filtro explícito.

find_documents({"database":"safeselect_demo","collection":"orders","filter":{"status":"paid"},"limit":3})

MongoDB bounded document read

Respuesta MCP real: tres pedidos pagados, 994 bytes, devueltos en 7ms. El filtro y el límite mantienen la lectura acotada.

Usa safeselect --help o un --help específico de comando para la CLI completa.

La desinstalación verifica tanto las ubicaciones de binarios del instalador de lanzamiento como las de Cargo. Las importaciones de MongoDB Compass admiten conexiones mongodb+srv:// con túnel SSH resolviendo el destino SRV y reescribiendo el endpoint local con las opciones TLS y de conexión directa requeridas.

Configuración

El estado global vive en ~/.config/safeselect/ de forma predeterminada. La política del proyecto vive en .safeselect/ en la raíz del repositorio:

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

SafeSelect sube desde el directorio actual para encontrar .safeselect/. Usa --project <path> cuando un agente o script deba apuntar a un repositorio específico.

Convención antes de la configuración

Desde el interior de un repositorio configurado, los comandos infieren el proyecto a partir del directorio .safeselect/ más cercano e infieren el entorno cuando existe exactamente un archivo environments/*.toml. Por ejemplo, safeselect serve, safeselect check, safeselect query --sql "SELECT 1" y safeselect config show no necesitan indicadores de proyecto o entorno en un proyecto de un solo entorno. --project y --environment siguen disponibles para scripts, otros directorios de trabajo y selección deliberada. Si existen múltiples entornos, los comandos que actúan sobre uno fallan en lugar de adivinar y te indican que pases --environment <name>.

Los valores predeterminados difieren según la operación:

  • serve, query, connect, disconnect, config show y los comandos de contraseña requieren un entorno explícito o inferido de forma única. Sin entornos, fallan; serve tiene el comportamiento separado de primera ejecución descrito anteriormente.
  • check, doctor, posture, reconnect y config validate inspeccionan o procesan todos los entornos cuando se omite el indicador. Las comprobaciones no son sin conexión: pueden resolver secretos, establecer túneles SSH y contactar bases de datos. Usa --environment <name> para evitar tocar entornos no relacionados o de producción.
  • query solo admite entornos JDBC y aún necesita SQL a través de --sql o stdin (el stdin interactivo espera EOF). Seleccionar un entorno MongoDB no lo convierte en un comando de consulta MongoDB.
  • CLI connect y disconnect operan en un sidecar JDBC temporal nuevo y lo cierran antes de salir. No controlan una sesión MCP ya en ejecución; usa las herramientas de conexión MCP de esa sesión en su lugar.
  • Los comandos de contraseña modifican el Keychain/configuración local, no la contraseña de la base de datos en sí. config set-ssh-password cambia la autenticación SSH a contraseña y borra la referencia de archivo de identidad configurada.

Las entradas MCP generadas fijan deliberadamente tanto el proyecto como el entorno. Mantén esos argumentos en la configuración del cliente y en scripts desatendidos: la inferencia es una conveniencia de CLI, no un entorno predeterminado persistente.

Agentes compatibles

ClienteAlcance de usuarioAlcance de proyectoIntegración
OpenCodeJSON/JSONC mcp
OpenAI CodexTOML sin pérdida mcp_servers
Claude Codealcances nativos claude mcp
Cursor.cursor/mcp.json
WindsurfNoconfiguración MCP global de Windsurf
GitHub Copilotservers en MCP JSON
Gemini CLI.gemini/settings.json

SafeSelect nunca recurre silenciosamente a un alcance más amplio. En particular, --local para Windsurf falla con una corrección clara porque Windsurf no documenta una configuración MCP con alcance de proyecto.

Compilar desde el código fuente

# Installs makevn through Homebrew or asdf only when it is missing.
./install.sh --install-makevn
"$HOME/.local/bin/safeselect" --version

Requisitos: Rust 1.85+ y Java 17+. El arranque requiere Homebrew o asdf; de lo contrario, instala makevn primero. sshpass es opcional para túneles SSH basados en contraseña. Agrega ~/.local/bin a tu PATH antes de invocar safeselect sin su ruta completa.

Documentación

Las notas de versión se generan a partir de CHANGELOG.md.

Ecosistema

Listados de directorios

Listed on mcpservers.org Indexed on TensorBlock MCP Index MCP Badge

Runtime y distribución

Security Rust Java MCP Homebrew asdf

Licencia

MIT - consulta LICENSE.