Skip to main content
Glama

SafeSelect MCP

Los agentes pueden mirar. No pueden mutar.

Acceso a PostgreSQL y MongoDB de solo lectura y con cierre ante fallos para agentes de codificación de IA a través de MCP.

CI CRAP Security Rust Java MCP Homebrew asdf License

SafeSelect ofrece a los agentes de codificación una herramienta de base de datos restringida: descubrir la estructura, inspeccionar datos con forma de producción, explicar consultas, diagnosticar la conectividad y recuperar conexiones obsoletas sin recibir nunca herramientas con capacidad de escritura ni acceso directo a las credenciales de la base de datos.

La mayoría de los servidores MCP de bases de datos facilitan la conexión de un agente a una base de datos. SafeSelect está diseñado para el problema más difícil: permitir que un agente inspeccione datos con forma de producción sin convertir la base de datos en una superficie de herramientas sin restricciones.

[!NOTE] SafeSelect es un límite de seguridad para el acceso de agentes, no un reemplazo de los permisos de la base de datos. Utilice usuarios de base de datos con privilegios mínimos cuando pueda; SafeSelect sigue restringiendo las credenciales con demasiados privilegios cuando los agentes se conectan a través de él.

Soporte de backend actual: PostgreSQL y MongoDB.

Related MCP server: databricks-mcp

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 esquema muestreada.

  • Reutilizar conexiones existentes de DBeaver, Docker Compose o MongoDB Compass.

  • Dar a los agentes de codificación contexto de base de datos mientras se mantienen bajo control las políticas, los límites, los secretos y la auditoría.

¿Por Qué SafeSelect?

SafeSelect es intencionadamente 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 pasarela 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 prioriza

Qué significa esto

Transporte stdio local

Sin listener de red ni puerto MCP abierto

Herramientas de solo lectura

Los agentes no reciben herramientas de base de datos con capacidad de escritura

Seguridad independiente de credenciales

Incluso las credenciales de DBA están restringidas a la superficie de herramientas de solo lectura de SafeSelect

Cumplimiento con cierre ante fallos

Las violaciones de política terminan el proceso

Aislamiento de secretos

Las contraseñas permanecen en Keychain o en variables de entorno

Política limitada al proyecto

Cada repositorio define su propia superficie de datos permitida

Sidecar integrado

Un binario instalado alcanza los controladores JDBC y MongoDB detrás de la política de Rust

¿Qué Lo Hace Diferente?

Servidores MCP de bases de datos generales

SafeSelect

A menudo exponen herramientas configurables

Expone una superficie de herramientas fija y de solo lectura

Pueden admitir transportes HTTP remotos

Utiliza MCP stdio local por defecto

Normalmente optimizan para una amplia cobertura de backend

Optimiza para una política aplicable y la seguridad del agente

A menudo dependen de usuarios de base de datos con privilegios mínimos

Aplica el comportamiento de solo lectura incluso cuando las credenciales tienen demasiados privilegios

A menudo mantienen la configuración de conexión por separado

Importa desde DBeaver, Docker Compose y MongoDB Compass

Pueden registrar consultas para depuración

Aplica hash al texto de la consulta antes del registro de auditoría

Tratan los fallos de seguridad como errores recuperables

Falla de forma cerrada y termina el proceso MCP

La promesa del producto es simple: los agentes pueden mirar, pero no pueden mutar. Incluso si el usuario de base de datos configurado es un DBA, el agente solo recibe las operaciones de solo lectura restringidas de SafeSelect.

[!TIP] Esto es útil cuando los equipos ya tienen conexiones de DBeaver, Docker Compose o MongoDB Compass y necesitan exponerlas a los agentes sin rediseñar primero los usuarios de la base de datos.

Soporte de Backend

Backend

Estado

Herramientas

PostgreSQL

Compatible

Descubrimiento, índices/estadísticas, select y explain

MongoDB

Compatible

Descubrimiento, find, agregación, distinct/count, explain, perfilado, inferencia de esquema y fixtures anonimizados

Arquitectura

El agente se comunica con SafeSelect a través de MCP stdio. SafeSelect aplica la política en Rust, almacena los 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.

Inicio Rápido

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 utiliza cualquier runtime Java 17+ disponible en lugar de requerir específicamente la fórmula openjdk@17 de Homebrew. Si Java falta o es demasiado antiguo, instale o seleccione un runtime Java 17+ antes de ejecutar comandos de base de datos.

El nombre MCP generado por defecto es safeselect-<proyecto>-<entorno>.

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 utiliza el contrato de configuración MCP oficial de cada cliente, fija la ruta absoluta del repositorio y usa por defecto el ámbito de usuario. Añada --local para una entrada de ámbito de proyecto donde el cliente lo admita. Consulte Integración con agentes de IA para rutas exactas, ámbitos y configuración manual.

Flujo de Trabajo del Agente

Los agentes deben usar SafeSelect en este orden:

  1. database_info

  2. list_tables y luego describe_table; inspeccione 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é obsoleta

Los agentes deben descubrir la estructura de relaciones o colecciones antes de consultar datos desconocidos y usar la 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 seguir siendo valores JSON anidados completos. Los clientes que apliquen un aplanamiento de argumentos de herramienta 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 cadena de matriz 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, ordenaciones y pipelines de agregación antes de que el controlador MongoDB los reciba. Cuando se rechacen, reconstruya 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 para que los agentes puedan razonar sobre el tamaño del resultado y la latencia.

Cada éxito y error de MCP incluye una 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 MCP, SafeSelect también incluye la sugerencia siguiente de confianza en ese resumen sin exponer detalles derivados de la base de datos.

Modelo de Seguridad

  • Cierre ante fallos: 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 del lado del servidor: $where, $function y $accumulator de MongoDB se rechazan en Rust y nuevamente en el sidecar Java.

  • Acceso limitado: se pueden permitir o denegar esquemas, relaciones, bases de datos y colecciones.

  • Límites estrictos: se aplican límites de número de filas, bytes de resultado y tiempos de espera; los comandos de lectura 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 somete a hash 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 de base de datos, migraciones, administración ni ejecución arbitraria de comandos.

  • PostgreSQL y MongoDB son los backends compatibles hoy; la amplia cantidad de conectores no es el objetivo.

  • El transporte MCP es stdio local. SafeSelect no es una pasarela remota de bases de datos.

  • El descubrimiento de esquemas MongoDB es muestreado y limitado, no una garantía de esquema exhaustiva.

  • SafeSelect complementa el privilegio mínimo nativo de la base de datos; no lo reemplaza.

Herramientas MCP

Área

Herramientas

SQL

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

Lecturas MongoDB

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

Análisis MongoDB

profile_document_field, discover_document_schema, generate_document_fixture, list_collection_indexes, get_database_stats, get_collection_stats

Conexión

database_info, check, connect, disconnect, reconnect

Auditoría

audit_status, audit_recent

Configuración

config_validate, config_show, config_set_password, config_rename_environment, config_delete_environment, config_reset

Configuración

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

Cuando no existe un directorio .safeselect/, safeselect serve --environment <env> entra automáticamente en modo de configuración y expone solo las herramientas seguras para la configuración.

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

Esenciales de CLI

Comando

Propósito

safeselect serve --environment <env>

Iniciar el servidor MCP

safeselect check --environment <env>

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

safeselect doctor --environment <env>

Imprimir diagnósticos más detallados con códigos estables

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 uninstall

Eliminar binarios instalados, estado global, datos de auditoría y entradas de Keychain

safeselect uninstall --binary-only

Eliminar solo binarios locales del usuario y conservar la configuración

Use safeselect --help o un --help específico del comando para obtener 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 al resolver el destino SRV y reescribir el endpoint local con las opciones TLS y de conexión directa requeridas.

Configuración

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

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

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

Agentes compatibles

Cliente

Ámbito de usuario

Ámbito de proyecto

Integración

OpenCode

JSON/JSONC mcp

OpenAI Codex

TOML sin pérdidas mcp_servers

Claude Code

ámbitos nativos de claude mcp

Cursor

.cursor/mcp.json

Windsurf

No

configuración global de MCP de Windsurf

GitHub Copilot

servers en JSON de MCP

Gemini CLI

.gemini/settings.json

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

Compilar desde el código fuente

./install.sh
safeselect --version

Requisitos: Rust 1.81+, Java 17+, Maven 3.8+. sshpass es opcional para túneles SSH basados en contraseña.

Documentación

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

Licencia

MIT - consulte LICENSE.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
4dRelease cycle
15Releases (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
    Not graded
    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
    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.
    92
    3
    MIT

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/antonillos/safeselect'

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