Skip to main content
Glama

SafeSelect MCP

エージェントは閲覧できます。変更はできません。

フェイルクローズ型の読み取り専用PostgreSQL・MongoDBアクセスを、MCP経由でAIコーディングエージェントに提供します。

CI CRAP Security Rust Java MCP Homebrew asdf License

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

対応

探索、インデックス/統計、select、explain

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 status

SafeSelectは、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を次の順序で使用する必要があります。

  1. database_info

  2. list_tables、次にdescribe_table。SQLで有用な場合はlist_table_indexesまたは境界付き統計を検査

  3. NoSQLの場合はlist_databases、list_collections、次にdiscover_document_schema

  4. タスクに一致するselect / explain、または境界付きMongoDB読み取りツール

  5. 接続が古くなっている場合は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

list_tables、describe_table、list_table_indexes、get_database_stats、get_table_stats、select、explain

MongoDB読み取り

list_databases、list_collections、find_documents、aggregate_documents、distinct_documents、count_documents、explain_documents

MongoDB分析

profile_document_field、discover_document_schema、generate_document_fixture、list_collection_indexes、get_database_stats、get_collection_stats

接続

database_info、check、connect、disconnect、reconnect

監査

audit_status、audit_recent

設定

config_validate、config_show、config_set_password、config_rename_environment、config_delete_environment、config_reset

セットアップ

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

.safeselect/ディレクトリが存在しない場合、safeselect serve --environment <env>は自動的にセットアップモードに入り、セットアップ安全なツールのみを公開します。

[!IMPORTANT] セットアップモードではクエリツールは公開されません。エージェントは、データベース検査ツールが利用可能になる前に、設定のインポートと検証を支援できます。

CLIの基本

コマンド

目的

safeselect serve --environment <env>

MCPサーバーを起動

safeselect check --environment <env>

設定、シークレット、トンネル、サイドカー、バックエンドの接続を検証

safeselect doctor --environment <env>

安定したコードでより詳細な診断を出力

safeselect import-dbeaver <zip>

DBeaver接続をインポート

safeselect import-compose [--path <path>]

docker-composeからインポート

safeselect import-compass [--path <path>]

MongoDB Compass接続をインポート

safeselect agent install <client> --environment <env>

MCPエントリをインストール

safeselect config set-password --environment <env>

データベースのパスワードを保存

safeselect config set-ssh-password --environment <env>

SSHパスワードを保存

safeselect uninstall

インストール済みバイナリ、グローバル状態、監査データ、Keychainエントリを削除

safeselect uninstall --binary-only

ユーザーローカルのバイナリのみを削除し、設定を保持

完全なCLIについては、safeselect --help またはコマンド固有の --help を使用してください。

アンインストールは、リリースインストーラとCargoバイナリの両方の場所をチェックします。 MongoDB Compassのインポートは、SRVターゲットを解決し、必要なTLSおよびダイレクト接続 オプションでローカルエンドポイントを書き換えることにより、SSHトンネル経由の mongodb+srv:// 接続をサポートします。

設定

グローバル状態はデフォルトで ~/.config/safeselect/ に保存されます。プロジェクトポリシーはリポジトリルートの .safeselect/ に保存されます:

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

SafeSelectは現在のディレクトリから上方向に移動して .safeselect/ を探します。エージェントやスクリプトが特定のリポジトリを対象とする場合は、--project <path> を使用してください。

サポートされているエージェント

クライアント

ユーザースコープ

プロジェクトスコープ

統合

OpenCode

はい

はい

JSON/JSONC mcp

OpenAI Codex

はい

はい

ロスレスのTOML mcp_servers

Claude Code

はい

はい

ネイティブ claude mcp スコープ

Cursor

はい

はい

.cursor/mcp.json

Windsurf

はい

いいえ

グローバルWindsurf MCP設定

GitHub Copilot

はい

はい

MCP JSONの servers

Gemini CLI

はい

はい

.gemini/settings.json

SafeSelectは、より広いスコープに黙ってフォールバックすることはありません。特に、 Windsurfの --local は、WindsurfがプロジェクトスコープのMCP設定を文書化していないため、明確な修正案とともに失敗します。

ソースからビルド

./install.sh
safeselect --version

要件:Rust 1.81+、Java 17+、Maven 3.8+。sshpass はパスワードベースのSSHトンネルにオプションです。

ドキュメント

リリースノートは CHANGELOG.md から生成されます。

ライセンス

MIT - LICENSE を参照してください。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.
    166 PyPI
    4
    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.
    145 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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