/ ディレクトリ / プレイグラウンド / 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

使うタイミング: 誰かが 200k 行の CSV と「どのセグメントの転換率が最も高いか」という質問を送ってきた場合 — スプレッドシートには大きすぎて、本格的なデータベースには小さすぎる。

前提条件
  • ディスク上のソースファイル — 作業フォルダの下に .csv または .json として保存する
  • 空の SQLite ファイルパス — /tmp/analysis.db のような場所を選択します。MCP が作成します
フロー
  1. テーブルを作成してロードする
    /tmp/analysis.db に /data/signups.csv のカラムに合わせた signups テーブルを作成します。すべての行をロードしてください。行数を教えてください。✓ コピーしました
    → テーブルが作成され、行数がファイルと一致する
  2. スキーマを探索する
    どのカラムが存在しますか?各カラムについて、値の分布はどうですか(カテゴリカル変数は上位 5 つの異なる値、数値は最小/最大/平均)?✓ コピーしました
    → カラムごとのプロファイル
  3. 実際の質問に答える
    signup_source でグループ化します。各グループについて、合計サインアップ数、転換率(completed_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 を書かずにデータベースの内容を確認したい場合。

フロー
  1. スキーマを調査する
    /Users/me/Library/Application Support/MyApp/data.db 内のすべてのテーブルをリストアップしてください。各テーブルについて、スキーマと行数を表示してください。✓ コピーしました
    → ライブアプリ DB のインベントリ
  2. 行を調査する
    email = '[email protected]' であるユーザーレコードを検索してください。その行と他のテーブル(orders、sessions)の関連行を表示してください。✓ コピーしました
    → 1 つのユーザーのデータの全体像
  3. 不正なデータを修正する
    そのユーザーの 2 日前からの『pending』状態の注文が詰まっています。これを『cancelled』に更新してください。実行前に SQL を表示してください。✓ コピーしました
    → 変更前に SQL プレビューを表示し、行を更新する

結果: 使い捨て SQL スクリプトを書かずにアプリをデバッグできる。

注意点
  • アプリが WAL モードで DB をロックしたまま開いているかもしれない — 'database is locked' エラーが出たら、アプリを停止するか、?mode=ro&immutable=1 で WAL をマージした読み取り専用スナップショットをクエリしてください
組み合わせ: filesystem

本番データのサンプルから決定論的なテストフィクスチャを構築する

👤 統合テストを書いているエンジニア ⏱ ~25 min intermediate

使うタイミング: 本番に似ているが小さく安全な再現可能なテストデータが必要な場合。

フロー
  1. 匿名化されたサンプル行を抽出する
    /prod-export/orders.db から各ステータスをカバーする orders から 100 行をサンプリングしてください。名前とメールアドレスを匿名化してください。✓ コピーしました
    → 匿名化された PII を含むサンプル
  2. フィクスチャファイルとして保存する
    サンプリングされた行を /test/fixtures/orders.db に新しい SQLite ファイルとして書き込んでください。スキーマを含めてください。✓ コピーしました
    → 新しいフィクスチャファイルが作成される
  3. テストローダーに対して検証する
    テストスイート(npm test)を実行してください。新しいフィクスチャを拾いますか?そうでない場合、最初に失敗するテストは何ですか?✓ コピーしました
    → テストが実行され、失敗が特定される

結果: 実際のデータ形状から乖離しない現実的なフィクスチャが得られる。

注意点
  • 参照整合性を破る匿名化 — テーブル全体で join キーを一貫性を持って匿名化し(同じハッシュ)、行ごとにランダム化しないでください
組み合わせ: filesystem · github

SQLite バックアップのログ/イベントファイルを分析する

👤 SQLite にログを記録する CLI ツールまたはアプリをデバッグしているエンジニア ⏱ ~10 min beginner

使うタイミング: 多くの最新ツール(Homebrew、一部のブラウザ、アプリキャッシュ)が SQLite に状態を保存しています。これらをクエリしたい場合。

フロー
  1. 正しいファイルであることを確認する
    ~/Library/Application Support/SomeApp/cache.db を開いてください。テーブルと最近の行のサンプルをリストアップしてください。✓ コピーしました
    → 認識可能なスキーマが正しいファイルを確認する
  2. 答えを見つける
    キャッシュはソースドメインごとにいくつのエントリを保持していますか?トップ 20 を表示してください。✓ コピーしました
    → 集約結果
  3. 必要に応じてクリーンアップする
    過去 90 日間アクセスされていないドメインからエントリを削除してください。最初にカウントを表示し、削除する前に確認してください。✓ コピーしました
    → プレビュー、確認、その後削除

結果: 組み込みの『stats』コマンドなしでアプリの動作に関する回答が得られる。

注意点
  • アプリの実行中にアプリの DB を変更するとそれが破損する可能性がある — 常にアプリを最初に閉じるか、.db ファイルのコピーで作業してください
組み合わせ: filesystem

組み合わせ

他のMCPと組み合わせて10倍の力を

sqlite + filesystem

ディスクから CSV を読み取って SQLite に読み込んで分析する

filesystem MCP で /data/orders.csv を読み取り、型を推論して、sqlite MCP 経由で /tmp/analysis.db に table orders として読み込みます。✓ コピーしました
sqlite + antv-chart

SQLite DB をクエリして結果をグラフで表示する

/tmp/analysis.db から 2026 年の月次サインアップを取得してください。antv-chart でバーグラフとしてレンダリングしてください。✓ コピーしました
sqlite + github

データを分析して、検出結果を GitHub Issue に書き込む

/tmp/users.db でチャーン分析を実行してください。acme/analytics で GitHub Issue を作成し、top 3 の検出結果を SQL の付録とともに要約してください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_tables none すべてのセッションの最初のステップ free
describe_table table_name: str 単一のテーブルのスキーマを検査する free
read_query query: str(SELECT のみ) 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 プロバイダーに送信されます。
絶対に付与しない: モデルに見させるつもりがない限り、機密データを含むファイルを指さないでください

トラブルシューティング

よくあるエラーと対処法

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)同じ 1 ファイルモデルですが、OLAP 型分析でスキャンが高速ですまだ公式 MCP がありません。列指向なので異なるパフォーマンス特性があります
dbHubSQLite + Postgres + MySQL などを 1 つの MCP で処理したい場合新しく、テストが不十分です

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る