game-asset-mcp
game-asset-mcp
Un servidor MCP que permite a un agente de IA producir activos 3D listos para el juego de principio a fin — imagen de referencia, malla, texturas PBR, procedencia — y retexturizar mallas que ya posees.
La mayoría de las herramientas de generación de activos se detienen en "escribe un prompt, obtén una malla". Esa es la mitad fácil. La mitad que realmente bloquea un proyecto es la malla que ya tienes: el kitbash que modelaste la semana pasada, el prop del marketplace cuyos materiales no encajan con tu dirección de arte, el greybox que necesita parecer acero corroído para el viernes. texture_existing_asset toma una malla que tú proporcionas y le da nuevos materiales PBR sin regenerar la geometría que ya aprobaste.
Todo queda registrado. Cada trabajo conserva el prompt, la semilla, la versión del modelo del proveedor, el id de tarea del proveedor y un SHA-256 para cada byte descargado — para que dentro de seis meses aún puedas responder "¿qué produjo este archivo?".
El servidor es agnóstico respecto al proveedor por construcción. Hoy impulsa Tripo para 3D y Leonardo.Ai para imágenes de referencia, detrás de dos interfaces pequeñas (ImageProvider, Model3DProvider). Añadir un proveedor no cambia la superficie de herramientas. Consulta docs/architecture.md para saber por qué está construido así.
Requisitos
Node.js >= 18.17 — el servidor usa
fetch,FormData,BlobyAbortControllerglobales.Sin módulos nativos, sin cadena de herramientas de compilación, sin base de datos. Funciona en cualquier lugar donde funcione Node.
Al menos una clave de API de proveedor (consulta Configuración). Con una basta — se validan de forma diferida.
Instalación
Ejecútalo sin instalar nada de forma permanente:
npx game-asset-mcpO instálalo en un proyecto:
npm install game-asset-mcpO compílalo desde el código fuente:
git clone https://github.com/<your-account>/game-asset-mcp.git
cd game-asset-mcp
npm install
npm run build # emits dist/
node dist/server.jsEl servidor habla MCP a través de stdio. Iniciado directamente en una terminal, simplemente se quedará esperando a que un cliente le hable — eso es un comportamiento correcto, no un cuelgue. Los registros van a stderr; stdout pertenece al protocolo.
Configuración
Copia .env.example a .env, o establece las variables en el bloque env de tu cliente MCP (que suele ser la mejor opción — consulta los fragmentos a continuación).
Variable | Obligatoria | Por defecto | Propósito |
| para herramientas 3D | — | Clave de API de Tripo. Crea una en platform.tripo3d.ai. |
| para herramientas de imagen | — | Clave de Leonardo.Ai con acceso a API habilitado. |
| no |
| Dónde se escriben los activos y los registros de trabajos. Relativo al directorio de trabajo del servidor. |
| no |
| Límite máximo para cualquier descarga individual, aplicado durante la transmisión. |
| no |
| Tiempo de espera HTTP por solicitud. |
| no |
|
|
⚠️ Los créditos de API de Tripo se facturan por separado de una suscripción a Tripo Studio
Esto sorprende a casi todo el mundo. Una suscripción web a Tripo Studio no financia las llamadas a la API. Son dos productos diferentes con dos saldos diferentes. Si has estado generando modelos felizmente en la aplicación web de Studio y tu primera llamada a create_3d_asset vuelve rechazada por créditos insuficientes, no has configurado nada mal — necesitas créditos de API en la plataforma de desarrolladores. Cómpralos en platform.tripo3d.ai, no en la aplicación de Studio.
Con un proveedor basta
Las credenciales se validan de forma diferida, en el momento en que una herramienta las necesita, nunca al arrancar. Si solo estableces TRIPO_API_KEY, el servidor arranca correctamente y todas las herramientas 3D funcionan; las herramientas de imagen devuelven un error claro CONFIG_MISSING que nombra la variable que te falta. Lo contrario también se cumple. Nunca te ves obligado a tener una cuenta que no quieres solo para usar la mitad del pipeline que sí quieres.
Configuración del cliente MCP
Claude Code / Claude Desktop
Añade a tu configuración de MCP (claude_desktop_config.json, o .mcp.json en un proyecto para Claude Code):
{
"mcpServers": {
"game-asset": {
"command": "node",
"args": ["/absolute/path/to/game-asset-mcp/dist/server.js"],
"env": {
"TRIPO_API_KEY": "tsk_...",
"LEONARDO_API_KEY": "...",
"ASSET_OUTPUT_DIR": "/absolute/path/to/your/project/assets/generated",
"ASSET_LOG_LEVEL": "info"
}
}
}
}Usa una ruta absoluta para args y para ASSET_OUTPUT_DIR. El directorio de trabajo de un cliente MCP no es el que crees, y un directorio de salida relativo dispersará los activos en algún lugar inesperado.
Cualquier otro cliente MCP
El mismo servidor, descrito genéricamente — un proceso hijo stdio:
{
"name": "game-asset",
"transport": "stdio",
"command": "npx",
"args": ["-y", "game-asset-mcp"],
"env": {
"TRIPO_API_KEY": "tsk_...",
"LEONARDO_API_KEY": "...",
"ASSET_OUTPUT_DIR": "/absolute/path/to/assets/generated"
}
}Herramientas disponibles
Herramienta | Gasta créditos | Qué hace |
| No | Prueba en seco. Muestra el prompt exacto y el prompt negativo que produciría una especificación, para que la dirección de arte pueda corregirse antes de pagar nada. |
| Sí | Convierte una especificación de activo en imágenes de referencia construidas para la reconstrucción — sujeto aislado, silueta completa, luz plana, fondo liso. Crea el trabajo de activo. |
| Sí | Explora un eje (silueta, tratamiento de material, detallado, desgaste, proporciones, componentes funcionales) manteniendo fija la identidad del objeto. |
| No | Marca qué candidato de referencia reconstruirá el paso 3D. Solo contabilidad local. |
| Sí | Reconstruye una malla con texturas PBR a partir de la referencia seleccionada — o directamente desde texto cuando no existe referencia. Devuelve inmediatamente un trabajo para consultar. |
| Sí | Aplica nuevos materiales PBR a una malla que ya posees (GLB/GLTF/FBX/OBJ/STL) o a una generada anteriormente. La geometría no se toca. |
| No | Consulta un trabajo. Mapea el vocabulario de estados del proveedor a un ciclo de vida normalizado y mantiene el estado bruto junto a él. |
| No | Descarga el modelo, las texturas y los renders de vista previa del proveedor a tu espacio de trabajo, calculando el hash y registrando cada archivo. |
| No | Lee un glTF/GLB descargado e informa de lo que contiene realmente — mallas, materiales, canales de textura, tamaños. |
| Sí — solo imágenes | El punto de entrada orientado a la intención: solicitud en lenguaje natural, especificación de activo más candidatos de referencia a la salida. Se detiene deliberadamente antes del gasto 3D para que un humano o agente elija la referencia primero. |
| No | Lista los trabajos conocidos, del más reciente al más antiguo, como resúmenes compactos. |
Solo cinco herramientas pueden costarte dinero, y cada una lo dice en su descripción antes de ser llamada.
Flujo de trabajo de ejemplo
Pipeline completo: de la idea al activo inspeccionado
1. generate_asset_reference → spends image credits, returns assetJobId + N candidates
2. (inspect the images) → look at the returned reference images and choose one
3. select_reference → free; records which candidate wins
4. create_3d_asset → spends 3D credits, returns a task to poll
5. get_asset_job → free; poll until status is "ready" (or "failed")
6. download_asset → free; pulls model + textures + previews into the workspace
7. inspect_asset → free; confirms what actually landed on diskEl paso 2 no es decoración. Elegir la referencia antes de gastar créditos 3D es toda la razón por la que el pipeline se divide aquí: una mala referencia produce una malla derretida, y solo lo descubres después de pagar por la reconstrucción.
Retexturizado: más corto, más barato, y el flujo que la mayoría de las herramientas no tienen
Ya tienes la malla. No hay nada que referenciar, nada que seleccionar, nada que reconstruir:
1. texture_existing_asset → spends texturing credits on a mesh you supply
2. get_asset_job → free; poll until ready
3. download_asset → free
4. inspect_asset → freeUna llamada de pago en lugar de dos, y la geometría que ya aprobaste vuelve sin cambios.
Costes y efectos secundarios
Llamadas que gastan créditos del proveedor: generate_asset_reference, generate_reference_variations, create_3d_asset, texture_existing_asset, y el paso de generación de imágenes dentro de create_game_prop. Nada más en este servidor puede cobrarse.
Llamadas gratuitas: select_reference, get_asset_job, download_asset, inspect_asset, list_asset_jobs. Consulta y descarga tantas veces como quieras.
Un POST que consume créditos nunca se reintenta automáticamente. Esta es una regla deliberada y de peso, y vive en la capa HTTP, no en cada punto de llamada. Cuando una solicitud que crea una tarea de generación falla — tiempo de espera agotado, reinicio de socket, 502 — el cliente no puede saber si el proveedor la aceptó antes de que se rompiera la conexión. Reintentar podría ser gratuito; también podría cobrarte el doble por una malla que nunca recibes. Así que no reintenta, el error vuelve directamente, y la decisión de intentarlo de nuevo es tuya. Las lecturas idempotentes — consultas de estado, descargas de archivos — se reintentan libremente con retroceso exponencial, porque repetirlas no cuesta nada.
Otros efectos secundarios que conviene conocer:
Los archivos se escriben en disco. Todo cae bajo
ASSET_OUTPUT_DIR. Nada se escribe fuera de él: las rutas se resuelven y cualquier ruta que escape de la raíz del espacio de trabajo se rechaza.Nada se sobrescribe silenciosamente. Un nombre de activo que colisiona recibe un sufijo numérico (
crate,crate_2, …) en lugar de destruir un resultado que quizás ya has revisado.Las descargas tienen un límite de
ASSET_MAX_DOWNLOAD_BYTESy el límite se aplica durante la transmisión, no desde la cabeceraContent-Length— un servidor que miente sobre el tamaño no puede agotar tu memoria.Solo HTTPS. Las URLs que no son HTTPS se rechazan directamente, incluidas las que llegan dentro de una respuesta del proveedor.
Las claves de API se redactan de los registros de forma centralizada, para que ningún punto de registro individual pueda filtrar una.
Estructura del espacio de trabajo
Cada activo recibe un directorio autocontenido. Ábrelo en un explorador de archivos dentro de seis meses y seguirá explicándose por sí mismo:
assets/generated/
├── .jobs/ job records, one JSON file per job
│ └── asset_<uuid>.json
└── <asset_name>/
├── asset.json complete provenance: spec, prompt, seed,
│ model version, provider ids, file hashes
├── source/ the reference image(s) the mesh was built from
├── model/ the mesh (GLB by default)
├── textures/ extracted PBR maps
├── previews/ provider-rendered turnarounds
└── metadata/ raw provider payloads, kept for debugging<asset_name> es el nombre de tu especificación, saneado: en minúsculas, los caracteres no alfanuméricos convertidos en guiones bajos. El directorio .jobs es un directorio oculto a propósito — navegar por tu espacio de trabajo de activos debería mostrar activos, no contabilidad.
Solución de problemas
Cada error lleva un code legible por máquina y una marca retryable, para que un agente pueda decidir qué hacer a continuación sin analizar prosa.
CONFIG_MISSING — falta una credencial.
La herramienta que llamaste necesita un proveedor que no has configurado. El mensaje nombra la variable de entorno exacta. Establécelo en el bloque env de tu cliente MCP y reinicia el cliente — un archivo .env solo se lee si el directorio de trabajo del servidor es donde crees que está, que bajo un cliente MCP normalmente no lo es.
PROVIDER_HTTP con estado 401/403 — clave de API no válida.
La clave es incorrecta, ha sido revocada, o es del proveedor equivocado. Dos trampas específicas: las claves de Leonardo necesitan acceso a API habilitado en la cuenta (un inicio de sesión web por sí solo no lo concede), y una clave de Tripo sin saldo de crédito de API puede fallar en la primera llamada de pago aunque la clave en sí sea válida. Consulta la advertencia de créditos más arriba.
RATE_LIMITED — HTTP 429.
Marcado como reintentable. Las consultas y descargas retroceden y se reintentan automáticamente (400 ms, 800 ms, 1600 ms, con tope de 8 s). Las solicitudes de generación no lo hacen: reinténtalas tú mismo una vez que la ventana se despeje, deliberadamente, porque cuestan dinero.
PROVIDER_TASK_FAILED — la tarea falló del lado del proveedor.
La llamada HTTP tuvo éxito y la generación no. El mensaje del propio proveedor se conserva en los detalles del error. Un rechazo de moderación también cae aquí: reescribe el prompt en lugar de reintentarlo sin cambios. Ten en cuenta que una respuesta de Tripo puede llevar HTTP 200 con un code de envoltorio distinto de cero; eso es un fallo, y este servidor lo trata como tal en lugar de informar un éxito fantasma.
La descarga falla con PROVIDER_HTTP 403/404 — la URL expiró.
Esta es la sorpresa más común. Las URL de modelo y vista previa del proveedor son de corta duración. Están firmadas, expiran, y una URL que funcionaba hace veinte minutos ahora está muerta. La solución no es reintentar la misma URL: vuelve a llamar a get_asset_job para re-consultar al proveedor y obtener URL frescas, luego download_asset inmediatamente. Como hábito: descarga tan pronto como un trabajo informe ready, no al final de una sesión larga.
INVALID_INPUT — formato de imagen no compatible.
Las imágenes de referencia deben ser formatos raster estándar seguros para web (PNG, JPEG, WebP). HDR, EXR, PSD con capas, SVG y TIFF de varias páginas no son entradas reconstruibles. Para texture_existing_asset, las mallas deben ser GLB, GLTF, FBX, OBJ o STL. Convierte primero; el proveedor no lo hará por ti.
PROVIDER_MALFORMED_RESPONSE — el proveedor devolvió algo inesperado.
Cuerpo no JSON, envoltorio vacío, un éxito sin datos, o una subida que no devolvió token de archivo. Normalmente significa un incidente del lado del proveedor o una deriva de versión de API. Establece ASSET_LOG_LEVEL=debug para ver la forma de la solicitud (las claves están redactadas) y consulta la página de estado del proveedor antes de asumir que el error es local.
DOWNLOAD_TOO_LARGE.
El archivo superó ASSET_MAX_DOWNLOAD_BYTES. Un GLB PBR de alta calidad puede ser grande; aumenta el límite si realmente quieres el archivo.
PATH_ESCAPE.
Un nombre de archivo proporcionado por el proveedor intentó resolverse fuera de tu espacio de trabajo. La escritura fue rechazada. Esto nunca debería ocurrir en operación normal; por favor abre un issue si ocurre.
Estado
Este es software temprano, y las partes con más probabilidad de desviarse están marcadas como tales en lugar de asumirse silenciosamente.
Las rutas de endpoint v3 de Tripo están fijadas en exactamente un módulo (src/providers/model3d/tripo.ts) y documentadas en un comentario al principio del mismo. La documentación pública de Tripo describe la superficie v3 de dos maneras diferentes: un endpoint de tarea genérico y rutas por operación, y ambas aparecen en la documentación actual. Este cliente implementa la forma de tarea, que coincide con el comportamiento observable de que cada generación devuelve un task_id para consultar, y expone TRIPO_BASE_URL para que puedas redirigir sin editar código. Las rutas son lo primero que verifica la prueba de humo en vivo, porque una ruta incorrecta devuelve un 404 que se ve exactamente como una clave API incorrecta.
Nunca se ha hecho una llamada a una API de proveedor en vivo. Esta es la advertencia más importante aquí, por lo que se declara claramente en lugar de ocultarse. Cada una de las 165 pruebas se ejecuta contra mocks o el sistema de archivos local. Cubren la construcción de prompts, el mapeo de estados, la seguridad de rutas, el almacén de trabajos, las reglas de reintento y redirección de la capa HTTP, y la inspección de glTF contra archivos reales, pero una suite en verde no dice nada sobre si Leonardo y Tripo se comportan como este cliente asume.
Concretamente, estos permanecen sin verificar:
Las rutas de endpoint v3 de Tripo descritas anteriormente.
Si
texture_modelacepta una malla subida (file_token) o solo una malla producida por una tarea previa de Tripo (original_model_task_id). Esto decide si puedes retexturizar un modelo que ya posees, que es la característica para la que existe este servidor. Resolverlo cuesta una llamada de textura HD.Los ids de modelo de Leonardo en
src/providers/image/leonardo.ts, que fueron transcritos de documentación publicada. Verifícalos contraGET /platformModels; un id obsoleto falla como un HTTP 400 que se lee como un cuerpo de solicitud malformado. TantoLEONARDO_MODEL_IDcomo unmodelIdpor llamada existen como vías de escape.
Si eres la primera persona en ejecutar esto con claves reales, espera tener que corregir una ruta de endpoint y por favor abre un issue con lo que encontraste.
Lo que sí está verificado: npm run verify construye el servidor, lo inicia sobre stdio con un cliente MCP real, completa el handshake y afirma que las once herramientas se registran. Eso es un viaje de ida y vuelta de protocolo, no una cadena de versión: un servidor que no logra registrar sus herramientas aún se inicia perfectamente.
Contribuciones
Se aceptan issues y pull requests. Si agregas un proveedor, implementa ImageProvider o Model3DProvider y no cambies nada más; si un nuevo proveedor obliga a cambiar la superficie de herramientas, la abstracción está mal y ese es el error que vale la pena discutir primero.
Licencia
MIT © 2026 Ben Haire. Ver LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate game assets with AI: sprites, 3D models, animations, sound effects, music, and voices.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
AI visual generation agent: multi-pipeline rendering, prompt crafting, and image composition.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/theisegoria/game-asset-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server