Skip to main content
Glama
dpwgc

VRChat Project MCP

by dpwgc

VRChat Project MCP

Complemento MCP (Model Context Protocol) para el editor de Unity, orientado al desarrollo de modelos de VRChat.

Expone 49 herramientas a agentes de IA externos a través de un servicio HTTP integrado (JSON-RPC 2.0 / SSE), que cubren:

  • Capacidades generales de proyectos Unity: información del proyecto, consulta y edición de escenas/objetos/componentes, gestión de assets, diagnóstico de registros de consola (alineado con las capacidades manage_scene / manage_gameobject / manage_asset / manage_editor de los plugins tipo unity-mcp existentes);

  • Capacidades específicas de VRChat: informe detallado del avatar (menús/parámetros/vinculaciones/rendimiento/uso de recursos/plugins instalados), edición de parámetros de componentes como MA / VRCFury, y creación/duplicación/edición/vinculación de menús de expresiones y archivos de parámetros de expresiones.

Implementación en C# puro, cero dependencias de terceros (no introduce ninguna biblioteca como Python / JS / Newtonsoft.Json), compatible con Unity 2022.3 y Unity 6 (editor de Windows / macOS / Linux).


Tabla de contenido

  1. Características principales

  2. Instalación

  3. Inicio rápido

  4. Panel de configuración

  5. Endpoints HTTP y protocolo

  6. Listado de herramientas

  7. Modo de permisos de solo lectura / lectura y escritura

  8. Ejemplo de integración de cliente

  9. Guía de extensión

  10. Compatibilidad y limitaciones conocidas

  11. Aviso de seguridad

  12. Estructura del proyecto

  13. FAQ


Related MCP server: unityxclaude

Características principales

Característica

Descripción

Servicio de puerto HTTP

Servidor HTTP/1.1 integrado escrito a mano (basado en TcpListener, que evita el problema de que HttpListener no esté disponible en Unity .NET Standard 2.1), con soporte para doble transporte: Streamable HTTP (POST /mcp) y SSE tradicional (GET /sse + POST /message)

Cero dependencias

C# puro; el análisis y la serialización de JSON son implementaciones integradas; no depende de ningún paquete Unity de terceros ni de ningún runtime externo

Compatibilidad

Unity 2022.3 (.NET Standard 2.1 / C# 9) y Unity 6; solo para el editor, no afecta a las compilaciones de runtime

Anotación del tipo de herramienta

Cada herramienta se anota como query (consulta) o write (escritura), y se expone al agente a través del prefijo description de tools/list y del campo _meta.access, para que pueda determinar si se requiere una segunda confirmación del usuario

Control de permisos

El panel de configuración permite alternar entre los modos solo lectura / lectura y escritura; en modo de solo lectura, el servidor rechaza directamente todas las herramientas de escritura (devuelve permission_denied)

Seguridad del hilo principal

Todas las llamadas a la API de Unity se ejecutan mediante el planificador del hilo principal; los subprocesos de trabajo HTTP nunca tocan directamente la API de Unity

Sin dependencia en tiempo de compilación de VRChat

Las lecturas y escrituras de VRCSDK3 / Modular Avatar / VRCFury se realizan íntegramente mediante SerializedObject + reflexión; si el paquete correspondiente no está instalado, el plugin se compila y se ejecuta con normalidad y solo las herramientas relacionadas devuelven un error claro

Registros en tiempo real

El panel de configuración incluye un cuadro de registros en tiempo real (conexiones/llamadas/rechazos/errores, mostrados con colores diferenciados) y, además, reenvía la consola de Unity

Extensible

Tres vías de extensión: anotación por atributos ([McpTool]) + interfaz de proveedor (IMcpToolProvider) + registro en tiempo de ejecución. Consulte la Guía de extensión


Instalación

Opción 1: paquete local UPM (recomendada)

  1. Copie este repositorio a cualquier ubicación (por ejemplo, ../vrchat-project-mcp junto al proyecto);

  2. En el proyecto de Unity, abra Window → Package Manager → + → Add package from disk… y seleccione package.json de este directorio;

  3. O bien, añada directamente lo siguiente a Packages/manifest.json del proyecto:

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

Opción 2: colocar directamente en Assets

Copie la carpeta completa en el directorio Assets/ del proyecto (por ejemplo, Assets/vrchat-project-mcp/) y Unity la compilará automáticamente. package.json puede conservarse o eliminarse.

Opción 3: URL de Git (UPM)

Tras enviar el repositorio a un servicio de Git, en Package Manager seleccione Add package from git URL… e indique la dirección del repositorio.

Una vez completada la instalación, en la barra de menús aparece Tools → VRChat Project MCP (Panel de configuración / Iniciar servidor / Detener servidor).


Inicio rápido

  1. Abra Tools → VRChat Project MCP → Panel de configuración;

  2. Confirme la dirección de escucha predeterminada 127.0.0.1:8765 y los permisos de operación (lectura y escritura por defecto);

  3. Haga clic en Iniciar servidor (si tiene activada la opción «Iniciar el servicio automáticamente al iniciar el editor», ya se habrá ejecutado automáticamente);

  4. Abra http://127.0.0.1:8765/ en el navegador para ver la página de información en chino; GET /health devuelve el estado en JSON;

  5. Haga que su agente realice llamadas a través de HTTP (consulte los ejemplos en Ejemplo de integración de cliente):

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

Después, use tools/list para ver todas las herramientas y tools/call para ejecutarlas. El agente puede llamar primero a mcp.get_status para conocer el modo del servicio y el listado de herramientas, usar unity.get_console_logs para diagnosticar errores y usar vrc.get_avatar_info para generar el informe del avatar.

Panel de configuración

Tools → VRChat Project MCP → 配置面板:

Elemento de configuración

Descripción

Dirección de escucha

Por defecto 127.0.0.1 (solo accesible desde este equipo); se puede cambiar a 0.0.0.0 para exponerla a la red local (tenga en cuenta la seguridad)

Puerto

Por defecto 8765; indique 0 para asignación automática (el puerto real se muestra en la barra de estado superior)

Permisos de operación

Solo lectura (rechaza todas las herramientas de escritura) / Lectura y escritura (permite consultas y escrituras). Los cambios se aplican de inmediato; el servidor los bloquea en tiempo real

Inicio automático

Inicia el servicio automáticamente al iniciar el editor

Cuadro de registros en tiempo real

Muestra en tiempo real eventos de conexión, llamada, rechazo y error; admite desplazamiento automático y vaciado

Acciones rápidas

Iniciar / Detener / Reiniciar / Copiar endpoint MCP / Vaciar registros

Los cambios en la dirección de escucha y el puerto requieren hacer clic en «Reiniciar» para surtir efecto; los cambios en el modo de permisos se aplican de inmediato. Toda la configuración se guarda de forma aislada por proyecto en EditorPrefs.


Endpoints HTTP y protocolo

Endpoint

Método

Descripción

/mcp

POST

Streamable HTTP (MCP 2025-03-26): solicitud JSON → respuesta JSON; si el encabezado de la solicitud Accept contiene text/event-stream, se devuelve como flujo de eventos SSE

/mcp

DELETE

Fin de sesión (este servicio no tiene estado; devuelve 200 directamente)

/sse

GET

HTTP+SSE tradicional (MCP 2024-11-05): establece una conexión larga y envía el evento endpoint (con sessionId)

/message?sessionId=x

POST

Canal cliente→servidor del transporte SSE tradicional; devuelve 202 y el resultado se escribe de vuelta mediante eventos SSE

/health

GET

JSON de comprobación de estado (estado/modo/número de herramientas/lista de endpoints)

/

GET

Página de información en chino

  • Protocolo: MCP sobre JSON-RPC 2.0, flujo initialize → notifications/initialized → tools/list → tools/call;

  • Admite solicitudes de arrays por lotes; versiones de protocolo compatibles: 2024-11-05 / 2025-03-26 / 2025-06-18 (devuelve la versión del cliente);

  • Todas las respuestas incluyen cabeceras CORS (como Access-Control-Allow-Origin: *), por lo que los clientes de navegador (por ejemplo, MCP Inspector) pueden acceder directamente.


Listado de herramientas

Columna de tipo: 查询 = operación segura de solo lectura; 写入 = modifica la escena/los assets/el proyecto, rechazada por el servidor en modo de solo lectura; se recomienda una segunda confirmación al usuario antes de que el agente la invoque.

Herramientas meta de MCP (mcp)

Herramienta

Tipo

Descripción

mcp.get_status

Consulta

Estado de ejecución del servicio, modo de acceso, listado completo de herramientas (con anotación de lectura/escritura) y endpoints

mcp.refresh_tools

Consulta

Vuelve a escanear los ensamblados y actualiza el registro de herramientas (se invoca después de añadir o eliminar extensiones)

Unity general (unity)

Herramienta

Tipo

Descripción

unity.get_project_info

Consulta

Información básica del proyecto (nombre del producto/versión de Unity/plataforma/escenas de compilación/estadísticas de assets)

unity.get_packages

Consulta

Lista de paquetes UPM instalados (incluye la detección de paquetes relacionados con VRChat)

unity.get_resource_usage

Consulta

Memoria del proceso/memoria administrada/estadísticas de objetos y componentes de la escena/cantidad de assets por tipo/selección actual

unity.get_console_logs

Consulta

Registros de la consola (buffer circular en memoria + final del archivo Editor.log), con filtros por nivel/palabra clave

unity.get_scene_info

Consulta

Información de la escena activa (nombre/ruta/estadísticas de objetos/objetos raíz/estadísticas Top de componentes)

unity.list_gameobjects

Consulta

Lista los objetos de la escena filtrando por nombre/palabra clave de componente (incluye los inactivos)

unity.get_object_info

Consulta

Información completa del objeto (transform/lista de componentes/campos serializados de cada componente)

unity.get_selection

Consulta

Objetos seleccionados actualmente en el editor

unity.set_selection

Escritura

Establece la selección (ruta de asset / #ID de instancia / ruta de escena)

unity.set_object_property

Escritura

Configuración genérica de campos serializados (objetos de escena y assets de prefab, con guardado automático); admite rutas parameters.Array.data[i].字段

unity.set_transform

Escritura

Establece el transform del objeto (posición/rotación de Euler/escala)

unity.create_gameobject

Escritura

Crea un GameObject (se puede especificar el padre y los componentes iniciales)

unity.destroy_object

Escritura

Destruye objetos de la escena (los assets de prefab se rechazan por defecto)

unity.create_prefab

Escritura

Guarda un prefab a partir de un objeto de la escena

unity.instantiate_prefab

Escritura

Instancia un prefab en la escena

unity.open_scene

Escritura

Abre una escena (opcionalmente guarda la escena actual primero)

unity.save_scene

Escritura

Guarda la escena actual

unity.run_menu_item

Escritura

Ejecuta un elemento de menú del editor (por ejemplo, GameObject/3D Object/Cube)

unity.list_assets

Consulta

Busca y lista assets (filtros por tipo/carpeta/palabra clave)

unity.get_asset_info

Consulta

Detalles del asset (tipo/tamaño/dependencias/importador/resumen del prefab)

unity.read_text_asset

Consulta

Lee archivos de texto dentro del proyecto (limitado a Assets/, Packages/, ProjectSettings/)

unity.create_asset

Escritura

Crea assets (AnimatorController/Material/PhysicMaterial/AnimationClip/cualquier ScriptableObject)

unity.create_script

Escritura

Crea un archivo de script C# (plantilla de MonoBehaviour, espacio de nombres opcional)

unity.copy_asset

Escritura

Copia assets (añade un número automáticamente si hay nombres duplicados)

unity.delete_asset

Escritura

Elimina assets (por defecto los mueve a la papelera de reciclaje)

unity.create_folder

Escritura

Crea carpetas dentro de Assets (nivel por nivel)

unity.refresh_assets

Escritura

Guarda y actualiza la base de datos de assets

Específico de VRChat (vrc)

Herramienta

Tipo

Descripción

vrc.get_avatars

Consulta

Lista los avatares en la escena y en los prefabs del proyecto (VRCAvatarDescriptor / descriptores antiguos)

vrc.get_avatar_info

Consulta

Detalles completos del avatar: campos del descriptor / capas de animación / árbol de menú de expresiones / parámetros de expresiones / estadísticas de rendimiento / estadísticas de huesos de renderizado / componentes de plugins como MA·VRCFury — para que el agente genere informes y sugerencias

vrc.get_performance_stats

Consulta

Estadísticas de rendimiento (conteo y nivel de polígonos/huesos/materiales/PhysBone/colisionadores; prioriza el cálculo oficial del SDK, de lo contrario estima según los umbrales oficiales y lo marca)

vrc.get_installed_packages

Consulta

Detección de versiones de SDK/plugins relacionados con VRChat (VRCSDK/MA/VRCFury/Poiyomi/DynamicBone/AAO, etc.)

vrc.get_component_info

Consulta

Parámetros serializados completos del componente especificado (MA/VRCFury/PhysBone, etc.)

vrc.set_component_property

Escritura

Modifica campos serializados de cualquier componente (MA/VRCFury, etc.) (los enumerados se usan por nombre, las referencias de recursos por ruta de activo)

vrc.list_expressions_menus

Consulta

Lista los activos de menú de expresiones (VRCExpressionsMenu) del proyecto

vrc.get_expressions_menu

Consulta

Lee la estructura del menú (tipo de control/parámetro/valor/icono/submenú/etiqueta, con soporte recursivo)

vrc.create_expressions_menu

Escritura

Crea un activo de menú de expresiones

vrc.copy_expressions_menu

Escritura

Copia un activo de menú de expresiones

vrc.set_menu_control

Escritura

Añadir/modificar/eliminar controles de menú (Button/Toggle/SubMenu/TwoAxisPuppet/FourAxisPuppet/RadialPuppet, incluyendo labels y subParameters)

vrc.bind_expressions

Escritura

Vincula activos de menú/parámetros al descriptor del avatar (admite objetos de escena y prefabs)

vrc.list_expression_parameters

Consulta

Lista los activos de parámetros de expresiones (VRCExpressionParameters) del proyecto

vrc.get_expression_parameters

Consulta

Lee la lista de parámetros (nombre/tipo Int·Float·Bool/valor predeterminado/si se guarda)

vrc.create_expression_parameters

Escritura

Crea un activo de parámetros de expresiones

vrc.copy_expression_parameters

Escritura

Copia un activo de parámetros de expresiones

vrc.set_parameter

Escritura

Añadir/modificar/eliminar parámetros de expresiones

vrc.ma_get_parameters

Consulta

Lee todos los parámetros del componente ModularAvatarParameters

vrc.ma_set_parameter

Escritura

Añadir/modificar/eliminar parámetros MA (syncType se establece por nombre; los valores no válidos listarán los valores disponibles para esa versión)

Ejemplo de extensión (example)

Herramienta

Tipo

Descripción

example.hello

Consulta

Ejemplo de extensión (demuestra el registro de herramientas personalizadas; se puede eliminar ExampleExtensionTools.cs)

Ejemplos de invocación comunes

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

Modo de solo lectura / lectura-escritura

  • El servidor comprueba el modo de acceso actual antes de ejecutar cualquier herramienta de escritura; en modo de solo lectura devuelve directamente un resultado isError:

{
  "content": [{"type":"text","text":"当前为【只读】模式,已拒绝写入类工具调用「vrc.set_parameter」。…"}],
  "isError": true,
  "structuredContent": {"error": {"code":"permission_denied","access":"write","mode":"readonly"}}
}
  • Estrategia recomendada para el agente: llamar a tools/list o mcp.get_status para obtener el _meta.access de cada herramienta; para las herramientas de tipo write, confirmar primero con el usuario, y no es necesario implementar la interceptación de nuevo en el cliente (el servidor ya lo cubre).


Ejemplos de integración de cliente

curl (modo 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 (modo 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 (navegador)

Abre MCP Inspector, selecciona Streamable HTTP como transporte, y en URL pon http://127.0.0.1:8765/mcp (este servicio ya incluye soporte CORS).

Claude Desktop / otros clientes que solo admiten stdio

Usa una herramienta puente de la comunidad para convertir HTTP MCP a stdio (la herramienta puente se ejecuta en el lado del cliente, no afecta la dependencia cero de este plugin):

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

O usa un agente propio para llamar directamente por HTTP (POST /mcp, consulta el flujo JSON-RPC anterior).


Guía de extensión

El plugin reserva tres niveles de puntos de extensión, sin necesidad de modificar el código fuente del plugin para añadir capacidades:

Método 1: anotación de atributo [McpTool] (recomendado)

Define métodos estáticos públicos en cualquier código que haga referencia al ensamblado VrchatProjectMcp.Core y anótalos con el atributo; el plugin los escanea y registra automáticamente al iniciarse o al llamar a 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);
    }
}

Método 2: interfaz IMcpToolProvider

Adecuado para escenarios donde se decide dinámicamente el conjunto de herramientas (por ejemplo, "registrar la herramienta correspondiente solo después de detectar que un plugin está instalado"):

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

Un ejemplo completo y ejecutable se encuentra en Editor/Tools/Examples/ExampleExtensionTools.cs.

Método 3: registro en tiempo de ejecución / recursos personalizados / endpoints HTTP personalizados

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

Alcance del escaneo: solo se escanean los ensamblados que "hacen referencia al ensamblado VrchatProjectMcp.Core", no se recorren todos los tipos de Unity, el costo es controlable.


Compatibilidad y limitaciones conocidas

Elemento

Descripción

Versión de Unity

2022.3 (.NET Standard 2.1 / C# 9) y Unity 6 (todo el código está escrito en sintaxis C# 9 y se compiló y verificó localmente con LangVersion 9.0)

Plataforma

Windows / macOS / Linux editor (el servidor HTTP usa TcpListener, no depende de APIs específicas de plataforma)

Modo de reproducción

El servicio también está disponible en modo de reproducción; pero las escrituras en la escena en modo de reproducción se pierden al salir del modo de reproducción, ten cuidado

Dependencias de compilación

Cero dependencias en tiempo de compilación de VRCSDK3 / MA / VRCFury; si no están instalados, las herramientas relacionadas devuelven un error claro (no afecta el uso del plugin en sí)

Estadísticas de rendimiento

Prioriza la llamada por reflexión a AvatarPerformanceStats del SDK; si falta el SDK, estima según los umbrales de la documentación oficial y marca claramente «estimado» en el resultado

Creación y edición de activos de menú/parámetros

Requiere que el proyecto tenga instalado VRChat SDK3 (estos tipos de activos los define el SDK); los avatares antiguos de SDK2 solo admiten lectura de información

Escaneo de prefabs

El escaneo de prefabs de vrc.get_avatars requiere cargar cada prefab uno por uno, puede ser lento en proyectos grandes (se puede controlar con limit y includePrefabAssets=false)

Operaciones con diálogos

La ejecución de herramientas tiene un tiempo de espera de 120 segundos en el hilo principal; las operaciones que involucran diálogos modales pueden agotar el tiempo (el plugin evita mostrar diálogos dentro de las herramientas)

Recursos persistentes

Las conexiones largas SSE se establecen bajo demanda; antes de la recarga de dominio, el servicio se detiene y limpia automáticamente para evitar que queden puertos ocupados


Consejos de seguridad

  1. Por defecto solo escucha en 127.0.0.1: solo los procesos locales pueden acceder. Cambiarlo a 0.0.0.0 expondrá el servicio a todos los dispositivos de la red local; asegúrate de entender los riesgos;

  2. Este plugin actualmente no incluye autenticación (la práctica estándar de la comunidad MCP es que el proxy del lado del cliente maneje la autenticación). Si se expone a Internet, añade autenticación en la capa de proxy inverso;

  3. El modo de solo lectura es la última salvaguarda, pero aún se recomienda que el agente obtenga confirmación del usuario antes de operaciones de escritura;

  4. unity.read_text_asset solo permite leer archivos en Assets/, Packages/, ProjectSettings/, no puede leer archivos del sistema fuera de esos directorios.


Estructura del proyecto

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~ usa el sufijo ~ según la convención de UPM; Unity ignora por completo ese directorio al importar el paquete. Para ejecutar pruebas localmente: dotnet run --project DevTests~/CoreSanity/CoreSanity.csproj.


FAQ

P: ¿Por qué no usar HttpListener / WebSocket? En el nivel de API .NET Standard 2.1 de Unity 2022/Unity 6, HttpListener no está disponible; WebSocket requiere una biblioteca de terceros. TcpListener + HTTP/1.1 escrito a mano es la solución más estable y sin dependencias entre versiones.

P: ¿El plugin se incluirá en el paquete del juego? No. La lógica principal está en el ensamblado del Editor (includePlatforms: ["Editor"]); aunque la capa de protocolo está en el directorio Runtime, solo la referencia el Editor, por lo que no entra en el jugador al compilar.

P: ¿Por qué marcar el tipo de herramienta incluso en modo de solo lectura? El marcado de tipo sirve para la decisión del agente (si confirmar dos veces, si intentar llamar), la interceptación del servidor es una salvaguarda de respaldo; la combinación de ambos es más segura.

P: ¿Se puede usar sin VRChat SDK? Sí. Todas las herramientas generales de Unity están disponibles; entre las herramientas de VRChat, «información de avatar / lectura-escritura de componentes / detección de plugins» funcionan lo mejor posible (por reflexión de nombres de tipo), «creación y edición de activos de menú/parámetros» devolverá un aviso claro.

P: ¿Cómo solucionar fallos de llamada del agente? Mira el cuadro de registro en tiempo real del panel de configuración (imprime cada conexión y llamada), o haz que el agente llame a unity.get_console_logs para leer la consola y Editor.log.

P: ¿Qué hago si el puerto está ocupado? Cambia el puerto en el panel de configuración y haz clic en «Reiniciar»; o pon el puerto 0 para asignación automática (el puerto real se muestra en la barra de estado).


Historial de versiones

  • 0.1.0 (versión inicial): servicio MCP HTTP (JSON/SSE), 27 herramientas generales de Unity, 19 herramientas específicas de VRChat, 2 metaherramientas, 1 ejemplo de extensión; control de permisos de solo lectura/lectura-escritura; panel de configuración y registro en tiempo real; puntos de extensión; comentarios y documentación en chino.

Licencia

MIT (ver 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