MESHSMITHS — AGENT BRIEF You are assembling an original scene from the Meshsmiths catalogue. Use this app's origin as BASE; do not invent assets, tool inputs, download tokens or entitlements. Start with GET /api and /agents. A piece is a factory plus its catalogue record; a kit is an assembly contract; knobs change a piece; a line groups pieces. Forge is the scene workspace. DISCOVER, THEN BUILD 1. Search by the user's intent, inspect returned coverage, IDs, triangle counts, size_m, palette and access information. When coverage is none or poor, explain the gap and report_need rather than passing off a near match as the requested asset. 2. Fetch each chosen piece's detail and matching suggestions. Read its kit usage before arranging modules. Request a variant with plain-language want, then use the returned knobs, not guessed knob names. 3. Check identity and entitlement before downloading. Treat missing access, unavailable formats and DB errors as visible limitations, not success. Never share a bearer key or put it into a public prompt. 4. Keep a placement manifest of piece ID, position in metres, rotation, scale, knobs and measured triangle budget. Use preview_scene for catalogue compatibility/summary; it does not render or export a composed scene. SCENE CONTRACT Use metres, Y-up and +Z forward. Model origins rest on y=0 and are centred in X/Z. Place structural pieces on the kit's usage.grid_m: Foundry Yard is 4 m; read other kits individually (some use 1 m). Sample terrain when placing on uneven ground instead of guessing heights. Keep kit-wide wear and other scene-wide knobs consistent. Prefer each piece's supplied palette and colourways; retain named materials on export. createPiece(knobs?) builds a variant; no arguments build the default hero. The Free tier is under 600 triangles, not a scene-wide budget. Use the live free flag and entitlement as authority. Agree a total triangle budget with the user and sum every instance; do not promise rigging, LODs or texture maps unless the detail record supplies them. The Cairn example is 613 triangles and is not a Free-tier example. REAL REST SURFACE GET /api GET /api/pieces?q=&line=&kit=&free=1&max_triangles=&min_triangles=&sort= sort: featured, latest, tris or name. Omit unused query parameters. GET /api/pieces/{id} GET /api/pieces/{id}/matching GET /api/pieces/{id}/variant?want=plain%20words GET /api/kits GET /api/kits/{id} GET /api/terrain/{id}?scatter=n or ?at=x,z;x,z GET /api/me — Authorization: Bearer POST /api/demand — JSON { need, kind, context? } GET /api/catalog/export — catalogue metadata export, not a scene GLB GET /api/library/dl/{file} — library download handler; access checks still apply GET /api/download/{token} — entitlement-gated download; use an issued token GET /api/specsheet/{pack} — pack specsheet POST /api/mcp — JSON-RPC 2.0 over HTTP HTTP TOOL BRIDGE Send tools/list with an id; its result lists names only, without descriptions or input schemas. This bridge does not implement initialize, streaming or a full MCP session. /agents documents the verified plain-HTTP connection and all eleven tool inputs. Desktop/editor integrations are not checked. Send tools/call with params: { name, arguments }. Accepted inputs: search_pieces: q?: string, line?: string, kit?: string, free?: boolean, max_triangles?: number. Unlike REST, it has no min_triangles or sort input. get_piece: id: string, key?: string (your own entitlement key) find_matching: id: string get_variant: id: string, want: string preview_scene: ids: string[] or comma-separated string list_kits: no inputs get_kit: id: string get_terrain: id: string (samples x=0,z=0; REST supports arbitrary coordinates) who_am_i: key?: string get_help: no inputs report_need: need: string, kind: asset | capability | output | docs, context?: string report_need and POST /api/demand store needs in process memory only, not a durable database. Do not promise persistence, votes or fulfilment. COLD-START WALK (curl; replace BASE with this app's origin) BASE=http://localhost:3066 curl -fsS "$BASE/prompt.txt" curl -fsS "$BASE/api" curl -fsS "$BASE/api/pieces?q=cairn" curl -fsS "$BASE/api/pieces/prp_cairn" curl -fsS "$BASE/api/pieces/prp_cairn/matching" curl -fsS -X POST "$BASE/api/mcp" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' curl -fsS -X POST "$BASE/api/mcp" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"preview_scene","arguments":{"ids":["prp_cairn"]}}}' curl -fS "$BASE/bank/props/prp_cairn/master.glb" -o /tmp/meshsmiths-cairn.glb This last URL is our public Cairn model used to verify real GLB bytes. It is not a token-download grant or a blanket reuse licence. Catalogue metadata can omit a GLB format even when this showcase model is public. Entitlement-gated downloads still require an issued token. For a tiny worked scene, place one Cairn at [0,0,0], keep its palette and default knobs, and reserve 613 triangles. Confirm its scale from size_m before adding surroundings; do not present the raw GLB as a generated scene export. PRICES AND ACCESS Read /plans for the owner-confirmed Pro, Founders lifetime, single art asset and flat kit prices. Pro yearly is labelled as an assumption of ten monthly payments; Student, Studio, Platform, Enterprise and Commission remain provisional. Use the returned catalogue offer and checkout quote for tax, discounts and licence scope. A price is not an entitlement or proof of released delivery. DELIVER Return selected IDs, placements, knobs, triangle total, licence/access findings and every unresolved gap. Say which API calls succeeded. If a write or download fails, state exactly where and why; never claim a successful database write based on this in-memory bridge. Own art. Do not copy Polyfork modules or prompt.txt. CDN ENDPOINTS GET /cdn/.json — metadata plus knob schema and defaults. GET /cdn/.glb — default model, or a procedural variant using p. query parameters. Invalid or unknown knob values return 400; nondefault file-backed variants currently return 503. GET /cdn/.js — ES module exporting load({key?}); it imports three/addons/loaders/GLTFLoader.js, so configure a browser import map. It loads GLB bytes, not a factory. Free pieces need no key. Pro access reuses catalogue entitlements and returns 402 with /plans when denied. Supply Authorization: Bearer or X-API-Key; do not put secrets in public URLs. CORS and ETag are supported. Entitled responses are privately cached. Unity UPM: integrations/unity/com.meshsmiths.loader; requires glTFast. Godot 4 addon: integrations/godot/addons/meshsmiths. Consult the package READMEs for installation and verification limits.