Quartermaster
Quartermaster
Этот проект начался с того, что я хотел создать прототип плотины.
Ничего серьёзного — короткое демо, а возможно, и больше, если бы получилось. Прежде чем что-либо строить, я захотел посмотреть, что у меня уже есть из того, что могло бы ускорить работу. Я поискал в своей библиотеке «плотину» — и ничего не нашлось. Конечно, ничего и не нашлось — ни один ассет не называется плотиной. Но в четырёх пакетах, которые у меня уже были, оказались изогнутые бетонные меши, водная система и каменистая местность. Всё, что нужно плотине. Большую часть этого я храню годами и ни разу не соединил эти куски.
Вот что делают с тобой ~1500 ассетов из двух магазинов. Почти всё это — из наборов и распродаж, и ни один не запомнен. И дело не только во мне — ни один ИИ-ассистент этого тоже не знает. Попроси его о помощи — и он либо построит всё с нуля, либо отправит тебя за покупками, хотя на твоём диске лежат активы на сотни долларов — ровно то, что нужно.
Quartermaster индексирует всю вашу библиотеку Unity Asset Store и Fab локально и предоставляет её вашему агенту кода через MCP. Это инструмент, который мне хотелось иметь в тот день: спроси про плотину — и узнай, что у тебя уже есть изогнутые бетонные меши.
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 strippedКаждый результат — то, за что вы уже заплатили. Ничего не выдумано.

Вы вводите описание, а не название — ни один из этих результатов не имеет ни одного общего слова с запросом.
Почему Quartermaster? Работа квартирмейстера никогда не заключалась в том, чтобы помнить, что лежит на складах, — а в том, чтобы ты был снаряжён, когда наступает время выступать. Это ближе к настоящей проблеме, чем забывчивость. Я ничего не терял; я знал, что у меня есть кое-что. Чего я не мог — так это перейти от «хочу прототип плотины» к «открой эти четыре пакета» без часа раскопок, а может, и больше, если получится не переживает часа раскопок. Идеи, которые приходят таким образом, не отвергаются. Они просто тихо не случаются, и ты никогда не узнаешь, могли ли они осуществиться.
То, о чём никто не говорит
Ни один магазин не признается, чем вы владеете.
Unity удалил /account/purchases (404 с августа 2026). У Fab нет API владения, нет кнопки экспорта, вообще ничего. История ваших покупок существует только внутри их приватного GraphQL, за SSO, MFA и защитой от ботов.
Чтобы добраться до этой информации, понадобилось четыре попытки, три из которых провалились:
Встроенный в Playwright Chromium — капча Epic наотрез отказывает ему («enable JavaScript»).
Playwright, управляющий вашим настоящим браузером — внедряет обнаруживаемые перехватчики; после ввода пароля Epic выставляет вторую стену безопасности.
Подключённый отладчик при входе в систему — тот же результат. Всё, что касается процесса входа, помечается.
Что действительно работает: полностью отказаться от автоматизации входа. Вы входите через обычное окно браузера — без отладочного порта, ничто не стоит между вами и магазином — потому что именно автоматизация и запускала системы риска. Только после того, как вы закончили, в сессии, которую вы создали сами, Quartermaster подключает отладчик и воспроизводит собственные постраничные запросы магазина — с его CSRF-заголовками, с его разбивкой (по 42 ID на запрос, потому что так отправляет клиент Unity).
Этот трюк — большая часть проекта. Остальное — поиск, линтинг, распаковка — по сравнению с ним, честно говоря, элементарно.
Два правила, доставшихся тяжёлым трудом и заложенные в дизайн, если вы когда-нибудь решите копаться в этом сами:
Браузеры должны закрываться штатно (
taskkillбез/F). Внезапное завершение процесса приводит к потере cookie доверия устройства Unity, и на каждой будущей сессии вам придётся проходить MFA.Никогда не запускайте загрузку библиотеки в headless-режиме. Headless-режим запускает систему риска Unity даже с валидными куками.
Related MCP server: Unity API Communicator MCP Server
Что вы получаете
Поиск, который понимает намерение и визуальный образ. В этом и заключается проблема плотины.
Точные ключевые слова через SQLite FTS5.
Смысл запроса на естественном языке через локальные текстовые эмбеддинги ONNX (
BAAI/bge-small-en-v1.5) — «бетонные конструкции для удержания воды» находит меши и шейдеры, в описаниях которых плотина вообще не упоминается.Кросс-модальное визуальное понимание через эмбеддинги ONNX CLIP (
Qdrant/clip-ViT-B-32) — поиск «готический собор» буквально оценивает ваши скриншоты и промо-рендеры, находя ассеты даже тогда, когда их текстовые описания полностью молчат.
Все три сигнала объединяются с помощью 3-стороннего Reciprocal Rank Fusion (RRF) на вашем CPU. Никакого GPU, никакого процесса векторной БД, никакого облачного API — ONNX Runtime и матрица numpy в том же процессе, что и всё остальное.
Замерено на хранилище из ~1800 ассетов: ~480 МБ пиковой памяти при постоянно загруженных обеих моделях, ~1,5 с на первый запрос (загрузка BGE и CLIP), ~110 мс в тёплом состоянии после этого. Модели загружаются лениво, поэтому агент, который никогда не ищет, за них не платит.
Достоверные данные о вашем диске. Сканирует %APPDATA%/Unity/Asset Store-5.x/ и VaultCache Epic, поэтому каждый результат знает, скачан ли он уже или доступен только в облаке. Агенты предпочитают локальное — импорт без загрузки лучше, чем на 4 ГБ.
Линтер для стеков. Два рендерера растительности будут конфликтовать. Модуль MicroSplat без основного MicroSplat молча ничего не делает. Шейдер только для URP в проекте HDRP рендерится розовым. Quartermaster ловит это до того, как вы потратите на них полдня.
Прямая распаковка. Извлекает кэшированные .unitypackage-файлы прямо в Assets/, отбрасывая по пути /Demo/, /Samples/, /Documentation/ и PDF — как правило, на 60–80% меньше мусора в каждом пакете. Каждый объявленный путь нормализуется и проверяется внутри <project>/Assets/; выход за пределы структурно невозможен, а не просто фильтруется.
Установка
Автономная сборка — скачайте Quartermaster-windows-x64.zip из Releases, распакуйте в любое место. Python не требуется.
Quartermaster.exe— настольный GUI с поиском-спотлайтом поWin+Alt+V, сбором из магазинов, просмотром библиотеки и прямой распаковкой.Quartermaster-mcp.exe— автономный MCP stdio-сервер для Claude Desktop, Cursor, Antigravity и Windsurf.
Данные вашей библиотеки безопасно хранятся в %LOCALAPPDATA%\Quartermaster, так что обновления сводятся к простой замене папок с нулевой потерей данных.
Из исходников — требуется Python 3.10+.
git clone https://github.com/Tanshaydar/Quartermaster.git
cd Quartermaster
pip install -r requirements.txtЗаполните библиотеку:
1. Войдите. Единственный шаг, который требует вашего участия. Откроется обычное окно браузера; 2FA и капчи ведут себя ровно как всегда. Закройте его, когда закончите, — сессия сохранится локально.
python -m src.store_client login unity
python -m src.store_client login fab2. Сбор и обогащение. Долгие, возобновляемые операции, которые безопасно перезапускать, — каждая продолжается с того места, где остановилась.
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. Постройте локальные индексы, затем просканируйте диск.
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 hereИменно semantic build и vision build позволяют «бетонным конструкциям для удержания воды» и запросам по визуальным концепциям находить ваши ассеты. Пропустите их — поиск продолжит работать, но только по точным ключевым словам.
Запускайте local_scan после того, как у вас появится каталог, а не до. При сканировании пустого хранилища ему не с чем сопоставлять имена файлов, поэтому каждый кэшированный пакет он заносит как отдельную голую запись. Это безвредно — следующее сканирование сверяет их с реальным каталогом, — но до тех пор вы будете видеть дубли.
Уже есть CSV-экспорт из магазинов? Тогда пропустите браузер целиком:
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 diskПодключите агентов:
Вариант A: Авторегистрация (одна команда)
# 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 leapРегистрация вливается в существующие конфигурации клиентов и сначала создаёт .quartermaster-backup. Она не затрёт ваши другие серверы.
Вариант B: Ручная настройка
Вставьте блок сервера в конфигурацию вашего клиента:
Автономный бинарник:
{
"mcpServers": {
"quartermaster": {
"command": "C:/path/to/Quartermaster/Quartermaster-mcp.exe",
"args": []
}
}
}Из исходников:
{
"mcpServers": {
"quartermaster": {
"command": "python",
"args": ["-m", "src.mcp_server"],
"cwd": "C:/path/to/Quartermaster"
}
}
}Claude Desktop читает %APPDATA%/Claude/claude_desktop_config.json, Cursor — ~/.cursor/mcp.json, Windsurf — ~/.codeium/windsurf/mcp_config.json.
[!NOTE] Прогрев моделей при первом запуске: При самом первом поиске на естественном языке или по изображению эмбеддинг-модели (
BAAI/bge-small-en-v1.5иclip-ViT-B-32) загружаются и кэшируются локально через ONNX Runtime (~150 МБ). Первый запрос может занять 3–5 секунд на загрузку в память; каждый последующий запрос выполняется за ~100 мс.
Инструменты агента
Tool | Answers |
| Что у меня есть подходящего? Гибрид ключевых слов и семантики. |
| Полные метаданные, заметки об использовании, галерея, URL магазина. |
| Сопоставляет бриф с имеющимися пакетами. |
| Будут ли они конфликтовать? Конфликты ролей, отсутствующие обязательные зависимости. |
| Подобранные производственные стеки с учётом вашей библиотеки. |
| Движок, версия, рендер-пайплайн целевого проекта. |
| Распаковать локальный пакет в |
| Разбивка по категориям и количество. |
| Итоги по движкам и категориям: локально и в облаке. |
Два файла позволяют научить Quartermaster вашей собственной лексике без изменений в коде:
data/recipes.json— роли, обязательные зависимости и подобранные стеки. Именно с этим работает линтер конфликтов: какие ассеты конкурируют за одну роль, что чему требуется и какие комбинации вы считаете проверенным рабочим стеком.data/concepts.json— визуальный словарь, по которому CLIP оценивает ваши скриншоты. Поставляемый список заточен под игры; если вы занимаетесь архвизом или превизом, замените его и пересоберите.
Оба — обычный JSON, который читается во время выполнения, и у обоих есть справочная страница в docs/.
Другие способы доступа
Настольное приложение (
run_desktop.bat) — поиск-спотлайт на PySide6 со значком в трее; нажмитеWin+Alt+Vв любом месте Windows. Работает рядом с вашим агентом, не мешая ему: база данных работает в режиме WAL, поэтому запись из GUI во время поиска агента никогда никого не блокирует.Веб-интерфейс (
run_ui.bat) — панель управления в тёмной теме по адресуhttp://localhost:7890.В Unity — импортируйте
editor_bridge/Quartermaster-Bridge.unitypackage, затемWindow > Quartermaster. Ищите и импортируйте, не покидая редактор. Небольшое отступление: этот мостовой пакет генерируется скриптомsrc/build_bridge.py, который использует тот же формат tar, что читаетunpacker.py. Намеренный догфудинг.
Безопасность
Эта штука хранит сеансы магазинов и вносит изменения в ваши проекты, поэтому она серьёзно относится к локальному API:
Каждый эндпоинт, изменяющий состояние, требует токен (генерируется при первом запуске, хранится в
data/.auth_token, дублируется для моста Unity). Отправляйте его какX-Quartermaster-TokenилиAuthorization: Bearer; веб-интерфейс автоматически получает cookieSameSite=Strict.Запросы с других источников отклоняются, даже если токен действителен.
Песочница распаковщика схлопывает сегменты
.., удаляет буквы дисков и управляющие символы, перемещает всё, что находится за пределамиAssets/, вAssets/_Quartermaster_Imported/, и гарантирует, что итоговый путь окажется внутри проекта — это обеспечивается тестами, а не ощущениями (python run_tests.py -v).Прокси изображений работает по белому списку доменов, блокирует частные диапазоны адресов и эндпоинты метаданных, повторно проверяет каждый переход при редиректе, ограничивает размеры и удаляет самые старые записи, когда кэш превышает лимит файлов.
Никаких «звонков домой». Ваша библиотека, эмбеддинги, пути на диске и сеансы магазинов остаются на этой машине.
Конфигурация
Необязательные ключи в config.json (создаётся при первом запуске):
Ключ | По умолчанию | Назначение |
|
| Порт веб-интерфейса / API. |
|
| Любая модель, совместимая с fastembed. Измените и пересоберите индекс. |
| автоопределение | Переопределяет расположение Fab VaultCache. |
| demos, docs, PDFs | Что отбрасывает распаковщик. |
|
| Вежливое ограничение частоты для обогащения. |
|
| Дисковый кэш для проксированных обложек. |
Честные ограничения
Сначала Windows. Сканирование кэша предполагает пути Windows. Поиск через MCP работает где угодно; определение локального импорта — нет.
Одна машина, один пользователь. Никакой синхронизации, никакого серверного режима. Осознанно.
Сбор данных — это скрапинг. Unity и Fab меняют своё внутреннее устройство когда захотят — и уже меняли: размеры чанков, эндпоинты и формы GraphQL здесь верны на день релиза, а не навсегда. Когда запрос возвращается пустым,
data/store_harvest.logзаписывает каждый увиденный JSON-ответ; с этого стоит начать копать.Таксономия эвристическая. Категории определяются с помощью мультимодальной комбинации токенов по границам слов, тегов магазина и zero-shot CLIP-анализа визуальных концепций на скриншотах. Сильно стилизованные названия без скриншотов по умолчанию относятся к
Tools & Utilities, хотя семантический векторный поиск и гибридный поиск всегда покрывают всё хранилище независимо от назначенной категории. Настройка визуального словаря описана вdocs/concepts.md.Индексация останавливается на границе пакета, а метаданные магазина зашумлены. Поиск работает по названиям, описаниям, тегам и полным CLIP-эмбеддингам изображений из галереи скриншотов. Он сталкивается с двумя структурными ограничениями:
Нет индексации внутренних ассетов: Он не распаковывает содержимое архивов, чтобы индексировать отдельные под-сетки, префабы или внутренние имена файлов (например, поиск конкретного архитектурного под-элемента вроде «пазовой черепицы» или «криволинейного бетонного подступенка» внутри набора модульных окружений не сработает, если это не заявлено в тексте описания или не заметно на рендерах галереи).
Пустой шаблонный текст магазина: Заметная доля описаний в магазине (особенно шаблонный
og:descriptionUnity) содержит чистый маркетинговый шаблон («Улучшите свой рабочий процесс с помощью...»), который не несёт никакой технической информации. Визуальные CLIP-эмбеддинги существуют именно для того, чтобы закрыть этот разрыв, но векторы целых изображений не всегда могут разрешить мелкие под-элементы.
Распаковка только для Unity. Ассеты Fab индексируются и доступны для поиска, но извлечение
.unitypackage, очевидно, неприменимо.
Когда что-то ломается
Откройте issue. Это сольный проект, поэтому я не могу обещать время ответа, но я их читаю.
Что помогает, по симптомам:
Запрос вернулся пустым или неполным. Это самое вероятное место поломки, потому что магазины меняют своё внутреннее устройство без предупреждения.
data/store_harvest.logзаписывает каждый JSON-ответ, который видел сборщик, — хвост этого файла и есть полная диагностика. Приложите его.Поиск не возвращает ничего вразумительного. Сначала проверьте
python -m src.vision status. Несобранный индекс молча деградирует до режима только ключевых слов, и этим объясняется большинство сообщений «поиск сломан».Неверные категории или конфликт, которого на самом деле нет. Обычно дело в базе знаний, а не в коде —
docs/recipes.mdиdocs/concepts.mdописывают, как исправить это самостоятельно, и PR вdata/recipes.jsonс правилом, для проверки которого у меня нет ассетов, действительно приветствуется.Автономный клиент не запускается. Он в режиме
--windowed, поэтому падает молча. Он попадает в%LOCALAPPDATA%\Quartermaster\data\crash.log.
Если вы создадите с помощью этого что-то классное, мне правда хочется об этом услышать.
Примечание о магазинах
Quartermaster читает вашу собственную учётную запись, с вашей собственной машины, в браузере, в который вы вошли сами. Он не хранит учётные данные, ничего не отправляет ни на один мой сервер и не имеет телеметрии — сеанс живёт в локальном профиле браузера, а библиотека — в локальном файле SQLite. Нет общего бэкенда, из которого могла бы произойти утечка.
Он не аффилирован с Unity Technologies или Epic Games, не одобрен ими и не связан с ними. Unity, Unity Asset Store, Fab и Unreal Engine являются товарными знаками их соответствующих владельцев. Автоматизация доступа к любому сервису — это ваше решение, которое нужно принимать с учётом условий этого сервиса, и этот инструмент не принимает его за вас.
Лицензия
MIT. См. 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