MongoDB Lens

by furey
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Provides full featured access to MongoDB databases using natural language via LLMs to perform queries, run aggregations, optimize performance, and more. The server connects to MongoDB instances to allow exploration, querying, and management of databases, collections, and documents.

MongoDBレンズ

MongoDB Lens は、 LLM を介して自然言語を使用して MongoDB データベースにフル機能でアクセスし、クエリの実行、集計の実行、パフォーマンスの最適化などを実行できるローカル モデル コンテキスト プロトコル (MCP) サーバーです。

コンテンツ

クイックスタート

特徴

ツール

リソース

プロンプト

  • aggregation-builder : 集約パイプラインのステップバイステップの作成
  • backup-strategy : カスタマイズされたバックアップとリカバリの推奨事項
  • data-modeling : 特定のユースケースにおける MongoDB スキーマ設計に関する専門家のアドバイス
  • database-health-check : 包括的なデータベースの健全性評価と推奨事項
  • index-recommendation : クエリパターンに基づいてパーソナライズされたインデックスの提案を取得します
  • migration-guide : MongoDB バージョン移行計画のステップバイステップ
  • mongo-shell : MongoDB シェルコマンドを説明付きで生成する
  • multi-tenant-design : MongoDB マルチテナント データベース アーキテクチャの設計
  • query-builder : MongoDBクエリを構築するためのインタラクティブなガイド
  • query-optimizer : 遅いクエリの最適化の推奨事項
  • schema-analysis : 詳細なコレクションスキーマ分析と推奨事項
  • schema-versioning : MongoDB アプリケーションにおけるスキーマの進化を管理する
  • security-audit : データベースのセキュリティ分析と改善の推奨事項
  • sql-to-mongodb : SQLクエリをMongoDB集計パイプラインに変換する

その他の機能

その他の機能: 概要

MongoDB Lens には、他にも多数の機能が含まれています。

  • 設定ファイル: ~/.mongodb-lens.[jsonc|json]経由のカスタム設定
  • 環境変数のオーバーライド: process.env.CONFIG_*経由で設定をオーバーライドします。
  • 確認システム:破壊的操作に対する2段階認証
  • 複数の接続: 名前付きURIエイリアスの定義と切り替え
  • コンポーネントの無効化: ツール、プロンプト、またはリソースを選択的に無効にする
  • 接続の復元力: 指数バックオフによる自動再接続
  • クエリセーフガード: 設定可能な制限とパフォーマンス保護
  • エラー処理: 包括的な JSONRPC エラーコードとメッセージ
  • スキーマ推論:インテリジェントなサンプリングによる効率的なスキーマ分析
  • 資格情報保護: ログ内の接続文字列パスワードの難読化
  • メモリ管理: 大規模な操作の自動監視とクリーンアップ
  • スマートキャッシュ: スキーマ、インデックス、フィールド、コレクションのキャッシュを最適化
  • 下位互換性: MongoDBの最新バージョンと旧バージョンの両方をサポート

その他の機能: 新しいデータベースメタデータ

MongoDB Lens は、作成する各データベースにmetadataコレクションを挿入します。

このmetadataコレクションには、データベースの起源の永続的な記録として機能するコンテキスト情報を含む単一のドキュメントが格納され、新しい空のデータベースが MongoDB のストレージ システムに保持されることが保証されます。

{ "_id" : ObjectId("67d5284463788ec38aecee14"), "created" : { "timestamp" : ISODate("2025-03-15T07:12:04.705Z"), "tool" : "MongoDB Lens v5.0.7", "user" : "anonymous" }, "mongodb" : { "version" : "3.6.23", "connectionInfo" : { "host" : "unknown", "readPreference" : "primary" } }, "database" : { "name" : "example_database", "description" : "Created via MongoDB Lens" }, "system" : { "hostname" : "unknown", "platform" : "darwin", "nodeVersion" : "v22.14.0" }, "lens" : { "version" : "5.0.7", "startTimestamp" : ISODate("2025-03-15T07:10:06.084Z") } }

新しいデータベースに独自のコレクションを追加したら、 drop-collectionツールを使用してmetadataコレクションを安全に削除できます。

  • 「新しいデータベースのメタデータコレクションを削除する」drop-collectionツールを使用する(確認付き)

インストール

MongoDB Lens はいくつかの方法でインストールして実行できます。

インストール: NPX

[!NOTE] NPX を使用するには、システムにNode.jsがインストールされ、実行されている必要があります (推奨: Voltaの使用)。

MongoDB Lens を実行する最も簡単な方法は、NPX を使用することです。

まず、Node.js がインストールされていることを確認します。

node --version # Ideally >= v22.x but MongoDB Lens is >= v18.x compatible

次に、NPX 経由で MongoDB Lens を実行します。

# Using default connection string mongodb://localhost:27017 npx -y mongodb-lens # Using custom connection string npx -y mongodb-lens mongodb://your-connection-string # Using "@latest" to keep the package up-to-date npx -y mongodb-lens@latest

[!TIP] npxで権限エラーが発生した場合はnpx -y mongodb-lensを実行する前にnpx clear-npx-cacheを実行してみてください (これによりキャッシュがクリアされ、パッケージが再ダウンロードされます)。

インストール: Docker Hub

[!NOTE] Docker Hub を使用するには、システムにDockerがインストールされ、実行されている必要があります。

まず、Docker がインストールされていることを確認します。

docker --version # Ideally >= v27.x

次に、Docker Hub 経由で MongoDB Lens を実行します。

# Using default connection string mongodb://localhost:27017 docker run --rm -i --network=host furey/mongodb-lens # Using custom connection string docker run --rm -i --network=host furey/mongodb-lens mongodb://your-connection-string # Using "--pull" to keep the Docker image up-to-date docker run --rm -i --network=host --pull=always furey/mongodb-lens

インストール: ソースからの Node.js

[!NOTE] ソースからの Node.js では、システムにNode.jsがインストールされ、実行されている必要があります (提案: Voltaの使用)。

  1. MongoDB Lens リポジトリをクローンします。
    git clone https://github.com/furey/mongodb-lens.git
  2. クローンされたリポジトリ ディレクトリに移動します。
    cd /path/to/mongodb-lens
  3. Node.js がインストールされていることを確認します。
    node --version # Ideally >= v22.x but MongoDB Lens is >= v18.x compatible
  4. Node.js の依存関係をインストールします。
    npm ci
  5. サーバーを起動します。
    # Using default connection string mongodb://localhost:27017 node mongodb-lens.js # Using custom connection string node mongodb-lens.js mongodb://your-connection-string

インストール: ソースからの Docker

[!NOTE] ソースからの Docker では、システムにDockerがインストールされ、実行されている必要があります。

  1. MongoDB Lens リポジトリをクローンします。
    git clone https://github.com/furey/mongodb-lens.git
  2. クローンされたリポジトリ ディレクトリに移動します。
    cd /path/to/mongodb-lens
  3. Docker がインストールされていることを確認します。
    docker --version # Ideally >= v27.x
  4. Docker イメージをビルドします。
    docker build -t mongodb-lens .
  5. コンテナを実行します。
    # Using default connection string mongodb://localhost:27017 docker run --rm -i --network=host mongodb-lens # Using custom connection string docker run --rm -i --network=host mongodb-lens mongodb://your-connection-string

インストール検証

インストールを確認するには、次の JSONRPC メッセージをサーバーの stdio に貼り付けて実行します。

{"method":"resources/read","params":{"uri":"mongodb://databases"},"jsonrpc":"2.0","id":1}

サーバーは、MongoDB インスタンス内のデータベースのリストで応答します。次に例を示します。

{"result":{"contents":[{"uri":"mongodb://databases","text":"Databases (12):\n- admin (180.00 KB)\n- config (108.00 KB)\n- local (40.00 KB)\n- sample_airbnb (51.88 MB)\n- sample_analytics (9.46 MB)\n- sample_geospatial (980.00 KB)\n- sample_guides (40.00 KB)\n- sample_mflix (108.90 MB)\n- sample_restaurants (7.73 MB)\n- sample_supplies (968.00 KB)\n- sample_training (40.85 MB)\n- sample_weatherdata (2.69 MB)"}]},"jsonrpc":"2.0","id":1}

MongoDB Lens がインストールされ、MCP リクエストを受け入れる準備が整いました。

インストール: 古い MongoDB バージョン

バージョン< 4.0の MongoDB インスタンスに接続する場合、最新バージョンの MongoDB Lens で使用される MongoDB Node.js ドライバーは互換性がありません。具体的には、MongoDB Node.js ドライバー バージョン4.0.0以降を使用するには、MongoDB バージョン4.0以上が必要です。

古い MongoDB インスタンスで MongoDB Lens を使用するには、 3.xシリーズの MongoDB Node.js ドライバー バージョン (MongoDB 3.6と互換性のある3.7.4など) を使用する必要があります。

古いMongoDBバージョン: ソースからの実行

  1. MongoDB Lens リポジトリをクローンします。
    git clone https://github.com/furey/mongodb-lens.git
  2. クローンされたリポジトリ ディレクトリに移動します。
    cd /path/to/mongodb-lens
  3. package.jsonを変更します。
    "dependencies": { ... - "mongodb": "^6.15.0", // Or whatever newer version is listed + "mongodb": "^3.7.4", // Or whatever 3.x version is compatible with your older MongoDB instance ... }
  4. Node.js の依存関係をインストールします。
    npm install
  5. MongoDB Lensを起動します:
    node mongodb-lens.js mongodb://older-mongodb-instance

これにより、MongoDB インスタンスと互換性のある古いバージョンのドライバーが使用されます。

[!NOTE] useNewUrlParserおよびuseUnifiedTopology MongoDB 構成オプションを再度追加するには、このコミットを元に戻す必要がある場合もあります。

古い MongoDB バージョン: NPX または Docker の使用

NPX または Docker を使用する場合は、互換性のあるドライバーとともに公開された古いバージョンの MongoDB Lens を使用する必要があります。

たとえば、MongoDB Lens 8.3.0 MongoDB Node.js ドライバー3.7.4使用します ( package-lock.jsonを参照)。

NPX を使用して古いバージョンの MongoDB Lens を実行するには、バージョン タグを指定します。

npx -y mongodb-lens@8.3.0

Docker の場合も同様です。

docker run --rm -i --network=host furey/mongodb-lens:8.3.0

構成

構成: MongoDB 接続文字列

サーバーは、MongoDB 接続文字列を唯一の引数として受け入れます。

NPXの使用例:

npx -y mongodb-lens@latest mongodb://your-connection-string

MongoDB 接続文字列の形式は次のとおりです。

mongodb://[username:password@]host[:port][/database][?options]

接続文字列の例:

  • ローカル接続: mongodb://localhost:27017
  • adminデータベースの資格情報を使用してmydatabaseに接続します: mongodb://username:password@hostname:27017/mydatabase?authSource=admin
  • さまざまなオプションを指定してmydatabaseに接続します: mongodb://hostname:27017/mydatabase?retryWrites=true&w=majority

接続文字列が指定されていない場合、サーバーはローカル接続を介して接続を試みます。

設定: 設定ファイル

MongoDB Lens は、JSON 構成ファイルによる広範なカスタマイズをサポートしています。

[!NOTE] 設定ファイルはオプションです。設定ファイルが指定されていない場合、MongoDB Lens はデフォルト設定で実行されます。

[!TIP] 設定ファイルには、カスタマイズしたい設定のみを記述してください。省略された値については、MongoDB Lens はデフォルト設定を使用します。

[!TIP] MongoDB Lens は、 .json.jsonc (コメント付き JSON) の両方の構成ファイル形式をサポートしています。

{ "mongoUri": "mongodb://localhost:27017", // Default MongoDB connection string or object of alias-URI pairs "connectionOptions": { "maxPoolSize": 20, // Maximum number of connections in the pool "retryWrites": false, // Whether to retry write operations "connectTimeoutMS": 30000, // Connection timeout in milliseconds "socketTimeoutMS": 360000, // Socket timeout in milliseconds "heartbeatFrequencyMS": 10000, // How often to ping servers for status "serverSelectionTimeoutMS": 30000 // Timeout for server selection }, "defaultDbName": "admin", // Default database if not specified in URI "connection": { "maxRetries": 5, // Maximum number of initial connection attempts "maxRetryDelayMs": 30000, // Maximum delay between retries "reconnectionRetries": 10, // Maximum reconnection attempts if connection lost "initialRetryDelayMs": 1000 // Initial delay between retries }, "disabled": { "tools": [], // Array of tools to disable or true to disable all "prompts": [], // Array of prompts to disable or true to disable all "resources": [] // Array of resources to disable or true to disable all }, "enabled": { "tools": true, // Array of tools to enable or true to enable all "prompts": true, // Array of prompts to enable or true to enable all "resources": true // Array of resources to enable or true to enable all }, "cacheTTL": { "stats": 15000, // Stats cache lifetime in milliseconds "fields": 30000, // Fields cache lifetime in milliseconds "schemas": 60000, // Schema cache lifetime in milliseconds "indexes": 120000, // Index cache lifetime in milliseconds "collections": 30000, // Collections list cache lifetime in milliseconds "serverStatus": 20000 // Server status cache lifetime in milliseconds }, "enabledCaches": [ // List of caches to enable "stats", // Statistics cache "fields", // Collection fields cache "schemas", // Collection schemas cache "indexes", // Collection indexes cache "collections", // Database collections cache "serverStatus" // MongoDB server status cache ], "memory": { "enableGC": true, // Whether to enable garbage collection "warningThresholdMB": 1500, // Memory threshold for warnings "criticalThresholdMB": 2000 // Memory threshold for cache clearing }, "logLevel": "info", // Log level (info or verbose) "disableDestructiveOperationTokens": false, // Whether to skip confirmation for destructive ops "watchdogIntervalMs": 30000, // Interval for connection monitoring "defaults": { "slowMs": 100, // Threshold for slow query detection "queryLimit": 10, // Default limit for query results "allowDiskUse": true, // Allow operations to use disk for large datasets "schemaSampleSize": 100, // Sample size for schema inference "aggregationBatchSize": 50 // Batch size for aggregation operations }, "security": { "tokenLength": 4, // Length of confirmation tokens "tokenExpirationMinutes": 5, // Expiration time for tokens "strictDatabaseNameValidation": true // Enforce strict database name validation }, "tools": { "transaction": { "readConcern": "snapshot", // Read concern level for transactions "writeConcern": { "w": "majority" // Write concern for transactions } }, "bulkOperations": { "ordered": true // Whether bulk operations execute in order }, "export": { "defaultLimit": -1, // Default limit for exports (-1 = no limit) "defaultFormat": "json" // Default export format (json or csv) }, "watchChanges": { "maxDurationSeconds": 60, // Maximum duration for change streams "defaultDurationSeconds": 10 // Default duration for change streams }, "queryAnalysis": { "defaultDurationSeconds": 10 // Default duration for query analysis } } }

デフォルトでは、MongoDB Lens は次の場所にある構成ファイルを検索します。

  • 最初に~/.mongodb-lens.jsonc 、その後にフォールバックします
  • 前者が存在しない場合は~/.mongodb-lens.json

設定ファイルのパスをカスタマイズするには、環境変数CONFIG_PATH目的のファイル パスに設定します。

NPXの使用例:

CONFIG_PATH='/path/to/config.json' npx -y mongodb-lens@latest

Docker Hub の使用例:

docker run --rm -i --network=host --pull=always -v /path/to/config.json:/root/.mongodb-lens.json furey/mongodb-lens

構成: 構成ファイルの生成

config:createスクリプトを使用して、構成ファイルを自動的に生成できます。

# NPX Usage (recommended) npx -y mongodb-lens@latest config:create # Node.js Usage npm run config:create # Force overwrite existing files npx -y mongodb-lens@latest config:create -- --force npm run config:create -- --force

このスクリプトは上記のサンプル設定ファイルを抽出し、次の場所に保存します: ~/.mongodb-lens.jsonc

設定ファイルの生成: カスタムパス

CONFIG_PATH環境変数を使用して、カスタム出力場所を指定できます。

  • CONFIG_PATHファイル拡張子がない場合、ディレクトリとして扱われ、 .mongodb-lens.jsoncが追加されます。
  • CONFIG_PATH``.json.jsoncではない)で終わる場合、生成されたファイルからコメントが削除されます。

NPXの使用例:

# With custom path CONFIG_PATH=/path/to/config.jsonc npx -y mongodb-lens@latest config:create # Save to directory (will append .mongodb-lens.jsonc to the path) CONFIG_PATH=/path/to/directory npx -y mongodb-lens@latest config:create # Save as JSON instead of JSONC CONFIG_PATH=/path/to/config.json npx -y mongodb-lens@latest config:create

Node.jsの使用例:

# With custom path CONFIG_PATH=/path/to/config.jsonc node mongodb-lens.js config:create # Save to directory (will append .mongodb-lens.jsonc to the path) CONFIG_PATH=/path/to/directory node mongodb-lens.js config:create # Save as JSON instead of JSONC CONFIG_PATH=/path/to/config.json node mongodb-lens.js config:create

構成: 複数の MongoDB 接続

MongoDB Lens は、設定ファイル内のエイリアスを使用して複数の MongoDB URI をサポートし、単純な名前を使用して異なる MongoDB インスタンス間を簡単に切り替えることができます。

複数の接続を構成するには、 mongoUri構成設定をエイリアス URI ペアを持つオブジェクトに設定します。

{ "mongoUri": { "main": "mongodb://localhost:27017", "backup": "mongodb://localhost:27018", "atlas": "mongodb+srv://username:password@cluster.mongodb.net/mydb" } }

この構成では、次のようになります。

  • リストの最初のURI(例: main )が起動時のデフォルト接続になります。
  • 自然言語を使用して接続を切り替えることができます: "Connect to backup"または"Connect to atlas"
  • 元の構文は引き続き機能します: "Connect to mongodb://localhost:27018"
  • list-connectionsツールは利用可能なすべての接続エイリアスを表示します

[!NOTE] コマンドライン引数を使用して接続を指定する場合は、完全な MongoDB URI または構成ファイルで定義されたエイリアスのいずれかを使用できます。

[!TIP] 実行時に接続エイリアスを追加するには、 add-connection-aliasツールを使用します。

設定: 環境変数のオーバーライド

MongoDB Lens は、構成設定の環境変数のオーバーライドをサポートしています。

環境変数は構成ファイルの設定よりも優先されます。

構成環境変数は次の命名パターンに従います。

CONFIG_[SETTING PATH, SNAKE CASED, UPPERCASED]

オーバーライドの例:

設定環境変数のオーバーライド
mongoUriCONFIG_MONGO_URI
logLevelCONFIG_LOG_LEVEL
defaultDbNameCONFIG_DEFAULT_DB_NAME
defaults.queryLimitCONFIG_DEFAULTS_QUERY_LIMIT
tools.export.defaultFormatCONFIG_TOOLS_EXPORT_DEFAULT_FORMAT
connectionOptions.maxPoolSizeCONFIG_CONNECTION_OPTIONS_MAX_POOL_SIZE
connection.reconnectionRetriesCONFIG_CONNECTION_RECONNECTION_RETRIES

環境変数の値の場合:

  • ブール設定の場合は、文字列値'true'または'false'を使用します。
  • 数値設定の場合は文字列表現を使用します。
  • ネストされたオブジェクトまたは配列の場合は、JSON 文字列を使用します。

NPXの使用例:

CONFIG_DEFAULTS_QUERY_LIMIT='25' npx -y mongodb-lens@latest

Docker Hub の使用例:

docker run --rm -i --network=host --pull=always -e CONFIG_DEFAULTS_QUERY_LIMIT='25' furey/mongodb-lens

設定: クロスプラットフォーム環境変数

Windows、macOS、Linux 間で一貫した環境変数の使用を実現するには、 cross-envの使用を検討してください。

  1. クロス環境をグローバルにインストールします。
    # Using NPM npm install -g cross-env # Using Volta (see: https://volta.sh) volta install cross-env
  2. このドキュメントの例にある NPX または Node.js 環境変数にプレフィックスを付けます。
    # Example NPX usage with cross-env cross-env CONFIG_DEFAULTS_QUERY_LIMIT='25' npx -y mongodb-lens@latest # Example Node.js usage with cross-env cross-env CONFIG_DEFAULTS_QUERY_LIMIT='25' node mongodb-lens.js

クライアントのセットアップ

クライアントのセットアップ: Claude Desktop

Claude Desktop で MongoDB Lens を使用するには:

  1. Claude Desktopをインストールする
  2. claude_desktop_config.jsonを開きます (存在しない場合は作成します)。
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. 設定オプションに従ってMongoDB Lensサーバー設定を追加します。
  4. Claudeデスクトップを再起動します
  5. MongoDBデータについてClaudeと会話を始めましょう

クロードデスクトップの設定オプション

各オプションについて:

  • mongodb://your-connection-stringを MongoDB 接続文字列に置き換えるか、省略してデフォルトのmongodb://localhost:27017を使用します。
  • カスタム設定ファイルを使用するには、 CONFIG_PATH環境変数を設定します。
  • 環境変数を含めるには:
    • NPX または Node.js の場合は、キーと値のペアを含む"env": {}を追加します。例:
      "command": "/path/to/npx", "args": [ "-y", "mongodb-lens@latest", "mongodb://your-connection-string" ], "env": { "CONFIG_LOG_LEVEL": "verbose" }
    • Docker の場合は-eフラグを追加します。例:
      "command": "docker", "args": [ "run", "--rm", "-i", "--network=host", "--pull=always", "-e", "CONFIG_LOG_LEVEL=verbose", "furey/mongodb-lens", "mongodb://your-connection-string" ]
オプション 1: NPX (推奨)
{ "mcpServers": { "mongodb-lens": { "command": "/path/to/npx", "args": [ "-y", "mongodb-lens@latest", "mongodb://your-connection-string" ] } } }
オプション2: Docker Hubイメージ
{ "mcpServers": { "mongodb-lens": { "command": "docker", "args": [ "run", "--rm", "-i", "--network=host", "--pull=always", "furey/mongodb-lens", "mongodb://your-connection-string" ] } } }
オプション3: ローカルNode.jsインストール
{ "mcpServers": { "mongodb-lens": { "command": "/path/to/node", "args": [ "/path/to/mongodb-lens.js", "mongodb://your-connection-string" ] } } }
オプション4: ローカルDockerイメージ
{ "mcpServers": { "mongodb-lens": { "command": "docker", "args": [ "run", "--rm", "-i", "--network=host", "mongodb-lens", "mongodb://your-connection-string" ] } } }

クライアント設定: MCP Inspector

MCP Inspector は、 MCP サーバーのテストとデバッグ用に設計されたツールです。

[!NOTE] MCP Inspector は、ポート 3000 でプロキシ サーバーを起動し、ポート 5173 で Web クライアントを起動します。

NPXの使用例:

  1. MCP Inspector を実行します。
    # Using default connection string mongodb://localhost:27017 npx -y @modelcontextprotocol/inspector npx -y mongodb-lens@latest # Using custom connection string npx -y @modelcontextprotocol/inspector npx -y mongodb-lens@latest mongodb://your-connection-string # Using custom ports SERVER_PORT=1234 CLIENT_PORT=5678 npx -y @modelcontextprotocol/inspector npx -y mongodb-lens@latest
  2. MCP インスペクターを開く: http://localhost:5173

MCP Inspector は、コレクション名やクエリ フィールドの自動補完など、MongoDB Lens の全機能をサポートする必要があります。

詳細については、 MCP Inspectorを参照してください。

クライアント設定: その他の MCP クライアント

MongoDB Lens は、MCP 互換のクライアントであればどれでも使用できます。

詳細については、 MCP ドキュメント: サンプルクライアントを参照してください。

データ保護

MongoDB Lens の使用中にデータを保護するには、次の点を考慮してください。

データ保護: 読み取り専用ユーザーアカウント

MongoDB Lensをデータベースに接続する際に、MongoDB接続文字列でユーザーに付与された権限によって、実行可能なアクションが決まります。ユースケースが適切であれば、読み取り専用ユーザーを設定することで、意図しない書き込みや削除を防ぎ、MongoDB Lensがデータのクエリを実行しつつ、変更できないようにすることができます。

これを設定するには、対象とするデータベースをスコープとするreadロールを持つユーザーを作成します。MongoDBシェルでは、次のコマンドを実行します。

use admin db.createUser({ user: 'readonly', pwd: 'eXaMpLePaSsWoRd', roles: [{ role: 'read', db: 'mydatabase' }] })

次に、これらの資格情報を MongoDB 接続文字列に適用します。

mongodb://readonly:eXaMpLePaSsWoRd@localhost:27017/mydatabase

読み取り専用資格情報を使用することは、特にスキーマを調べたりアドホック クエリを実行したりするときに、セキュリティ境界を強化するシンプルかつ効果的な方法です。

データ保護: データベースのバックアップの操作

MongoDB Lens を使用する場合は、別の MongoDB インスタンスでホストされているデータのバックアップ コピーに接続することを検討してください。

まずmongodumpを使ってバックアップを生成します。次に、新しいMongoDBインスタンス(例えば27018などの別のポート)を起動し、 mongorestoreを使ってバックアップを復元します。インスタンスが起動したら、MongoDB Lensをバックアップインスタンスの接続文字列(例えばmongodb://localhost:27018/mydatabase )に設定します。

このアプローチにより、ライブ データが誤って破損するリスクなしに、複雑な操作や破壊的な操作をテストできるサンドボックスが提供されます。

データ保護:データフローの考慮事項

データフローの考慮事項: データがシステム内をどのように流れるか

MCP サーバーをリモート LLM プロバイダー (Claude Desktop 経由の Anthropic など) と共に使用する場合、データがシステム内をどのように流れるかを理解することが、機密情報を意図しない漏洩から保護する鍵となります。

MCP クライアントを通じて MongoDB 関連のクエリを送信すると、次のことが起こります。

[!NOTE] この例ではローカル MongoDB インスタンスを使用していますが、同じ原則がリモート MongoDB インスタンスにも適用されます。

  1. リクエストを送信します➥ 例:「30歳以上のユーザーをすべて表示」
  2. クライアントがリモート LLM にリクエストを送信します➥ LLM プロバイダーは、利用可能な MCP ツールとそのパラメータのリストとともに、正確な言葉を受け取ります。
  3. リモート LLM はリクエストを解釈します➥ 意図を判断し、適切なパラメータを使用して特定の MCP ツールを使用するようにクライアントに指示します。
  4. クライアントは MongoDB Lens にツールの実行を要求します➥ これは、stdio 経由でローカルのマシン上で実行されます。
  5. MongoDB LensはMongoDBデータベースにクエリを実行します
  6. MongoDB LensはMongoDBクエリの結果を取得します
  7. MongoDB Lens はデータをクライアントに送り返します➥ クライアントは MongoDB Lens によってフォーマットされた結果を受信します。
  8. クライアントはデータをリモート LLM に転送します➥ LLM プロバイダーは MongoDB Lens から返された正確なデータを確認します。
  9. リモート LLM はデータを処理します➥ 結果をさらに要約したりフォーマットしたりする場合があります。
  10. リモート LLM は最終応答をクライアントに送信します➥ クライアントは回答を表示します。

リモートLLMプロバイダーは、元のリクエストとMongoDB Lensからの完全なレスポンスの両方を参照します。データベースに機密性の高いフィールド(パスワード、個人情報など)が含まれている場合、対策を講じない限り、これらのデータが意図せずリモートプロバイダーに送信される可能性があります。

データフローの考慮事項: 投影による機密データの保護

機密データがリモートLLMプロバイダーに送信されないようにするには、 find-documentsaggregate-dataexport-dataなどのツールを使用する際に、プロジェクションの概念を使用します。プロジェクションを使用すると、クエリ結果に含めるフィールドと除外するフィールドを指定できるため、機密情報がローカルに保持されます。

投影の使用例:

  • 「30歳以上のユーザーをすべて表示しますが、投影を使用してパスワードを非表示にします。」 ➥投影を使用してfind-documentsツールを使用します

データフローの考慮事項: 接続エイリアスとパスワード

add-connection-aliasツールを使用して新しい接続エイリアスを追加する際、リモート LLM プロバイダーを使用している場合は、パスワードを含む URI にエイリアスを追加しないでください。リクエストは LLM に送信されるため、URI 内のパスワードが漏洩する可能性があります。代わりに、MongoDB Lens構成ファイルでパスワードを含むエイリアスを定義してください。そうすれば、エイリアスはローカルに保持され、LLM には送信されません。

データフローの考慮事項: 最大限の安全性を実現するためのローカル設定

このドキュメントの範囲外ですが、最高レベルのデータプライバシーを実現するには、ローカルMCPクライアントとローカルでホストされたLLMモデルの組み合わせを検討してください。このアプローチでは、すべてのリクエストとデータがローカル環境内に保持されるため、機密情報がリモートプロバイダーに送信されるリスクが排除されます。

データ保護:破壊的な操作の確認

MongoDB Lens は、潜在的に破壊的な操作に対してトークンベースの確認システムを実装しており、チェックされていないデータ損失につながる可能性のあるツールを実行するために 2 段階のプロセスを必要とします。

  1. 最初のツール呼び出し: 5分後に期限切れになる4桁の確認トークンを返します
  2. 2回目のツール呼び出し: 有効なトークンが提供された場合に操作を実行します

確認プロセスの例については、 「確認保護の操作」を参照してください。

確認が必要なツールは次のとおりです。

  • drop-user : データベースユーザーを削除する
  • drop-index : インデックスを削除します(パフォーマンスに影響する可能性があります)
  • drop-database : データベースを完全に削除する
  • drop-collection : コレクションとその中のすべてのドキュメントを削除する
  • delete-document : 1つまたは複数のドキュメントを削除する
  • bulk-operations : 削除操作を含める場合
  • rename-collection : 対象のコレクションが存在し、削除される場合

この保護メカニズムは、入力ミスや意図しないコマンドによる偶発的なデータ損失を防ぐことを目的としています。これは、潜在的に危険な操作を実行する前に、その結果を認識できるようにするセーフティネットです。

[!NOTE] データ損失が許容される制御された環境で作業している場合は、確認をバイパスして破壊的な操作を直ちに実行するように MongoDB Lens を構成できます。

破壊的な操作の確認をバイパスする

トークン確認システムをバイパスする必要がある場合があります。

確認なしに破壊的な操作を直ちに実行するには、環境変数CONFIG_DISABLE_DESTRUCTIVE_OPERATION_TOKENStrueに設定します。

# Using NPX CONFIG_DISABLE_DESTRUCTIVE_OPERATION_TOKENS=true npx -y mongodb-lens@latest # Using Docker docker run --rm -i --network=host --pull=always -e CONFIG_DISABLE_DESTRUCTIVE_OPERATION_TOKENS='true' furey/mongodb-lens

[!警告] 確認トークンを無効にすると、重要な安全メカニズムが失われます。このオプションは、開発やテストなど、データ損失が許容される管理された環境でのみ使用することを強くお勧めします。無効化は自己責任で行ってください。

データ保護:破壊的な操作の無効化

ツールの無効化

MongoDB Lensには、データを変更または削除できるツールがいくつか含まれています。特定のツールを無効にするには、設定ファイルdisabled.tools配列にそのツールを追加してください。

{ "disabled": { "tools": [ "drop-user", "drop-index", "drop-database", "drop-collection", "delete-document", "bulk-operations", "rename-collection" ] } }

[!NOTE] リソースとプロンプトは、 disabled.resourcesおよびdisabled.prompts設定によって無効にすることもできます。

高リスクツール

これらのツールは即時のデータ損失を引き起こす可能性があるため、機密性の高い環境では無効にすることを検討する必要があります。

  • drop-user : データベースユーザーとそのアクセス権限を削除します
  • drop-index : インデックスを削除します(クエリのパフォーマンスに影響を与える可能性があります)
  • drop-database : データベース全体を永久に削除します
  • drop-collection : コレクションとそのすべてのドキュメントを完全に削除します
  • delete-document : 指定された条件に一致するドキュメントを削除します
  • bulk-operations : 設定により一括削除を実行できます
  • rename-collection : ドロップターゲットオプションを使用するときに既存のコレクションを上書きできます

中リスクツール

これらのツールはデータを変更する可能性がありますが、通常はすぐにデータが失われることはありません。

  • create-user : さらなる変更を可能にする権限を持つユーザーを作成します
  • transaction : トランザクション内で複数の操作を実行します (複雑な変更が発生する可能性があります)
  • update-document : 既存のデータを上書きする可能性のあるドキュメントを更新します

読み取り専用構成

完全な読み取り専用構成にするには、破壊的な可能性のあるすべてのツールを無効にします。

{ "disabled": { "tools": [ "drop-user", "drop-index", "create-user", "transaction", "create-index", "drop-database", "drop-collection", "insert-document", "update-document", "delete-document", "bulk-operations", "create-database", "gridfs-operation", "create-collection", "rename-collection", "create-timeseries" ] } }

この構成により、MongoDB Lens は変更を防止しながらデータをクエリおよび分析できるため、偶発的なデータ損失に対する多層的な保護が提供されます。

選択的コンポーネント有効化

コンポーネントを無効にするだけでなく、構成ファイル内のenabled設定を使用して、有効にするコンポーネントを正確に指定します (他のすべてのコンポーネントは暗黙的に無効になります)。

{ "enabled": { "tools": [ "use-database", "find-documents", "count-documents", "aggregate-data" ] }, "disabled": { "resources": true, "prompts": true } }

[!IMPORTANT] コンポーネントがenableddisabledリストの両方に表示される場合は、 enabled設定が優先されます。

チュートリアル

次のチュートリアルでは、サンプル データを使用して MongoDB コンテナーを設定し、MongoDB Lens を使用して自然言語クエリを通じてコンテナーを操作する方法について説明します。

  1. サンプルデータコンテナの開始
  2. サンプルデータのインポート
  3. MongoDBレンズを接続する
  4. クエリの例
  5. 確認保護の操作

チュートリアル: 1. サンプルデータコンテナを起動する

[!NOTE] このチュートリアルでは、システムにDockerがインストールされ、実行されていることを前提としています。

[!IMPORTANT] Docker がすでにポート 27017 でコンテナーを実行している場合は、続行する前に停止してください。

  1. サンプル データ コンテナを初期化します。
    docker run --name mongodb-sampledata -d -p 27017:27017 mongo:6
  2. コンテナが問題なく実行されていることを確認します。
    docker ps | grep mongodb-sampledata

チュートリアル: 2. サンプルデータのインポート

MongoDB は、MongoDB Lens を探索するために使用するサンプル データセットをいくつか提供しています。

  1. サンプル データセットをダウンロードします。
    curl -LO https://atlas-education.s3.amazonaws.com/sampledata.archive
  2. サンプル データセットをサンプル データ コンテナーにコピーします。
    docker cp sampledata.archive mongodb-sampledata:/tmp/
  3. サンプル データセットを MongoDB にインポートします。
    docker exec -it mongodb-sampledata mongorestore --archive=/tmp/sampledata.archive

これにより、いくつかのデータベースがインポートされます。

  • sample_airbnb : Airbnbのリスティングとレビュー
  • sample_analytics : 顧客とアカウントのデータ
  • sample_geospatial : 地理データ
  • sample_mflix : 映画データ
  • sample_restaurants : レストランデータ
  • sample_supplies : サプライチェーンデータ
  • sample_training : さまざまなアプリケーションのトレーニングデータ
  • sample_weatherdata : 気象測定

チュートリアル: 3. MongoDB Lens を接続する

クイック スタートの手順に従って MongoDB Lensをインストールします

MCP クライアントを MongoDB Lens に接続するように設定します: mongodb://localhost:27017

[!TIP] MCP クライアント構成から接続文字列を省略すると、接続文字列はデフォルトでmongodb://localhost:27017になります。

Claude Desktop の構成例:

{ "mcpServers": { "mongodb-lens": { "command": "/path/to/npx", "args": [ "-y", "mongodb-lens@latest" ] } } }

チュートリアル: 4. クエリの例

MCP クライアントを実行し、MongoDB Lens に接続した状態で、次のサンプルクエリを試してください。

クエリの例: 基本的なデータベース操作

  • 「すべてのデータベースを一覧表示する」list-databasesツールを使用します
  • 「現在使用しているDBは何ですか?」current-databaseツールを使用します
  • 「sample_mflixデータベースに切り替える」use-databaseツールを使用する
  • 「test_dbという新しいデータベースを作成する」 ➥create create-databaseツールを使用する
  • 「analytics_db という別のデータベースを作成し、それに切り替える」 ➥ switch=true でcreate-databaseツールを使用する
  • 「Drop test_db」drop-databaseツールを使用する(確認付き)

クエリ例: コレクション管理

  • 「現在のデータベースにはどのようなコレクションがありますか?」list-collectionsツールを使用します
  • 「user_logsコレクションを作成」create-collectionツールを使用
  • 「user_logs を system_logs に名前変更」rename-collectionツールを使用します
  • 「Drop system_logs」drop-collectionツールを使用する(確認あり)
  • 「映画コレクションのデータの一貫性をチェックする」validate-collectionツールを使用する

クエリ例: ユーザー管理

  • 「アナリティクス用の読み取り専用ユーザーを作成する」create-userツールを使用する
  • 「inactive_user アカウントを削除する」drop-userツールを使用する(確認付き)

クエリの例: データのクエリ

  • 「映画コレクション内のすべてのドキュメントを数える」count-documentsツールを使用
  • 「IMDB評価が最も高い映画トップ5を見つける」find-documentsツールを使用
  • 「10年ごとにグループ化された映画の集計データを表示」aggregate-dataツールを使用
  • 「映画が制作されたすべての国をリストする」distinct-valuesツールを使用
  • 「タイトルにゴッドファーザーを含む映画を検索」text-searchツールを使用
  • 「適切な照合を使用して、姓がmüllerであるドイツ語のユーザーを検索する」collation-queryツールを使用します

クエリ例: スキーマ分析

  • 「映画コレクションのスキーマ構造は何ですか?」analyze-schemaツールを使用します
  • 「ユーザーとコメントのスキーマを比較する」compare-schemasツールを使用する
  • 「映画コレクションのスキーマバリデータを生成する」generate-schema-validatorツールを使用する
  • 「映画コレクションの一般的なクエリパターンを分析する」analyze-query-patternsツールを使用します

クエリ例: データの変更

  • 「新しいムービードキュメントを挿入: <フィールドデータ>」insert-documentツールを使用します
  • 「1994年のすべての映画を更新して「クラシック」フラグを追加する」update-documentツールを使用
  • 「評価ゼロの映画をすべて削除」delete-documentツールを使用(確認あり)
  • 「映画コレクションに対してこれらの一括操作を実行します: <JSONデータ>」bulk-operationsツールを使用します

[!TIP] 特殊な MongoDB 操作 (配列操作、ビット演算、その他の複雑な更新など) の場合は、 update-documentツールのupdateおよびoptionsパラメーターを介して MongoDB のネイティブ演算子を使用します。

クエリ例: パフォーマンスとインデックス管理

  • 「映画コレクションのタイトルフィールドにインデックスを作成する」create-indexツールを使用します
  • 「ratings_idx インデックスを削除する」drop-indexツールを使用する(確認あり)
  • 「1995年の映画を検索するための実行プランを説明してください」explain-queryツールを使用します
  • 「現在のデータベースの統計情報を取得する」 ➥ target=database を指定したget-statsツールを使用します
  • 「映画コレクションのコレクション統計を表示する」get-statsツールを target=collection とともに使用します

クエリ例: 地理空間と特殊操作

  • 「sample_geospatial dbに切り替えて、座標[-80.12, 26.46]から10km以内にあるすべての難破船を検索します」geo-queryツールを使用します
  • 「sample_analytics dbに切り替えて、アカウント間で資金を移動するトランザクションを実行します: <アカウントID>」transactionツールを使用します
  • 「センサー読み取り値の時系列コレクションを作成する」create-timeseriesツールを使用します
  • 「ユーザーコレクションの変更を30秒間監視する」watch-changesツールを使用する
  • 「イメージ GridFS バケット内のすべてのファイルを一覧表示する」 ➥ 操作 = list でgridfs-operationツールを使用します

クエリ例: エクスポート、管理、その他の機能

  • 「sample_mflix dbに切り替えて、「tomatoes.critic.rating」に基づいて上位20本の映画をタイトル、年、評価フィールドを含むCSVとしてエクスポートします(単一のコードブロックで出力します)」export-dataツールを使用します
  • 「sample_analytics dbに切り替えて、シャーディングステータスを確認します」shard-statusツールを使用します
  • 「コレクションのキャッシュをクリアする」 ➥ target=collections を指定したclear-cacheツールを使用します
  • 「すべてのキャッシュをクリア」clear-cacheツールを使用
  • 「sample_weatherdata dbに切り替えて、現在の状態に関するインタラクティブなレポートを生成する」 ➥多数のツールを使用する

クエリ例: 接続管理

  • 「mongodb://localhost:27018 に接続」connect-mongodbツールを使用します
  • 「mongodb+srv://username: password@cluster.mongodb.net /mydb に接続」connect-mongodbツールを使用します
  • 「元のmongodbインスタンスに接続し直す」connect-originalツールを使用する
  • 「接続を検証せずにレプリカ セットに接続します: <レプリカ セットの詳細>」connect-mongodbツールをvalidateConnection=falseで使用します
  • 「mongodb://username:password@prod-server:27017/mydb に接続エイリアス 'prod' を追加する」add-connection-aliasツールを使用する

チュートリアル: 5. 確認保護の操作

MongoDB Lensには、潜在的に破壊的な操作に対する安全機構が備わっています。実際の動作は以下のとおりです。

  1. コレクションの削除リクエスト:
    "Drop the collection named test_collection"
  2. MongoDB Lens は警告と確認トークンで応答します。
    ⚠️ DESTRUCTIVE OPERATION WARNING ⚠️ You've requested to drop the collection 'test_collection'. This operation is irreversible and will permanently delete all data in this collection. To confirm, you must type the 4-digit confirmation code EXACTLY as shown below: Confirmation code: 9876 This code will expire in 5 minutes for security purposes.
  3. 確認トークンを送信して操作を確認します。
    "9876"
  4. MongoDB Lens は次の操作を実行します。
    Collection 'test_collection' has been permanently deleted.

この 2 段階のプロセスでは、明示的な確認を要求することで、偶発的なデータ損失を防止します。

[!NOTE] データ損失が許容される制御された環境で作業している場合は、確認をバイパスして破壊的な操作を直ちに実行するように MongoDB Lens を構成できます。

テストスイート

MongoDB Lens には、ツール、リソース、プロンプト全体の機能を検証するためのテスト スイートが含まれています。

テストスイート: テストの実行

テスト スイートにはCONFIG_MONGO_URI環境変数が必要です。これは次のように設定できます。

  • MongoDB 接続文字列 (例mongodb://localhost:27017 )
  • mongodb-memory-server (メモリ内テスト用)
# Run Tests with MongoDB Connection String CONFIG_MONGO_URI=mongodb://localhost:27017 node mongodb-lens.test.js # Run Tests with In-Memory MongoDB (requires mongodb-memory-server) CONFIG_MONGO_URI=mongodb-memory-server node mongodb-lens.test.js

便宜上、テストを実行するために次のスクリプトが利用できます。

npm test # Fails if no CONFIG_MONGO_URI provided npm run test:localhost # Uses mongodb://localhost:27017 npm run test:localhost:verbose # Runs with DEBUG=true for verbose output npm run test:in-memory # Uses mongodb-memory-server npm run test:in-memory:verbose # Runs with DEBUG=true for verbose output

[!NOTE] テスト スイートは、テストの完了後にクリーンアップされる一時的なデータベースとコレクションを作成します。

テストスイート: コマンドラインオプション

オプション説明
--list実行せずに利用可能なすべてのテストを一覧表示する
--test=<n>特定のテストを名前で実行する(カンマ区切り)
--group=<n>特定のグループ内のすべてのテストを実行します(カンマ区切り)
--pattern=<glob>パターンに一致するテストを実行します(カンマ区切り)

テストスイート: 例

# List All Available Tests npm test -- --list # Run Only Connection-Related Tests (:27017) npm run test:localhost -- --group=Connection\ Tools # Test Specific Database Operations (In-Memory) npm run test:in-memory -- --test=create-database\ Tool,drop-database\ Tool # Test All Document-Related Tools (:27017) npm run test:localhost -- --pattern=document # Run Resource Tests Only (In-Memory) npm run test:in-memory -- --group=Resources # Run Specific Tests Only (In-Memory) npm run test:in-memory -- --test=aggregate-data\ Tool,find-documents\ Tool

免責事項

MongoDB レンズ:

  • MIT ライセンスに基づいてライセンスされます。
  • MongoDB, Inc. と提携しておらず、また同社から承認も受けていません。
  • AIの支援を受けて書かれたものであり、誤りが含まれている可能性があります。
  • 教育および実験目的のみに使用されます。
  • 現状のまま提供され、保証はありません。自己責任でご使用ください。

サポート

MongoDB Lens が役に立ったと思われる場合は、次の方法で私の作業をサポートすることを検討してください。

コーヒーを買ってください| GitHubスポンサーシップ

貢献のおかげで、このツールの開発と改善を継続することができ、新しい機能の追加に多くの時間を費やすことができ、コミュニティにとって貴重なリソースであり続けることができます。

ID: hniehmvmgn