Skip to main content
Glama
dpwgc

VRChat Project MCP

by dpwgc

VRChat Project MCP

Ein Unity-Editor-MCP-Plugin (Model Context Protocol) für die VRChat-Modellentwicklung.

Über einen integrierten HTTP-Dienst (JSON-RPC 2.0 / SSE) werden 49 Tools für externe KI-Agenten bereitgestellt, die Folgendes abdecken:

  • Allgemeine Unity-Projektfunktionen: Projektinformationen, Szenen-/Objekt-/Komponentenabfragen und -bearbeitung, Asset-Verwaltung, Konsolenprotokoll-Diagnose (ausgerichtet an den manage_scene / manage_gameobject / manage_asset / manage_editor-Fähigkeiten ähnlicher unity-mcp-Plugins);

  • VRChat-spezifische Funktionen: Avatar-Detailberichte (Menüs/Parameter/Bindungen/Leistung/Ressourcennutzung/installierte Plugins), Bearbeiten von MA / VRCFury-Komponentenparametern, Erstellen/Kopieren/Bearbeiten/Binden von Emotionsmenüs und Emotionsparameterdateien.

Reine C#-Implementierung, null Abhängigkeiten von Drittanbietern (keine Python / JS / Newtonsoft.Json oder andere Bibliotheken), kompatibel mit Unity 2022.3 und Unity 6 (Windows / macOS / Linux-Editor).


Inhaltsverzeichnis

  1. Kernfunktionen

  2. Installation

  3. Schnellstart

  4. Konfigurationspanel

  5. HTTP-Endpunkte und Protokoll

  6. Werkzeugliste

  7. Nur-Lese-/Lese-Schreib-Berechtigungsmodus

  8. Beispiele für Client-Integration

  9. Erweiterungsleitfaden

  10. Kompatibilität und bekannte Einschränkungen

  11. Sicherheitshinweise

  12. Projektstruktur

  13. FAQ


Related MCP server: unityxclaude

Kernfunktionen

Funktion

Beschreibung

HTTP-Portdienst

Integrierter handgeschriebener HTTP/1.1-Server (basiert auf TcpListener, umgeht das Problem, dass HttpListener unter Unity .NET Standard 2.1 nicht verfügbar ist), unterstützt Streamable HTTP (POST /mcp) und traditionelles SSE (GET /sse + POST /message) als duale Übertragung

Null-Abhängigkeiten

Reines C#; JSON-Parsing/Serialisierung als integrierte Implementierung; keine Abhängigkeit von Drittanbieter-Unity-Paketen oder externen Laufzeiten

Kompatibilität

Unity 2022.3 (.NET Standard 2.1 / C# 9) und Unity 6; nur für den Editor, beeinflusst nicht den Runtime-Build

Tool-Typ-Kennzeichnung

Jedes Tool ist als query (Abfrage) oder write (Schreiben) gekennzeichnet, über das description-Präfix von tools/list und das _meta.access-Feld für den Agenten sichtbar, damit dieser entscheiden kann, ob eine Benutzerbestätigung erforderlich ist

Berechtigungs-Gate

Das Konfigurationspanel kann zwischen Nur-Lese / Lese-Schreib-Modus umschalten; im Nur-Lese-Modus lehnt der Server alle Schreib-Tools direkt ab (gibt permission_denied zurück)

Hauptthread-Sicherheit

Alle Unity-API-Aufrufe werden über den Hauptthread-Scheduler ausgeführt, HTTP-Arbeitsthreads berühren niemals direkt die Unity-API

VRChat ohne Kompilierzeit-Abhängigkeiten

Lese-/Schreibzugriff auf VRCSDK3 / Modular Avatar / VRCFury erfolgt ausschließlich über SerializedObject + Reflexion; wenn die entsprechenden Pakete nicht installiert sind, kompiliert und läuft das Plugin normal, nur die zugehörigen Tools geben einen klaren Fehler zurück

Echtzeit-Protokoll

Das Konfigurationspanel enthält ein Echtzeit-Protokollfeld (Verbindung/Aufruf/Ablehnung/Fehler, farbcodiert) und leitet auch die Unity-Konsole weiter

Erweiterbar

Attribut-Kennzeichnung ([McpTool]) + Provider-Schnittstelle (IMcpToolProvider) + Laufzeitregistrierung, drei Erweiterungsmethoden, siehe Erweiterungsleitfaden


Installation

Methode 1: UPM-Lokales Paket (empfohlen)

  1. Kopieren Sie dieses Repository an einen beliebigen Ort (z. B. ../vrchat-project-mcp neben dem Projekt);

  2. Öffnen Sie im Unity-Projekt Window → Package Manager → + → Add package from disk… und wählen Sie die package.json in diesem Verzeichnis;

  3. Oder fügen Sie direkt in der Packages/manifest.json des Projekts Folgendes hinzu:

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

Methode 2: Direkt in Assets

Kopieren Sie den gesamten Ordner in das Assets/-Verzeichnis des Projekts (z. B. Assets/vrchat-project-mcp/), Unity kompiliert automatisch. package.json kann behalten oder gelöscht werden.

Methode 3: Git-URL (UPM)

Nachdem Sie das Repository auf einen Git-Dienst gepusht haben, wählen Sie im Package Manager Add package from git URL… und geben Sie die Repository-Adresse ein.

Nach der Installation erscheint im Menü Tools → VRChat Project MCP (Konfigurationspanel / Server starten / Server stoppen).


Schnellstart

  1. Öffnen Sie Tools → VRChat Project MCP → Konfigurationspanel;

  2. Bestätigen Sie die Standard-Listenadresse 127.0.0.1:8765 und die Betriebsberechtigung (Standard: Lese-Schreib);

  3. Klicken Sie auf Server starten (falls „Server nach Editorstart automatisch starten" aktiviert ist, läuft er bereits);

  4. Öffnen Sie im Browser http://127.0.0.1:8765/ für die chinesische Informationsseite, GET /health gibt den JSON-Status zurück;

  5. Lassen Sie Ihren Agenten über HTTP aufrufen (Beispiele siehe Beispiele für Client-Integration):

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"}}}

Dann tools/list für alle Tools, tools/call für die Ausführung. Der Agent kann zuerst mcp.get_status aufrufen, um den Servicemodus und die Werkzeugliste zu erfahren, unity.get_console_logs zur Fehlersuche verwenden und vrc.get_avatar_info für den Avatar-Bericht.


Konfigurationspanel

Tools → VRChat Project MCP → Konfigurationspanel:

Konfigurationselement

Beschreibung

Listenadresse

Standard 127.0.0.1 (nur lokal erreichbar); kann auf 0.0.0.0 geändert werden, um das lokale Netzwerk freizugeben (Sicherheitshinweis beachten)

Port

Standard 8765; 0 für automatische Zuweisung (tatsächlicher Port in der oberen Statusleiste)

Betriebsberechtigung

Nur-Lese (alle Schreib-Tools ablehnen) / Lese-Schreib (Abfragen und Schreiben erlauben). Änderungen wirken sofort, der Server blockt in Echtzeit

Automatischer Start

Server nach Editorstart automatisch starten

Echtzeit-Protokollfeld

Zeigt Verbindungen, Aufrufe, Ablehnungen, Fehler in Echtzeit, mit automatischem Scrollen und Leeren

Schnellaktionen

Start / Stopp / Neustart / MCP-Endpunkt kopieren / Protokoll leeren

Änderungen an Listenadresse und Port erfordern einen Klick auf „Neustart"; Änderungen am Berechtigungsmodus wirken sofort. Alle Konfigurationen werden pro Projekt in EditorPrefs gespeichert.


HTTP-Endpunkte und Protokoll

Endpunkt

Methode

Beschreibung

/mcp

POST

Streamable HTTP (MCP 2025-03-26): JSON-Anfrage → JSON-Antwort; wenn der Accept-Header text/event-stream enthält, wird als SSE-Ereignisstrom zurückgegeben

/mcp

DELETE

Sitzungsende (dieser Dienst ist zustandslos, direkt 200)

/sse

GET

Traditionelles HTTP+SSE (MCP 2024-11-05): stellt eine lange Verbindung her, sendet das endpoint-Ereignis (mit sessionId)

/message?sessionId=x

POST

Kanal für Client→Server bei traditionellem SSE-Transport; gibt 202 zurück, Ergebnis wird über SSE-Ereignis zurückgeschrieben

/health

GET

Health-Check-JSON (Status/Modus/Anzahl der Tools/Endpunktliste)

/

GET

Chinesische Informationsseite

  • Protokoll: MCP über JSON-RPC 2.0, Ablauf initialize → notifications/initialized → tools/list → tools/call;

  • Unterstützt Batch-Array-Anfragen; Protokollversion kompatibel mit 2024-11-05 / 2025-03-26 / 2025-06-18 (Client-Version wird zurückgegeben);

  • Alle Antworten enthalten CORS-Header (Access-Control-Allow-Origin: * usw.), Browser-Clients (z. B. MCP Inspector) können direkt darauf zugreifen.


Werkzeugliste

Typ-Spalte: Abfrage = schreibgeschützt sicher; Schreiben = ändert Szene/Asset/Projekt, wird im Nur-Lese-Modus vom Server abgelehnt, vor dem Aufruf wird eine Benutzerbestätigung empfohlen.

MCP-Meta-Tools (mcp)

Tool

Typ

Beschreibung

mcp.get_status

Abfrage

Dienststatus, Zugriffsmodus, vollständige Werkzeugliste (mit Lese-/Schreib-Kennzeichnung) und Endpunkte

mcp.refresh_tools

Abfrage

Assemblys erneut scannen und Werkzeugregistrierung aktualisieren (nach Hinzufügen/Entfernen von Erweiterungen)

Unity-Allgemein (unity)

Tool

Typ

Beschreibung

unity.get_project_info

Abfrage

Basisinformationen zum Projekt (Produktname/Unity-Version/Plattform/Build-Szenen/Asset-Statistik)

unity.get_packages

Abfrage

Liste installierter UPM-Pakete (einschließlich Erkennung VRChat-bezogener Pakete)

unity.get_resource_usage

Abfrage

Prozessspeicher/verwalteter Speicher/Szenenobjekt-Komponentenstatistik/Anzahl der Asset-Typen/aktuelle Auswahl

unity.get_console_logs

Abfrage

Konsolenprotokolle (Ringpuffer im Speicher + Editor.log-Dateiende), mit Filterung nach Ebene/Schlüsselwort

unity.get_scene_info

Abfrage

Informationen zur aktiven Szene (Name/Pfad/Objektstatistik/Wurzelobjekte/Top-Komponentenstatistik)

unity.list_gameobjects

Abfrage

Szenenobjekte nach Name/Komponenten-Schlüsselwort filtern (einschließlich inaktiver)

unity.get_object_info

Abfrage

Vollständige Objektinformationen (Position/Komponentenliste/Serialisierungsfelder der Komponenten)

unity.get_selection

Abfrage

Aktuell ausgewählte Objekte im Editor

unity.set_selection

Schreiben

Auswahl festlegen (Asset-Pfad / #Instanz-ID / Szenenpfad)

unity.set_object_property

Schreiben

Allgemeine Serialisierungsfelder festlegen (Szenenobjekte und Prefab-Assets, automatisch gespeichert), unterstützt parameters.Array.data[i].Feld-Pfade

unity.set_transform

Schreiben

Objektposition festlegen (Position/Euler-Rotation/Skalierung)

unity.create_gameobject

Schreiben

GameObject erstellen (mit optionalem Elternteil und Anfangskomponenten)

unity.destroy_object

Schreiben

Szenenobjekt zerstören (Prefab-Assets standardmäßig abgelehnt)

unity.create_prefab

Schreiben

Prefab aus Szenenobjekt speichern

unity.instantiate_prefab

Schreiben

Prefab in der Szene instanziieren

unity.open_scene

Schreiben

Szene öffnen (optional aktuelle Szene zuerst speichern)

unity.save_scene

Schreiben

Aktuelle Szene speichern

unity.run_menu_item

Schreiben

Editor-Menüpunkt ausführen (z. B. GameObject/3D Object/Cube)

unity.list_assets

Abfrage

Assets suchen und auflisten (Typ/Ordner/Schlüsselwort-Filter)

unity.get_asset_info

Abfrage

Asset-Details (Typ/Größe/Abhängigkeiten/Importer/Prefab-Zusammenfassung)

unity.read_text_asset

Abfrage

Textdateien im Projekt lesen (nur unter Assets/, Packages/, ProjectSettings/)

unity.create_asset

Schreiben

Assets erstellen (AnimatorController/Material/PhysicMaterial/AnimationClip/beliebiges ScriptableObject)

unity.create_script

Schreiben

C#-Skriptdatei erstellen (MonoBehaviour-Vorlage, optionaler Namespace)

unity.copy_asset

Schreiben

Asset kopieren (bei Namenskonflikt automatisch Nummer hinzufügen)

unity.delete_asset

Schreiben

Asset löschen (standardmäßig in den Papierkorb)

unity.create_folder

Schreiben

Ordner unter Assets erstellen (stufenweise)

unity.refresh_assets

Schreiben

Speichern und Asset-Datenbank aktualisieren

VRChat-spezifisch (vrc)

工具

类型

说明

vrc.get_avatars

查询

Listet Avatare in Szene und Projekt-Prefabs auf (VRCAvatarDescriptor / Legacy-Deskriptoren)

vrc.get_avatar_info

查询

Vollständige Avatar-Details: Deskriptorfelder/Animations-Layer/Expressions-Menübaum/Expressions-Parameter/Performance-Statistiken/Render-Bone-Statistiken/MA·VRCFury-Plugin-Komponenten —— für Agent-Berichte und Empfehlungen

vrc.get_performance_stats

查询

Performance-Statistiken (Polygonanzahl/Bones/Materialien/PhysBone/Collider-Anzahl und -Stufe; bevorzugt offizielle SDK-Berechnung, sonst Schätzung nach offiziellen Schwellenwerten mit Kennzeichnung)

vrc.get_installed_packages

查询

Erkennung von VRChat-bezogenen SDK/Plugin-Versionen (VRCSDK/MA/VRCFury/Poiyomi/DynamicBone/AAO usw.)

vrc.get_component_info

查询

Vollständige serialisierte Parameter des angegebenen Komponententyps (MA/VRCFury/PhysBone usw.)

vrc.set_component_property

写入

Ändert serialisierte Felder beliebiger Komponenten (MA/VRCFury usw.) (Enums per Name, Asset-Referenzen per Asset-Pfad)

vrc.list_expressions_menus

查询

Listet Expressions-Menü-Assets (VRCExpressionsMenu) im Projekt auf

vrc.get_expressions_menu

查询

Liest Menüstruktur (Control-Typ/Parameter/Wert/Icon/Untermenü/Label, rekursiv unterstützt)

vrc.create_expressions_menu

写入

Erstellt neues Expressions-Menü-Asset

vrc.copy_expressions_menu

写入

Kopiert Expressions-Menü-Asset

vrc.set_menu_control

写入

Fügt hinzu/ändert/löscht Menü-Controls (Button/Toggle/SubMenu/TwoAxisPuppet/FourAxisPuppet/RadialPuppet, inkl. labels und subParameters)

vrc.bind_expressions

写入

Bindet Menü-/Parameter-Assets an Avatar-Deskriptor (Szenenobjekte und Prefabs unterstützt)

vrc.list_expression_parameters

查询

Listet Expressions-Parameter-Assets (VRCExpressionParameters) im Projekt auf

vrc.get_expression_parameters

查询

Liest Parameterliste (Name/Typ Int·Float·Bool/Standardwert/ob gespeichert)

vrc.create_expression_parameters

写入

Erstellt neues Expressions-Parameter-Asset

vrc.copy_expression_parameters

写入

Kopiert Expressions-Parameter-Asset

vrc.set_parameter

写入

Fügt hinzu/ändert/löscht Expressions-Parameter

vrc.ma_get_parameters

查询

Liest alle Parameter der ModularAvatarParameters-Komponente

vrc.ma_set_parameter

写入

Fügt hinzu/ändert/löscht MA-Parameter (syncType wird per Name gesetzt, ungültige Werte listen die verfügbaren Optionen dieser Version auf)

Erweiterungsbeispiel (example)

工具

类型

说明

example.hello

查询

Erweiterungsbeispiel (demonstriert die Registrierung benutzerdefinierter Tools, ExampleExtensionTools.cs kann gelöscht werden)

Häufige Aufrufbeispiele

// 读取头像报告
{"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}}}

Nur-Lese- / Lese-Schreib-Berechtigungsmodus

  • Der Server prüft vor der Ausführung jedes Schreib-Tools den aktuellen Zugriffsmodus; im Nur-Lese-Modus wird direkt ein isError-Ergebnis zurückgegeben:

{
  "content": [{"type":"text","text":"当前为【只读】模式,已拒绝写入类工具调用「vrc.set_parameter」。…"}],
  "isError": true,
  "structuredContent": {"error": {"code":"permission_denied","access":"write","mode":"readonly"}}
}
  • Empfohlene Strategie auf Agent-Seite: tools/list oder mcp.get_status aufrufen, um _meta.access jedes Tools zu erhalten; bei write-Typ-Tools zuerst den Benutzer bestätigen lassen, keine erneute Blockierung im Client nötig (der Server hat bereits abgesichert).


Client-Integrationsbeispiele

curl (JSON-Modus)

# 握手
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-Modus)

# 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 (Browser)

MCP Inspector öffnen, Transport Streamable HTTP wählen, URL http://127.0.0.1:8765/mcp eintragen (dieser Dienst hat bereits eingebaute CORS-Unterstützung).

Claude Desktop / andere nur-stdio-Clients

Mit einem Community-Bridge-Tool HTTP MCP in stdio umwandeln (das Bridge-Tool läuft clientseitig und beeinträchtigt die Null-Abhängigkeit dieses Plugins nicht):

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

Oder einen eigenen Agent direkt per HTTP aufrufen lassen (POST /mcp, siehe JSON-RPC-Ablauf oben).


Erweiterungsleitfaden

Das Plugin bietet drei Erweiterungsebenen, ohne den Plugin-Quellcode ändern zu müssen:

Methode 1: [McpTool]-Attribut (empfohlen)

In jedem Code, der die Assembly VrchatProjectMcp.Core referenziert, öffentliche statische Methoden definieren und mit dem Attribut markieren; beim Plugin-Start oder Aufruf von mcp.refresh_tools wird automatisch gescannt und registriert:

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);
    }
}

Methode 2: IMcpToolProvider-Schnittstelle

Geeignet für Szenarien, in denen die Toolmenge dynamisch bestimmt wird (z. B. "erst nach Erkennung eines bestimmten Plugins die entsprechenden Tools registrieren"):

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;
    }
}

Ein vollständig lauffähiges Beispiel findet sich in Editor/Tools/Examples/ExampleExtensionTools.cs.

Methode 3: Laufzeit-Registrierung / benutzerdefinierte Ressourcen / benutzerdefinierte HTTP-Endpunkte

// 运行时注册工具
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(...) 写响应
});

Scan-Bereich: Es werden nur Assemblys gescannt, die die Assembly "VrchatProjectMcp.Core" referenzieren; nicht alle Unity-Typen werden durchlaufen, der Aufwand ist kontrollierbar.


Kompatibilität und bekannte Einschränkungen

Punkt

Beschreibung

Unity-Version

2022.3 (.NET Standard 2.1 / C# 9) und Unity 6 (gesamter Code in C#-9-Syntax geschrieben und lokal mit LangVersion 9.0 kompiliert und verifiziert)

Plattform

Windows / macOS / Linux-Editor (HTTP-Server verwendet TcpListener, keine plattformspezifischen APIs)

Play-Modus

Der Dienst funktioniert auch im Play-Modus; Schreibvorgänge in der Szene im Play-Modus gehen nach Verlassen des Play-Modus verloren, bitte vorsichtig

Kompilierungsabhängigkeiten

Null Kompilierzeit-Abhängigkeiten von VRCSDK3 / MA / VRCFury; ohne Installation geben die entsprechenden Tools klare Fehler zurück (beeinträchtigt die Plugin-Nutzung selbst nicht)

Performance-Statistiken

Bevorzugt reflexiver Aufruf des SDK AvatarPerformanceStats; bei fehlendem SDK Schätzung nach offiziellen Dokumentations-Schwellenwerten, Ergebnis klar mit „Schätzung" gekennzeichnet

Menü-/Parameter-Asset-Erstellung und -Bearbeitung

Erfordert installiertes VRChat SDK3 im Projekt (diese Asset-Typen werden vom SDK definiert); SDK2-Alt-Avatare unterstützen nur Informationsabfrage

Prefab-Scan

Der Prefab-Scan von vrc.get_avatars muss Prefabs einzeln laden, bei großen Projekten möglicherweise langsam (mit limit und includePrefabAssets=false steuerbar)

Dialog-bezogene Operationen

Tool-Ausführung mit 120-Sekunden-Main-Thread-Timeout; Operationen mit modalen Dialogen können das Timeout überschreiten (das Plugin vermeidet Dialoge innerhalb von Tools)

Langlaufende Ressourcen

SSE-Langverbindungen werden bei Bedarf aufgebaut; vor Domain-Reload stoppt und bereinigt der Dienst automatisch, um Port-Reste zu vermeiden


Sicherheitshinweise

  1. Standardmäßig nur 127.0.0.1 überwacht: Nur lokale Prozesse können zugreifen. Die Änderung auf 0.0.0.0 macht den Dienst für alle Geräte im LAN erreichbar – bitte unbedingt das Risiko verstehen;

  2. Dieses Plugin hat derzeit keine eingebaute Authentifizierung (MCP-Community-Standard ist, dass die clientseitige Proxy-Schicht die Authentifizierung übernimmt). Bei öffentlicher Freigabe bitte im Reverse-Proxy eine Authentifizierung hinzufügen;

  3. Der Nur-Lese-Modus ist die letzte Sicherheitsstufe, aber es wird trotzdem empfohlen, dass der Agent für Schreiboperationen zuerst die Benutzerbestätigung einholt;

  4. unity.read_text_asset erlaubt nur das Lesen von Dateien unter Assets/, Packages/, ProjectSettings/; ein Zugriff auf Systemdateien außerhalb ist nicht möglich.


Projektstruktur

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~ verwendet die UPM-Konvention mit ~-Suffix; Unity ignoriert dieses Verzeichnis beim Import vollständig. Für lokale Tests: dotnet run --project DevTests~/CoreSanity/CoreSanity.csproj.


FAQ

F: Warum nicht HttpListener / WebSocket? Unter Unity 2022/Unity 6 ist HttpListener auf .NET-Standard-2.1-API-Ebene nicht verfügbar; WebSocket benötigt eine Drittanbieter-Bibliothek. TcpListener + handgeschriebenes HTTP/1.1 ist die null-Abhängigkeits- und versionsübergreifend stabilste Lösung.

F: Wird das Plugin ins Spielpaket gebaut? Nein. Die Kernlogik liegt in der Editor-Assembly (includePlatforms: ["Editor"]); die Protokollschicht liegt zwar im Runtime-Verzeichnis, wird aber nur vom Editor referenziert und gelangt beim Build nicht in den Player.

F: Warum werden Tool-Typen im Nur-Lese-Modus trotzdem markiert? Die Typmarkierung dient der Agent-Entscheidung (ob zweite Bestätigung nötig, ob Aufruf versucht werden soll); die serverseitige Blockierung ist die Absicherung als letzte Instanz – beides zusammen ist sicherer.

F: Funktioniert es ohne installiertes VRChat SDK? Ja. Alle regulären Unity-Tools funktionieren; bei den VRChat-Tools sind „Avatar-Info/Komponenten-Lesen-Schreiben/Plugin-Erkennung" bestmöglich verfügbar (Reflexion nach Typnamen), „Menü-/Parameter-Asset-Erstellung und -Bearbeitung" gibt eine klare Meldung zurück.

F: Wie behebe ich fehlgeschlagene Agent-Aufrufe? Im Konfigurationspanel das Echtzeit-Logfenster ansehen (jede Verbindung und jeder Aufruf wird protokolliert), oder den Agent unity.get_console_logs aufrufen lassen, um Konsole und Editor.log zu lesen.

F: Was tun, wenn der Port belegt ist? Im Konfigurationspanel den Port ändern und „Neustart" klicken; oder Port 0 eintragen für automatische Zuweisung (der tatsächliche Port wird in der Statusleiste angezeigt).


Versionsverlauf

  • 0.1.0 (Erstversion): HTTP(JSON/SSE) MCP-Dienst, 27 reguläre Unity-Tools, 19 VRChat-spezifische Tools, 2 Meta-Tools, 1 Erweiterungsbeispiel; Nur-Lese-/Lese-Schreib-Berechtigungs-Gate; Konfigurationspanel mit Echtzeit-Log; Erweiterungspunkte; chinesische Kommentare und Dokumentation.

License

MIT (siehe LICENSE).

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    B
    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
    A
    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.
    11
    MIT

View all related MCP servers

Related MCP Connectors

  • Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.

  • Generate, edit, and deploy immersive 3D/WebGL web projects from any MCP assistant.

  • A MCP server built for developers enabling Git based project management with project and personal…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dpwgc/vrchat-project-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server