Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Dec 30, 2025 - 日記

Turso Database: MCPサーバー搭載SQLiteがAIエージェント時代のDB設計を変える

Turso Database MCPサーバー

Turso Database は、SQLiteをRustで完全に書き直したインプロセスSQLデータベースです。特筆すべきは、MCPサーバーモードを搭載している点で、AIエージェントが自然言語でデータベースを操作できるようになります。

本記事では、Turso DatabaseのMCP機能の仕組みと、なぜAIエージェント時代にこのような設計が重要なのかを解説します。

Turso Databaseとは

Turso Database は、Turso社 がSQLiteをRustで完全に再実装したプロジェクトです(16,000+ GitHub Stars)。単なるフォークではなく、ゼロから書き直されています。

主な特徴:

  • SQLite互換: SQL方言、ファイルフォーマット、C APIがSQLiteと互換
  • 非同期I/O: Linux io_uringによる高速な非同期処理
  • ベクトル検索: 組み込みベクトルサポート
  • CDC(Change Data Capture): リアルタイムの変更追跡
  • 多言語SDK: Go、JavaScript、Python、Rust、Java、WebAssembly対応
  • MCPサーバーモード: AIエージェントとの直接連携(これが本記事の主題)

Turso社は以前、SQLiteフォークのlibSQL を開発していましたが、Turso Databaseがその後継として位置づけられています。

なぜSQLiteを書き直すのか

Turso社がSQLiteを再実装した理由は、いくつかあります:

1. メモリ安全性と並行性

Rustで書き直すことで、メモリ安全性が保証され、並行処理がより安全に実装できます。SQLiteはC言語で書かれており、複雑なメモリ管理が必要です。

2. 非同期I/O対応

オリジナルSQLiteは同期I/Oベースです。Turso Databaseは非同期I/Oを前提とした設計で、WebブラウザやWebAssembly環境でもネイティブに動作します。

3. Deterministic Simulation Testing (DST)

Turso DatabaseはDSTを組み込んでおり、Antithesis と連携してSQLite並みの信頼性を目指しています。これは後発プロジェクトならではの強みです。

4. AIエージェント時代への対応

そして今回の主題であるMCPサーバーモードです。AIエージェントがデータベースを直接操作できる仕組みを、データベースエンジン自体に組み込んでいます。

MCPサーバーモードとは

MCP (Model Context Protocol) は、Anthropicが提唱するAIエージェントとツールを接続するための標準プロトコルです。

Turso DatabaseのMCPサーバーモードでは、以下のような自然言語操作が可能になります:

1
2
# Turso CLIをMCPサーバーモードで起動
tursodb your_database.db --mcp

この状態で、AIアシスタント(Claude、Cursor、VS Code Copilotなど)に以下のように指示できます:

  • 「データベース内の全テーブルを表示して」
  • 「usersテーブルのスキーマを教えて」
  • 「投稿数が100以上の記事を検索して」
  • 「新しいユーザー ‘Alice’ をメール ‘[email protected] ’ で登録して」

AIエージェントがこれらのリクエストを解釈し、適切なSQLを生成・実行します。

MCPサーバーが提供する9つのツール

Turso DatabaseのMCPサーバーは、以下の9つのツールをAIエージェントに提供します:

データベース管理

  1. open_database: 新しいデータベースを開く
  2. current_database: 現在のデータベース情報を取得

スキーマ操作

  1. list_tables: 全テーブル一覧
  2. describe_table: 特定テーブルの構造を表示
  3. schema_change: CREATE TABLE、ALTER TABLE、DROP TABLEの実行

データ操作

  1. execute_query: SELECT文の実行(読み取り専用)
  2. insert_data: データ挿入
  3. update_data: データ更新
  4. delete_data: データ削除

この分離により、AIエージェントの操作権限を細かく制御できます。例えば、読み取り専用のエージェントにはexecute_queryのみを許可することも可能です。

MCP対応クライアントの設定例

Claude Code

Claude Code では、CLIで簡単にMCPサーバーを追加できます:

1
2
3
4
# Turso MCP サーバーを追加
claude mcp add my-database -- tursodb ./path/to/database.db --mcp

# Claude Codeを再起動すると接続完了

設定の詳細:

1
2
3
4
claude mcp add my-database -- tursodb ./path/to/database.db --mcp
#              ↑            ↑       ↑                           ↑
#              |            |       |                           |
#              名前         区切り   DBパス                      MCPフラグ

Cursor

Cursor の場合、設定ファイルに以下を追加します:

1
2
3
4
5
6
7
8
{
  "mcpServers": {
    "turso": {
      "command": "/path/to/.turso/tursodb",
      "args": ["./path/to/database.db", "--mcp"]
    }
  }
}

VS Code / Copilot

GitHub Copilot のMCP設定:

1
2
3
4
5
6
7
# VS Code CLIでMCPサーバーを追加
code --add-mcp '{
  "name":"turso",
  "command":"tursodb",
  "args":["./database.db","--mcp"],
  "env":{}
}'

MCPサーバーの直接利用(JSON-RPC)

MCPサーバーは標準入出力(stdin/stdout)でJSON-RPCメッセージを受け取ります。これにより、任意のプログラムからTurso Databaseを操作できます。

インメモリデータベースの例

1
2
3
4
5
6
7
cat << 'EOF' | tursodb --mcp
{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "client", "version": "1.0"}}}
{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "schema_change", "arguments": {"query": "CREATE TABLE users (id INTEGER, name TEXT, email TEXT)"}}}
{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "list_tables", "arguments": {}}}
{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "insert_data", "arguments": {"query": "INSERT INTO users VALUES (1, 'Alice', '[email protected]')"}}}
{"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "execute_query", "arguments": {"query": "SELECT * FROM users"}}}
EOF

このように、MCPサーバーは単なるCLIツールではなく、プログラマブルなデータベース操作インターフェースとして機能します。

AIエージェント時代のDB設計思想

Turso DatabaseのMCP対応から見えてくる、新しいデータベース設計の方向性を考察します。

1. ヒューマンインターフェースからAIインターフェースへ

従来のデータベースツールは、人間が使うことを前提としていました:

  • pgAdmin: GUI操作
  • mysql CLI: 対話的なコマンドライン
  • Prisma Studio: ビジュアルエディタ

しかし、AIエージェント時代では:

  • 自然言語で指示: 「usersテーブルの最新10件を表示」
  • コンテキスト理解: 「同じ条件で削除して」(前の条件を記憶)
  • エラー訂正: 「さっきのSQLを修正して実行」

MCPサーバーは、このような対話をプロトコルレベルでサポートします。

2. 細粒度の権限分離

従来のSQLユーザー権限(SELECT、INSERT、UPDATE、DELETE)に加えて、Turso MCPはツール単位の権限を提供します:

ツール用途推奨ユースケース
execute_query読み取り専用BI・分析エージェント
insert_data追加のみログ収集エージェント
update_data更新のみデータクリーニングエージェント
schema_changeスキーマ変更マイグレーション管理

これにより、エージェントの役割に応じた最小権限を付与できます。

3. セッションレスな操作

MCPサーバーは、各リクエストが独立しています。従来のDB接続では:

1
2
3
4
5
6
7
# 従来の方法(セッションを保持)
conn = psycopg2.connect("dbname=test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
cursor.close()
conn.close()

MCPサーバーでは:

1
2
{"jsonrpc": "2.0", "id": 1, "method": "tools/call", 
 "params": {"name": "execute_query", "arguments": {"query": "SELECT * FROM users"}}}

各操作が自己完結しており、AIエージェントがステートレスに扱いやすくなっています。

4. プロトコルの標準化

MCPは複数のツールに対応した標準プロトコルです。Turso DatabaseがMCPに対応することで:

  • Claude Code
  • Cursor
  • VS Code Copilot
  • Gemini CLI

など、複数のAIツールから同じインターフェースで操作できます。これはRESTful APIがHTTPで統一されたのと同様の標準化です。

Turso vs SQLiteの技術比較

Turso Databaseは単なるMCP対応だけではありません。技術的にも多くの改善があります。

項目SQLiteTurso Database
実装言語CRust
非同期I/Oなしio_uring対応
ベクトル検索拡張必要組み込み
暗号化拡張必要ネイティブ対応
CDCトリガー実装ネイティブ対応
並行書き込みWALモードBEGIN CONCURRENT
MCP対応なし組み込み
ライセンスPublic DomainMIT

特にBEGIN CONCURRENTは、複数のトランザクションが並行して書き込みできる実験的機能で、MVCC(Multi-Version Concurrency Control)を採用しています。

インストールと基本的な使い方

インストール

1
2
3
# macOS / Linux
curl --proto '=https' --tlsv1.2 -LsSf \
  https://github.com/tursodatabase/turso/releases/latest/download/turso_cli-installer.sh | sh

基本的な使い方

1
2
3
4
5
# データベース作成とインタラクティブシェル起動
tursodb

# ファイルベースのデータベース
tursodb my_database.db
1
2
3
4
5
6
7
-- SQLiteと同じ構文で操作可能
turso> CREATE TABLE users (id INT, username TEXT);
turso> INSERT INTO users VALUES (1, 'alice');
turso> INSERT INTO users VALUES (2, 'bob');
turso> SELECT * FROM users;
1|alice
2|bob

Go SDKの例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import (
    "database/sql"
    _ "github.com/tursodatabase/turso-go"
)

func main() {
    conn, _ := sql.Open("turso", "sqlite.db")
    defer conn.Close()

    stmt, _ := conn.Prepare("select * from users")
    defer stmt.Close()

    rows, _ := stmt.Query()
    for rows.Next() {
        var id int
        var username string
        _ = rows.Scan(&id, &username)
        fmt.Printf("User: ID: %d, Username: %s\n", id, username)
    }
}

現状の制限事項とロードマップ

Turso DatabaseはBETA版であり、以下の制限があります:

現在の制限

  • プロダクション利用は非推奨: まだ開発段階
  • 英語・中国語のみ: ドキュメントが多言語化されていない
  • ベクトルインデックス未実装: 近似ベクトル検索は今後の予定

今後のロードマップ

  • ベクトルインデックス(ANN検索)
  • より高度なスキーマ管理機能
  • パフォーマンスの最適化

Turso社は「データ破損バグ報告で最大$1,000の報奨金」を提供しており、信頼性向上に注力しています。

libSQLとの関係

Turso社は以前、SQLiteフォークのlibSQL を開発していました。libSQLは本番環境で既に利用可能です。

Turso Databaseとの違い:

項目libSQLTurso Database
アプローチSQLiteフォークゼロからの再実装
本番利用可能非推奨(開発中)
言語C(SQLiteベース)Rust
MCPサーバーなしあり

Turso社の公式見解では、「Turso DatabaseがlibSQLの後継」とされており、長期的にはTurso Databaseに移行する方針です。

まとめ

Turso DatabaseのMCPサーバー機能は、AIエージェント時代のデータベース設計における重要な方向性を示しています:

  1. AIファーストのインターフェース: GUIではなく、AIエージェントとの対話を前提とした設計
  2. 細粒度の権限管理: ツール単位での操作制御
  3. プロトコルの標準化: MCPにより複数のAIツールから統一的にアクセス可能
  4. ステートレスな操作: JSON-RPCによる自己完結型リクエスト

現時点ではBETA版ですが、Rustによるメモリ安全性、Deterministic Simulation Testingによる信頼性保証、そしてMCPサーバー機能により、将来的にはSQLiteの代替となる可能性があります。

AIエージェントと協調するデータベース設計に興味のある方は、ぜひ試してみてください。

参考リンク