mcpField
D
DataClawe — Database as a Utility

DataClawe — Database as a Utility

リモート
github.com/DataClaweデータベース030 週間前に更新
リポジトリ

DataClawe — Database as a Utility について

DataClaweは、データベース操作をJSONで記述するDCL仕様とMCP連携を提供し、MySQLやPostgreSQLを扱うエージェントやフロントエンドエンジニアを対象としています。DCLをネイティブSQLに変換し、両データベースで共通の形式を使えます。

主な機能

  1. 01データベース操作をJSONで記述
  2. 02検索、挿入、更新、論理削除
  3. 03スキーマ、テーブル、統計情報の確認
  4. 04レコード変更履歴の追跡
  5. 05MySQLとPostgreSQLに対応

活用シーン

  1. 01エージェントによる構造化データの読み書き
  2. 02共通コマンド形式でのフロントエンドからのDBアクセス
  3. 03テーブルスキーマとレコード統計の確認
  4. 04レコードの変更履歴の確認

MCP 対応

READMEでは、AIエージェントがDCLを呼び出すMCP連携(JSON-RPC 2.0 / SSE)が説明されています。DCLコマンドはMCPとREST APIで共通です。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.dataclawe.com/sse
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
SSEhttps://mcp.dataclawe.com/sse認証が必要

ツール

詳細

DCL — DataClawe コマンド言語

AI エージェント、フロントエンドエンジニア、そして SQL は複雑すぎると感じるすべての人のための、JSON ベースのデータベースコマンド標準です。

「MySQL と MSX-BASIC を理解していれば、DCL もすでに理解しています。」


DCL とは?

DCL(DataClawe Command Language)は、シンプルな JSON を使ってデータベースと通信するためのオープン標準です。

以下の用途向けに設計されています。

  • AI エージェント(Claude、GPT、Cursor など)が構造化データを安全に読み書きする
  • フロントエンドエンジニアが SQL を書かずにデータベースへアクセスする
  • MCP(Model Context Protocol) ツールとの連携
  • MySQL または PostgreSQL に接続するあらゆるアプリケーション(レガシーまたは新規)

DCL は内部でネイティブ SQL に変換されます。既存のデータベースは変更されません。既存のアプリケーションも変更されません。


設計方針

DCL は次の 3 つのルールに従います。

1. 読めれば、理解できます。 暗号のような演算子はありません。フレームワーク固有の構文はありません。: によるチェーン記法もありません。

2. MySQL の語句。JSON の構造。 SELECT、INSERT、UPDATE、DELETE などのアクションは、期待どおりのものです。WHERE 条件は、MySQL エンジニアが普段書いている形式で記述します。

3. MSX-BASIC レベルのシンプルさ。 age >= 20 のような条件に説明が必要なら、その設計は失敗です。

4. デフォルトはシンプルに。必要なときは強力に。 標準機能で実際のニーズの大半をカバーします。残りは高度な機能で対応します。必要になるまでは、複雑さの代償を負うことはありません。


クイックスタート

データを取得する
{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "users",
  "columns": ["id", "name", "email"],
  "where": [
    "status = 'active'",
    "age >= 20"
  ],
  "order": "created_at DESC",
  "limit": 10,
  "offset": 0
}
レコードを挿入する
{
  "dcl": "1.0",
  "action": "INSERT",
  "table": "users",
  "data": {
    "name": "kimura",
    "email": "[email protected]",
    "status": "active"
  }
}
レコードを更新する
{
  "dcl": "1.0",
  "action": "UPDATE",
  "table": "users",
  "data": {
    "status": "inactive"
  },
  "where": [
    "id = 123"
  ]
}
レコードを削除する(論理削除)
{
  "dcl": "1.0",
  "action": "DELETE",
  "table": "users",
  "where": [
    "id = 123"
  ]
}

アクション

アクション説明読み取り専用
SELECT1 件以上のレコードを取得します✅
COUNT条件に一致するレコード数を数えます✅
EXISTSレコードが存在するか確認します✅
SCHEMAテーブルの列定義を取得します✅
TABLES利用可能なすべてのテーブルを一覧表示します✅
STATSレコード数、最終更新日時、ストレージサイズを取得します✅
TIMELINEレコードの変更履歴を時系列で取得します✅
INSERT新しいレコードを作成します❌
UPDATE既存のレコードを更新します❌
DELETE論理削除(ステータスフラグ)を行います❌
TABLE_CREATE新しいテーブルを作成します(空の宣言)❌
TABLE_COPYテーブルをコピーします❌
TABLE_RENAMEテーブル名を変更します❌
TABLE_DROPテーブルを論理削除します❌

WHERE 条件

WHERE は条件文字列の配列です。複数の条件は、デフォルトで AND になります。

基本的な比較
"where": [
  "status = 'active'",
  "age >= 20",
  "age <= 60",
  "status != 'deleted'"
]
OR 条件
"where": {
  "OR": [
    "status = 'active'",
    "status = 'pending'"
  ]
}
AND と OR の組み合わせ
"where": {
  "AND": [
    "age >= 20",
    {
      "OR": [
        "status = 'active'",
        "status = 'pending'"
      ]
    }
  ]
}
LIKE
"where": [
  "name LIKE 'kimura%'"
]
IN
"where": [
  "status IN ('active', 'pending')"
]
BETWEEN
"where": [
  "age BETWEEN 20 AND 60"
]
NULL チェック
"where": [
  "deleted_at IS NULL"
]
"where": [
  "deleted_at IS NOT NULL"
]

集計

{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "orders",
  "columns": [
    "SUM(amount) AS total",
    "AVG(amount) AS average",
    "COUNT(*) AS count"
  ],
  "where": [
    "status = 'paid'"
  ],
  "group": "customer_id"
}

COUNT

{
  "dcl": "1.0",
  "action": "COUNT",
  "table": "users",
  "where": [
    "status = 'active'"
  ]
}

EXISTS

{
  "dcl": "1.0",
  "action": "EXISTS",
  "table": "users",
  "where": [
    "email = '[email protected]'"
  ]
}

SCHEMA

{
  "dcl": "1.0",
  "action": "SCHEMA",
  "table": "users"
}

TABLES

{
  "dcl": "1.0",
  "action": "TABLES"
}

TABLE_CREATE — テーブルを作成する

新しい空のテーブルを宣言します。内部では、status=8 のスキーマ宣言行を 1 つ作成します。

{
  "dcl": "1.0",
  "action": "TABLE_CREATE",
  "table": "users"
}

オプションのスキーマ定義を指定する場合:

{
  "dcl": "1.0",
  "action": "TABLE_CREATE",
  "table": "users",
  "schema": {
    "name":  "text",
    "age":   "integer",
    "email": "text"
  }
}

スキーマを指定しない場合: schema: null として作成されます。最初の INSERT 時に、列の型は text として自動登録されます。


status=8 スキーマ宣言行

DataClawe は、テーブルごとに status=8 の宣言行を 1 つ管理します。

ステータス値目的
status=1通常のレコード(有効)
status=8テーブル宣言とスキーマキャッシュ
status=9論理削除済み

status=8 行の内容例:

{
  "schema": {
    "name":  "text",
    "age":   "text",
    "email": "text"
  }
}

スキーマの自動進化:

存在しないテーブルに対して INSERT を行うと、status=8 行が自動作成されます。 INSERT のたびに、新しい列が status=8 スキーマに自動追加されます(型のデフォルトは text です)。

First INSERT: {"name": "kimura", "age": 25}
  → Auto-create status=8: {"name":"text", "age":"text"}
  → INSERT the record

Second INSERT: {"name": "suzuki", "phone": "090-xxxx"}
  → "phone" is new → auto-append to status=8 schema
  → schema: {"name":"text", "age":"text", "phone":"text"}

レガシーの MySQL/PostgreSQL に接続する場合、実際の列型(VARCHAR(255)、INT など)が status=8 行に記録されます。


STATS — テーブル統計情報

レコード数、最終更新のタイムスタンプ、ストレージサイズを返します。操作前にテーブルの状態を評価する AI エージェントに役立ちます。

{
  "dcl": "1.0",
  "action": "STATS",
  "table": "users"
}

応答例:

{
  "dcl": "1.0",
  "status": "OK",
  "data": {
    "table": "users",
    "record_count": 1024,
    "last_updated": "2026-03-28T10:00:00Z",
    "size_kb": 512
  }
}

TIMELINE — 変更履歴の記録

レコードの変更履歴(作成、更新、論理削除)を時系列順に返します。データの変遷を追跡する AI エージェントに便利です。

{
  "dcl": "1.0",
  "action": "TIMELINE",
  "table": "users",
  "where": [
    "id = 123"
  ]
}

TABLE_COPY — テーブルのコピー

テーブルを新しい名前でコピーします。バックアップ、移行、テストに使用します。

{
  "dcl": "1.0",
  "action": "TABLE_COPY",
  "table": "users",
  "target_table": "users_backup_20260328"
}

TABLE_RENAME — テーブル名の変更

テーブル名を変更します。

{
  "dcl": "1.0",
  "action": "TABLE_RENAME",
  "table": "users_old",
  "new_name": "users_archived"
}

TABLE_DROP — テーブルの削除(論理削除)

テーブルを論理削除します。データはすぐには物理的に削除されません。

{
  "dcl": "1.0",
  "action": "TABLE_DROP",
  "table": "users_temp"
}

注: TABLE_DROP は論理削除であり、SQL の DROP TABLE と同じではありません。データはすぐには破棄されません。


レスポンス形式

成功
{
  "dcl": "1.0",
  "status": "OK",
  "count": 42,
  "data": [
    { "id": 1, "name": "kimura", "email": "[email protected]" }
  ],
  "meta": {
    "table": "users",
    "elapsed_ms": 12
  }
}
エラー
{
  "dcl": "1.0",
  "status": "ERROR",
  "code": "TABLE_NOT_FOUND",
  "message": "Table 'users' does not exist"
}
エラーコード
コード説明
TABLE_NOT_FOUND指定されたテーブルが存在しません
COLUMN_NOT_FOUND指定されたカラムが存在しません
INVALID_ACTION不明なアクションが指定されました
INVALID_WHEREWHERE 条件を解析できませんでした
PERMISSION_DENIEDテナントにアクセス権がありません
CONNECTION_ERRORデータベースへの接続に失敗しました

統合

DCL は 2 つのプロトコルで動作します。DCL コマンド自体はどちらの場合も同一です。

プロトコル使用者ガイド
REST API (HTTPS POST)フロントエンド、バックエンド、任意の HTTP クライアントREADME.api.md を参照
MCP (JSON-RPC 2.0 / SSE)AI エージェント(Claude、GPT、Cursor)README.mcp.md を参照
DCL ペイロード(どちらのプロトコルでも同一)
{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "orders",
  "where": [
    "status = 'pending'",
    "created_at >= '2026-01-01'"
  ],
  "order": "created_at DESC",
  "limit": 100
}

この DCL JSON は、REST API と MCP のどちらを介して呼び出す場合も同一です。外側のプロトコル層のみが異なります。


対応データベース

データベース状況
MySQL 5.x / 8.x✅ 対応
PostgreSQL 9–18✅ 対応
その他📋 対応予定

DCL は MySQL と PostgreSQL の違いを正規化します。DCL コマンドを 1 つ記述するだけで、残りは DataClawe が処理します。


複雑さのレイヤー

DCL は 2 つのレイヤーで設計されています。必要なレイヤーを選択できます。


DCL Standard — 本仕様

AI エージェント、フロントエンドエンジニア、および基本的なデータ操作を行うすべての方を対象としています。

  • JOIN はありません。サブクエリもありません。
  • MySQL の基本を知っていれば誰でも読めます。
  • 実際の CRUD ニーズの大部分をカバーします。

Standard でニーズを満たせる場合、それ以上に進む必要はありません。


DCL Advanced — v1.1 で提供予定

より高い表現力を必要とするバックエンドエンジニア向けです。

同じ JSON 構造。同じ DataClawe エンジン。必要なときに、より多くの機能を利用できます。

JOIN

{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "users",
  "columns": ["users.id", "users.name", "orders.amount"],
  "join": [
    {
      "table": "orders",
      "on": "users.id = orders.user_id",
      "type": "LEFT"
    }
  ],
  "where": [
    "users.status = 'active'"
  ],
  "order": "orders.amount DESC",
  "limit": 20
}

サブクエリ

{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "users",
  "where": [
    "id IN (SELECT user_id FROM orders WHERE status = 'paid')"
  ]
}

複数の JOIN

{
  "dcl": "1.0",
  "action": "SELECT",
  "table": "orders",
  "columns": [
    "orders.id",
    "users.name AS customer",
    "products.name AS product",
    "orders.amount"
  ],
  "join": [
    {
      "table": "users",
      "on": "orders.user_id = users.id",
      "type": "INNER"
    },
    {
      "table": "products",
      "on": "orders.product_id = products.id",
      "type": "LEFT"
    }
  ],
  "where": [
    "orders.status = 'paid'",
    "orders.created_at >= '2026-01-01'"
  ],
  "order": "orders.created_at DESC"
}

Advanced でサポートされる JOIN の種類

種類説明
INNER両方のテーブルで一致するレコード
LEFT左側のすべてのレコードと、一致する右側のレコード
RIGHT右側のすべてのレコードと、一致する左側のレコード

なぜ 2 つのレイヤーなのか?
SQL solved everything in one spec.
That is why SQL is still hard after 30 years.

DCL Standard is for everyone.
DCL Advanced is for when you need more.
You always start simple. You go deeper only when you must.

どちらも同じエンジンで処理されます。JSON 構造も同じです。Standard から Advanced に移行するときに新しい構文を覚える必要はなく、新しいキーを使うだけです。


意図的にサポートしていない機能

DCL を安全かつ予測可能に保つため、以下は Standard と Advanced のどちらでも対象外です。

  • ストアドプロシージャ
  • スキーマの作成または ALTER TABLE
  • 生 SQL のパススルー
  • 物理スキーマの破棄(即時の DROP TABLE に相当する操作)

注: DCL の TABLE_DROP は論理削除であり、SQL の DROP TABLE とは異なります。データはすぐには破棄されません。

DCL はデータ操作言語であり、スキーマ管理言語ではありません。


バージョニング

"dcl": "1.0" フィールドは、すべてのリクエストとレスポンスで必須です。

将来のバージョンも後方互換性を維持します。DCL 1.0 のリクエストは、DCL 2.0 のサーバーでも常に動作します。


貢献

DCL はオープンな仕様です。フィードバック、提案、プルリクエストを歓迎します。

  • 新しいアクションや演算子を提案するには、issue を作成してください
  • ドキュメントや例を改善するには、プルリクエストを作成してください
  • すべての貢献は、設計理念である読みやすさ、MySQL に馴染みのある表現、BASIC レベルのシンプルさに従う必要があります

ロードマップ

v1.0 — DCL 標準

  • 仕様の最終決定
  • 検証用 JSON Schema(dcl.schema.json)
  • Go でのリファレンス実装(DataClawe Engine)
  • MCP サーバーのリファレンス実装
  • MySQL ワイヤプロトコルのサポート
  • マルチテナント分離仕様

v1.1 — DCL Advanced

  • JOIN 仕様(INNER / LEFT / RIGHT)
  • サブクエリのサポート
  • ネストされた集計

SDK

  • JavaScript / TypeScript
  • PHP
  • Python
  • Go

料金プラン

DataClawe では、個人開発者からエンタープライズまで対応する段階別の料金モデルを採用しています。

初回登録料:$20(全プラン共通、一回限り)

プラン月額レコード数セッション数SLA
無料$02,000100/日なし
個人$20最大 20,000最大 20,000/月なし
ビジネス$20+無制限無制限なし
エンタープライズお問い合わせください無制限無制限あり

使用料金(ビジネスプラン — 超過分)

項目単価
レコードストレージ$0.001 / レコード / 月
セッション$0.001 / セッション

レコードサイズの上限:1 レコードあたり 100KB。 IoT センサーデータ、CRM の連絡先、医療テキストレコード、WordPress の投稿、金融取引に対応します。 画像や動画ファイルは対象外です。CDN/オブジェクトストレージに保存し、URL を DataClawe に保持してください。

エンタープライズ料金については、dataclawe.com/enterprise までお問い合わせください。


背景

DCL は DataClawe プロジェクトの一環として開発されています。

DataClawe は、レガシーな MySQL および PostgreSQL システムを、元のシステムを書き換えることなく、AI エージェント、LLM パイプライン、クラウドネイティブサービスに接続するデータベース変換エンジンです。

DCL は、データベースエンジニアだけでなく、誰もがこの接続を実現できるようにするコマンド言語です。

レガシーシステムを破壊するべきではありません。変換するべきです。


ライセンス

DCL 仕様は、Creative Commons Attribution 4.0 International (CC BY 4.0) のもとで公開されています。

この仕様は自由に実装、拡張し、活用できます。DataClawe への帰属表示をしていただけると幸いです。


DCL v1.1 — 2026 — DataClawe Project

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。