Quartermaster
Quartermaster
Dieses Projekt entstand, weil ich einen Staudamm prototypisieren wollte.
Nichts Ernstes — eine kurze Demo, vielleicht mehr, wenn es funktioniert hätte. Bevor ich irgendetwas baute, wollte ich wissen, was ich bereits besaß, das den Prozess beschleunigen könnte. Also durchsuchte ich meine Bibliothek nach „dam“: nichts kam zurück. Natürlich kam nichts zurück — kein Asset trägt den Namen dam. Aber verteilt über vier Pakete, die ich bereits besaß, gab es gekrümmte Beton-Meshes, ein Wassersystem, felsiges Gelände. Alles, was der Damm brauchte. Den Großteil davon hatte ich seit Jahren, ohne die Teile je zusammenzusetzen.
Das bewirken ~1.500 Assets in zwei Stores. Fast alles davon aus Bundles und Sales, nichts davon im Gedächtnis. Und es geht nicht nur mir so — auch kein KI-Assistent weiß es. Bittet man einen um Hilfe, baut er entweder alles von Grund auf neu oder schickt einen einkaufen, während hunderte Dollar des exakt Richtigen auf der eigenen Festplatte liegen.
Quartermaster indexiert deine gesamte Unity-Asset-Store- und Fab-Bibliothek lokal und stellt sie deinem Coding-Agenten über MCP bereit. Es ist das Werkzeug, das ich mir an jenem Tag gewünscht hätte: Frag nach einem Damm und erfahre, dass du bereits gekrümmte Beton-Meshes besitzt.
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 strippedJedes Ergebnis ist etwas, das du bereits bezahlt hast. Nichts ist erfunden.

Eine Beschreibung eintippen, keinen Namen — keines dieser Ergebnisse teilt ein Wort mit der Suchanfrage.
Warum Quartermaster? Die Aufgabe eines Quartiermeisters war nie, sich zu merken, was in den Lagern liegt — sondern sicherzustellen, dass du ausgerüstet bist, wenn es losgeht. Das kommt dem eigentlichen Problem näher als das Vergessen. Ich hatte nichts verloren; ich wusste, dass ich Zeug besaß. Was ich nicht konnte, war, von „Ich möchte einen Staudamm prototypisieren“ zu „Öffne diese vier Pakete“ zu gelangen, ohne vorher eine Stunde zu graben — und vielleicht mehr, wenn es funktioniert hätte überlebt keine Stunde Graben. Ideen, die auf diese Weise entstehen, werden nicht verworfen. Sie finden nur stillschweigend nicht statt, und man erfährt nie, ob sie funktioniert hätten.
Was dir niemand sagt
Keiner der beiden Stores gibt zu, was du besitzt.
Unity hat /account/purchases entfernt (seit August 2026 404). Fab hat keine Ownership-API, keinen Export-Button, nichts. Deine Kaufhistorie existiert nur in deren privatem GraphQL, hinter SSO, MFA und Bot-Erkennung.
Um da heranzukommen, brauchte es vier Versuche, drei davon Fehlschläge:
In Playwright gebündeltes Chromium — Epics Captcha lehnt es rundweg ab („JavaScript aktivieren“).
Playwright steuert deinen echten Browser — injiziert erkennbare Hooks; Epic wirft nach dem Passwort eine zweite Sicherheitswand auf.
Debugger während der Anmeldung angehängt — gleiches Ergebnis. Alles, was den Login-Ablauf berührt, wird markiert.
Was tatsächlich funktioniert: die Anmeldung gar nicht erst zu automatisieren. Du meldest dich über ein normales Browserfenster an — kein Debug-Port, nichts zwischen dir und dem Store —, denn die Automatisierung selbst war es, die die Risikosysteme ausgelöst hat. Erst nachdem du fertig bist, hängt Quartermaster in einer Sitzung, die du selbst eingerichtet hast, einen Debugger an und spielt die eigenen paginierten Abfragen des Stores ab — mit dessen eigenen CSRF-Headern, dessen eigenem Chunking (42 IDs pro Anfrage, weil das Unitys Client so sendet).
Dieser Trick macht den Großteil dieses Projekts aus. Der Rest — Suche, Linting, Entpacken — ist ehrlich gesagt einfach im Vergleich.
Zwei hart erkämpfte Regeln sind ins Design eingebacken, falls du selbst daran herumschraubst:
Browser müssen sauber geschlossen werden (
taskkillohne/F). Ein abruptes Beenden verliert Unitys Device-Trust-Cookie, und du wirst bei jeder künftigen Sitzung zu MFA aufgefordert.Führe einen Bibliotheksabruf niemals headless aus. Headless triggert Unitys Risikosystem selbst mit gültigen Cookies.
Related MCP server: Unity API Communicator MCP Server
Was du bekommst
Suche, die Absicht & Bild versteht. Das ist das Damm-Problem.
Exakte Schlüsselwörter per SQLite FTS5.
Natürlichsprachliche Absicht über lokale ONNX-Text-Embeddings (
BAAI/bge-small-en-v1.5) — „concrete structures for holding back water“ spürt Meshes und Shader auf, deren Listings Dämme nie erwähnen.Cross-modales visuelles Verständnis über ONNX-CLIP-Embeddings (
Qdrant/clip-ViT-B-32) — die Suche nach „gothic cathedral“ bewertet buchstäblich deine Screenshots und Promo-Render und findet Assets selbst dann, wenn ihre Textbeschreibungen völlig schweigen. Alle drei Signale werden mit 3-Wege-Reciprocal-Rank-Fusion (RRF) auf deiner CPU fusioniert. Keine GPU, kein Vektor-Datenbankprozess, keine Cloud-API — ONNX Runtime und eine numpy-Matrix, im selben Prozess wie alles andere.
Gemessen an einem Bestand von ~1.800 Assets: ~480 MB RAM-Peak mit beiden residenten Modellen, ~1,5 s für die erste Abfrage (Laden von BGE und CLIP), danach ~110 ms warm. Die Modelle werden lazy geladen, sodass ein Agent, der nie sucht, nie dafür zahlt.
Der tatsächliche Zustand deiner Festplatte. Scannt %APPDATA%/Unity/Asset Store-5.x/ und Epics VaultCache, sodass jedes Ergebnis weiß, ob es bereits heruntergeladen oder nur in der Cloud ist. Agenten bevorzugen, was lokal ist — ein Import ohne Download schlägt einen mit 4 GB.
Ein Linter für Stacks. Zwei Vegetations-Renderer werden sich streiten. Ein MicroSplat-Modul ohne das Kern-MicroSplat tut stillschweigend nichts. Ein URP-only-Shader in einem HDRP-Projekt rendert pink. Quartermaster erkennt das, bevor du einen Nachmittag damit verbringst.
Direktes Entpacken. Extrahiert gecachte .unitypackage-Dateien direkt nach Assets/ und verwirft dabei /Demo/, /Samples/, /Documentation/ und PDFs — typischerweise 60–80 % weniger Ballast pro Paket. Jeder deklarierte Pfad wird normalisiert und innerhalb von <project>/Assets/ geprüft; Pfadausbrüche sind strukturell unmöglich, nicht nur herausgefiltert.
Installation
Das Standalone-Bundle — lade Quartermaster-windows-x64.zip von Releases herunter und entpacke es irgendwohin. Kein Python erforderlich.
Quartermaster.exe— Desktop-GUI mitWin+Alt+V-Spotlight-Suche, Store-Harvesting, Bibliotheksdurchsuchen und direktem Entpacken.Quartermaster-mcp.exe— eigenständiger MCP-stdio-Server für Claude Desktop, Cursor, Antigravity und Windsurf.
Deine Bibliotheksdaten liegen sicher in %LOCALAPPDATA%\Quartermaster, sodass Upgrades einfache Ordnerersetzungen ohne Datenverlust sind.
Aus dem Quellcode — benötigt Python 3.10+.
git clone https://github.com/Tanshaydar/Quartermaster.git
cd Quartermaster
pip install -r requirements.txtBefülle deine Bibliothek:
1. Anmelden. Der eine Schritt, der dich braucht. Ein normales Browserfenster öffnet sich; 2FA und Captchas verhalten sich genau wie immer. Schließe es, wenn du fertig bist, und die Sitzung bleibt lokal erhalten.
python -m src.store_client login unity
python -m src.store_client login fab2. Sammeln und anreichern. Langlaufend, fortsetzbar, gefahrlos wiederholbar — jeder Durchlauf macht dort weiter, wo er aufgehört hat.
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. Die lokalen Indizes erstellen, dann deine Festplatte scannen.
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 und vision build sorgen dafür, dass „concrete structures for holding back water“ und visuelle Konzeptanfragen deine Assets finden. Überspringst du sie, funktioniert die Suche weiterhin, aber nur mit exakten Schlüsselwörtern.
Führe local_scan erst nach einem vorhandenen Katalog aus, nicht davor. Bei einem Scan gegen einen leeren Bestand gibt es nichts, womit Dateinamen abgeglichen werden könnten, also legt er jedes gecachte Paket als eigenen, nackten Eintrag ab. Harmlos — der nächste Scan gleicht sie mit dem echten Katalog ab —, aber bis dahin siehst du Doppelte.
Du hast bereits CSV-Exporte aus den Stores? Überspringe den Browser komplett:
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 diskVerbinde deine Agenten:
Option A: Automatische Registrierung (ein Befehl)
# 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 leapDie Registrierung fügt sich in bestehende Client-Konfigurationen ein und erstellt zuerst ein .quartermaster-backup. Sie überschreibt deine anderen Server nicht.
Option B: Manuelle Konfiguration Füge den Server-Block in deine Client-Konfiguration ein:
Standalone-Binary:
{
"mcpServers": {
"quartermaster": {
"command": "C:/path/to/Quartermaster/Quartermaster-mcp.exe",
"args": []
}
}
}Aus dem Quellcode:
{
"mcpServers": {
"quartermaster": {
"command": "python",
"args": ["-m", "src.mcp_server"],
"cwd": "C:/path/to/Quartermaster"
}
}
}Claude Desktop liest %APPDATA%/Claude/claude_desktop_config.json, Cursor ~/.cursor/mcp.json, Windsurf ~/.codeium/windsurf/mcp_config.json.
[!NOTE] Modell-Aufwärmen beim ersten Start: Bei der allerersten natürlichsprachlichen oder visuellen Suche werden die Embedding-Modelle (
BAAI/bge-small-en-v1.5undclip-ViT-B-32) von ONNX Runtime heruntergeladen und lokal zwischengespeichert (~150 MB). Die erste Abfrage kann 3–5 Sekunden dauern, während sie in den Speicher geladen werden; jede weitere Abfrage läuft in ~100 ms.
Agent-Tools
Tool | Antworten |
| Was besitze ich, das dazu passt? Hybride Stichwort- + semantische Suche. |
| Vollständige Metadaten, Verwendungshinweise, Galerie, Store-URL. |
| Ordnet ein Feature-Briefing vorhandenen Paketen zu. |
| Kämpfen diese miteinander? Rollenkonflikte, fehlende Voraussetzungen. |
| Kuratierte Produktions-Stacks, abgeglichen mit deiner Bibliothek. |
| Engine, Version, Render-Pipeline eines Zielprojekts. |
| Entpacke ein lokales Paket nach |
| Kategorie-Aufschlüsselung und Anzahl. |
| Gesamtzahlen nach Engine und Kategorie, lokal vs. Cloud. |
Zwei Dateien ermöglichen es dir, Quartermaster dein eigenes Vokabular beizubringen, ohne Codeänderungen:
data/recipes.json— Rollen, Voraussetzungen und kuratierte Stacks. Damit arbeitet der Konflikt-Linter: welche Assets um dieselbe Aufgabe konkurrieren, was was braucht und welche Kombination du als bewährten Stack betrachtest.data/concepts.json— das visuelle Vokabular, gegen das CLIP deine Screenshots bewertet. Die mitgelieferte Liste ist auf Spiele zugeschnitten; wenn du Archviz oder Previs machst, ersetze sie und baue die Indizes neu.
Beides sind einfache JSON-Dateien, die zur Laufzeit gelesen werden, und beide haben eine Referenzseite unter docs/.
Weitere Wege
Desktop-App (
run_desktop.bat) — PySide6-Spotlight-Suche mit Tray-Symbol; drückeWin+Alt+Vüberall in Windows. Läuft neben deinem Agenten, ohne ihm in die Quere zu kommen — die Datenbank läuft im WAL-Modus, sodass das Schreiben der GUI während der Suche deines Agenten keinen von beiden blockiert.Web-UI (
run_ui.bat) — Dashboard im dunklen Modus unterhttp://localhost:7890.In Unity — importiere
editor_bridge/Quartermaster-Bridge.unitypackage, dannWindow > Quartermaster. Suche und importiere, ohne den Editor zu verlassen. Kleine Randnotiz: Dieses Bridge-Paket wird vonsrc/build_bridge.pyerzeugt, das dasselbe Tar-Format schreibt, dasunpacker.pyliest. Bewusstes Dogfooding.
Sicherheit
Dieses Ding verwaltet Store-Sitzungen und schreibt in deine Projekte, also nimmt es die lokale API ernst:
Jeder zustandsändernde Endpunkt erfordert ein Token (beim ersten Start generiert, in
data/.auth_tokengespeichert, für die Unity-Brücke gespiegelt). Sende es alsX-Quartermaster-TokenoderAuthorization: Bearer; die Web-UI erhält automatisch einSameSite=Strict-Cookie.Cross-Origin-Anfragen werden selbst mit einem gültigen Token abgelehnt.
Die Entpacker-Sandbox löst
..-Segmente auf, entfernt Laufwerksbuchstaben und Steuerzeichen, verschiebt alles außerhalb vonAssets/nachAssets/_Quartermaster_Imported/und stellt sicher, dass der endgültige Pfad innerhalb des Projekts liegt — erzwungen durch Tests, nicht durch Bauchgefühl (python run_tests.py -v).Der Bild-Proxy ist auf eine Domain-Allowlist beschränkt, blockt private IP-Bereiche und Metadaten-Endpunkte, validiert jeden Redirect-Hop erneut, begrenzt Größen und entfernt die ältesten Einträge, sobald der Cache sein Dateilimit überschreitet.
Nichts telefoniert nach Hause. Deine Bibliothek, Embeddings, Festplattenpfade und Store-Sitzungen bleiben auf diesem Rechner.
Konfiguration
Optionale Schlüssel in config.json (beim ersten Start erstellt):
Schlüssel | Standard | Zweck |
|
| Port für Web-UI / API. |
|
| Beliebiges fastembed-kompatibles Modell. Ändern und den Index neu aufbauen. |
| automatisch erkannt | Überschreibt Fab-VaultCache-Speicherorte. |
| demos, docs, PDFs | Was der Entpacker verwirft. |
|
| Höflichkeits-Drosselung für die Anreicherung. |
|
| Festplatten-Cache für per Proxy geladene Cover-Bilder. |
Ehrliche Einschränkungen
Windows-lastig. Die Cache-Suche setzt Windows-Pfade voraus. Die MCP-Suche funktioniert überall; die Erkennung lokaler Importe nicht.
Ein Rechner, ein Benutzer. Keine Synchronisierung, kein Servermodus. Bewusste Entscheidung.
Harvesting ist Scraping. Unity und Fab ändern ihre Interna, wann immer es ihnen passt, und haben das auch getan – die hier enthaltenen Chunk-Größen, Endpunkte und GraphQL-Formen entsprechen dem Stand des Tages, an dem ich es ausgeliefert habe, nicht für immer. Wenn ein Abruf leer zurückkommt, protokolliert
data/store_harvest.logjede gesehene JSON-Antwort; dort sollte man ansetzen.Taxonomie ist heuristisch. Kategorien werden über eine multimodale Mischung aus Wortgrenzen-Tokens, Store-Tags und Zero-Shot-CLIP-Mining visueller Konzepte aus Screenshots abgeleitet. Stark stilisierte Titel ohne Screenshots fallen standardmäßig auf
Tools & Utilitieszurück, obwohl semantische Vektorsuche und hybride Suche immer den gesamten Vault abdecken, unabhängig von der zugewiesenen Kategorie. Die Feinabstimmung des visuellen Vokabulars ist indocs/concepts.mddokumentiert.Die Indizierung endet an der Paketgrenze & Store-Metadaten sind verrauscht. Die Suche erstreckt sich über Titel, Beschreibungen, Tags und CLIP-Embeddings ganzer Galerie-Screenshots. Sie stößt auf zwei strukturelle Grenzen:
Keine Indizierung interner Assets: Der Inhalt von Archiven wird nicht entpackt, um einzelne Sub-Meshes, Prefabs oder interne Dateinamen zu indizieren (z. B. findet die Suche nach einem bestimmten architektonischen Unterelement wie einer „Dachpfanne“ oder „gebogenen Betonstufe“ in einem modularen Umgebungspaket keinen Treffer, sofern es nicht im Listungstext angegeben oder in Galerie-Renderings deutlich sichtbar ist).
Hohler Store-Standardtext: Ein merklicher Teil der Store-Einträge (insbesondere Unitys vorlagenbasiertes
og:description) enthält reine Marketing-Floskeln („Optimieren Sie Ihren Workflow mit …“), die keinerlei technische Informationen enthalten. Die visuellen CLIP-Embeddings existieren genau, um diese Lücke zu schließen, aber Ganzbild-Vektoren können feingranulare Unterelemente nicht immer auflösen.
Entpacken ist nur für Unity. Fab-Assets werden indiziert und sind durchsuchbar, aber die Extraktion von
.unitypackageentfällt natürlich.
Wenn etwas schiefgeht
Öffne ein Issue. Es ist ein Solo-Projekt, ich kann also keine Antwortzeit versprechen, aber ich lese sie wirklich.
Was hilft, sortiert nach Symptom:
Ein Abruf kam leer oder unvollständig zurück. Das ist das wahrscheinlichste Problem, denn die Stores ändern ihre Interna ohne Ankündigung.
data/store_harvest.logprotokolliert jede JSON-Antwort, die der Harvest gesehen hat – das Ende dieser Datei ist die komplette Diagnose. Füge es bei.Die Suche liefert nichts Brauchbares. Prüfe zuerst
python -m src.vision status. Ein nicht erstellter Index fällt stillschweigend auf eine reine Stichwortsuche zurück, und das erklärt die meisten Meldungen „Suche ist kaputt“.Falsche Kategorien oder ein Konflikt, der keiner ist. Das liegt in der Regel an der Wissensbasis und nicht am Code –
docs/recipes.mdunddocs/concepts.mdzeigen, wie man es selbst behebt, und ein Pull-Request andata/recipes.jsonmit einer Regel, für die ich keine Assets zum Testen besitze, ist ausdrücklich willkommen.Das Standalone-Programm startet nicht. Es wird mit
--windowedgestartet, daher schlägt es still fehl.%LOCALAPPDATA%\Quartermaster\data\crash.logist der Ort, an dem es landet.
Wenn du damit etwas Cooles baust, würde ich wirklich gern davon hören.
Ein Hinweis zu den Stores
Quartermaster greift auf dein eigenes Konto zu, von deinem eigenen Rechner aus, in einem Browser, in dem du dich selbst angemeldet hast. Es speichert keine Zugangsdaten, sendet nichts an irgendeinen meiner Server und hat keine Telemetrie – die Sitzung lebt in einem lokalen Browserprofil und die Bibliothek in einer lokalen SQLite-Datei. Es gibt kein gemeinsames Backend, das undicht sein könnte.
Es ist weder mit Unity Technologies oder Epic Games verbunden, noch von ihnen unterstützt oder in sonstiger Weise mit ihnen verknüpft. Unity, der Unity Asset Store, Fab und Unreal Engine sind Marken ihrer jeweiligen Inhaber. Ob du den Zugriff auf einen Dienst automatisierst, ist deine Entscheidung im Rahmen der Bedingungen dieses Dienstes, und dieses Tool trifft sie nicht für dich.
Lizenz
MIT. Siehe 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