# 3D Asset Library — MCP server

Frozen catalogue: 972 permitted families. Free beta — evaluation use; no trial commercial licence.
MCP: https://mcp.sgtfleet.com/mcp (Streamable HTTP, stateless). Send Authorization: Bearer YOUR_KEY on every MCP/API call and download.
Public discovery needs no key. Do not send API keys in URLs.
Free (forever): chair, table and bicycle; 3 build attempts per UTC day; GLB. 14-day trial: automatic on signup, no card; all 972 permitted families; 25 build attempts per UTC day; GLB and FBX. Then the key falls back to the Free plan; nothing is deleted. Free and trial previews stay watermarked. Evaluation licence: draft, not reviewed by counsel. One trial per email address. Premium, coming soon: higher limits, no watermark, commercial licence once reviewed. Tell us what you would build at /#waitlist (Premium interest). No prices announced.
usage returns plan (free, trial or pro), trial_ends_utc (ISO UTC or null), trial_days_left (remaining partial days rounded up), builds_per_day, seconds_per_day, formats, builds_remaining, blender_seconds, seconds_reserved, rpm and concurrency. Failed build/vary attempts count. Limits: 30 calls/minute, one operation at a time, 600 execution seconds/call. Free: 1800 execution seconds/day; trial: 15000; Pro: 36000. Pro is operator-issued only; no public promotion route.

## Tools
- search: Rank permitted families by keywords and schema-default dimension filters.
- suggest: Suggest families and schema-backed parameters without building.
- list_families: List families available to this account.
- get_schema: Read a source-matched family schema.
- get_skill: Read a family skill card.
- list_presets: Read named family presets.
- validate: Validate parameters through bounded Blender execution.
- build: Build one owned GLB and watermarked trial preview.
- vary: Build one variation of a named preset.
- check: Check an owned asset's delivery hashes and recorded audit; no new geometry check.
- export: Get an owned GLB URL; FBX requires an active trial or operator-issued Pro account.
- usage: Read plan, trial_ends_utc, trial_days_left, quotas and remaining usage.

## Discover
Search: https://mcp.sgtfleet.com/api/search?q=office%20chair&limit=3
Use category, comma-separated tags, max_width_m/max_height_m, limit (1..100), cursor. Dimension filters exclude unknown schema extents; defaults are not measured bounding boxes. verbose=true expands results.
- Benchmarks data: https://mcp.sgtfleet.com/benchmarks.json
- Benchmarks methods and limitations: https://mcp.sgtfleet.com/benchmarks.md
- Full guide: https://mcp.sgtfleet.com/llms-full.txt
- MCP card: https://mcp.sgtfleet.com/.well-known/mcp.json
- HTTP OpenAPI: https://mcp.sgtfleet.com/openapi.json
- Paginated catalogue: https://mcp.sgtfleet.com/catalog.json
- Example family: https://mcp.sgtfleet.com/families/chair.json
- Quickstart: https://mcp.sgtfleet.com/quickstart
- Trial: https://mcp.sgtfleet.com/#trial
- Premium interest: https://mcp.sgtfleet.com/#waitlist

## Quickstart
1. Search or suggest. 2. Read detail_url (full schema, units, ranges, presets). 3. Validate. 4. Build. 5. Download returned files with the same Bearer key.
HTTP tool call: POST /api/call with {"name":"build","arguments":{"family":"chair","params":{},"formats":["glb"]}}. Send Content-Type: application/json.
Build/validate/vary are synchronous bounded operations; build returns asset_id and files. GET /api/jobs/{asset_id} reads completed owned asset status; it is not an asynchronous submission interface.

### search
Optional q/category/tags strings, max_width_m/max_height_m numbers, limit integer=10, cursor string, verbose boolean=false. Returns families,total,next_cursor,units.
Example MCP arguments: {"q":"office chair","limit":3}

### suggest
Required request string; optional limit integer=3, verbose boolean=false. Returns ranked families with suggested_params, example_build and built=false; defaults are suggestions, not inferred design requirements.
Example MCP arguments: {"request":"delivery scooter","limit":3}

### list_families
No arguments. Returns ok,families (account-accessible names).
Example MCP arguments: {}

### get_schema
Required family; optional compact boolean=true. Returns ok,schema.
Example MCP arguments: {"family":"chair","compact":true}

### get_skill
Required family. Returns ok,skill_card.
Example MCP arguments: {"family":"chair"}

### list_presets
Required family. Returns ok,presets.
Example MCP arguments: {"family":"chair"}

### validate
Required family string, params object. Returns ok and validator findings. Uses execution quota.
Example MCP arguments: {"family":"chair","params":{}}

### build
Required family; optional params object={}, preset string, formats=[glb] (trial/Pro also allow fbx), render=true, expect object, verbose=false. Preview is always rendered. Returns ok,asset_id,family,audit,files.
Example MCP arguments: {"family":"chair","params":{},"formats":["glb"]}

### vary
Required family,base_preset; optional changes={}, n=1, render=true, expect object, verbose=false. Returns build delivery or builds list. One attempt.
Example MCP arguments: {"family":"chair","base_preset":"rockingchair","changes":{},"n":1}

### check
Required owned asset_id. Returns ok,asset_id,sha256,audit,check_kind. Rechecks delivery bytes; recorded geometry audit only.
Example MCP arguments: {"asset_id":"YOUR_ASSET_ID"}

### export
Required asset_id,format (glb|fbx). Returns ok,download_url; FBX requires active trial or Pro.
Example MCP arguments: {"asset_id":"YOUR_ASSET_ID","format":"glb"}

### usage
No arguments. Returns plan,trial_ends_utc,trial_days_left,tier,period,builds_remaining,builds_per_day,seconds_per_day,formats,blender_seconds,seconds_reserved and limits; seconds fields use seconds, counts use count.
Example MCP arguments: {}

## Errors
Failures have ok=false, error/code, message, fix_hint. HTTP status distinguishes input (400), auth (401), access (403), missing (404), quota (429), prerequisite/runtime failure (503). MCP SDK validation errors may use its standard protocol error envelope.
- account_concurrency_limit: Wait for your current operation to finish before retrying.
- account_rate_limit: Wait 60 seconds and retry; limit is 30 authenticated calls per minute.
- already_registered: use your existing key, or write to support@sgtfleet.com
- arguments_too_large: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- asset_unavailable: Use an owned completed build and its returned files URLs.
- blender_timeout: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- body_too_large: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- bounded_worker_failed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- build_format_refused: Set formats=["glb"]. Active trial and Pro also allow formats=[glb,fbx] or export with format fbx.
- call_failed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- consent_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- core_pin_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- csrf_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- daily_build_quota: Wait until the next UTC day. Failed build/vary attempts also count.
- daily_seconds_quota: Wait until the next UTC day; Free execution budget is 1800 seconds/day; trial is 15000; Pro is 36000.
- data_capacity_reached: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- data_root_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- data_symlink_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- dedicated_data_mount_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- dedicated_ext4_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- delivery_copy_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- duplicate_security_header: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- effective_memory_cap_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- execution_budget_exhausted: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- execution_timing_unavailable: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- export_format_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- family_metadata_pin_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- family_unavailable: Search /api/search for a permitted family name.
- family_waitlist_only: Use chair, table or bicycle on the Free plan; request Premium through /#waitlist.
- fbx_export_failed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- filesystem_argument_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- form_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- hard_data_filesystem_bound_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- host_headroom_reached: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- immutable_runtime_path_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- installed_blender_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_api_key: Send Authorization: Bearer YOUR_KEY. Obtain a key from /#trial.
- invalid_boolean: Send JSON true or false, not quoted strings.
- invalid_call_transition: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_cursor: Restart the same query without cursor; do not edit cursors or reuse them with different filters.
- invalid_email: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_execution_timing: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_fields: Use only the required/optional fields listed in /llms-full.txt.
- invalid_forwarded_address: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_internal_job_id: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_internal_job_identity: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_internal_job_paths: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_job_transition: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_json: Send a finite valid JSON object with Content-Type: application/json.
- invalid_local_secret: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_packaged_inventory: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_parameter: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_parameter_object: Send params/changes/expect as a JSON object; inspect /families/{name}.json.
- invalid_parameter_string: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_parameter_type: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_peer: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_preset: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_public_origin: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_queue_invocation: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_scene_receipt: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_search: Use q up to 500 characters, limit 1..100, positive finite dimensions in metres, verbose=true|false.
- invalid_showcase_order: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_tier: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_waitlist_text: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_worker_invocation: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_worker_response: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- invalid_worker_result: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- job_cap_readback_failed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- job_cgroup_membership_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- job_queue_timeout: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- job_unit_contract_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- job_unit_timeout: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- json_required: Set Content-Type: application/json.
- local_queue_core_pin_unavailable: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- mcp_2_MCPServer_unavailable: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- mcp_sessions_disabled: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- missing_fields: Supply all required fields listed for this tool in /llms-full.txt.
- nonfinite_parameter: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- one_app_worker_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- one_variation_per_call: Set n=1. Each vary call consumes one build attempt.
- origin_refused: Omit Origin for agent requests or set it to the configured public origin.
- package_source_pin_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- parameters_too_deep: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- path_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- prestart_cap_not_observed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- regular_runtime_file_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- rehearsal_root_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- required_delivery_missing: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- reviewed_job_template_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- root_owned_runtime_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- scene_copy_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- service_upgrading: A short service upgrade is in progress. Keep your key and retry shortly.
- shared_queue_unavailable: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- shortpath_unavailable: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- showcase_source_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- signup_rate_limit: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- supervisor_timeout: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- symlink_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- target_data_layout_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- target_data_layout_unverified: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- too_many_parameters: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- trial_ended: Your 14-day trial has ended. The Free plan includes chair, table and bicycle; request Premium through /#waitlist (Premium interest).
- unit_finished_without_timing: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- unknown_asset: Use an asset_id returned by your own successful build.
- unknown_asset_kind: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- unknown_fields: Remove fields not listed for this tool in /llms-full.txt.
- unknown_internal_job: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- unknown_tool: Read /llms-full.txt for supported tools and arguments.
- unwrapped_blender_launch_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- waitlist_rate_limit: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- web_integration_pending: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_operation_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_scratch_outside_data_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_scratch_required: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_scratch_symlink_refused: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_source_changed: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_source_hash_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
- worker_source_selection_mismatch: Inspect the tool arguments in /llms-full.txt; retry once corrected. If unchanged, contact the operator with this code.
Other codes: inspect /llms-full.txt arguments and contact the operator if corrected requests still fail. No filesystem paths are accepted. Counts and scores are dimensionless; geometry units are explicit in schemas.
