mcpField
D
datoon

datoon

ローカル
github.comAI・エージェント22 週間前に更新

datoon について

datoon は LLM パイプライン向けの構造化データから TOON への変換ツールで、推定トークン削減が見込める場合だけ変換し、それ以外は元の形式を保ちます。CLI、Python API、MCP ツールを備え、判断理由も返します。

主な機能

  1. 01複数の構造化形式を自動判別
  2. 02構造と削減しきい値による変換判定
  3. 03適したデータの TOON 変換
  4. 04判断、理由、トークン推定の報告
  5. 05CLI と Python API の提供
  6. 06Node.js 不要の構造分析

活用シーン

  1. 01LLM プロンプト内の規則的な表形式データの圧縮
  2. 02変換で肥大化する可能性のあるネストデータの除外
  3. 03パイプラインでの変換判断と推定値の記録

MCP 対応

datoon の MCP サーバーは convert_json、convert_text、analyze_json ツールを公開し、JSON、CSV、YAML、XML、JSONL テキストの変換や JSON 構造の分析を行います。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"andrii-su-datoon": {
"command": "uvx",
"args": [
"datoon"
]
}
}
}
起動コマンドuvx datoon

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypidatoon1.9.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

README の画像

datoon

スマートな構造化データ→TOONゲートウェイ — トークンを実際に節約できる場合にのみ変換します

テスト Pre-commit リリース PyPI Python ライセンス:MIT

変換前/変換後 • インストール • 利用できる機能 • 仕組み • ベンチマーク • インストールガイド全文


構造化データをそのままLLMのプロンプトに入れると、冗長になりがちです。TOONを使えばトークンを節約できますが、何も考えずに変換すると、かえってペイロードが悪化することもあります。datoonは判断レイヤーを追加し、構造と節約効果が見込める場合は変換し、そうでない場合は変換を見送ります。また、その理由を必ず説明します。

JSON、CSV、JSONL、YAML、XML、Parquet、Avro、ORC、Excel、Apple Numbersに対応しており、ファイル拡張子から形式を自動検出します。

変換前/変換後

プロンプト内のJSON(43トークン)
{"users":[
  {"id":1,"name":"Ada","role":"admin"},
  {"id":2,"name":"Lin","role":"analyst"},
  {"id":3,"name":"Grace","role":"viewer"}
]}
datoonが変換 → TOON(24トークン)
users[3]{id,name,role}:
  1,Ada,admin
  2,Lin,analyst
  3,Grace,viewer
{"decision":"convert","reason":"Estimated savings 44.19% (threshold 15.00%)."}
データパイプラインからのCSV(JSONでは111トークン)
id,name,role
1,Ada,admin
2,Lin,analyst
3,Grace,viewer
datoonが自動変換 → TOON(24トークン)
datoon data.csv --report-stdout

同じ結果です。コード内でのJSONシリアライズは不要です。

均一でないペイロード(26トークン)
{"config":{"debug":true},"tags":["a","b"]}
datoonは変換を見送り → JSONのまま維持
{"decision":"skip","reason":"No uniform object arrays found with at least 3 rows."}

Node.jsの呼び出しはありません。気付かないうちにデータが破損することもありません。

同じデータに、適切な形式。判断理由も必ず明示。

┌──────────────────────────────────────────────────┐
│  PAYLOAD SAVINGS (auto avg)    ████░░░░░░   28%  │
│  PAYLOAD SAVINGS (agent skill) ████████░░   62%  │
│  DECISION ACCURACY             ██████████  100%  │
│  HARMFUL CONVERSIONS BLOCKED   ██████████  100%  │
└──────────────────────────────────────────────────┘

重要

datoonが節約するのはペイロードのトークン、つまりプロンプト内の構造化データ部分のトークンです。節約量はペイロードの形状によって異なります。均一な表形式データはうまく変換できますが、深くネストされた構造や均一でない構造は変換を見送ります。すべての判断に理由が含まれるため、パイプラインで結果を記録、デバッグし、安心して利用できます。

インストール

# core (JSON, CSV, JSONL, XML — no extra deps)
uv add datoon
pip install datoon

# with YAML support
pip install "datoon[yaml]"

# with Excel support
pip install "datoon[excel]"

# with Parquet / ORC / Avro support
pip install "datoon[columnar]"

# with Apple Numbers support
pip install "datoon[numbers]"

# with tiktoken-based token counting
pip install "datoon[tokens]"

# with MCP server
pip install "datoon[mcp]"

# everything
pip install "datoon[all]"

Python 3.12以降が必要です。TOONへの変換には、npxがPATHに含まれたNode.jsが必要ですが、分析や形式の読み取りには不要です。

Claude Codeプラグイン、Codex、MCPの設定については、INSTALL.mdをご覧ください。

利用できる機能

内容
datoon CLI対応形式をターミナルやスクリプトからTOONへ自動判定付きで変換
Python APIあらゆるLLMパイプラインで使えるconvert_json_for_llm()とread_tabular()
MCP サーバーClaude Desktop、Cursor、Windsurf向けのconvert_json、convert_text、analyze_jsonツール
Claude Codeプラグインセッション内で起動する/datoon。1つのコマンドでGitHubからインストール
CodexプラグインCodex向けの構造化データモードを提供するマーケットプレイスプラグイン
サポートされている入力形式
形式拡張子追加で必要なもの
JSON.json—
JSONL.jsonl, .ndjson—
CSV.csv—
XML.xml—
YAML.yaml, .ymldatoon[yaml]
Excel.xlsx, .xlsdatoon[excel]
Parquet.parquetdatoon[columnar]
Avro.avrodatoon[columnar]
ORC.orcdatoon[columnar]
Apple Numbers.numbersdatoon[numbers]

仕組み

  1. 形式を検出 — --format フラグ、ファイル拡張子、または標準入力の場合はデフォルトの JSON から判定します
  2. 読み込みと正規化 — ソースを行の辞書のリストとして解析し、コンパクトな JSON にシリアライズします
  3. 構造を分析 — オブジェクトの配列は均一か、許容可能な深さか、最小行数を満たすかを確認します
  4. 早期に判定 — 対象外のデータは CLI 呼び出しの前にスキップされるため、Node.js のオーバーヘッドはありません
  5. 変換と推定 — TOON CLI を実行し、トークンの削減量を計算します
  6. 削減量を判定 — しきい値未満なら JSON を返し、しきい値以上ならレポートとともに TOON を返します

どの経路でも、decision、reason、トークン推定値を含む ConversionReport が返されます。パイプラインで予期しない動作が起こることはありません。


クイックスタート

JSON(標準入力):

echo '{"users":[{"id":1,"name":"Ada"},{"id":2,"name":"Lin"},{"id":3,"name":"Grace"}]}' | datoon --report-stdout

CSV(拡張子から自動検出):

datoon data.csv --report-stdout

JSONL:

datoon data.jsonl -o output.toon

YAML(datoon[yaml] が必要):

datoon data.yaml --report-stdout

Parquet(datoon[columnar] が必要):

datoon data.parquet --report ./report.json

形式を明示的に指定:

datoon --format csv < data.csv --report-stdout

変換を強制(判定をバイパス — 実験用):

datoon data.json --force --report-stdout

Python API

JSON 変換:

from datoon import convert_json_for_llm, ConversionConfig, DatoonError

config = ConversionConfig(min_savings_ratio=0.15, max_depth=6, min_uniform_rows=3)

try:
    outcome = convert_json_for_llm(raw_json, config)
except DatoonError as exc:
    raise

# outcome.payload_text  — TOON or original JSON
# outcome.report.decision  — "convert" | "skip"
# outcome.report.reason    — human-readable explanation
send_to_model(outcome.payload_text)

read_tabular で任意の形式を指定:

import json
from pathlib import Path
from datoon import read_tabular, convert_json_for_llm, ConversionConfig

# text formats: csv, jsonl, yaml, xml
rows = read_tabular("csv", text=csv_string)

# binary formats: excel, parquet, orc, avro, numbers
rows = read_tabular("parquet", path=Path("data.parquet"))

json_text = json.dumps(rows, separators=(",", ":"))
outcome = convert_json_for_llm(json_text, ConversionConfig())
send_to_model(outcome.payload_text)

構造のみを分析(Node.js は不要):

from datoon.analyzer import analyze_payload
from datoon.models import ConversionConfig

analysis = analyze_payload(parsed_data, ConversionConfig())
print(analysis.is_candidate, analysis.reason)

MCP サーバー

datoon には、3 つのツールを備えた MCP サーバーが含まれています。

ツール説明
convert_jsonポリシーによる判定を含む、JSON の完全な変換
convert_textポリシーによる判定を含む、CSV、YAML、XML、JSONL テキストの変換
analyze_json構造分析のみ — Node.js は不要

Claude Desktop / Cursor / Windsurf の設定:

{
  "mcpServers": {
    "datoon": {
      "command": "uvx",
      "args": ["--from", "datoon[mcp]", "datoon", "mcp"]
    }
  }
}

ローカルで実行:

datoon mcp     # or the standalone script: datoon-mcp

MCP Registry、Smithery、および Glama に掲載されています。MARKETPLACES.md を参照してください。


Claude Code プラグイン

GitHub から直接インストールします。

claude plugin marketplace add andrii-su/datoon
claude plugin install datoon@datoon

セッション中に呼び出します。

/datoon
convert this JSON to TOON if it saves tokens
use datoon mode for structured data

CLI リファレンス

フラグデフォルト説明
--formatauto入力形式:json、csv、jsonl、yaml、xml、excel、parquet、avro、orc、numbers
--forcefalse判定と最小削減量のしきい値をバイパスします
--min-savings0.15必要な最小相対トークン削減量
--max-depth6自動変換で許容する最大ネスト深度
--min-uniform-rows3均一なオブジェクト配列に必要な最小行数
--timeout30TOON CLI 呼び出しを中断するまでの秒数
--report <path>—JSON 変換レポートをファイルに書き込みます
--report-stdout—JSON 変換レポートを標準エラー出力に表示します
-o <path>stdout出力ファイルのパス
--version—バージョンを表示して終了します

形式はファイル拡張子から自動検出されます。上書きする場合や標準入力から読み込む場合は、--format を使用してください。


ベンチマーク

PYTHONPATH=src python benchmarks/run.py --dry-run
PYTHONPATH=src python benchmarks/run.py
PYTHONPATH=src python benchmarks/run.py --update-readme
自動モードが強制変換を上回る理由

自動モードでは、メリットが小さいデータやリスクの高いデータ(orders-nested、mixed-non-uniform)を避けながら、適したデータでは強制 TOON と同等の平均トークン数を実現します。判断ごとに、理由を含むレポートが表示されます。

シナリオJSON ベースライン強制 TOONdatoon 自動
平均トークン数775050
平均トークン削減率0.0%26.8%28.1%
判断の品質該当なしすべて変換3/5 を変換し、効果のないケースはスキップ
データセットJSONTOON(強制)元データからの削減率自動自動のトークン数自動の削減率
users-small544025.9%変換4025.9%
events-medium21916226.0%変換16226.0%
orders-nested106116-9.4%スキップ1060.0%
mixed-non-uniform3547-34.3%スキップ350.0%
metrics-wide14210327.5%変換10327.5%
平均111947.1%3/5 を変換8915.9%

強制変換では、5/5 のペイロードの変換に成功しました。

フォーマット変換ベンチマーク

一般的な構造化フォーマット(CSV、JSONL、XML、YAML)から変換した場合のトークン削減量です。 ベースラインは同じデータの JSON 表現です。これは、datoon を使わずに LLM が受け取る形式です。

データセットフォーマットJSON トークン数TOON(強制)自動自動のトークン数自動の削減率
users-csvcsv5329変換2945.3%
events-jsonljsonl194109変換10943.8%
catalog-xmlxml9650変換5047.9%
metrics-yamlyaml12961変換6152.7%
平均—118624/4 を変換6247.4%

強制変換では、4/4 のペイロードの変換に成功しました。

エージェントスキルの評価

アーティファクトベースのサブエージェント比較 — 同一の分析タスクを 2 つのモードで実施します。

  • with_skill:エージェントに datoon スキルを与え、変換ワークフローに従わせます。
  • without_skill:エージェントは JSON を直接使用し、TOON も datoon も使用しません。

ペイロードサイズ 3 種類 × 3 回の反復 = エージェントの実行は合計 18 回です。どちらのモードも、回答の正解率は 100% でした。

シナリオJSON の平均トークン数TOON の平均トークン数ペイロードの平均削減率
小22511847.6%
中2,9721,13861.7%
大17,7576,67362.4%

レポート全文と生の出力: benchmarks/agent_skill_eval/。削減量はペイロードのトークン数の推定値であり、エンドツーエンドのモデル使用トークン数全体ではありません。


開発

コントリビューターのワークフロー:CONTRIBUTING.md。メンテナー/エージェント向けメモ:CLAUDE.md。

セットアップ:

uv sync --extra dev
uvx pre-commit install

テスト:

pytest -m "not integration"   # unit only (102 tests)
pytest                        # with integration (requires Node.js + npx)

スキルの同期とプラグインのメタデータ:

python scripts/validate_skill_sync.py
python scripts/validate_plugin_metadata.py

リンク


ライセンス

MIT

コメント

MCP は初めてですか?

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

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