safeselect
SafeSelect MCP
エージェントは閲覧できます。変更はできません。
フェイルクローズ型の読み取り専用PostgreSQL・MongoDBアクセスを、MCP経由でAIコーディングエージェントに提供します。
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または環境変数に保持される |
プロジェクトスコープのポリシー | 各リポジトリが独自の許可データ面を定義する |
組み込みサイドカー | 1つのインストール済みバイナリがRustポリシーの背後でJDBCおよびMongoDBドライバーに到達する |
何が違うのか
一般的なデータベース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、プロファイリング、スキーマ推論、匿名化フィクスチャ |
アーキテクチャ
エージェントは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エントリは、1つのプロジェクトと環境にスコープされた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_schemaタスクに一致する
select/explain、または境界付きMongoDB読み取りツール接続が古くなっている場合は
check、connect、reconnect
エージェントは、馴染みのないデータをクエリする前にリレーションまたはコレクションの構造を発見し、各探索レスポンスのnext_suggestionを使用して列名やフィールド名を推測しないようにする必要があります。SQLの説明はカタログメタデータです。MongoDBのスキーマは境界付きの非網羅的なサンプルから推論されます。
MongoDBクエリドキュメントは、完全なネストされたJSON値のままである必要があります。ネストされたツール引数をフラット化するクライアントは、filter、projection、sortをJSONエンコードされたオブジェクト文字列として、pipelineをJSONエンコードされた配列文字列として渡すことができます。redact_fieldsもJSONエンコードされた文字列配列を受け入れます。フラット化されたキーは拒否されるため、失われたフィルタやリダクションが制約の緩いフォールバックになることは決してありません。
MongoDBのサーバーサイドJavaScriptは決して利用できません。$where、$function、$accumulatorは、MongoDBドライバーが受け取る前に、フィルタ、プロジェクション、ソート、集計パイプライン内で再帰的に拒否されます。拒否された場合は、宣言型MQL演算子でリクエストを再構築してください。SafeSelectにはJavaScriptを有効にする設定はありません。
クエリレスポンスにはrow_count、byte_count、elapsed_ms、および人間が読めるelapsed値が含まれ、エージェントが結果のサイズとレイテンシを判断できるようにします。
すべてのMCP成功とエラーには、コンテキストに応じた1つの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サーバーを起動 |
| 設定、シークレット、トンネル、サイドカー、バックエンドの接続を検証 |
| 安定したコードでより詳細な診断を出力 |
| 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は、より広いスコープに黙ってフォールバックすることはありません。特に、
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 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