Transform Rules MCP Server について
Transform Rules MCP Server は、Rulemorph のデータ変換機能を AI アシスタントに提供します。宣言的な YAML/JSON ルールで複数形式の入力を処理し、ルール検証、DTO 生成、入力分析も行えます。
主な機能
- 01複数形式のデータを JSON に変換
- 02変換ルールの検証
- 037 言語向け DTO の生成
- 04入力構造の分析
- 05YAML/JSON ルールによる変換
活用シーン
- 01外部 API レスポンスの正規化
- 02CSV や Excel の JSON への取り込み
- 03HTML や XML の値の抽出と整形
MCP 対応
`rulemorph-mcp` MCP サーバーは、AI アシスタントに `transform`、`validate_rules`、`generate_dto`、`analyze_input` を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Rulemorph は、外部 API、CSV、JSON、YAML、TOML、XML、HTML、Markdown、Excel のデータを、宣言的な YAML/JSON ルールを使って予測可能な JSON に変換します。
入力ソースごとに新しいカスタムスクリプトを追加する代わりに、変換の動作をルールファイルで管理できます。同じルールは、CLI から利用したり、Rust に組み込んだり、ローカルの UI/API サーバーで提供したり、MCP を通じて AI アシスタントに公開したりできます。
ブラウザーでお試しください:playground.rulemorph.com
解決する課題
Rulemorph は、増え続ける変換コードを、レビュー可能でバージョン管理できるルールに移行します。
- ベンダー API のレスポンスを内部スキーマに正規化する
- CSV / Excel のインポートデータを JSON パイプラインに取り込む
- HTML や XML から値を抽出し、同じルールモデルで処理する
- 変換の動作を YAML/JSON としてレビュー、置換、バージョン管理する
- 同じ変換を CLI、ローカル API、AI アシスタントから再利用する
任意の実行、複雑なドメインロジック、長時間実行するワークフローのオーケストレーションにおいて、アプリケーションコードを置き換えることを目的としていません。こうしたケースでは、通常のアプリケーションコードやワークフローエンジンのほうが適しています。
クイックスタート
外部 API のレスポンスに含まれる users 配列を、アプリケーションが想定する JSON 形式に変換します。
rules.yaml
version: 2
input:
format: json
json:
records_path: "users"
mappings:
- target: "id"
source: "user_id"
- target: "name"
expr: ["@input.full_name", trim]
- target: "email"
expr: ["@input.username", concat: ["lit:@example.com"]]
input.json
{ "users": [{ "user_id": 1, "full_name": " Alice ", "username": "alice" }] }
実行
rulemorph transform -r rules.yaml -i input.json
入力を transform にパイプで渡すこともできます。
cat input.json | rulemorph transform -r rules.yaml
cat input.json | rulemorph transform -r rules.yaml -i -
出力
出力を表示
[{ "id": 1, "name": "Alice", "email": "[email protected]" }]
ルールファイルを使わずに、その場で簡単な変換を行うにはダイレクトモードを使用します。
JSON またはアドホックな CSV に対して単一の式を評価します。
echo '{ "test": 1 }' | rulemorph -rule '@input.test'
echo '{ "a": 1, "b": 2 }' | rulemorph --rule '["@input.a", {"+": ["@input.b"]}]'
echo 'a,test,1' | rulemorph -rule '@input.0'
echo 'a,test,1' | rulemorph -H 'id,name,age' -rule '@input.id'
出力を表示
1
3
"a"
"a"
小さな出力オブジェクトを作成し、フィールドの順序を指定したい場合は -F/--field を使用します。
echo 'u1,Alice,42' | rulemorph -H 'id,name,age' \
-F id='@input.id' \
-F name='["@input.name","trim","uppercase"]' \
-F age='["@input.age","int"]'
出力を表示
{ "id": "u1", "name": "ALICE", "age": 42 }
簡潔なネストされたターゲットマップのほうが読みやすい場合は、--output-map を使用します。
echo 'u1,Alice,42' | rulemorph -H 'id,name,age' \
--output-map '{"user.id":"@input.id","user.name":["@input.name","trim"],"age":["@input.age","int"]}'
出力を表示
{ "user": { "id": "u1", "name": "Alice" }, "age": 42 }
ダイレクト入力に複数のレコードがある場合は、--ndjson を追加すると、1 行につき 1 つの JSON 値が出力されます。
printf 'u1,Alice,42\nu2,Bob,7\n' | rulemorph --ndjson -H 'id,name,age' \
--output-map '{"id":"@input.id","age":["@input.age","int"]}'
出力を表示
{"age":42,"id":"u1"}
{"age":7,"id":"u2"}
ダイレクトモードでは、CSV ファイルや Excel ファイルも読み込めます。.csv ファイルでは CSV ヘッダーが自動的に推定されます。ヘッダーのない CSV には -H/--headers を使用してください。Excel の場合は、ヘッダー行とデータ範囲を明示的に指定します。
rulemorph --rule '@input.id' -i users.csv
rulemorph -H 'id,name,age' --rule '@input.id' -i headerless-users.csv
rulemorph --rule '@input.id' -i users.xlsx --excel-header-row 1 --excel-data-range A2:D20
出力を表示
"u1"
"u1"
["u1","u2"]
使用するパッケージ
| 目的 | 使用するもの |
|---|---|
| インストールせずにルールを試す | Rulemorph Playground |
| ファイル変換、DTO 生成、CI 検証 | rulemorph CLI |
| Rust アプリケーションに変換処理を組み込む | rulemorph クレート |
| ローカル UI または YAML で定義した API を実行する | rulemorph-server |
| AI アシスタントから変換、検証、DTO 生成を利用する | rulemorph-mcp |
インストール
CLI、サーバー、MCP サーバーのビルド済みバイナリは、GitHub Releases から入手できます。
CLI
brew install vinhphatfsg/tap/rulemorph
開発用にソースからビルドする場合:
cargo build -p rulemorph_cli --release
./target/release/rulemorph --help
UI / API サーバー
brew install vinhphatfsg/tap/rulemorph-server
rulemorph-server --rules-dir ./api_rules --api-mode rules
起動手順の詳細は、UI サーバーガイドを参照してください。
MCP サーバー
rulemorph-mcp は、Model Context Protocol を通じて AI アシスタントに Rulemorph の機能を提供します。
transform:データを変換しますvalidate_rules:ルールを検証しますgenerate_dto:DTO を生成しますanalyze_input:入力構造の概要をまとめます
Claude Code のセットアップ:
claude mcp add rulemorph -- rulemorph-mcp
主な機能
- CSV / JSON / YAML / TOML / XML / HTML / Markdown /
.xlsxExcel を JSON レコードに正規化します mappingsを使って出力フィールドを構築します- v2 パイプ式で値を変換します:トリミング、大文字・小文字の変換、連結、数値演算、ルックアップ、配列操作
defsを使ってルール単位のカスタム OP を定義し、型付き v2 パイプやマッピング本体を再利用しますsqrt、mod、pow、clamp、rangeなどの数値ヘルパーを使用して、範囲を制限した生成シーケンスを作成しますrecord_when、when、assertsで動作を制御しますsteps、branch、finalizeを使って、順序付きの実行と出力配列の処理を行います- Rust、TypeScript、Python、Go、Java、Kotlin、Swift 向けに推論された DTO を生成します。明示的な
typeが優先され、動的または安全でない形状は JSON に適した型にフォールバックします。 - 変換出力を変更せずに、組み込み OP とカスタム OP の実行に関するセマンティックトレースを調べます
- ローカル UI/API サーバーを実行するか、同じエンジンを MCP 経由で公開します
入力パーサーは保守的に動作するよう設計されています。HTML パーサーは JavaScript を実行したり URL を取得したりしません。Markdown の生 HTML はソーステキストとしてのみ保持され、Excel パーサーはマクロを実行したり数式を評価したりしません。曖昧さや副作用を伴う入力動作を避けるため、XML DTD/エンティティと JSON/YAML の重複キーは拒否されます。
ルール構造
version: 2
input:
format: json # csv | json | yaml | toml | xml | html | markdown | excel
json:
records_path: "items"
mappings:
- target: "output.field"
source: "input.field"
type: string
when:
eq: ["@input.status", "active"]
新しいルールファイルでは version: 2 を使用してください。移行期間中は version: 1 のルールファイルも引き続き受け入れられますが、検証およびランタイムのエントリーポイントで非推奨の警告が表示されます。今後のリリースでは、この構文を削除する前に、version: 1 のルールファイルを明示的なレガシーオプトインが必要な形式に変更する予定です。
ルールの完全な仕様については、変換ルール仕様を参照してください。日本語版は日本語でもご覧いただけます。
DTO の生成
rulemorph generate -r rules.yaml -l typescript
export interface Record {
id: number;
name: string;
email: string;
}
対応言語:rust、typescript、python、go、java、kotlin、swift
DTO の生成では、まず明示的なマッピング型を使用し、その後、リテラルと v2 パイプ式から単純なスカラー、配列、マップ、ネストされたオブジェクトの形状を推論します。形状が動的である場合や、安全に推論するには広範すぎる場合、生成される DTO では各言語の JSON フォールバック型が使用されます。
ライブラリの使用
[dependencies]
rulemorph = "0.3.4"
html、excel、markdown の入力パーサーはデフォルトで有効です。コアの CSV、JSON、YAML、TOML、XML のサポートのみを必要とするライブラリ利用者は、任意のパーサー依存関係を減らすため、これらを無効にできます。
[dependencies]
rulemorph = { version = "0.3.4", default-features = false }
["html"]、["excel"]、["markdown"] などの機能を指定して、パーサーを明示的に再度有効にできます。
無効化されたパーサーがルールで選択された場合、変換は invalid_input で失敗します(Markdown の場合:input format markdown is not enabled in this build)。
use rulemorph::{parse_rule_file, transform};
let rule = parse_rule_file(&std::fs::read_to_string("rules.yaml")?)?;
let input = std::fs::read_to_string("input.json")?;
let output = transform(&rule, &input, None)?;
ドキュメント
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。