Quartermaster
Quartermaster
Este proyecto empezó porque quería prototipar una presa.
Nada serio: una demo corta, quizá algo más si funcionaba. Antes de construir nada, quería ver qué era lo que ya tenía y que pudiera acelerar el proceso. Así que busqué en mi biblioteca "presa": no apareció nada. Claro que no apareció nada: ningún activo se llama presa. Pero repartidas entre cuatro paquetes que ya poseía había mallas de hormigón curvado, un sistema de agua, algo de terreno rocoso. Todo lo que la presa necesitaba. Había tenido casi todo aquello durante años y nunca había conectado las piezas.
Eso es lo que te hacen ~1.500 activos repartidos entre dos tiendas. Casi todos de bundles y rebajas, y ninguno recordado. Y no es solo cosa mía: ningún asistente de IA lo sabe tampoco. Pídeles ayuda y o construyen todo desde cero o te mandan de compras, mientras cientos de dólares de exactamente lo que necesitas están en tu disco.
Quartermaster indexa toda tu biblioteca de Unity Asset Store y Fab localmente y se la sirve a tu agente de código a través de MCP. Es la herramienta que deseaba que existiera ese día: pregunta por una presa y te dicen que ya tienes mallas de hormigón curvado.
you → "I want to build a dam — what do I have to work with?"
agent → search_owned_assets(...) finds the concrete meshes, water FX, terrain
validate_stack([...]) checks none of them fight each other
import_asset_to_project(...) unpacks into Assets/, demos strippedCada resultado es algo que ya pagaste. Nada se inventa.

Escribir una descripción, no un nombre: ninguno de esos resultados comparte una palabra con la consulta.
¿Por qué Quartermaster?
El trabajo de un quartermaster nunca fue recordar lo que hay en las tiendas — es asegurarse de que estés equipado cuando llega el momento de moverse. Eso está más cerca del problema real que el olvido. No había perdido nada; sabía que poseía cosas. Lo que no podía hacer era pasar de "quiero prototipar una presa" a "abre estos cuatro paquetes" sin una hora de excavación antes — y quizá algo más si funcionaba no sobrevive a una hora de excavación. Las ideas que llegan así no se rechazan. Simplemente no llegan a ocurrir, y nunca averiguas si habrían funcionado.
Related MCP server: Unity API Communicator MCP Server
La parte que nadie te cuenta
Ninguna de las dos tiendas admite lo que posees.
Unity eliminó /account/purchases (404 desde agosto de 2026). Fab no tiene API de propiedad, ni botón de exportación, ni nada. Tu historial de compras existe solo dentro de su GraphQL privado, tras SSO, MFA y detección de bots.
Conseguirlo requirió cuatro intentos, tres de ellos fallidos:
El Chromium incluido con Playwright — el captcha de Epic lo rechaza de plano ("habilita JavaScript").
Playwright manejando tu navegador real — inyecta hooks detectables; Epic lanza un segundo muro de seguridad después de la contraseña.
Depurador adjunto durante el inicio de sesión — el mismo resultado. Cualquier cosa que toque el flujo de inicio de sesión se marca.
Lo que realmente funciona: deja de automatizar por completo el inicio de sesión. Entras a través de una ventana de navegador normal — sin puerto de depuración, nada entre tú y la tienda — porque la automatización era en sí misma lo que disparaba los sistemas de riesgo. Solo después de que termines, en una sesión que estableciste tú mismo, Quartermaster adjunta un depurador y reproduce las consultas paginadas de la tienda — con sus propias cabeceras CSRF, su propio troceado (42 IDs por petición, porque eso es lo que envía el cliente de Unity).
Ese truco es la mayor parte de este proyecto. El resto — búsqueda, linting, desempaquetado — es sinceramente sencillo en comparación.
Dos reglas ganadas con esfuerzo e integradas en el diseño, por si alguna vez hackeas esto tú mismo:
Los navegadores deben cerrarse correctamente (
taskkillsin/F). Un cierre abrupto pierde la cookie de confianza de dispositivo de Unity y te verás sometido a un desafío MFA en cada sesión futura.Nunca ejecutes una descarga de biblioteca en modo headless. El modo headless activa el sistema de riesgo de Unity incluso con cookies válidas.
Lo que obtienes
Búsqueda que entiende intención y visión. Este es el problema de la presa.
Palabras clave exactas mediante SQLite FTS5.
Intención en lenguaje natural mediante embeddings de texto ONNX locales (
BAAI/bge-small-en-v1.5) — "estructuras de hormigón para retener agua" saca a la superficie mallas y shaders cuyos listados nunca mencionan presas.Comprensión visual cross-modal mediante embeddings CLIP ONNX (
Qdrant/clip-ViT-B-32) — buscar "catedral gótica" puntúa literalmente tus capturas de pantalla y renders promocionales, encontrando activos incluso cuando sus descripciones de texto son completamente mudas. Las tres señales se fusionan con fusión de rango recíproco (RRF) de 3 vías en tu CPU. Sin GPU, sin proceso de base de datos vectorial, sin API en la nube — ONNX Runtime y una matriz numpy, en el mismo proceso que todo lo demás.
Medido en un almacén de ~1.800 activos: ~480 MB de RAM pico con ambos modelos residentes, ~1.5 s para la primera consulta (cargando BGE y CLIP), ~110 ms en caliente después. Los modelos se cargan de forma diferida, así que un agente que nunca busca nunca paga por ellos.
Datos reales sobre tu disco. Escanea %APPDATA%/Unity/Asset Store-5.x/ y el VaultCache de Epic para que cada resultado sepa si ya está descargado o es solo de nube. Los agentes prefieren lo local: una importación sin descargar nada supera a una de 4 GB.
Un linter para stacks. Dos renderizadores de vegetación se pelearán. Un módulo de MicroSplat sin el MicroSplat principal no hace nada en silencio. Un shader solo URP en un proyecto HDRP se renderiza en rosa. Quartermaster los detecta antes de que pases una tarde con ellos.
Desempaquetado directo. Extrae los archivos .unitypackage en caché directamente en Assets/, descartando /Demo/, /Samples/, /Documentation/ y PDFs de paso — normalmente entre un 60 y un 80 % menos de peso por paquete. Cada ruta declarada se normaliza y se verifica dentro de <project>/Assets/; los escapes son estructuralmente imposibles, no solo se filtran.
Instalación
El paquete independiente — descarga Quartermaster-windows-x64.zip desde Releases y descomprímelo en cualquier lugar. No se requiere Python.
Quartermaster.exe— GUI de escritorio con búsqueda spotlightWin+Alt+V, recolección de tiendas, navegación por la biblioteca y desempaquetado directo.Quartermaster-mcp.exe— servidor MCP stdio independiente para Claude Desktop, Cursor, Antigravity y Windsurf.
Los datos de tu biblioteca viven de forma segura en %LOCALAPPDATA%\Quartermaster, así que las actualizaciones consisten en simples reemplazos de carpeta sin pérdida de datos.
Desde el código fuente — requiere Python 3.10+.
git clone https://github.com/Tanshaydar/Quartermaster.git
cd Quartermaster
pip install -r requirements.txtPuebla tu biblioteca:
1. Inicia sesión. El único paso que te necesita. Se abre una ventana de navegador normal; la 2FA y los captchas se comportan exactamente como siempre. Ciérrala cuando termines y la sesión persiste localmente.
python -m src.store_client login unity
python -m src.store_client login fab2. Recolecta y enriquece. De larga duración, reanudable y seguro de volver a ejecutar: cada uno continúa donde se detuvo.
python -m src.store_client fetch unity
python -m src.store_client fetch fab
python -m src.store_client enrich # descriptions and cover art, politely batched
python -m src.store_client fab-deep-media # Fab only: plain HTTP is 403'd, galleries need the authed browser3. Construye los índices locales y luego escanea tu disco.
python -m src.semantic build # text embeddings
python -m src.vision build # screenshot embeddings + concept tagging
python -m src.local_scan # which of them are already downloaded heresemantic build y vision build son lo que hace que "estructuras de hormigón para retener agua" y las consultas de concepto visual encuentren tus activos. Si los omites, la búsqueda sigue funcionando, pero solo con palabras clave exactas.
Ejecuta local_scan después de tener un catálogo, no antes. Si se escanea contra un almacén vacío, no tiene nada contra lo que comparar los nombres de archivo, así que archiva cada paquete en caché como su propia entrada simple. Inofensivo: el siguiente escaneo los concilia con el catálogo real, pero verás duplicados hasta entonces.
¿Ya tienes exportaciones CSV de las tiendas? Omite el navegador por completo:
python -m src.ingest # eats any CSVs in data/seed/
python -m src.semantic build # still needed — see the note above
python -m src.local_scan # then find what's already on diskConecta tus agentes:
Opción A: Auto-registro (un comando)
# Standalone binary users:
Quartermaster-mcp.exe --register --all
# Source users:
python -m src.register --all # Claude Desktop, Cursor, Windsurf, Antigravity
python -m src.register --all --dry-run # look before you leapEl registro se fusiona con las configuraciones de cliente existentes y crea primero un .quartermaster-backup. No machacará tus otros servidores.
Opción B: Configuración manual Pega el bloque del servidor en la configuración de tu cliente:
Binario independiente:
{
"mcpServers": {
"quartermaster": {
"command": "C:/path/to/Quartermaster/Quartermaster-mcp.exe",
"args": []
}
}
}Desde el código fuente:
{
"mcpServers": {
"quartermaster": {
"command": "python",
"args": ["-m", "src.mcp_server"],
"cwd": "C:/path/to/Quartermaster"
}
}
}Claude Desktop lee %APPDATA%/Claude/claude_desktop_config.json, Cursor ~/.cursor/mcp.json, Windsurf ~/.codeium/windsurf/mcp_config.json.
[!NOTE] Calentamiento del modelo en el primer uso: En la primera búsqueda de lenguaje natural o visión, los modelos de embeddings (
BAAI/bge-small-en-v1.5yclip-ViT-B-32) se descargan y se guardan en caché localmente mediante ONNX Runtime (~150 MB). La primera consulta puede tardar de 3 a 5 segundos mientras se carga en memoria; cada consulta posterior se ejecuta en ~100 ms.
Herramientas del agente
Herramienta | Respuestas |
| ¿Qué tengo que encaje con esto? Híbrida: palabras clave + semántica. |
| Metadatos completos, notas de uso, galería, URL de la tienda. |
| Asigna un brief de funcionalidad a paquetes que posees. |
| ¿Se pelearán entre sí? Conflictos de rol, prerrequisitos faltantes. |
| Stacks de producción seleccionados resueltos contra tu biblioteca. |
| Motor, versión y pipeline de renderizado de un proyecto objetivo. |
| Desempaqueta un paquete local en |
| Desglose de categorías y recuentos. |
| Totales por motor y categoría, local vs nube. |
Dos archivos te permiten enseñar a Quartermaster tu propio vocabulario, sin necesidad de cambios de código:
data/recipes.json— roles, prerrequisitos y stacks seleccionados. Esto es con lo que razona el linter de conflictos: qué activos compiten por el mismo trabajo, qué necesita qué, y qué combinaciones consideras un stack de probada eficacia.data/concepts.json— el vocabulario visual contra el que CLIP puntúa tus capturas de pantalla. La lista incluida está pensada para juegos; si haces archviz o previs, reemplázala y reconstruye.
Ambos son JSON plano que se lee en tiempo de ejecución, y ambos tienen una página de referencia en docs/.
Otras formas de entrar
Aplicación de escritorio (
run_desktop.bat) — búsqueda spotlight PySide6 con icono en la bandeja; pulsaWin+Alt+Ven cualquier lugar de Windows. Se ejecuta junto a tu agente sin estorbar: la base de datos funciona en modo WAL, así que la GUI escribiendo mientras tu agente busca no bloquea a ninguno de los dos.Interfaz web (
run_ui.bat) — panel en modo oscuro enhttp://localhost:7890.En Unity — importa
editor_bridge/Quartermaster-Bridge.unitypackagey luegoWindow > Quartermaster. Busca e importa sin salir del editor. Pequeño inciso: ese paquete puente lo generasrc/build_bridge.py, que escribe el mismo formato tar que leeunpacker.py. Dogfooding a propósito.
Seguridad
Esta cosa guarda las sesiones de las tiendas y escribe en tus proyectos, así que se toma la API local en serio:
Cada endpoint que modifica el estado requiere un token (generado en la primera ejecución, almacenado en
data/.auth_token, replicado para el puente de Unity). Envíalo comoX-Quartermaster-TokenoAuthorization: Bearer; la interfaz web recibe automáticamente una cookieSameSite=Strict.Las peticiones de origen cruzado se rechazan incluso con un token válido.
El sandbox del desempaquetador colapsa los segmentos
.., elimina las letras de unidad y los caracteres de control, reubica cualquier cosa que esté fuera deAssets/enAssets/_Quartermaster_Imported/y garantiza que la ruta final quede dentro del proyecto — respaldado por pruebas, no por corazonadas (python run_tests.py -v).El proxy de imágenes se limita a una lista blanca de dominios, bloquea rangos privados y endpoints de metadatos, revalida cada salto de redirección, limita los tamaños y poda las entradas más antiguas cuando la caché supera su límite de archivos.
Nada llama a casa. Tu biblioteca, los embeddings, las rutas de disco y las sesiones de las tiendas permanecen en esta máquina.
Configuración
Claves opcionales en config.json (creado en la primera ejecución):
Clave | Predeterminado | Propósito |
|
| Puerto de la interfaz web / API. |
|
| Cualquier modelo compatible con fastembed. Cámbialo y reconstruye el índice. |
| Detección automática | Sobrescribe las ubicaciones de VaultCache de Fab. |
| demos, docs, PDFs | Lo que descarta el desempaquetador. |
|
| Limitador de cortesía para el enriquecimiento. |
|
| Caché en disco para las carátulas servidas mediante proxy. |
Limitaciones honestas
Windows primero. El escaneo de caché asume rutas de Windows. La búsqueda MCP funciona en cualquier parte; la detección de importación local, no.
Una máquina, un usuario. Sin sincronización, sin modo servidor. Deliberado.
La recolección es scraping. Unity y Fab cambian sus internals cuando les place, y de hecho ya lo han hecho — los tamaños de chunk, los endpoints y las formas GraphQL que hay aquí eran correctos el día en que lo publiqué, no para siempre. Cuando una descarga vuelve vacía,
data/store_harvest.logregistra cada respuesta JSON vista; ahí es donde empezar a investigar.La taxonomía es heurística. Las categorías se infieren mediante una combinación multimodal de tokens de límite de palabra, etiquetas de la tienda y minería de conceptos visuales CLIP zero-shot a partir de capturas de pantalla. Los títulos muy estilizados sin capturas de pantalla se asignan por defecto a
Tools & Utilities, aunque la búsqueda vectorial semántica y la búsqueda híbrida siempre cubren el vault completo, independientemente de la categoría asignada. El ajuste del vocabulario visual está documentado endocs/concepts.md.La indexación se detiene en el límite del paquete y los metadatos de la tienda son ruidosos. La búsqueda opera sobre títulos, descripciones, etiquetas y embeddings CLIP de imagen completa de las capturas de la galería. Se enfrenta a dos límites estructurales:
Sin indexación de activos internos: No desempaqueta el contenido de los archivos comprimidos para indexar sub-mallas, prefabs o nombres de archivo internos individuales (p. ej., buscar un subelemento arquitectónico concreto como una «teja árabe» o una «contrahuella de hormigón curvo» dentro de un paquete de entorno modular no dará resultados a menos que se declare en el texto del listado o sea prominente en los renders de la galería).
Texto de plantilla vacío de la tienda: Una fracción notable de los listados de la tienda (en particular el
og:descriptioncon plantilla de Unity) contiene texto de marketing puro ("Elevate your workflow with...") que no aporta ninguna información técnica. Los embeddings CLIP visuales existen precisamente para salvar esta brecha, pero los vectores de imagen completa no siempre pueden resolver subelementos de grano fino.
El desempaquetado es solo para Unity. Los activos de Fab se indexan y son buscables, pero la extracción de
.unitypackageobviamente no aplica.
Cuando se rompe
Abre un issue. Es un proyecto en solitario, así que no puedo prometer un tiempo de respuesta, pero sí los leo.
Lo que ayuda, según el síntoma:
Una descarga volvió vacía o incompleta. Es lo que tiene más probabilidades de romperse, porque las tiendas cambian sus internals sin previo aviso.
data/store_harvest.logregistra cada respuesta JSON que vio la recolección — la cola de ese archivo es el diagnóstico completo. Inclúyela.La búsqueda no devuelve nada sensato. Comprueba primero
python -m src.vision status. Un índice sin construir degrada en silencio la búsqueda a solo palabras clave, y eso explica la mayoría de los informes de «la búsqueda está rota».Categorías incorrectas, o un conflicto que no es real. Eso suele ser la base de conocimiento, más que el código —
docs/recipes.mdydocs/concepts.mdexplican cómo arreglarlo tú mismo, y un PR adata/recipes.jsoncon una regla para la que no tengo los activos necesarios para probarla es genuinamente bienvenido.La aplicación independiente no arranca. Es
--windowed, así que falla en silencio.%LOCALAPPDATA%\Quartermaster\data\crash.loges donde va a parar.
Si construyes algo chulo con esto, de verdad me gustaría saberlo.
Nota sobre las tiendas
Quartermaster lee tu propia cuenta, desde tu propia máquina, en un navegador en el que has iniciado sesión tú mismo. No guarda credenciales, no envía nada a ningún servidor mío y no tiene telemetría — la sesión vive en un perfil de navegador local y la biblioteca en un archivo SQLite local. No hay ningún backend compartido que pueda filtrarse.
No está afiliado a Unity Technologies ni a Epic Games, no cuenta con su respaldo ni tiene conexión con ellas. Unity, Unity Asset Store, Fab y Unreal Engine son marcas comerciales de sus respectivos propietarios. Automatizar el acceso a cualquier servicio es una decisión que debes tomar tú conforme a los términos de ese servicio, y esta herramienta no la toma por ti.
Licencia
MIT. Consulta 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
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that integrates AI assistants like Claude and Cursor directly into the Unity Editor to automate game development workflows. It provides over 40 built-in tools for scene manipulation and project management, while offering a simple C# API for creating custom extensions.9GPL 3.0
- AlicenseBqualityDmaintenanceControl Unity Editor from AI agents. 200+ MCP tools for GameObjects, Scenes, Assets, Materials, Prefabs, Terrain, Physics, Lighting, and more. Works with Claude, Cursor, Windsurf, VS Code Copilot — any MCP client. Zero config: just npx and go.6225MIT
- AlicenseNot gradedqualityDmaintenanceThe first Model Context Protocol server for Unity projects. It gives AI assistants real understanding of Unity scenes, prefabs, and C# scripts through a queryable knowledge graph.571MIT

glade-mcpofficial
AlicenseNot gradedqualityAmaintenanceConnect any MCP-compatible AI client (Claude Code, Cursor, Windsurf) to Unity or Godot. 300+ granular tools, an editor aware system prompt, game design document project context, script semantic search, and skill calibration.204MIT
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/Tanshaydar/Quartermaster'
If you have feedback or need assistance with the MCP directory API, please join our Discord server