Skip to main content
Glama

Quartermaster

License: MIT Release GitHub stars Python 3.10+ Platform

MCP Ready Search Vectors GUI Telemetry Tests PRs Welcome Inspired by

このプロジェクトは、ダムのプロトタイプを作りたいと思ったことから始まりました。

大したことではありません。短いデモ、うまくいけばもう少し。何かを構築する前に、手持ちの資産で作業を速められるものがないか確認したいと思いました。そこでライブラリを「ダム」で検索しました。何も見つかりません。もちろん何も見つかりません。ダムと呼ばれるアセットはないからです。しかし、すでに所有している4つのパッケージには、曲線コンクリートメッシュ、水システム、岩場の地形が分散していました。ダムに必要なものはすべて揃っていたのです。それらを手に入れてから何年も経っていましたが、一度もそれらを結びつけたことはありませんでした。

それが、2つのストアにわたる約1,500アセットの現実です。ほとんどがバンドルとセールで入手したもので、どれも記憶にありません。そして、これは私だけの問題ではありません。AIアシスタントも知りません。助けを求めると、すべてをゼロから作るか、買い物に行かせるかのどちらかです。その間、数百ドル分のまさにうってつけのものがディスクに眠っています。

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 spotlight search

名前ではなく説明を入力しています。どの結果も、クエリと単語を共有していません。

なぜQuartermasterなのか? Quartermasterの仕事は、倉庫に何があるかを覚えておくことではありません。移動のときに装備が整っているようにすることです。これは、忘れることよりも実際の問題に近いのです。私は何も失っていません。何かを所有していることは知っていました。できなかったのは、「ダムのプロトタイプを作りたい」から「この4つのパッケージを開け」に至ることです。最初に1時間の掘り起こしが必要で、うまくいけばそれ以上という考えは、1時間の掘り起こしには耐えられません。そうして生まれたアイデアは拒否されるのではありません。ただ静かに実現されず、実現していたかどうかもわからないのです。

誰も教えてくれない部分

どちらのストアも、あなたの所有物を認めてくれません。

Unityは/account/purchasesを削除しました(2026年8月以降404)。Fabには所有権APIもエクスポートボタンもなく、何もありません。あなたの購入履歴は、彼らのプライベートなGraphQLの中にのみ存在し、SSO、MFA、ボット検出の背後にあります。

それに到達するまでに4回試行し、うち3回は失敗しました。

  1. Playwright付属のChromium — Epicのキャプチャが完全に拒否します(「JavaScriptを有効にしてください」)。

  2. Playwrightで実際のブラウザを操作 — 検出可能なフックを注入するため、Epicはパスワードの後に2つ目のセキュリティ壁を出します。

  3. サインイン中のデバッガー接続 — 同じ結果。ログインフローに触れるものはすべてフラグが立てられます。

  4. 実際に機能する方法: サインインの自動化を完全にやめます。通常のブラウザウィンドウでログインします(デバッグポートなし、あなたとストアの間に何もありません)。なぜなら、自動化そのものがリスクシステムを作動させていたからです。完了した後に、自分で確立したセッション上でのみ、Quartermasterはデバッガーを接続し、ストア自身のページネーションクエリを再生します。独自のCSRFヘッダー、独自のチャンク分割(リクエストごとに42 ID。Unityのクライアントが送信するのと同じです)を使用します。

そのトリックがこのプロジェクトの大部分です。残り(検索、リンティング、アンパック)は、それに比べれば正直なところ簡単です。

この設計には、苦労して得た2つのルールが組み込まれています。もし自分でこれをハックするなら:

  • ブラウザは正常に閉じる必要があります(/Fなしのtaskkill)。突然の終了はUnityのデバイストラストCookieを失わせ、今後のすべてのセッションでMFAチャレンジを受けることになります。

  • ライブラリの取得をヘッドレスで実行しないでください。ヘッドレスは有効なCookieでも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つのシグナルはすべて、CPU上で**3-way Reciprocal Rank Fusion(RRF)**によって融合されます。GPUも、ベクターデータベースプロセスも、クラウドAPIも不要です。ONNX Runtimeとnumpy行列が、他のすべてと同じプロセス内にあります。

約1,800アセットのボールトで測定した結果: 両モデルを常駐させた場合のピークRAM約480 MB最初のクエリに約1.5秒(BGEとCLIPの読み込み)、以降はウォームで約110 ms。モデルは遅延読み込みされるため、検索しないエージェントはそのコストを負担しません。

ディスクに関する真実。 %APPDATA%/Unity/Asset Store-5.x/とEpicのVaultCacheをスキャンして、各結果がすでにダウンロード済みかクラウドのみかを認識します。エージェントはローカルにあるものを好みます。ダウンロード不要のインポートは4 GBのインポートに勝ります。

スタックのためのリンター。 2つの植生レンダラーは競合します。コアのMicroSplatなしのMicroSplatモジュールは、静かに何もしません。HDRPプロジェクトのURP専用シェーダーはピンク色にレンダリングされます。Quartermasterは、これらに午後を費やす前に検出します。

直接アンパック。 キャッシュされた.unitypackageファイルをAssets/に直接展開し、その過程で/Demo//Samples//Documentation/とPDFを除外します。通常、パッケージごとに60〜80%の余分な容量が削減されます。宣言されたすべてのパスは正規化され、<project>/Assets/内にあることが検証されます。エスケープは構造的に不可能であり、単にフィルタリングされるだけではありません。

インストール

スタンドアロンバンドルReleasesからQuartermaster-windows-x64.zipをダウンロードし、任意の場所に解凍します。Pythonは不要です。

  • Quartermaster.exeWin+Alt+Vスポットライト検索、ストア収集、ライブラリ閲覧、直接アンパックを備えたデスクトップGUI。

  • Quartermaster-mcp.exe — Claude Desktop、Cursor、Antigravity、Windsurf向けのスタンドアロンMCP stdioサーバー。

ライブラリデータは%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 fab

2. 収集とエンリッチ。 長時間実行可能で、再開可能、再実行しても安全です。それぞれ停止した場所から続行します。

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 browser

3. ローカルインデックスを構築し、ディスクをスキャンします。

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 buildvision 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: 自動登録(1コマンド)

# 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.5clip-ViT-B-32)がONNX Runtimeによってダウンロードされ、ローカルにキャッシュされます(約150 MB)。最初のクエリはメモリへの読み込み中に3〜5秒かかることがあります。以降のクエリは約100 msで実行されます。

エージェントツール

ツール

回答

search_owned_assets(query, ...)

これに合う所有アセットは? ハイブリッドキーワード+セマンティック。

get_asset_details(asset_id)

完全なメタデータ、使用上の注意、ギャラリー、ストアURL。

get_stack_recommendations(brief)

機能のブリーフを所有パックにマッピング。

validate_stack(asset_ids)

これらは競合しますか? 役割の競合、不足している前提条件。

list_stack_recipes()

あなたのライブラリに照らして解決された厳選プロダクションスタック。

audit_project(project_dir)

ターゲットプロジェクトのエンジン、バージョン、レンダーパイプライン。

import_asset_to_project(asset_id, project_dir)

ローカルパッケージをAssets/に展開。

list_asset_categories()

カテゴリの内訳と件数。

get_vault_stats()

エンジンとカテゴリ別の合計。ローカルとクラウド。

2つのファイルを使えば、コードを変更せずにQuartermasterに独自の語彙を教えられます:

  • data/recipes.json — 役割、前提条件、厳選スタック。競合リンターが推論する材料です。どのアセットが同じ役割を競合するか、何が何を必要とするか、どのスタックが既知の優良スタックと見なされるか。

  • data/concepts.json — CLIPがスクリーンショットをスコアリングする際の視覚的語彙。同梱リストはゲーム向けです。archvizやプリビズを行う場合は、置き換えて再構築してください。

どちらも実行時に読み込まれるプレーンなJSONで、docs/の下にリファレンスページがあります。

他の利用方法

  • デスクトップアプリ (run_desktop.bat) — トレイアイコン付きのPySide6スポットライト検索。WindowsのどこでもWin+Alt+Vを押せます。エージェントの邪魔をせずに並行して動作します。データベースはWALモードで実行されるため、エージェントの検索中にGUIが書き込んでも、どちらもブロックされません。

  • Web UI (run_ui.bat) — http://localhost:7890のダークモードダッシュボード。

  • Unity内editor_bridge/Quartermaster-Bridge.unitypackageをインポートし、Window > Quartermasterを選択します。エディタを離れずに検索とインポートができます。余談ですが、そのブリッジパッケージはsrc/build_bridge.pyによって生成されており、unpacker.pyが読み取るのと同じtar形式を書き出します。意図的なドッグフーディングです。

セキュリティ

このツールはストアのセッションを保持し、あなたのプロジェクトに書き込みを行うため、ローカルAPIを真剣に扱っています:

  • 状態を変更するすべてのエンドポイントはトークンを要求します(初回実行時に生成され、data/.auth_token に保存され、Unityブリッジ用にもミラーリングされます)。トークンは X-Quartermaster-Token または Authorization: Bearer として送信してください。Web UIには SameSite=Strict クッキーが自動的に付与されます。

  • 有効なトークンであっても、クロスオリジンリクエストは拒否されます。

  • アンパッカーサンドボックスは .. セグメントを正規化し、ドライブ文字と制御文字を除去し、Assets/ の外にあるものはすべて Assets/_Quartermaster_Imported/ 配下に移動させ、最終パスがプロジェクト内に収まることを検証します — これは雰囲気ではなくテストで保証されています(python run_tests.py -v)。

  • 画像プロキシはドメイン許可リスト方式を採用し、プライベートIPレンジとメタデータエンドポイントをブロックし、リダイレクトの各ホップを再検証し、サイズに上限を設け、キャッシュがファイル数の上限を超えると最も古いエントリを削除します。

外部へのデータ送信は一切ありません。あなたのライブラリ、埋め込み、ディスク上のパス、ストアセッションはすべてこのマシン上に留まります。

設定

config.json 内のオプションキー(初回実行時に作成されます):

キー

デフォルト

用途

server_port

7890

Web UI / APIのポート。

embedding_model

BAAI/bge-small-en-v1.5

fastembed互換の任意のモデル。変更したらインデックスを再構築してください。

fab_vault_dirs

自動検出

Fab VaultCacheの場所を上書きします。

strip_dirs / strip_exts

demos, docs, PDFs

アンパッカーが破棄する対象。

enrich_batch_size / enrich_batch_pause

20 / 3s

エンリッチメント時のポライトネススロットル(サーバー負荷を抑えるための間隔調整)。

media_cache_enabled

true

プロキシされたカバーアート用のディスクキャッシュ。

正直な制限事項

  • Windows優先。 キャッシュスキャンはWindowsパスを前提としています。MCP検索はどこでも機能しますが、ローカルインポートの検出は機能しません。

  • 1台のマシン、1人のユーザー。 同期もサーバーモードもありません。意図的な設計です。

  • ハーベスティングはスクレイピングです。 UnityとFabは気が向いたときにいつでも内部を変更し、実際に変更してきました — ここに記載されているチャンクサイズ、エンドポイント、GraphQLの構造は、私がリリースした時点では正しいものの、永遠に正しいわけではありません。フェッチが空で返ってきた場合、data/store_harvest.log には、そのときに見られたすべてのJSONレスポンスが記録されます。そこが調査の出発点です。

  • 分類はヒューリスティックです。 カテゴリは、ワード境界トークン、ストアタグ、スクリーンショットからのゼロショットCLIPビジュアルコンセプトマイニングをマルチモーダルに組み合わせて推定されます。スクリーンショットのない高度に様式化されたタイトルは Tools & Utilities にデフォルト分類されますが、セマンティックベクトル検索とハイブリッド検索は、割り当てられたカテゴリに関係なく常にボールト全体をカバーします。ビジュアル語彙の調整方法は docs/concepts.md に文書化されています。

  • インデックス作成はパッケージ境界で止まり、ストアメタデータはノイズが多い。 検索は、タイトル、説明、タグ、ギャラリースクリーンショットの画像全体のCLIP埋め込みにわたって機能します。これには2つの構造的な限界があります:

    1. 内部アセットのインデックス化なし: アーカイブを展開して個々のサブメッシュ、プレハブ、内部ファイル名をインデックス化することはありません(たとえば、モジュラー環境パック内の「パンチタイル」や「湾曲したコンクリート製蹴上げ板」といった特定の建築サブ要素を検索しても、リスティングのテキストに明記されているか、ギャラリーレンダリングで目立つ形で写っていない限りヒットしません)。

    2. 空虚なストアの定型文: かなりの割合のストアリスティング(特にUnityのテンプレート化された og:description)には、技術情報を一切含まない純粋なマーケティング用テンプレ文(「ワークフローを向上させましょう...」)が含まれています。ビジュアルCLIP埋め込みはまさにこのギャップを埋めるために存在しますが、画像全体のベクトルでは、細かいサブ要素を常に解決できるとは限りません。

  • 展開はUnityのみ対応。 Fabアセットはインデックス化され検索可能ですが、.unitypackage の展開は当然ながら該当しません。

問題が発生したとき

issue を開いてください。個人プロジェクトのため、返答までの時間はお約束できませんが、必ず読んでいます。

症状別に、役立つ情報は以下の通りです:

  • フェッチが空または不完全で返ってきた場合。 これが最も壊れやすい箇所です。ストア側が予告なく内部を変更するためです。data/store_harvest.log にはハーベストが目にしたすべてのJSONレスポンスが記録されます — そのファイルの末尾を見れば診断は完了します。それを添付してください。

  • 検索がまともな結果を返さない場合。 まず python -m src.vision status を確認してください。インデックスが未構築だと、黙ってキーワード検索のみに縮退します。これが「検索が壊れている」という報告の大部分の原因です。

  • カテゴリが間違っている、または実際には存在しない競合がある場合。 これは通常、コードではなくナレッジベースの問題です — docs/recipes.mddocs/concepts.md に自分で修正する方法が説明されています。また、私がテスト用のアセットを所有していないルールを data/recipes.json に追加するPRは、心から歓迎します。

  • スタンドアロン版が起動しない場合。 --windowed モードのため、エラーを表示せずに失敗します。ログは %LOCALAPPDATA%\Quartermaster\data\crash.log に出力されます。

これを使って何かクールなものを作ったら、ぜひ聞かせてください。心から楽しみにしています。

ストアに関する注記

Quartermasterは、あなた自身がサインインしたブラウザで、自分のマシンから、自分のアカウントを読み取ります。認証情報は保持せず、私のサーバーには何も送信せず、テレメトリもありません — セッションはローカルのブラウザプロファイルに、ライブラリはローカルのSQLiteファイルに存在します。漏洩し得る共有バックエンドは存在しません。

本ツールは、Unity TechnologiesやEpic Gamesとは提携も承認も関連もありません。Unity、Unity Asset Store、Fab、Unreal Engineは、それぞれの所有者の商標です。あらゆるサービスへの自動アクセスは、そのサービスの利用規約に照らしてご自身で判断してください。本ツールがその判断を代わりに行うことはありません。

ライセンス

MIT。 LICENSE を参照してください。

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

0dRelease cycle
4Releases (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 Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    9
    GPL 3.0
  • A
    license
    B
    quality
    D
    maintenance
    Control 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.
    62
    25
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Connect 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.
    204
    MIT

View all related MCP servers

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/Tanshaydar/Quartermaster'

If you have feedback or need assistance with the MCP directory API, please join our Discord server