Genify について
Genifyは、AIコーディングエージェント向けのファイル変更用MCPサーバー兼コマンドラインツールです。指定したプロジェクトルート内で構造化された編集を計画、検証、プレビューしてから適用でき、変更には明示的な承認が必要です。
主な機能
- 01ファイル操作の計画
- 02統一差分のプレビュー
- 03承認済み変更の適用
- 04生成設定の検証
- 05テンプレートからのプロジェクト生成
活用シーン
- 01適用前のプロジェクト変更確認
- 02一貫したプロジェクト構成の生成
- 03共有設定による複数プロジェクトの更新
MCP 対応
GenifyはSTDIO経由で、計画、差分表示、設定検証、テンプレート一覧、変更適用のツールをMCPクライアントに提供します。ファイルアクセスは指定したルート内に制限され、変更適用には明示的な承認が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
genify
AI コーディングエージェントがプロジェクトルート内の構造化されたファイル変更を安全に計画、差分表示、適用するための MCP ツールです。
genify を使うと、ファイルの書き込み、テキストの置換、マーカーの前後へのブロック挿入、パスの移動/コピー/削除、ディレクトリの作成、モードの変更、変更適用前のドライラン差分の生成など、コードベースの変更を繰り返し実行できます。
1 つのファイルからプロジェクト全体を生成する
基本的な考え方は、単一のソースファイルを使い、さまざまな設定ファイルからプロジェクト構造全体をすばやく一貫して生成、または更新できるようにすることです。
モードは 3 つあります。
- CLI インタラクティブモード – 手動での使用や、すばやい入力に適しています。
- コードモード – 自動化された、設定可能なプロジェクト生成に適しています。
- MCP サーバーモード – STDIO 経由で構造化されたツールを呼び出す AI コーディングエージェント向けです。
機能:
- 設定に基づくテンプレートからのファイル作成。
- 正規表現を使ったコンテンツの置換。
- 既存ファイルへのコンテンツの追加または先頭への挿入。
- 共通の設定を使った複数プロジェクトの簡単な更新。
インストール
Cargo
- cargo を利用できるように、こちらのガイドに従って Rust ツールチェーンをインストールします。
- 次を実行します。
cargo install genify --features cli
はじめに
CLI
Turn one file into a complete project
Usage: genify [OPTIONS] [PATH]
genify <COMMAND>
Arguments:
[PATH] Path to a config file or http(s) URL
Options:
-p, --props-json <JSON> Override props using a JSON object (Array/Map supported)
-n, --no-interaction Do not ask any interactive question
-h, --help Print help
-V, --version Print version
Commands:
mcp Start genify as an MCP server over STDIO
help Print this message or the help of the given subcommand(s)
example.toml
[props]
value = "value"
dir = "tmp"
val = "val"
other = "{{ val }}"
override = "1"
[[rules]]
type = "write"
path = "{{ dir }}/some.txt" # if the file exists will be error
content = "{{ val }} {{ value }} {{ other | pascal_case }} {{ override }} - should be replaced"
if_exists = "error"
[[rules]]
type = "replace"
path = "{{ dir }}/some.txt"
replace = "should.*replaced"
content = "replaced {{ value }}"
[[rules]]
type = "prepend"
path = "{{ dir }}/some.txt"
content = "prepend {{ value }}"
[[rules]]
type = "append"
path = "{{ dir }}/some.txt"
content = "append {{ value }}"
genify example.toml
配列/マップを含むプロパティを、JSON を使って CLI から上書きします。
genify example.toml --props-json '{"tags": ["cli", "json"], "meta": {"license": "MIT"}}'
tmp/some.txt
prepend value
val value Val 1 - replaced value
append value
MCP
標準の STDIO トランスポートを使用して、genify を MCP サーバーとして実行します。
genify mcp --root .
読み取り専用のエージェントセッションの場合:
genify mcp --root . --read-only
Codex の設定例:
[mcp_servers.genify]
command = "genify"
args = ["mcp", "--root", "."]
MCP サーバーはプロトコルメッセージのみを stdout に書き込み、ログと診断情報は stderr に出力します。
ファイルシステムへのアクセスは --root の範囲内に制限されます。
利用可能なツール:
| ツール | 動作 |
|---|---|
genify_plan | ファイルを書き込まずに、予定されているファイル操作と影響を受けるパスを返します。 |
genify_diff | ドライランモードで生成を実行し、統合 diff を返します。 |
genify_apply | explicit_approval が true、または confirm_token が "apply" の場合にのみ変更を適用します。 |
genify_validate_config | 設定の解析、レンダリング、生成されたパスを検証します。 |
genify_list_templates | MCP ルート配下の .toml 設定ファイルとテンプレートファイルを一覧表示します。 |
genify_plan、genify_diff、genify_apply は、MCP ツールの引数として設定を JSON 形式で直接受け付けます。
一時的な TOML 設定ファイルやテンプレートファイルは必要ありません。
{
"config": {
"rules": [
{
"type": "replace",
"path": "src/application.rs",
"replace": "old text",
"content": "new text"
}
]
},
"root": "."
}
サポートされているルールの種類:
| 種類 | フィールド |
|---|---|
write | path、content、if_exists(overwrite、error、または skip) |
delete | path |
rename / move | from、to |
copy | from、to |
mkdir | path |
chmod | path、mode |
append / append_once / prepend | path、content |
insert_before / insert_after | path、marker、content |
replace / replace_or_append | path、replace、content、任意の replace_all、任意の expected_matches |
managed_block | path、start_marker、end_marker、content |
replace はデフォルトで厳密に動作します。replace_all が false または省略されている場合、正規表現の一致数が expected_matches と一致しないと失敗します。expected_matches のデフォルト値は 1 です。
サポートされているルールの例:
{
"config": {
"rules": [
{
"type": "write",
"path": "new/file.rs",
"content": "...",
"if_exists": "error"
}
]
}
}
{
"config": {
"rules": [
{
"type": "append_once",
"path": "README.md",
"content": "..."
}
]
}
}
{
"config": {
"rules": [
{
"type": "managed_block",
"path": "README.md",
"start_marker": "",
"end_marker": "",
"content": "..."
}
]
}
}
{
"config": {
"rules": [
{
"type": "insert_after",
"path": "README.md",
"marker": "## Usage",
"content": "..."
}
]
}
}
{
"config": {
"rules": [
{
"type": "move",
"from": "old/file.rs",
"to": "new/file.rs"
}
]
}
}
設定がない場合や無効な場合、genify_validate_config は構造化された hint.minimal_config と、操作ごとの例を返します。
サポートされている変数の種類
| 種類 | 説明 | CLI の対話型入力への対応 |
|---|---|---|
| String | テキスト値 | ✅ 対応 |
| Integer | 整数 | ✅ 対応 |
| Float | 小数 | ✅ 対応 |
| Boolean | true または false | ✅ 対応 |
| Array | 値のリスト | ✅ JSON 入力 |
| Map | キーと値のペア | ✅ JSON 入力 |
注: Array と Map の場合は、プロンプトが表示されたときに JSON を入力するか、あらかじめ --props-json で指定してください。
コード
fn main() {
genify::generate(
Path::new("."),
&genify::parse_toml(
fs::read_to_string("example.toml")
.unwrap()
.as_str(),
)
.expect("The config should be valid"),
Some(vec![(
"value".to_string(),
genify::Value::String("val".to_string()),
)]),
)
.expect("The generation should be successful");
}
ライセンス
貢献
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。