Skip to main content
Glama
dpwgc

VRChat Project MCP

by dpwgc

VRChat Project MCP

VRChat モデル開発向けの Unity エディタ MCP(Model Context Protocol)プラグイン。

内蔵 HTTP サービス(JSON-RPC 2.0 / SSE)を通じて外部 AI Agent に 49 個のツール を公開します。以下をカバーします:

  • 一般的な Unity プロジェクト機能:プロジェクト情報、シーン/オブジェクト/コンポーネントのクエリと編集、アセット管理、コンソールログの調査(既存の unity-mcp 系プラグインの manage_scene / manage_gameobject / manage_asset / manage_editor 機能に準拠);

  • VRChat 専用機能:アバター詳細レポート(メニュー/パラメーター/バインド/パフォーマンス/リソース使用/インストール済みプラグイン)、MA / VRCFury などのコンポーネントパラメーター編集、エモーションメニューとエモーションパラメーターファイルの新規作成/複製/編集/バインド。

純 C# 実装、サードパーティ依存ゼロ(Python / JS / Newtonsoft.Json などのライブラリを一切導入せず)、Unity 2022.3 と Unity 6(Windows / macOS / Linux エディタ)に対応。


目次

  1. コア機能

  2. インストール

  3. クイックスタート

  4. 設定パネル

  5. HTTP エンドポイントとプロトコル

  6. ツール一覧

  7. 読み取り専用 / 読み書き権限モード

  8. クライアント接続例

  9. 拡張ガイド

  10. 互換性と既知の制限

  11. セキュリティ上の注意

  12. プロジェクト構成

  13. FAQ


Related MCP server: unityxclaude

コア機能

機能

説明

HTTP ポートサービス

内蔵の手書き HTTP/1.1 サーバー(TcpListener ベース。Unity .NET Standard 2.1 で HttpListener が使用できない問題を回避)、Streamable HTTP(POST /mcp)と従来の SSE(GET /sse + POST /message)の二重トランスポートに対応

依存ゼロ

純 C#;JSON パース/シリアライズは内蔵実装;サードパーティの Unity パッケージや外部ランタイムに依存しない

互換性

Unity 2022.3(.NET Standard 2.1 / C# 9)と Unity 6;エディタ専用で、ランタイムビルドには影響しない

ツール種別の明示

各ツールに query(クエリ)または write(書き込み)を明示し、tools/list の description プレフィックスと _meta.access フィールドで Agent に公開。ユーザーへの再確認が必要かの判定に使用

権限ゲート

設定パネルで 読み取り専用 / 読み書き モードを切り替え可能;読み取り専用モードではサーバーが書き込み系ツールをすべて拒否(permission_denied を返す)

メインスレッド安全性

すべての Unity API 呼び出しはメインスレッドディスパッチャー経由で実行され、HTTP ワーカースレッドが Unity API に直接触れることはない

VRChat コンパイル時依存なし

VRCSDK3 / Modular Avatar / VRCFury への読み書きはすべて SerializedObject + リフレクション経由;対応パッケージ未インストール時もプラグインは通常通りコンパイル・実行され、関連ツールのみ明確なエラーを返す

リアルタイムログ

設定パネルにリアルタイムログボックス内蔵(接続/呼び出し/拒否/エラーを色分け表示)、Unity コンソールも転送

拡張可能

属性注釈([McpTool])+ プロバイダーインターフェース(IMcpToolProvider)+ ランタイム登録の 3 種類の拡張方法。詳細は拡張ガイドを参照


インストール

方法 1:UPM ローカルパッケージ(推奨)

  1. このリポジトリを任意の場所にコピー(例:プロジェクトの隣の ../vrchat-project-mcp);

  2. Unity プロジェクトで Window → Package Manager → + → Add package from disk… を開き、このディレクトリの package.json を選択;

  3. またはプロジェクトの Packages/manifest.json に直接追記:

{
  "dependencies": {
    "com.vrchat-project.mcp": "file:../../vrchat-project-mcp"
  }
}

方法 2:Assets に直接配置

フォルダ全体をプロジェクトの Assets/ にコピー(例:Assets/vrchat-project-mcp/)。Unity が自動的にコンパイルします。package.json は残しても削除しても構いません。

方法 3:Git URL(UPM)

リポジトリを Git サービスにプッシュ後、Package Manager で Add package from git URL… を選択し、リポジトリのアドレスを入力します。

インストール完了後、メニューバーに Tools → VRChat Project MCP(設定パネル / サーバー起動 / サーバー停止)が表示されます。


クイックスタート

  1. Tools → VRChat Project MCP → 設定パネル を開く;

  2. デフォルトのリスニングアドレス 127.0.0.1:8765、操作権限(デフォルトは読み書き)を確認;

  3. サーバー起動 をクリック(「エディタ起動後にサービスを自動起動」を有効にしている場合は自動で実行済み);

  4. ブラウザで http://127.0.0.1:8765/ を開くと中国語の情報ページが表示され、GET /health は JSON ステータスを返す;

  5. Agent に HTTP 経由で呼び出させる(例はクライアント接続例を参照):

POST http://127.0.0.1:8765/mcp
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","clientInfo":{"name":"my-agent","version":"1.0"}}}

その後 tools/list で全ツールを確認し、tools/call で実行します。Agent はまず mcp.get_status でサービスのモードとツール一覧を確認し、unity.get_console_logs でエラーを調査し、vrc.get_avatar_info でアバターレポートを出力できます。


設定パネル

Tools → VRChat Project MCP → 設定パネル:

設定項目

説明

リスニングアドレス

デフォルト 127.0.0.1(ローカルのみアクセス可能);0.0.0.0 に変更すると LAN に公開(セキュリティに注意)

ポート

デフォルト 8765;0 を入力すると自動割り当て(実際のポートは上部のステータスバーに表示)

操作権限

読み取り専用(書き込み系ツールをすべて拒否) / 読み書き(クエリと書き込みを許可)。変更は即時反映され、サーバー側でリアルタイムにブロック

自動起動

エディタ起動後にサービスを自動起動

リアルタイムログボックス

接続、呼び出し、拒否、エラーイベントをリアルタイムに表示。自動スクロールとクリアに対応

クイック操作

起動 / 停止 / 再起動 / MCP エンドポイントのコピー / ログのクリア

リスニングアドレスとポートの変更は「再起動」をクリックして反映;権限モードの変更は即時反映。すべての設定はプロジェクトごとに EditorPrefs に分離保存されます。


HTTP エンドポイントとプロトコル

エンドポイント

メソッド

説明

/mcp

POST

Streamable HTTP(MCP 2025-03-26):JSON リクエスト → JSON レスポンス;リクエストヘッダー Accept に text/event-stream が含まれる場合は SSE イベントストリームで返す

/mcp

DELETE

セッション終了(本サービスはステートレス、直接 200)

/sse

GET

従来の HTTP+SSE(MCP 2024-11-05):長接続を確立し、endpoint イベント(sessionId 付き)を配信

/message?sessionId=x

POST

従来の SSE トランスポートのクライアント→サーバーチャネル;202 を返し、結果は SSE イベントで書き戻す

/health

GET

ヘルスチェック JSON(ステータス/モード/ツール数/エンドポイント一覧)

/

GET

中国語の情報ページ

  • プロトコル:MCP over JSON-RPC 2.0、フローは initialize → notifications/initialized → tools/list → tools/call;

  • バッチ配列リクエストに対応;プロトコルバージョンは 2024-11-05 / 2025-03-26 / 2025-06-18 と互換(クライアントのバージョンをエコーバック);

  • すべてのレスポンスに CORS ヘッダー(Access-Control-Allow-Origin: * など)が付与され、ブラウザクライアント(MCP Inspector など)から直接アクセス可能。


ツール一覧

種別列:クエリ = 読み取り専用で安全;書き込み = シーン/アセット/プロジェクトを変更するため、読み取り専用モードではサーバーに拒否され、Agent は呼び出し前にユーザーへの再確認を推奨。

MCP メタツール(mcp)

ツール

種別

説明

mcp.get_status

クエリ

サービス実行状態、アクセスモード、全ツール一覧(読み書きの明示付き)とエンドポイント

mcp.refresh_tools

クエリ

アセンブリを再スキャンしツールレジストリを更新(拡張の追加・削除後に呼び出し)

Unity 一般(unity)

ツール

種別

説明

unity.get_project_info

クエリ

プロジェクト基本情報(プロダクト名/Unity バージョン/プラットフォーム/ビルドシーン/アセット統計)

unity.get_packages

クエリ

インストール済み UPM パッケージ一覧(VRChat 関連パッケージの検出を含む)

unity.get_resource_usage

クエリ

プロセスメモリ/マネージドメモリ/シーンオブジェクトコンポーネント統計/各タイプのアセット数/現在の選択

unity.get_console_logs

クエリ

コンソールログ(メモリ内リングバッファ + Editor.log ファイル末尾)、レベル/キーワードフィルター対応

unity.get_scene_info

クエリ

アクティブシーン情報(名前/パス/オブジェクト統計/ルートオブジェクト/コンポーネント Top 統計)

unity.list_gameobjects

クエリ

名前/コンポーネントキーワードでフィルターしてシーンオブジェクトを一覧表示(非アクティブ含む)

unity.get_object_info

クエリ

オブジェクトの完全な情報(位置姿勢/コンポーネント一覧/各コンポーネントのシリアライズフィールド)

unity.get_selection

クエリ

現在のエディタ選択オブジェクト

unity.set_selection

書き込み

選択を設定(アセットパス / #インスタンス ID / シーンパス)

unity.set_object_property

書き込み

汎用シリアライズフィールド設定(シーンオブジェクトとプレハブアセット、自動保存)、parameters.Array.data[i].フィールド パスに対応

unity.set_transform

書き込み

オブジェクトの位置姿勢を設定(位置/オイラー回転/スケール)

unity.create_gameobject

書き込み

GameObject を作成(親と初期コンポーネントを指定可能)

unity.destroy_object

書き込み

シーンオブジェクトを破棄(プレハブアセットはデフォルトで拒否)

unity.create_prefab

書き込み

シーンオブジェクトからプレハブを保存

unity.instantiate_prefab

書き込み

プレハブをシーンにインスタンス化

unity.open_scene

書き込み

シーンを開く(現在のシーンを先に保存するか選択可能)

unity.save_scene

書き込み

現在のシーンを保存

unity.run_menu_item

書き込み

エディタメニュー項目を実行(例:GameObject/3D Object/Cube)

unity.list_assets

クエリ

アセットを検索して一覧表示(タイプ/フォルダ/キーワードフィルター)

unity.get_asset_info

クエリ

アセット詳細(タイプ/サイズ/依存/インポーター/プレハブサマリー)

unity.read_text_asset

クエリ

プロジェクト内のテキストファイルを読み取り(Assets/、Packages/、ProjectSettings/ 配下に限定)

unity.create_asset

書き込み

アセットを作成(AnimatorController/Material/PhysicMaterial/AnimationClip/任意の ScriptableObject)

unity.create_script

書き込み

C# スクリプトファイルを作成(MonoBehaviour テンプレート、名前空間オプション)

unity.copy_asset

書き込み

アセットを複製(同名時は自動で連番付与)

unity.delete_asset

書き込み

アセットを削除(デフォルトでゴミ箱へ移動)

unity.create_folder

書き込み

Assets 配下にフォルダを作成(階層ごと)

unity.refresh_assets

書き込み

保存してアセットデータベースを更新

VRChat 専用(vrc)

ツール

種類

説明

vrc.get_avatars

照会

シーンとプロジェクトのプレハブ内のアバター(VRCAvatarDescriptor / 旧式ディスクリプタ)を一覧表示

vrc.get_avatar_info

照会

アバター完全詳細:ディスクリプタフィールド/アニメーションレイヤー/表情メニューツリー/表情パラメータ/パフォーマンス統計/レンダリングボーン統計/MA・VRCFury 等のプラグインコンポーネント —— Agent がレポートと提案を出力するために使用

vrc.get_performance_stats

照会

パフォーマンス統計(面数/ボーン/マテリアル/PhysBone/コライダー数とランク;優先的に SDK 公式計算を使用し、無い場合は公式閾値で推定して注記)

vrc.get_installed_packages

照会

VRChat 関連 SDK/プラグインのバージョン検出(VRCSDK/MA/VRCFury/Poiyomi/DynamicBone/AAO 等)

vrc.get_component_info

照会

指定コンポーネント(MA/VRCFury/PhysBone 等)の完全なシリアライズパラメータ

vrc.set_component_property

書き込み

任意のコンポーネント(MA/VRCFury 等)のシリアライズフィールドを変更(列挙型は名前、リソース参照はアセットパスで指定)

vrc.list_expressions_menus

照会

プロジェクト内の表情メニュー(VRCExpressionsMenu)アセットを一覧表示

vrc.get_expressions_menu

照会

メニュー構造を読み取り(コントロールタイプ/パラメータ/値/アイコン/サブメニュー/ラベル、再帰対応)

vrc.create_expressions_menu

書き込み

表情メニューアセットを新規作成

vrc.copy_expressions_menu

書き込み

表情メニューアセットを複製

vrc.set_menu_control

書き込み

メニューコントロールを追加/変更/削除(Button/Toggle/SubMenu/TwoAxisPuppet/FourAxisPuppet/RadialPuppet、labels と subParameters を含む)

vrc.bind_expressions

書き込み

メニュー/パラメータアセットをアバターディスクリプタにバインド(シーンオブジェクトとプレハブの両方に対応)

vrc.list_expression_parameters

照会

プロジェクト内の表情パラメータ(VRCExpressionParameters)アセットを一覧表示

vrc.get_expression_parameters

照会

パラメータリストを読み取り(名前/タイプ Int・Float・Bool/デフォルト値/保存するかどうか)

vrc.create_expression_parameters

書き込み

表情パラメータアセットを新規作成

vrc.copy_expression_parameters

書き込み

表情パラメータアセットを複製

vrc.set_parameter

書き込み

表情パラメータを追加/変更/削除

vrc.ma_get_parameters

照会

ModularAvatarParameters コンポーネントの全パラメータを読み取り

vrc.ma_set_parameter

書き込み

MA パラメータを追加/変更/削除(syncType は名前で設定し、不正な値の場合はそのバージョンで選択可能な値を一覧表示)

拡張サンプル(example)

ツール

種類

説明

example.hello

照会

拡張サンプル(カスタムツール登録のデモ。ExampleExtensionTools.cs を削除可能)

よく使う呼び出し例

// 读取头像报告
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
  "name":"vrc.get_avatar_info",
  "arguments":{"target":"Assets/MyAvatar.prefab","includeStats":true}}}

// 改 MA 参数默认值(写入,只读模式会被拒绝)
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
  "name":"vrc.set_component_property",
  "arguments":{"target":"Assets/MyAvatar.prefab","componentType":"ModularAvatarParameters",
               "propertyPath":"parameters.Array.data[0].defaultValue","value":1.0}}}

// 给表情菜单加一个开关
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
  "name":"vrc.set_menu_control",
  "arguments":{"menuPath":"Assets/Menus/Main.asset","action":"add",
               "control":{"name":"开关","type":"Toggle","parameter":"MyParam"}}}}

// 排查控制台报错
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{
  "name":"unity.get_console_logs",
  "arguments":{"level":"Error","maxLines":50}}}

読み取り専用 / 読み書き権限モード

  • サーバーは 任意の 書き込み系ツールを実行する前に現在のアクセスモードをチェックします。読み取り専用モードでは直接 isError 結果を返します:

{
  "content": [{"type":"text","text":"当前为【只读】模式,已拒绝写入类工具调用「vrc.set_parameter」。…"}],
  "isError": true,
  "structuredContent": {"error": {"code":"permission_denied","access":"write","mode":"readonly"}}
}
  • Agent 側の推奨方針:tools/list または mcp.get_status を呼び出して各ツールの _meta.access を取得し、write タイプのツールについては先にユーザーに確認を取ります。クライアント側でインターセプトを重複実装する必要はありません(サーバー側で既にフォールバック済み)。


クライアント接続例

curl(JSON モード)

# 握手
curl -s http://127.0.0.1:8765/mcp -H "Content-Type: application/json" -d \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","clientInfo":{"name":"curl","version":"1"}}}'

# 工具清单(注意每个工具 description 前缀的【查询】/【写入】与 _meta.access)
curl -s http://127.0.0.1:8765/mcp -H "Content-Type: application/json" -d \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# 调用工具
curl -s http://127.0.0.1:8765/mcp -H "Content-Type: application/json" -d \
'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mcp.get_status"}}'

curl(SSE モード)

# Accept 带 text/event-stream 时响应为 SSE 事件流
curl -sN http://127.0.0.1:8765/mcp -H "Accept: text/event-stream" \
     -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

MCP Inspector(ブラウザ)

MCP Inspector を開き、Transport で Streamable HTTP を選択し、URL に http://127.0.0.1:8765/mcp を入力します(本サービスは CORS サポートを内蔵済み)。

Claude Desktop / その他 stdio のみ対応のクライアント

コミュニティ製ブリッジツールで HTTP MCP を stdio に変換します(ブリッジツールはクライアント側で動作し、本プラグインのゼロ依存に影響しません):

npx mcp-remote http://127.0.0.1:8765/sse

または自作 Agent で直接 HTTP 呼び出し(POST /mcp、上記の JSON-RPC フローを参照)。


拡張ガイド

プラグインは3層の拡張ポイントを用意しており、プラグインのソースコードを変更せずに機能を追加できます:

方法1:[McpTool] 属性による注釈(推奨)

VrchatProjectMcp.Core アセンブリを参照している任意のコードで公開静的メソッドを定義し、属性を付与します。プラグイン起動時または mcp.refresh_tools 呼び出し時に自動スキャンして登録します:

using VrchatProjectMcp.Core.Json;
using VrchatProjectMcp.Core.Mcp;

public static class MyTools
{
    // access 必须标明:Query(查询)或 Write(写入,只读模式会被服务端拒绝)
    [McpTool("mytools.check_avatar", McpToolAccess.Query, "mytools", "检查头像…")]
    public static object Check([McpParam("头像路径")] string path = null)
    {
        return new JsonObject().Set("ok", true);
    }
}

方法2:IMcpToolProvider インターフェース

ツールセットを動的に決定するシナリオに適しています(例:「特定のプラグインがインストールされたことを検出してから対応ツールを登録する」):

public sealed class MyProvider : IMcpToolProvider
{
    public IEnumerable<McpToolDefinition> RegisterTools()
    {
        var def = new McpToolDefinition
        {
            Name = "mytools.dynamic",
            Access = McpToolAccess.Write,
            Category = "mytools",
            Description = "动态注册示例",
        };
        def.Parameters.Add(new McpParamDefinition { Name = "x", JsonType = "string", Required = true });
        def.Handler = args => new JsonObject().Set("done", true);
        yield return def;
    }
}

完全な実行可能なサンプルは Editor/Tools/Examples/ExampleExtensionTools.cs にあります。

方法3:実行時登録 / カスタムリソース / カスタム HTTP エンドポイント

// 运行时注册工具
McpToolRegistry.Instance.RegisterTool(myDefinition);

// 注册 MCP 资源(resources/list 可见,Agent 可 resources/read)
McpToolRegistry.Instance.Resources.Add(new McpResourceDefinition
{
    Uri = "mcp://my-report",
    Name = "我的报告",
    ReadHandler = () => new JsonObject().Set("data", 123),
});

// 自定义 HTTP 端点(需服务已启动)
McpServerController.Server?.AddHandler("GET", "/my-endpoint", ctx =>
{
    // ctx.BodyText 读取请求体;用 McpServerController.Server.WriteResponse(...) 写响应
});

スキャン範囲:「VrchatProjectMcp.Core アセンブリを参照している」アセンブリのみをスキャンし、Unity の全タイプを走査しないため、オーバーヘッドは管理可能です。


互換性と既知の制限

項目

説明

Unity バージョン

2022.3(.NET Standard 2.1 / C# 9)と Unity 6(全コードは C# 9 構文で記述し、ローカルで LangVersion 9.0 でコンパイル検証済み)

プラットフォーム

Windows / macOS / Linux エディタ(HTTP サーバーは TcpListener を使用し、プラットフォーム固有 API に依存しない)

プレイモード

サービスはプレイモードでも利用可能。ただしプレイモード中のシーンへの書き込みはプレイモード終了後に失われるため注意してください

コンパイル依存

VRCSDK3 / MA / VRCFury へのコンパイル時依存はゼロ。未インストール時は関連ツールが明確なエラーを返します(プラグイン自体の使用には影響なし)

パフォーマンス統計

優先的に SDK AvatarPerformanceStats をリフレクションで呼び出し。SDK がない場合は公式ドキュメントの閾値で推定し、結果に「推定」と明記

メニュー/パラメータアセットの作成と編集

プロジェクトに VRChat SDK3 のインストールが必要(これらのアセットタイプは SDK が定義)。SDK2 の旧アバターは情報読み取りのみ対応

プレハブスキャン

vrc.get_avatars のプレハブスキャンはプレハブを1つずつロードする必要があるため、大規模プロジェクトでは遅くなる可能性があります(limit と includePrefabAssets=false で制御可能)

モーダルダイアログ系操作

ツール実行には120秒のメインスレッドタイムアウトあり。モーダルダイアログを伴う操作はタイムアウトする可能性があります(プラグインはツール内でのダイアログ表示を回避済み)

常駐リソース

SSE 長接続は必要に応じて確立。ドメインリロード前にサービスは自動停止・クリーンアップされ、ポート占有の残留を防止


セキュリティ注意事項

  1. デフォルトで 127.0.0.1 のみをリッスン:本機のプロセスのみアクセス可能。0.0.0.0 に変更するとサービスが LAN 内の全デバイスに公開されるため、リスクを必ず理解してください;

  2. 本プラグインは現在認証を内蔵していません(MCP コミュニティの標準的な方法はクライアント側プロキシで一元的に認証する方式)。公網に公開する場合は、リバースプロキシ層で認証を追加してください;

  3. 読み取り専用モードは最後の保険ですが、それでも Agent には書き込み系操作の前にユーザー確認を取ることを推奨します;

  4. unity.read_text_asset は Assets/、Packages/、ProjectSettings/ 配下のファイルのみ読み取り可能で、システムファイルへの越境読み取りはできません。


プロジェクト構成

vrchat-project-mcp/
├── package.json                        # UPM 包清单(unity ≥ 2022.3,零依赖)
├── README.md                           # 本文档
├── LICENSE                             # MIT
├── Runtime/                            # 纯 C# 协议层(noEngineReferences,无 Unity 依赖)
│   ├── VrchatProjectMcp.Core.asmdef
│   ├── Mcp/
│   │   ├── Json/MiniJson.cs            #   内置 JSON 解析/序列化(零依赖)
│   │   ├── McpTypes.cs                 #   模式枚举/权限接口/资源定义/扩展接口
│   │   ├── McpToolAttribute.cs         #   [McpTool]/[McpParam] 特性(扩展方式二)
│   │   ├── McpToolDefinition.cs        #   工具定义 + inputSchema 生成 + 参数绑定
│   │   ├── McpToolRegistry.cs          #   扫描/注册/权限门控/调用执行
│   │   ├── JsonRpcCore.cs              #   JSON-RPC 2.0 分发(initialize/tools/resources)
│   │   └── IMcpLogger.cs               #   日志接口(宿主实现)
│   └── Net/
│       ├── SimpleHttpServer.cs         #   TcpListener 手写 HTTP/1.1 服务器(SSE/CORS/chunked)
│       └── McpHttpEndpoints.cs         #   /mcp /sse /message /health / 端点
├── Editor/                             # Unity 编辑器层
│   ├── VrchatProjectMcp.Editor.asmdef
│   ├── Core/
│   │   ├── McpMainThreadDispatcher.cs  #   主线程调度(HTTP 线程 → Unity 主线程)
│   │   └── McpServerController.cs      #   生命周期控制/组装/内置资源/菜单项
│   ├── Settings/
│   │   ├── McpSettings.cs              #   配置(EditorPrefs 持久化,按项目隔离)
│   │   └── McpSettingsWindow.cs        #   配置面板(地址/端口/权限/实时日志)
│   ├── Logging/
│   │   ├── McpEditorLogger.cs          #   日志器(窗口富文本 + Unity 控制台)
│   │   └── McpConsoleCapture.cs        #   控制台日志环形缓冲采集
│   └── Tools/
│       ├── ToolHelpers.cs              #   目标解析/序列化读写/预制件编辑等公共辅助
│       ├── McpMetaTools.cs             #   mcp.* 元工具
│       ├── UnityProjectTools.cs        #   unity.* 项目/包/资源/日志
│       ├── UnitySceneTools.cs          #   unity.* 场景/对象/组件/预制件
│       ├── UnityAssetTools.cs          #   unity.* 资产
│       ├── Vrc/
│       │   ├── VrcReflection.cs        #   VRChat SDK 类型反射(无编译期依赖)
│       │   ├── VrcCoreTools.cs         #   vrc.* 头像/性能/插件探测/组件读写
│       │   ├── VrcMenuTools.cs         #   vrc.* 表情菜单 新建/复制/编辑/绑定
│       │   ├── VrcParameterTools.cs    #   vrc.* 表情参数 新建/复制/编辑
│       │   └── VrcMaTools.cs           #   vrc.ma_* MA 参数
│       └── Examples/
│           └── ExampleExtensionTools.cs#   扩展示例(可删除)
└── DevTests~/                          # 开发期冒烟测试(目录名带 ~ 后缀,Unity 不会导入,非包内容)
    └── CoreSanity/                     #   Core 协议层 37 项端到端测试(dotnet 工程)

DevTests~ は UPM 規約の ~ サフィックス命名を使用しており、Unity がパッケージをインポートする際にこのディレクトリを完全に無視します。ローカルでテストを実行する場合:dotnet run --project DevTests~/CoreSanity/CoreSanity.csproj。


FAQ

Q:なぜ HttpListener / WebSocket を使わないのですか? Unity 2022/Unity 6 の .NET Standard 2.1 API レベルでは HttpListener が利用できません。WebSocket はサードパーティライブラリが必要です。TcpListener + 手書き HTTP/1.1 はゼロ依存でクロスバージョンに最も安定した方式です。

Q:プラグインはゲームビルドに含まれますか? 含まれません。コアロジックは Editor アセンブリ(includePlatforms: ["Editor"])にあり、プロトコル層は Runtime ディレクトリにありますが Editor からのみ参照されるため、ビルド時にプレイヤーには入りません。

Q:読み取り専用モードなのに、なぜツールタイプを注釈するのですか? タイプ注釈は Agent の判断(再確認が必要か、呼び出しを試みるか)に役立ち、サーバー側のインターセプトはフォールバックの保険です。両方を重ねることでより安全になります。

Q:VRChat SDK がインストールされていなくても使えますか? 使えます。Unity の通常ツールはすべて利用可能です。VRChat ツールのうち「アバター情報/コンポーネント読み書き/プラグイン検出」は可能な限り動作し(タイプ名でリフレクション)、「メニュー/パラメータアセットの作成と編集」は明確なメッセージを返します。

Q:Agent の呼び出し失敗をどう調査しますか? 設定パネルのリアルタイムログボックスを確認します(接続と呼び出しのたびに出力されます)。または Agent に unity.get_console_logs を呼び出させてコンソールと Editor.log を読み取ります。

Q:ポートが占有されている場合はどうすればよいですか? 設定パネルでポートを変更して「再起動」をクリックします。またはポート 0 を指定して自動割り当てにします(実際のポートはステータスバーに表示されます)。


バージョン履歴

  • 0.1.0(初期バージョン):HTTP(JSON/SSE) MCP サービス、27 個の Unity 通常ツール、19 個の VRChat 専用ツール、2 個のメタツール、1 個の拡張サンプル。読み取り専用/読み書き権限ゲート。設定パネルとリアルタイムログ。拡張ポイント。中国語のコメントとドキュメント。

License

MIT(LICENSE を参照)。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides 20 tools to control the Unity Editor with natural language, including scene management, component manipulation, script generation, asset handling, project settings, builds, and live C# execution.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for Unity that enables AI agents to query and control the Unity Editor, providing tools for scene management, object manipulation, and asset browsing.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for safely inspecting and editing Unity/VRChat prefabs, scenes, and assets. It diagnoses override collisions, broken references, and runtime exceptions, with read-only YAML analysis and write operations via an Editor Bridge.
    12
    MIT