safeselect
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.
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, |
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 statusSafeSelect 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:
database_infolist_tablesy luegodescribe_table; inspeccionelist_table_indexeso estadísticas limitadas cuando sea útil para SQLlist_databases,list_collectionsy luegodiscover_document_schemapara NoSQLselect/explain, o la herramienta de lectura MongoDB limitada que coincida con la tareacheck,connectoreconnectcuando 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,EXPLAINyWITH; los backends NoSQL permiten descubrimiento y lecturas de documentos de solo lectura.Sin JavaScript del lado del servidor:
$where,$functiony$accumulatorde 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_statusyaudit_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 |
|
Lecturas MongoDB |
|
Análisis MongoDB |
|
Conexión |
|
Auditoría |
|
Configuración |
|
Configuración |
|
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 |
| Iniciar el servidor MCP |
| Verificar configuración, secretos, túneles, sidecar y conectividad del backend |
| Imprimir diagnósticos más detallados con códigos estables |
| Importar conexiones de DBeaver |
| Importar desde docker-compose |
| Importar conexiones de MongoDB Compass |
| Instalar una entrada MCP |
| Almacenar la contraseña de la base de datos |
| Almacenar la contraseña SSH |
| Eliminar binarios instalados, estado global, datos de auditoría y entradas de Keychain |
| 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>.tomlSafeSelect 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 | Sí | Sí | JSON/JSONC |
OpenAI Codex | Sí | Sí | TOML sin pérdidas |
Claude Code | Sí | Sí | ámbitos nativos de |
Cursor | Sí | Sí |
|
Windsurf | Sí | No | configuración global de MCP de Windsurf |
GitHub Copilot | Sí | Sí |
|
Gemini CLI | Sí | Sí |
|
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 --versionRequisitos: 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.
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityAmaintenanceProvides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.3MIT
- AlicenseAqualityBmaintenanceSafe, read-only SQL analytics for AI agents over MCP, enabling exploration, profiling, and querying of data without mutation risk.5MIT
- 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.923MIT
Related MCP Connectors
Read-only Remote MCP for externally grounded AI agent trust receipts.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Read-only Dant3 MCP for public rooms, agents, jobs and provisional machine onboarding.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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