Quartermaster
Quartermaster
このプロジェクトは、ダムのプロトタイプを作りたいと思ったことから始まりました。
大したことではありません。短いデモ、うまくいけばもう少し。何かを構築する前に、手持ちの資産で作業を速められるものがないか確認したいと思いました。そこでライブラリを「ダム」で検索しました。何も見つかりません。もちろん何も見つかりません。ダムと呼ばれるアセットはないからです。しかし、すでに所有している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なのか? Quartermasterの仕事は、倉庫に何があるかを覚えておくことではありません。移動のときに装備が整っているようにすることです。これは、忘れることよりも実際の問題に近いのです。私は何も失っていません。何かを所有していることは知っていました。できなかったのは、「ダムのプロトタイプを作りたい」から「この4つのパッケージを開け」に至ることです。最初に1時間の掘り起こしが必要で、うまくいけばそれ以上という考えは、1時間の掘り起こしには耐えられません。そうして生まれたアイデアは拒否されるのではありません。ただ静かに実現されず、実現していたかどうかもわからないのです。
誰も教えてくれない部分
どちらのストアも、あなたの所有物を認めてくれません。
Unityは/account/purchasesを削除しました(2026年8月以降404)。Fabには所有権APIもエクスポートボタンもなく、何もありません。あなたの購入履歴は、彼らのプライベートなGraphQLの中にのみ存在し、SSO、MFA、ボット検出の背後にあります。
それに到達するまでに4回試行し、うち3回は失敗しました。
Playwright付属のChromium — Epicのキャプチャが完全に拒否します(「JavaScriptを有効にしてください」)。
Playwrightで実際のブラウザを操作 — 検出可能なフックを注入するため、Epicはパスワードの後に2つ目のセキュリティ壁を出します。
サインイン中のデバッガー接続 — 同じ結果。ログインフローに触れるものはすべてフラグが立てられます。
実際に機能する方法: サインインの自動化を完全にやめます。通常のブラウザウィンドウでログインします(デバッグポートなし、あなたとストアの間に何もありません)。なぜなら、自動化そのものがリスクシステムを作動させていたからです。完了した後に、自分で確立したセッション上でのみ、Quartermasterはデバッガーを接続し、ストア自身のページネーションクエリを再生します。独自のCSRFヘッダー、独自のチャンク分割(リクエストごとに42 ID。Unityのクライアントが送信するのと同じです)を使用します。
そのトリックがこのプロジェクトの大部分です。残り(検索、リンティング、アンパック)は、それに比べれば正直なところ簡単です。
この設計には、苦労して得た2つのルールが組み込まれています。もし自分でこれをハックするなら:
ブラウザは正常に閉じる必要があります(
/Fなしのtaskkill)。突然の終了はUnityのデバイストラストCookieを失わせ、今後のすべてのセッションでMFAチャレンジを受けることになります。ライブラリの取得をヘッドレスで実行しないでください。ヘッドレスは有効なCookieでもUnityのリスクシステムを起動します。
Related MCP server: glade-mcp
手に入るもの
意図とビジュアルを理解する検索。 これがダムの問題です。
正確なキーワード — 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.exe—Win+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 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 heresemantic 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: 自動登録(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.5とclip-ViT-B-32)がONNX Runtimeによってダウンロードされ、ローカルにキャッシュされます(約150 MB)。最初のクエリはメモリへの読み込み中に3〜5秒かかることがあります。以降のクエリは約100 msで実行されます。
エージェントツール
ツール | 回答 |
| これに合う所有アセットは? ハイブリッドキーワード+セマンティック。 |
| 完全なメタデータ、使用上の注意、ギャラリー、ストアURL。 |
| 機能のブリーフを所有パックにマッピング。 |
| これらは競合しますか? 役割の競合、不足している前提条件。 |
| あなたのライブラリに照らして解決された厳選プロダクションスタック。 |
| ターゲットプロジェクトのエンジン、バージョン、レンダーパイプライン。 |
| ローカルパッケージを |
| カテゴリの内訳と件数。 |
| エンジンとカテゴリ別の合計。ローカルとクラウド。 |
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 内のオプションキー(初回実行時に作成されます):
キー | デフォルト | 用途 |
|
| Web UI / APIのポート。 |
|
| fastembed互換の任意のモデル。変更したらインデックスを再構築してください。 |
| 自動検出 | Fab VaultCacheの場所を上書きします。 |
| demos, docs, PDFs | アンパッカーが破棄する対象。 |
|
| エンリッチメント時のポライトネススロットル(サーバー負荷を抑えるための間隔調整)。 |
|
| プロキシされたカバーアート用のディスクキャッシュ。 |
正直な制限事項
Windows優先。 キャッシュスキャンはWindowsパスを前提としています。MCP検索はどこでも機能しますが、ローカルインポートの検出は機能しません。
1台のマシン、1人のユーザー。 同期もサーバーモードもありません。意図的な設計です。
ハーベスティングはスクレイピングです。 UnityとFabは気が向いたときにいつでも内部を変更し、実際に変更してきました — ここに記載されているチャンクサイズ、エンドポイント、GraphQLの構造は、私がリリースした時点では正しいものの、永遠に正しいわけではありません。フェッチが空で返ってきた場合、
data/store_harvest.logには、そのときに見られたすべてのJSONレスポンスが記録されます。そこが調査の出発点です。分類はヒューリスティックです。 カテゴリは、ワード境界トークン、ストアタグ、スクリーンショットからのゼロショットCLIPビジュアルコンセプトマイニングをマルチモーダルに組み合わせて推定されます。スクリーンショットのない高度に様式化されたタイトルは
Tools & Utilitiesにデフォルト分類されますが、セマンティックベクトル検索とハイブリッド検索は、割り当てられたカテゴリに関係なく常にボールト全体をカバーします。ビジュアル語彙の調整方法はdocs/concepts.mdに文書化されています。インデックス作成はパッケージ境界で止まり、ストアメタデータはノイズが多い。 検索は、タイトル、説明、タグ、ギャラリースクリーンショットの画像全体のCLIP埋め込みにわたって機能します。これには2つの構造的な限界があります:
内部アセットのインデックス化なし: アーカイブを展開して個々のサブメッシュ、プレハブ、内部ファイル名をインデックス化することはありません(たとえば、モジュラー環境パック内の「パンチタイル」や「湾曲したコンクリート製蹴上げ板」といった特定の建築サブ要素を検索しても、リスティングのテキストに明記されているか、ギャラリーレンダリングで目立つ形で写っていない限りヒットしません)。
空虚なストアの定型文: かなりの割合のストアリスティング(特にUnityのテンプレート化された
og:description)には、技術情報を一切含まない純粋なマーケティング用テンプレ文(「ワークフローを向上させましょう...」)が含まれています。ビジュアルCLIP埋め込みはまさにこのギャップを埋めるために存在しますが、画像全体のベクトルでは、細かいサブ要素を常に解決できるとは限りません。
展開はUnityのみ対応。 Fabアセットはインデックス化され検索可能ですが、
.unitypackageの展開は当然ながら該当しません。
問題が発生したとき
issue を開いてください。個人プロジェクトのため、返答までの時間はお約束できませんが、必ず読んでいます。
症状別に、役立つ情報は以下の通りです:
フェッチが空または不完全で返ってきた場合。 これが最も壊れやすい箇所です。ストア側が予告なく内部を変更するためです。
data/store_harvest.logにはハーベストが目にしたすべてのJSONレスポンスが記録されます — そのファイルの末尾を見れば診断は完了します。それを添付してください。検索がまともな結果を返さない場合。 まず
python -m src.vision statusを確認してください。インデックスが未構築だと、黙ってキーワード検索のみに縮退します。これが「検索が壊れている」という報告の大部分の原因です。カテゴリが間違っている、または実際には存在しない競合がある場合。 これは通常、コードではなくナレッジベースの問題です —
docs/recipes.mdとdocs/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 を参照してください。
Available Tools
9 toolsaudit_projectA
Detect the engine, version and render pipeline of a game project (Unity: from ProjectVersion.txt / manifest.json; Unreal: .uproject / DefaultEngine.ini). Call this BEFORE recommending or importing assets so pipeline mismatches (e.g. URP-only shader into an HDRP project) are caught.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'Detect' strongly implies a read-only operation; however, it does not explicitly state that no modifications or side effects occur. The description gives sufficient functional context but stops short of stating non-destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that deliver purpose and usage without fluff. The parenthetical examples add useful specificity without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the essential context: what it detects, when to use it, and why it matters (avoiding pipeline mismatches). It does not describe the return format, but that is not critical for a detection tool and the output schema exists separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, project_dir, is not elaborated in the description at all. While the name suggests a file path, there is no mention of expected format, whether it should point to a root folder or a specific file, or any related constraints. With 0% schema coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Detect') and resource ('engine, version and render pipeline of a game project'). It distinguishes itself from sibling tools by focusing on detection rather than mutation or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool: 'Call this BEFORE recommending or importing assets.' This provides a direct usage trigger and sets expectations for preconditions, leaving no ambiguity about when it should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asset_detailsB
Full details for one owned asset: summary, usage notes, gallery/video links, store URL.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It conveys a read-only lookup and previews the output fields, but it does not disclose failure modes, authorization/ownership consequences, or any limitations. It is minimally adequate for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every phrase contributes either scope ('one owned asset') or expected content. Exemplary concision for a simple lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return-value structure, so the description doesn't need to restate it, and the one-parameter tool is simple. However, the description omits when to use the tool versus its siblings and leaves parameter semantics underspecified, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the lone asset_id parameter is never defined, formatted, or tied to the description beyond the phrase 'one owned asset.' The description does not compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('one owned asset') and enumerates the returned content ('summary, usage notes, gallery/video links, store URL'). It does not use an explicit verb beyond the tool name, and the contrast with siblings like search_owned_assets is only implicit, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'One owned asset' implies this is for retrieving details on a specific already-known asset rather than searching across assets, but the description never explicitly says when to prefer it over search_owned_assets or other siblings. Usage context is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stack_recommendationsA
Given a game/feature description (e.g. 'third-person fantasy open world with magic combat and a village'), sweep the vault using 3-way hybrid search (FTS + BGE + CLIP) and recommend which owned packages fit which aspect of the problem.
| Name | Required | Description | Default |
|---|---|---|---|
| limit_per_category | No | ||
| problem_description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does disclose meaningful behavior: it performs a 3-way hybrid search (FTS + BGE + CLIP) and returns recommendations mapped to aspects of the problem. It does not explicitly mention side effects, permissions, or non-mutation, but 'recommend' strongly implies a read-only sweep.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense, well-structured sentence. It front-loads the input and purpose, includes a useful example, and adds meaningful algorithmic detail without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main input, the search approach, and the intent of the output, and the output schema can explain return values. However, it omits the semantics of limit_per_category and provides no guidance on how this tool compares to sibling search/recommendation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives clear semantics for problem_description, including a concrete example, but says nothing about limit_per_category. With schema description coverage at 0%, the optional parameter's meaning is left entirely to inference from its title and default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it sweeps the vault via hybrid search and recommends owned packages for a given game/feature description. It is distinct in behavior from siblings like search_owned_assets, though it does not explicitly name or contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: provide a game/feature description to get package recommendations. However, it does not state when to prefer this tool over search_owned_assets or other sibling tools, nor does it provide any exclusions or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_statsA
Overall vault stats: total assets per engine, per category, and how many are already downloaded locally vs cloud-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It discloses the nature of the output in useful detail: totals per engine, per category, and download status breakdown. Being a read-only stats endpoint, this is sufficient transparency, though it does not explicitly state that no mutation occurs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase adds concrete information about the aggregation dimensions and the local-versus-cloud distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter aggregate stats tool with an output schema present, the description tells the agent exactly what dimensions the stats cover. Nothing crucial is missing for selecting or invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are inherently non-issue. The baseline of 4 applies, and the description correctly implies that the tool operates over the entire vault without requiring arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific resource (vault) and the kind of output (overall stats), listing concrete aggregation dimensions: assets per engine, per category, and local vs cloud-only counts. It implies a broad overview role among the siblings, though it does not explicitly name an alternative to distinguish itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Overall vault stats' signals that this tool is for high-level aggregate information rather than per-asset or per-category detail, so usage context is implied. However, there is no explicit statement of when to use this tool versus siblings like get_asset_details or list_asset_categories, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_asset_to_projectA
Unpack a locally-downloaded Unity Asset Store package (.unitypackage) directly into a Unity project's Assets/ folder. Only works for assets tagged local=true (check with search first). project_dir must be the Unity project root (the folder containing Assets/). A UPM package shipped inside it (Packages// with a package.json) is installed as an embedded package in /Packages// and listed in embedded_packages.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_id | Yes | ||
| project_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose real traits: the local=true restriction, the required shape of project_dir, and the non-obvious side effect of installing a bundled UPM package as an embedded package in <project>/Packages/<name>/. It does not mention overwrite/reversibility or permissions, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and constraint. The embedded-package sentence is dense but adds genuinely useful behavior rather than restating the schema, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description still flags embedded_packages as a notable output signal. For a write tool with no annotations, it should ideally note overwrite behavior or failure modes, but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: project_dir is explained as the project root (the folder containing Assets/), and asset_id is tied to the local=true tagging rule. The two parameters are semantically covered, though asset_id format is not specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: unpack a locally-downloaded .unitypackage directly into a Unity project's Assets/ folder. It implicitly separates this from the discovery siblings by noting that search comes first, so an agent can tell it apart from search_owned_assets and get_asset_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit precondition (only assets tagged local=true) and routes the agent to check with search first, which maps to the search sibling. It does not state when NOT to use it or what happens on a non-local asset beyond 'only works', leaving a small gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_asset_categoriesA
List all categories and how many owned assets fall into each.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The verb 'List' implies a read-only operation and the description states the output shape, but it does not disclose potential nuances such as whether categories with zero assets are included, ordering, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with the action and resource, containing no redundant or filler information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present, the description fully covers what an agent needs to invoke the tool correctly. There is no need to explain return values because the output schema already exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no semantic ambiguity to clarify. The baseline of 4 applies because there are no parameters at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('categories'), and clearly states the output: how many owned assets fall into each category. This distinguishes it from siblings like search_owned_assets or get_vault_stats, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of scenarios that favor a sibling, and no exclusions or prerequisites. An agent must infer usage solely from the name and the literal description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stack_recipesA
Curated production stacks ('asset recipes') resolved against the user's OWN library. Each recipe lists which owned assets fill each slot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the tool is personalized by resolving against the user's OWN library and explains the output shape: each recipe lists which owned assets fill each slot. This gives meaningful behavioral context beyond the tool name, though it does not explicitly state side-effect absence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the core purpose and immediately clarifies the key distinguishing behavior and return format, making every sentence informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no annotations, and an existing output schema, the description is complete enough for an agent to invoke the tool correctly. It defines the resource, the personalization scope, and what each returned recipe contains, so no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds value by indicating that the user context is implicit and that results are scoped to the user's own library, which is the relevant semantic context despite the empty parameter list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and a clear resource ('curated production stacks' / 'asset recipes'), then clarifies the differentiating scope: they are resolved against the user's OWN library. This distinguishes it from siblings like get_stack_recommendations and search_owned_assets by emphasizing curated, owned-asset-specific recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when the user wants curated recipes resolved against their own library rather than generic recommendations or raw asset search. However, it does not explicitly state when-not-to-use it or name any sibling alternative, so usage guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_owned_assetsA
Search the user's asset vault across Unity, Fab, Quixel Megascans, Gumroad, and Cosmos. Hybrid: keyword (FTS5) fused with BGE text embeddings and CLIP visual vectors via 3-way RRF. Results include 'match' attribution ('keyword+semantic+vision') and 'ownership' ('vault_owned' vs 'catalog_grant').
engine: target game engine compatibility (all|unity|unreal|godot). Engine-agnostic sources (Quixel FBX/textures, Cosmos) match both unity and unreal.
source: filter by marketplace provider (all|unity|fab|quixel|gumroad|cosmos).
pipeline: render pipeline (all|HDRP|URP|Built-in).
local_only: only assets already downloaded to disk.
limit: max results to return.| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| engine | No | all | |
| source | No | all | |
| category | No | all | |
| pipeline | No | all | |
| local_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and delivers substantive traits: the 3-way RRF fusion of FTS5/BGE/CLIP, result 'match' attribution ('keyword+semantic+vision'), and the ownership distinction ('vault_owned' vs 'catalog_grant'). It also discloses engine-agnostic matching behavior for Quixel and Cosmos sources. It stops short of pagination, rate limits, and error behavior, but the core result-interpretation behaviors are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose line is front-loaded, followed by two compact behavioral notes, then a terse parameter block where each line earns its place with inline enums. No filler, no repetition of schema defaults. The structure is scannable and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return structure, so the description rightly focuses on filtering semantics and result interpretation. For a 7-parameter hybrid-search tool with zero annotations, it covers the essentials: marketplaces, engine-agnostic matching, render pipeline, and ownership/match attribution. Remaining gaps—query syntax, pagination beyond limit, and empty-result behavior—are modest for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for 5 of 7 parameters: engine, source, pipeline, local_only, and limit all receive meaningful semantics with inline enum values (e.g., 'all|unity|fab|quixel|gumroad|cosmos'). The engine note adds genuine nuance ('Engine-agnostic sources... match both unity and unreal'). query and category remain unexplained, with query—the only required parameter—lacking any guidance on accepted query syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Search the user's asset vault across Unity, Fab, Quixel Megascans, Gumroad, and Cosmos.' The enumerated marketplaces and the vault scope clearly distinguish it from siblings like get_asset_details, list_asset_categories, and get_vault_stats. The hybrid-search detail ('keyword (FTS5) fused with BGE text embeddings and CLIP visual vectors') reinforces that this is the vault search operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than explicit: the name and first line mark this as the vault search tool, and filters like local_only ('only assets already downloaded to disk') hint at concrete use cases. However, the description never states when to prefer this over siblings (e.g., get_asset_details for a known asset, list_asset_categories for taxonomy) or any exclusion conditions. An agent must infer the division of labor from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_stackA
Lint a set of owned assets that are planned for one project/stack. Detects role conflicts (two weather systems, two vegetation renderers, …), same-product family notes, and missing prerequisites (e.g. MicroSplat module without core MicroSplat). Call before importing multiple assets together.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'Lint' and 'detects' imply a non-mutating validation pass, and the specific detection categories explain what the tool does. It does not explicitly state side-effect freedom or permission requirements, but the language strongly signals read-only analysis for a pre-import check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: purpose, concrete detection examples, and a single usage directive. The most important information is front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single input parameter, no annotations, and an existing output schema, the description covers purpose, input semantics, and when to call it. It could explicitly confirm that no changes are made or name sibling alternatives, but it leaves no major workflow ambiguity for a validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the only parameter, asset_ids, has an empty items schema. The description compensates by clarifying that these are 'owned assets planned for one project/stack,' and the plural usage plus 'importing multiple assets' conveys that all intended assets should be passed together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Lint a set of owned assets that are planned for one project/stack.' It also enumerates concrete outputs (role conflicts, family notes, missing prerequisites), which makes it clearly distinct from siblings like get_stack_recommendations or audit_project without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit invocation context: 'Call before importing multiple assets together.' It does not name alternative tools or exclusion conditions, but the workflow placement is clear enough for an agent to choose this over search, recommendation, or import tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.3.0- First observed
audit_project - First observed
get_asset_details - First observed
get_stack_recommendations - First observed
get_vault_stats - First observed
import_asset_to_project - First observed
list_asset_categories - First observed
list_stack_recipes - First observed
search_owned_assets - First observed
validate_stack
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes: auditing a project, searching assets, importing assets, validating stacks, and retrieving stats. The main overlap is among the stack-oriented tools (get_stack_recommendations, list_stack_recipes, validate_stack), but their descriptions distinguish recommendation, curation, and linting roles well enough for an agent to choose correctly.
All tool names use consistent snake_case with clear verb_noun patterns (audit_project, list_asset_categories, get_asset_details, search_owned_assets, validate_stack, etc.). There is no mixing of camelCase or inconsistent verb styles.
Nine tools is well-scoped for an asset vault and project-integration server. Each tool earns its place, covering discovery, inspection, recommendation, validation, and import without excessive breadth.
The surface covers core workflows: project audit, asset search/details, category/stats overview, stack recommendation/validation, and Unity import. Minor gaps exist, such as no Unreal/Fab import path and no explicit asset removal or metadata update operation, but agents can work around these for the stated purpose.
Maintenance
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.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
Related MCP Servers
- 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.42 npm1MIT

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.213MIT- AlicenseAqualityAmaintenanceMCP server for controlling the Unity Editor from AI clients. 140+ tools for scenes, GameObjects, components, assets, Shader Graph, PlayTest DSL, screenshots with visual diff, batch operations with Undo rollback, and in-editor chat. Token-efficient plain-text protocol.3631MIT
- AlicenseAqualityBmaintenanceLicense-aware game development resource discovery MCP server. Helps AI coding agents find reusable game assets with commercial-use filtering, license classification, and attribution generation.91MIT