safeselect
SafeSelect MCP
에이전트는 조회할 수 있습니다. 변경할 수는 없습니다.
AI 코딩 에이전트를 위한 MCP 기반의 fail-closed, 읽기 전용 PostgreSQL 및 MongoDB 접근 도구입니다.
SafeSelect는 코딩 에이전트에게 제한된 데이터베이스 도구를 제공합니다: 구조 탐색, 프로덕션 형태의 데이터 검사, 쿼리 설명, 연결 진단, 그리고 오래된 연결 복구를 지원하되, 쓰기 가능한 도구나 데이터베이스 자격 증명에 대한 직접 접근은 절대 제공하지 않습니다.
대부분의 데이터베이스 MCP 서버는 에이전트를 데이터베이스에 쉽게 연결해 줍니다. SafeSelect는 더 어려운 문제를 해결하기 위해 만들어졌습니다: 데이터베이스를 무제한 도구 표면으로 바꾸지 않으면서 에이전트가 프로덕션 형태의 데이터를 검사할 수 있게 하는 것입니다.
[!NOTE] SafeSelect는 에이전트 접근을 위한 안전 경계이지, 데이터베이스 권한을 대체하는 것이 아닙니다. 가능하면 최소 권한 데이터베이스 사용자를 사용하세요. 에이전트가 SafeSelect를 통해 연결할 때에도 과도한 권한의 자격 증명을 제한하는 것은 SafeSelect의 역할입니다.
현재 지원 백엔드: PostgreSQL 및 MongoDB.
Related MCP server: databricks-mcp
활용 사례
실제 데이터로 애플리케이션을 디버깅하되 변경 도구는 노출하지 않아야 할 때.
개발 중 에이전트가 스키마, 인덱스, 쿼리 플랜, 제한된 행을 검사하도록 할 때.
제한된 읽기와 샘플 기반 스키마 추론을 통해 MongoDB 컬렉션을 탐색할 때.
기존 DBeaver, Docker Compose 또는 MongoDB Compass 연결을 재사용할 때.
정책, 한도, 비밀, 감사를 통제하면서 코딩 에이전트에게 데이터베이스 컨텍스트를 제공할 때.
왜 SafeSelect인가?
SafeSelect는 의도적으로 범용 데이터베이스 MCP 서버보다 좁은 범위를 제공합니다. 도구 빌더, SQL 워크벤치, 원격 데이터베이스 게이트웨이가 아닙니다. 데이터베이스 권한이 아닌 데이터베이스 가시성이 필요한 에이전트를 위한 로컬 안전 경계입니다.
SafeSelect가 우선시하는 것 | 의미 |
로컬 stdio 전송 | 네트워크 리스너나 열린 MCP 포트 없음 |
읽기 전용 도구 | 에이전트는 쓰기 가능한 데이터베이스 도구를 받지 않음 |
자격 증명과 무관한 안전 | DBA 자격 증명조차 SafeSelect의 읽기 전용 도구 표면으로 제한됨 |
Fail-closed 강제 | 정책 위반 시 프로세스 종료 |
비밀 격리 | 비밀번호는 Keychain 또는 환경 변수에만 저장 |
프로젝트 범위 정책 | 각 저장소가 자체 허용 데이터 표면을 정의 |
내장 사이드카 | 설치된 단일 바이너리가 Rust 정책 뒤에서 JDBC 및 MongoDB 드라이버에 도달 |
차별점
일반 데이터베이스 MCP 서버 | SafeSelect |
구성 가능한 도구를 노출하는 경우가 많음 | 고정된 읽기 전용 도구 표면을 노출 |
원격 HTTP 전송을 지원할 수 있음 | 기본적으로 로컬 MCP stdio 사용 |
일반적으로 광범위한 백엔드 지원에 최적화 | 강제 가능한 정책과 에이전트 안전에 최적화 |
최소 권한 데이터베이스 사용자에 의존하는 경우가 많음 | 자격 증명이 과도한 권한을 가져도 읽기 전용 동작을 강제 |
연결 설정을 별도로 유지하는 경우가 많음 | DBeaver, Docker Compose, MongoDB Compass에서 가져오기 |
디버깅을 위해 쿼리를 기록할 수 있음 | 감사 로깅 전에 쿼리 텍스트를 해시 |
보안 실패를 복구 가능한 오류로 처리 | fail-closed 방식으로 MCP 프로세스 종료 |
제품의 약속은 간단합니다: 에이전트는 조회할 수 있지만 변경할 수 없습니다. 구성된 데이터베이스 사용자가 DBA라 할지라도 에이전트는 SafeSelect의 제한된 읽기 전용 작업만 받을 수 있습니다.
[!TIP] 팀에 이미 DBeaver, Docker Compose 또는 MongoDB Compass 연결이 있고, 데이터베이스 사용자를 재설계하지 않고 에이전트에 노출해야 할 때 유용합니다.
백엔드 지원
백엔드 | 상태 | 도구 |
PostgreSQL | 지원 | 탐색, 인덱스/통계, |
MongoDB | 지원 | 탐색, find, aggregation, distinct/count, explain, profiling, 스키마 추론, 익명화된 픽스처 |
아키텍처
에이전트는 MCP stdio를 통해 SafeSelect와 통신합니다. SafeSelect는 Rust에서 정책을 강제하고, 프로젝트 파일 외부에 비밀을 저장하며, 내장 Java 사이드카를 통해 데이터베이스에 도달합니다: SQL 백엔드는 JDBC, MongoDB는 MongoDB 드라이버를 사용합니다. Rust와 Java 간 채널은 stdin/stdout을 통한 JSON-lines입니다: 소켓도, 열린 포트도 없습니다.
빠른 시작
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는 Homebrew의 openjdk@17 포뮬러를 특별히 요구하지 않고 사용 가능한 Java 17+ 런타임을 사용합니다. Java가 없거나 너무 오래된 경우, 데이터베이스 명령을 실행하기 전에 Java 17+ 런타임을 설치하거나 선택하세요.
생성된 MCP 이름은 기본적으로 safeselect-<project>-<environment>입니다.
생성된 MCP 항목은 하나의 프로젝트와 환경에 범위가 지정된 stdio 서버입니다:
{
"mcpServers": {
"safeselect-myapp-testing": {
"command": "safeselect",
"args": ["serve", "--project", "/path/to/myapp", "--environment", "testing"]
}
}
}SafeSelect는 각 클라이언트의 공식 MCP 구성 계약을 사용하고, 절대 저장소 경로를 고정하며, 기본적으로 사용자 범위를 사용합니다. 클라이언트가 지원하는 경우 프로젝트 범위 항목에는 --local을 추가하세요. 정확한 경로, 범위 및 수동 구성은 AI 에이전트 통합을 참조하세요.
에이전트 워크플로
에이전트는 다음 순서로 SafeSelect를 사용해야 합니다:
database_infolist_tables다음에describe_table; SQL에 유용할 때list_table_indexes또는 제한된 통계 검사NoSQL의 경우
list_databases,list_collections, 그 다음discover_document_schemaselect/explain, 또는 작업에 맞는 제한된 MongoDB 읽기 도구연결이 오래된 경우
check,connect또는reconnect
에이전트는 익숙하지 않은 데이터를 쿼리하기 전에 반드시 관계 또는 컬렉션 구조를 탐색해야 하며, 각 탐색 응답의 next_suggestion을 사용하여 열 또는 필드 이름을 추측하지 말아야 합니다. SQL 설명은 카탈로그 메타데이터이고, MongoDB 스키마는 제한된 비전체 샘플에서 추론됩니다.
MongoDB 쿼리 문서는 완전한 중첩 JSON 값으로 유지되어야 합니다. 중첩된 도구 인수를 평면화하는 클라이언트는 filter, projection, sort를 JSON 인코딩된 객체 문자열로, pipeline을 JSON 인코딩된 배열 문자열로 전달할 수 있습니다. redact_fields도 JSON 인코딩된 문자열 배열을 허용합니다. 평면화된 키는 거부되므로, 손실된 필터나 redaction이 덜 제한된 폴백이 될 수 없습니다.
MongoDB 서버 측 JavaScript는 절대 사용할 수 없습니다: $where, $function, $accumulator는 MongoDB 드라이버에 전달되기 전에 필터, 프로젝션, 정렬 및 집계 파이프라인에서 재귀적으로 거부됩니다. 거부된 경우 선언적 MQL 연산자로 요청을 재구성하세요. SafeSelect에는 JavaScript를 활성화하는 설정이 없습니다.
쿼리 응답에는 row_count, byte_count, elapsed_ms 및 사람이 읽을 수 있는 elapsed 값이 포함되어 에이전트가 결과 크기와 지연 시간을 판단할 수 있습니다.
모든 MCP 성공 및 오류에는 컨텍스트에 맞는 next_suggestion 하나가 포함됩니다. 에이전트는 그 단일 안전 조치를 따라야 하며, 잘못된 요청을 맹목적으로 반복하지 말고, 제안이 종결적일 때 중지해야 합니다. MCP 오류 요약만 표시하는 클라이언트를 위해 SafeSelect는 데이터베이스 파생 세부 정보를 노출하지 않고 신뢰할 수 있는 다음 제안도 해당 요약에 포함합니다.
보안 모델
Fail closed: 보안 위반 시 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 서버 시작 |
| 구성, 비밀번호, 터널, 사이드카, 백엔드 연결 확인 |
| 안정적인 코드와 함께 더 자세한 진단 정보 출력 |
| DBeaver 연결 가져오기 |
| docker-compose에서 가져오기 |
| MongoDB Compass 연결 가져오기 |
| MCP 항목 설치 |
| 데이터베이스 비밀번호 저장 |
| SSH 비밀번호 저장 |
| 설치된 바이너리, 전역 상태, 감사 데이터, Keychain 항목 제거 |
| 사용자 로컬 바이너리만 제거하고 구성은 유지 |
전체 CLI는 safeselect --help 또는 명령별 --help를 사용하세요.
제거는 릴리스 설치 프로그램과 Cargo 바이너리 위치를 모두 확인합니다.
MongoDB Compass 가져오기는 SRV 대상을 확인하고 필요한 TLS 및 직접 연결 옵션으로
로컬 엔드포인트를 다시 작성하여 SSH 터널링된 mongodb+srv:// 연결을 지원합니다.
구성
전역 상태는 기본적으로 ~/.config/safeselect/에 저장됩니다. 프로젝트 정책은 저장소 루트의 .safeselect/에 있습니다:
<repo-root>/
└── .safeselect/
├── project.toml
└── environments/
└── <env>.tomlSafeSelect는 현재 디렉터리에서 위쪽으로 이동하며 .safeselect/를 찾습니다. 에이전트나 스크립트가 특정 저장소를 대상으로 해야 하는 경우 --project <path>를 사용하세요.
지원되는 에이전트
클라이언트 | 사용자 범위 | 프로젝트 범위 | 통합 |
OpenCode | 예 | 예 | JSON/JSONC |
OpenAI Codex | 예 | 예 | 무손실 TOML |
Claude Code | 예 | 예 | 네이티브 |
Cursor | 예 | 예 |
|
Windsurf | 예 | 아니요 | 전역 Windsurf MCP 구성 |
GitHub Copilot | 예 | 예 | MCP JSON의 |
Gemini CLI | 예 | 예 |
|
SafeSelect는 더 넓은 범위로 자동 대체(fallback)하지 않습니다. 특히
Windsurf의 --local은 Windsurf가 프로젝트 범위의 MCP 구성을 문서화하지 않기 때문에
명확한 수정 안내와 함께 실패합니다.
소스에서 빌드
./install.sh
safeselect --version요구 사항: Rust 1.81+, Java 17+, Maven 3.8+. sshpass는 비밀번호 기반 SSH 터널에 선택 사항입니다.
문서
릴리스 노트는 CHANGELOG.md에서 생성됩니다.
라이선스
MIT - 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