/ 디렉터리 / 플레이그라운드 / SQLite
● 공식 modelcontextprotocol ⚡ 바로 사용

SQLite

제작: modelcontextprotocol · modelcontextprotocol/servers

로컬 SQLite 파일을 쿼리합니다. 개인 프로젝트, 내보낸 데이터 덤프 또는 저널/로그/db 파일 분석에 적합합니다.

참조 SQLite MCP. 단일 SQLite 파일을 가리키며 스키마 검사, 쿼리 읽기 및 쓰기 쿼리(구성 가능)를 노출합니다. 설정이 없고, 서버도 없고, 네트워크도 없습니다. Postgres MCP와 달리 허용하는 경우 쓰기도 가능합니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

sqlite.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sqlite",
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "sqlite": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-sqlite",
          "--db-path",
          "/data/sample.db"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add sqlite -- uvx mcp-server-sqlite --db-path /data/sample.db

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: SQLite

CSV/JSON 덤프를 SQLite에 로드하여 분석

👤 내보낸 데이터를 탐색하는 분석가, 엔지니어 ⏱ ~15 min beginner

언제 쓸까: 누군가 귀하에게 20만 행이 포함된 CSV를 보냈으며 '어떤 세그먼트가 가장 전환율이 높습니까?'라는 질문을 보냈습니다. — 스프레드시트에는 너무 크고 실제 DB에는 너무 작습니다.

사전 조건
  • 디스크의 소스 파일 — 작업 폴더에 .csv 또는 .json으로 저장
  • 빈 SQLite 파일 경로 — /tmp/analytic.db와 같은 위치를 선택하십시오. MCP가 그것을 생성합니다
흐름
  1. 테이블 생성 및 로드
    /tmp/analytics.db에 /data/signups.csv의 열과 일치하는 signups 테이블을 만듭니다. 모든 행을 로드합니다. 행 수를 알려주세요.✓ 복사됨
    → 테이블이 생성되었으며 행 개수가 파일과 일치합니다.
  2. 스키마 탐색
    어떤 열이 존재합니까? 각각에 대해 값 분포는 어떻게 됩니까(범주형의 경우 상위 5개 고유 값, 숫자의 경우 최소/최대/평균)?✓ 복사됨
    → 열별 프로필
  3. 실제 질문에 답해 보세요
    signup_source별로 그룹화합니다. 각각에 대해 총 가입 수, 전환율(complete_onboarding=true / 총 가입 수)을 계산합니다. 전환율을 기준으로 정렬합니다.✓ 복사됨
    → SQL이 표시된 의사결정 등급 테이블

결과: 5분 안에 답변을 방어할 수 있습니다. .db 파일을 사용하면 새로운 질문이 나올 때 다시 쿼리할 수 있습니다.

함정
  • CSV 열 자동 입력이 잘못되었습니다(숫자는 TEXT로 표시됨). — 로드 후 PRAGMA table_info(signups) 및 CAST를 실행하거나 필요한 경우 명시적 유형으로 열을 다시 만듭니다.
  • 날짜 문자열이 TEXT로 올바르게 정렬/비교되지 않습니다. — 날짜를 ISO 8601(YYYY-MM-DDTHH:MM:SSZ)로 저장하므로 사전순 = 연대순입니다. 또는 수학에 julianday()를 사용하세요.
함께 쓰기: filesystem · antv-chart

개인 앱의 SQLite 데이터베이스 검사 및 편집

👤 CLI 도구, 저널 앱 또는 로컬 우선 소프트웨어를 구축하는 개발자 ⏱ ~10 min beginner

언제 쓸까: 로컬 우선 앱을 구축 중이며, CLI를 작성하지 않고 DB에 무엇이 있는지 확인하고 싶습니다.

흐름
  1. 스키마 조사
    /Users/me/Library/Application Support/MyApp/data.db에 모든 테이블을 나열합니다. 각각에 대해 스키마와 행 개수를 표시합니다.✓ 복사됨
    → 라이브 앱 DB의 인벤토리
  2. 행 조사
    이메일 = '[email protected]'인 사용자 레코드를 찾습니다. 다른 테이블(주문, 세션)에 해당 행과 관련 행을 표시합니다.✓ 복사됨
    → 한 사용자의 데이터에 대한 전체 그림
  3. 잘못된 데이터 수정
    해당 사용자에게 2일 전부터 '보류 중' 상태의 중단된 주문이 있습니다. '취소됨'으로 업데이트하세요. 실행하기 전에 SQL을 표시하십시오.✓ 복사됨
    → 변형 전 SQL 미리보기 후 행 업데이트됨

결과: 일회용 SQL 스크립트를 작성하지 않고 앱을 디버깅합니다.

함정
  • 앱이 WAL 모드로 DB를 열어 잠갔을 수 있습니다. — '데이터베이스가 잠겨 있습니다'라는 메시지가 표시되면 앱을 중지하거나 '?mode=ro&immutable=1'을 통해 WAL 병합 읽기 전용 스냅샷을 쿼리하세요.
함께 쓰기: filesystem

제품 데이터 샘플에서 결정론적 테스트 픽스처 구축

👤 통합 테스트를 작성하는 엔지니어 ⏱ ~25 min intermediate

언제 쓸까: prod와 유사하지만 작고 안전한 반복 가능한 테스트 데이터가 필요합니다.

흐름
  1. 익명화된 행 샘플
    /prod-export/orders.db에서 각 상태를 다루는 orders에서 100개의 행을 샘플링합니다. 이름과 이메일을 익명화합니다.✓ 복사됨
    → 익명화된 PII가 포함된 샘플
  2. 고정 파일로 저장
    샘플링된 행을 /test/fixtures/orders.db에 새로운 SQLite 파일로 작성합니다. 스키마를 포함합니다.✓ 복사됨
    → 새로운 픽스처 파일이 생성되었습니다.
  3. 테스트 로더에 대해 확인
    내 테스트 스위트(npm test)를 실행하세요. — 새 픽스쳐를 선택하나요? 그렇지 않다면 첫 번째 실패한 테스트는 무엇입니까?✓ 복사됨
    → 테스트가 실행됩니다. 실패가 정확히 지적됨

결과: 실제 데이터 형태에서 벗어나지 않는 현실적인 픽스쳐.

함정
  • 참조 무결성을 깨뜨리는 익명화 — 테이블 전체에서 일관되게(동일한 해시) 조인 키를 익명화합니다. 행별로 무작위화하지 마세요.
함께 쓰기: filesystem · github

SQLite 지원 로그/이벤트 파일 분석

👤 SQLite에 로그인하는 CLI 도구 또는 앱을 디버깅하는 엔지니어 ⏱ ~10 min beginner

언제 쓸까: 많은 최신 도구(자작, 일부 브라우저, 앱 캐시)는 상태를 SQLite에 저장합니다. 당신은 그들에게 질문하고 싶습니다.

흐름
  1. 올바른 파일인지 확인하세요
    ~/Library/Application Support/SomeApp/cache.db를 엽니다. 테이블과 최근 행 샘플을 나열합니다.✓ 복사됨
    → 인식 가능한 스키마를 통해 올바른 파일이 있는지 확인
  2. 답을 찾아보세요
    캐시는 소스 도메인당 몇 개의 항목을 보유합니까? 상위 20위.✓ 복사됨
    → 집계 결과
  3. 선택적으로 정리
    90일 동안 액세스하지 않은 도메인의 항목을 삭제합니다. 개수를 먼저 표시하고 삭제하기 전에 확인하세요.✓ 복사됨
    → 미리보기, 확인 후 삭제

결과: 내장된 'stats' 명령이 필요 없는 앱 동작에 대한 답변입니다.

함정
  • 앱이 실행되는 동안 앱의 라이브 DB를 수정하면 앱이 손상될 수 있습니다. — 항상 먼저 앱을 닫거나 .db 파일 복사본으로 작업하세요.
함께 쓰기: filesystem

조합

다른 MCP와 조합해 10배 효율

sqlite + filesystem

디스크에서 CSV를 읽고 분석을 위해 SQLite에 로드

파일 시스템 MCP를 사용하여 /data/orders.csv를 읽고 유형을 추론한 다음 sqlite MCP를 통해 'orders' 테이블로 /tmp/analytic.db에 로드합니다.✓ 복사됨
sqlite + antv-chart

SQLite DB를 쿼리하고 결과를 차트로 작성

/tmp/analogy.db에서 2026년 월간 등록을 확인하세요. antv-chart를 통해 막대 차트로 렌더링하세요.✓ 복사됨
sqlite + github

데이터 분석, GitHub 문제에 결과 작성

/tmp/users.db에서 이탈 분석을 실행합니다. SQL 부록을 사용하여 상위 3개 결과를 요약하는 acme/analytics에 GitHub 문제를 생성합니다.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
list_tables none 모든 세션의 첫 번째 단계 free
describe_table table_name: str 단일 테이블의 스키마 검사 free
read_query query: str (SELECT only) SELECT 실행 - 기본적으로 안전함 free
write_query query: str (INSERT/UPDATE/DELETE) 데이터 변형 — 게이트됨; 대부분의 클라이언트에서는 명시적인 동의가 필요합니다. free
create_table query: str (CREATE TABLE ...) DDL — 스키마 생성 또는 변경 free
append_insight insight: str 세션 메모에 결과 추가(일부 고객이 보고서 작성에 사용함) free

비용 및 제한

운영 비용

API 쿼터
무제한 - 지역
호출당 토큰
스키마 쿼리: 작습니다. 행 수에 따른 결과 세트 규모 — 탐색적 쿼리의 경우 항상 LIMIT
금액
무료
모든 탐색 쿼리에 LIMIT 100을 추가하고 결과가 무엇인지 알 때만 제거하세요.

보안

권한, 시크릿, 파급범위

자격 증명 저장: 자격 증명이 없습니다. DB 파일은 --db-path를 통해 시작하는 경로입니다.
데이터 외부 송신: 서버에는 없습니다. 쿼리 결과는 LLM 제공업체에 컨텍스트로 제공됩니다.
절대 부여 금지: never point at a file holding sensitive data unless you intend the model to see it

문제 해결

자주 발생하는 오류와 해결

database is locked

다른 프로세스(종종 DB를 소유한 앱)가 잠금을 보유합니다. 해당 프로세스를 닫거나 .db 파일을 복사하고 복사본을 쿼리합니다.

확인: lsof <db file>
no such table: X

잘못된 DB 파일 또는 스키마가 생각한 것과 다릅니다. 실제로 거기에 무엇이 있는지 보려면 list_tables를 실행하세요. MCP 클라이언트 구성에서 실행 인수 --db-path를 확인하세요.

datatype mismatch / unexpected NULL

SQLite는 동적으로 유형이 지정됩니다. INTEGER로 선언된 열은 TEXT를 보유할 수 있습니다. CAST(col AS INTEGER)를 방어적으로 사용하거나 로드 시 수정하세요.

Disk image is malformed

종종 쓰기 도중 프로세스가 종료되어 DB가 손상되었습니다. sqlite3 file.db .recover > out.sql을 시도하고 덤프에서 다시 빌드하세요.

대안

SQLite 다른 것과 비교

대안언제 쓰나단점/장점
Postgres MCP다중 사용자 동시 액세스, 네트워크로 연결된 DB 또는 이미 Postgres를 사용 중임서버가 필요합니다. Postgres MCP는 읽기 전용으로 설계되었습니다.
DuckDB (via shell)동일한 단일 파일 모델이지만 훨씬 더 빠른 스캔이 가능한 OLAP 형태의 분석용아직 자사 MCP가 없습니다. 원주형이므로 성능 특성이 다릅니다.
dbHubSQLite + Postgres + MySQL + 기타에는 하나의 MCP가 필요합니다.최신; 덜 전투 테스트를 거쳤습니다

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기