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.

몽고DB 렌즈

MongoDB Lens는 LLM을 통해 자연어를 사용하여 MongoDB 데이터베이스에 모든 기능에 액세스할 수 있는 로컬 MCP(Model Context Protocol) 서버로, 쿼리를 수행하고, 집계를 실행하고, 성능을 최적화하는 등의 작업을 수행합니다.

내용물

빠른 시작

특징

도구

자원

프롬프트

기타 기능

기타 기능: 개요

MongoDB Lens에는 다음과 같은 다양한 기능이 포함되어 있습니다.

  • 구성 파일 : ~/.mongodb-lens.[jsonc|json] 통한 사용자 정의 구성
  • Env Var Overrides : process.env.CONFIG_* 를 통해 구성 설정을 재정의합니다.
  • 확인 시스템 : 파괴적 작업에 대한 2단계 검증
  • 다중 연결 : 명명된 URI 별칭을 정의하고 전환합니다.
  • 구성 요소 비활성화 : 도구, 프롬프트 또는 리소스를 선택적으로 비활성화합니다.
  • 연결 복원력 : 지수 백오프를 통한 자동 재연결
  • 쿼리 보호 : 구성 가능한 제한 및 성능 보호
  • 오류 처리 : 포괄적인 JSONRPC 오류 코드 및 메시지
  • 스키마 추론 : 지능형 샘플링을 통한 효율적인 스키마 분석
  • 자격 증명 보호 : 로그에서 연결 문자열 암호 난독화
  • 메모리 관리 : 대규모 작업에 대한 자동 모니터링 및 정리
  • 스마트 캐싱 : 스키마, 인덱스, 필드 및 컬렉션에 대한 최적화된 캐싱
  • 이전 버전과의 호환성 : 최신 및 레거시 MongoDB 버전 모두 지원

기타 기능: 새로운 데이터베이스 메타데이터

MongoDB Lens는 생성하는 각 데이터베이스에 metadata 컬렉션을 삽입합니다.

metadata 컬렉션은 컨텍스트 정보가 포함된 단일 문서를 저장하여 데이터베이스의 출처에 대한 영구 기록으로 사용되며, 새롭고 비어 있는 데이터베이스가 MongoDB의 저장 시스템에 계속 유지되도록 보장합니다.

지엑스피1

새 데이터베이스에 자체 컬렉션을 추가한 후에는 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

[!참고] 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 버전

MongoDB 인스턴스의 버전이 < 4.0 경우, 최신 버전의 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] useNewUrlParseruseUnifiedTopology 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 환경 변수는 다음 명명 패턴을 따릅니다.

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. 전역적으로 cross-env를 설치합니다.
    # 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 Desktop을 다시 시작하세요
  5. Claude와 MongoDB 데이터에 대한 대화를 시작하세요

Claude Desktop 구성 옵션

각 옵션에 대해:

  • 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에서 웹 클라이언트를 시작합니다.

NPX 사용 예:

  1. MCP 검사기 실행:
    # 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 )을 가리키도록 설정합니다.

이 접근 방식을 사용하면 라이브 데이터가 실수로 손상될 위험 없이 복잡하거나 파괴적인 작업을 테스트할 수 있는 샌드박스를 얻을 수 있습니다.

데이터 보호: 데이터 흐름 고려 사항

데이터 흐름 고려 사항: 데이터가 시스템을 통해 흐르는 방식

Claude Desktop을 통한 Anthropic과 같은 원격 LLM 공급자와 함께 MCP 서버를 사용하는 경우, 데이터가 시스템을 통해 어떻게 흐르는지 이해하는 것이 민감한 정보가 의도치 않게 노출되는 것을 방지하는 데 중요합니다.

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-documents , aggregate-data 또는 export-data 와 같은 도구를 사용할 때 프로젝션 개념을 활용하세요. 프로젝션을 사용하면 쿼리 결과에 포함하거나 제외할 필드를 지정하여 민감한 정보가 로컬에 유지되도록 할 수 있습니다.

투영 사용 예:

  • "30세 이상의 모든 사용자를 표시하지만, 프로젝션을 사용하여 비밀번호를 숨깁니다." ➥ 프로젝션과 함께 find-documents 도구를 사용합니다.

데이터 흐름 고려 사항: 연결 별칭 및 암호

add-connection-alias 도구를 사용하여 새 연결 별칭을 추가할 때, 원격 LLM 공급자를 사용하는 경우 비밀번호가 포함된 URI에 별칭을 추가하지 마십시오. 요청이 LLM으로 전송되므로 URI의 비밀번호가 노출될 수 있습니다. 대신 MongoDB Lens 구성 파일 에서 비밀번호가 포함된 별칭을 정의하십시오. 이 경우 별칭은 로컬에 유지되며 LLM으로 전송되지 않습니다.

데이터 흐름 고려 사항: 최대 안전을 위한 로컬 설정

이 문서의 범위는 아니지만, 최고 수준의 데이터 개인정보 보호를 위해 로컬 MCP 클라이언트와 로컬 호스팅 LLM 모델을 함께 사용하는 것을 고려해 보세요. 이 접근 방식은 모든 요청과 데이터를 로컬 환경 내에 유지하여 민감한 정보가 원격 제공업체로 전송될 위험을 제거합니다.

데이터 보호: 파괴적 작업에 대한 확인

MongoDB Lens는 잠재적으로 파괴적인 작업에 대한 토큰 기반 확인 시스템을 구현하며, 검증되지 않은 데이터 손실을 초래할 수 있는 도구를 실행하기 위해 2단계 프로세스가 필요합니다.

  1. 첫 번째 도구 호출: 5분 후 만료되는 4자리 확인 토큰을 반환합니다.
  2. 두 번째 도구 호출: 유효한 토큰이 제공된 경우 작업을 실행합니다.

확인 프로세스의 예는 다음을 참조하세요. 확인 보호 작업

확인이 필요한 도구는 다음과 같습니다.

  • drop-user : 데이터베이스 사용자 제거
  • drop-index : 인덱스 제거(잠재적 성능 영향)
  • drop-database : 데이터베이스를 영구적으로 삭제합니다.
  • drop-collection : 컬렉션과 해당 컬렉션의 모든 문서를 삭제합니다.
  • delete-document : 하나 또는 여러 개의 문서를 삭제합니다.
  • bulk-operations : 삭제 작업을 포함할 때
  • rename-collection : 대상 컬렉션이 존재하고 삭제될 때

이 보호 메커니즘은 오타나 의도치 않은 명령으로 인한 우발적인 데이터 손실을 방지하는 것을 목표로 합니다. 잠재적으로 위험한 작업을 진행하기 전에 그 결과를 인지할 수 있도록 하는 안전망입니다.

[!NOTE] 데이터 손실이 허용되는 통제된 환경에서 작업하는 경우 MongoDB Lens를 구성하여 확인을 건너 뛰고 파괴적인 작업을 즉시 수행할 수 있습니다.

파괴적인 작업을 위한 확인 우회

토큰 확인 시스템을 우회하고 싶을 수도 있습니다.

확인 없이 파괴적인 작업을 즉시 실행하려면 환경 변수 CONFIG_DISABLE_DESTRUCTIVE_OPERATION_TOKENS true 로 설정합니다.

# 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.resourcesdisabled.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 } }

[!중요] 구성 요소가 enabled 목록과 disabled 목록에 모두 나타나는 경우 enabled 설정이 우선합니다.

지도 시간

다음 튜토리얼에서는 샘플 데이터로 MongoDB 컨테이너를 설정한 다음 MongoDB Lens를 사용하여 자연어 쿼리를 통해 컨테이너와 상호 작용하는 방법을 안내합니다.

  1. 샘플 데이터 컨테이너 시작
  2. 샘플 데이터 가져오기
  3. MongoDB Lens 연결
  4. 예제 쿼리
  5. 확인 보호 작업

튜토리얼: 1. 샘플 데이터 컨테이너 시작

[!NOTE] 이 튜토리얼에서는 시스템에 Docker가 설치되어 실행 중이라고 가정합니다.

[!중요] 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 : 에어비앤비 등록 및 리뷰
  • sample_analytics : 고객 및 계정 데이터
  • sample_geospatial : 지리 데이터
  • sample_mflix : 영화 데이터
  • sample_restaurants : 레스토랑 데이터
  • sample_supplies : 공급망 데이터
  • sample_training : 다양한 애플리케이션을 위한 학습 데이터
  • sample_weatherdata : 날씨 측정값

튜토리얼: 3. MongoDB Lens 연결

빠른 시작 지침에 따라 MongoDB Lens를 설치합니다 .

MCP 클라이언트를 mongodb://localhost:27017 통해 MongoDB Lens에 연결하도록 설정하세요.

[!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라는 새 db를 만듭니다"create-database 도구를 사용합니다
  • "analytics_db라는 또 다른 db를 생성하고 해당 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 도구를 사용합니다.
  • "등급이 0인 모든 영화 삭제"delete-document 도구 사용(확인 포함)
  • "영화 컬렉션에서 다음 대량 작업을 실행하세요: <JSON 데이터>"bulk-operations 도구 사용

[!TIP] 배열 연산, 비트 연산 또는 기타 복잡한 업데이트와 같은 특수한 MongoDB 연산의 경우 update-document 도구의 updateoptions 매개변수를 통해 MongoDB의 기본 연산자를 사용하세요.

예제 쿼리: 성과 및 인덱스 관리

  • "영화 컬렉션의 제목 필드에 인덱스 만들기"create-index 도구 사용
  • "ratings_idx 인덱스 삭제"drop-index 도구 사용(확인 포함)
  • "1995년 영화를 찾기 위한 실행 계획을 설명하세요"explain-query 도구를 사용합니다
  • "현재 db에 대한 통계 가져오기" ➥ target=database와 함께 get-stats 도구를 사용합니다.
  • "영화 컬렉션에 대한 컬렉션 통계 표시" ➥ target=collection을 사용하여 get-stats 도구를 사용합니다.

예제 쿼리: 지리공간 및 특수 작업

  • "sample_geospatial db로 전환한 다음 좌표 [-80.12, 26.46]에서 10km 이내의 모든 난파선을 찾습니다."geo-query 도구 사용
  • "sample_analytics db로 전환한 다음, 계정 간 자금을 이동하기 위한 트랜잭션을 실행하세요: <계정 ID>"transaction 도구 사용
  • "센서 판독값에 대한 시계열 컬렉션 만들기"create-timeseries 도구 사용
  • "30초 동안 사용자 컬렉션의 변경 사항을 감시합니다"watch-changes 도구를 사용합니다
  • "이미지 GridFS 버킷의 모든 파일 나열" ➥ operation=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 도구를 사용합니다.
  • "연결을 검증하지 않고 복제 세트에 연결: <복제 세트 세부 정보>" ➥ validateConnection=false로 connect-mongodb 도구를 사용합니다.
  • "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.와 제휴 관계가 없으며, MongoDB, Inc.의 보증을 받지 않습니다.
  • AI의 도움을 받아 작성되었으며 오류가 있을 수 있습니다.
  • 교육 및 실험 목적으로만 사용됩니다.
  • 있는 그대로 제공되며 어떠한 보증도 제공되지 않습니다. 사용자의 책임 하에 사용하시기 바랍니다.

지원하다

MongoDB Lens가 도움이 되었다면 다음을 통해 저의 작업을 지원해 주세요.

커피 한 잔 사주세요 | GitHub 스폰서십

여러분의 기여는 제가 이 도구를 지속적으로 개발하고 개선하는 데 도움이 되며, 이를 통해 새로운 기능을 추가하는 데 더 많은 시간을 할애할 수 있고 이 도구가 커뮤니티에 귀중한 리소스로 남을 수 있도록 할 수 있습니다.

ID: hniehmvmgn