MCP Server

AXIS Avatar Foundry

com.jonathanarvay/axis-avatar-foundry
Design & Creative Developer Tools Gaming Public & reachable MCP 2025-11-25

What this MCP does

Generates, repairs, rigs, validates, retargets, compares, and exports production-ready 3D avatars and meshes for game platforms.

axis_compare
Compare Two Meshes
Compare two avatar contracts. Returns similarity score and section-level diffs. [Paid: $0.10 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'file_a': 'avatars/hero_v1.glb', 'file_b': 'avatars/hero_v2.glb'}], 'required': ['file_a', 'file_b'], 'properties': {'file_a': {'type': 'string', 'description': 'Path to first mesh file'}, 'file_b': {'type': 'string', 'description': 'Path to second mesh file'}, 'sections': {'type': 'array', 'description': 'Limit comparison to specific contract sections'}}}
axis_export
Export to Engine Platform
Export an avatar to a target engine platform with validation and HMAC-signed manifest. [Paid: $0.50 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'platform': 'godot', 'file_path': 'avatars/hero.glb'}], 'required': ['file_path', 'platform'], 'properties': {'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target platform'}, 'file_path': {'type': 'string', 'description': 'Path to mesh file'}}}
axis_inspect
Inspect Mesh File
Inspect an avatar's contract state and provenance chain (stage, bone/vertex counts, provenance step count, chain_valid + any broken links). Does not return a quality grade — use axis_validate for pass/warn/fail rule results. [Paid: $0.10 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'file_path': 'avatars/hero.glb'}], 'required': ['file_path'], 'properties': {'file_path': {'type': 'string', 'description': 'Path to mesh file'}}}
axis_list_capabilities
List Foundry Capabilities
List all AXIS Foundry capabilities (input formats, export platforms, validation rules). [Free — no payment required.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'kind': 'export_platform'}], 'properties': {'kind': {'enum': ['input_format', 'export_platform', 'validation_rule'], 'type': 'string', 'description': 'Filter by capability kind'}}}
axis_manifest_verify
Verify Export Manifest
Verify an export manifest's integrity and optionally check content hash. [Paid: $0.10 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'manifest': {'platform': 'unity', 'artifact_hash': '…'}, 'expected_hash': '…'}], 'required': ['manifest'], 'properties': {'manifest': {'type': 'object', 'description': 'Export manifest JSON object'}, 'expected_hash': {'type': 'string', 'description': 'Expected content hash for verification'}}}
axis_process
Process Mesh File (Full Pipeline)
Run the full AXIS avatar pipeline (classify → normalize → rig → skin → validate). Returns contract summary. [Paid: $1.50 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'export': True, 'platform': 'unreal', 'file_path': 'avatars/hero.glb'}], 'required': ['file_path'], 'properties': {'export': {'type': 'boolean', 'description': 'Also export to the target platform'}, 'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target platform'}, 'file_path': {'type': 'string', 'description': 'Path to mesh file'}}}
axis_validate
Validate Mesh (38 Rules)
Validate an avatar mesh file. Returns pass/warn/fail counts and detailed rule results. [Paid: $0.25 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'profile': 'strict', 'platform': 'unity', 'file_path': 'avatars/hero.glb'}], 'required': ['file_path'], 'properties': {'profile': {'enum': ['default', 'strict', 'lenient'], 'type': 'string', 'description': 'Validation strictness profile'}, 'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target platform for platform-specific validation'}, 'file_path': {'type': 'string', 'description': 'Path to mesh file (.glb, .obj, .stl, etc.)'}}}
generate_avatar_from_image
Generate 3D Avatar from Image (Paid)
PAID (x402, 6 USDC): generate a production 3D avatar from a reference photo (base64) — xAI A-pose normalize → TRELLIS.2 GPU mesh → full canonical post-process. Payment settles ONLY when generation completes; a failed generation is never charged. Returns a job_id — poll with the free get_generation_status tool (typical runtime 5-15 minutes). Pass idempotency_key when a retry is possible (timeout/5xx) — replaying the same key returns the original job_id instead of a second GPU job/charge. [Paid: $6.00 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; DEFERRED settlement — charged only when the generation job completes, a failed job is never charged. Poll get_generation_status (free).]
Open world
Input schema
{'type': 'object', 'examples': [{'platform': 'unity', 'image_b64': 'iVBORw0KGgo...'}], 'required': ['image_b64'], 'properties': {'prompt': {'type': 'string', 'description': 'Optional style/subject hint alongside the image'}, 'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target engine (adds rigging + engine export)'}, 'image_b64': {'type': 'string', 'description': 'Base64-encoded reference image (PNG/JPEG)'}, 'asset_kind': {'enum': ['avatar', 'prop', 'vehicle', 'environment', 'creature', 'weapon_armor', 'character_accessory', 'generic'], 'type': 'string', 'description': 'Asset taxonomy'}, 'polygon_tier': {'enum': ['mobile_light', 'mobile_standard', 'web_vr', 'desktop_standard', 'desktop_high', 'film_vfx', 'ultra_hd'], 'type': 'string', 'description': "Quality tier (defaults to the platform's configured tier)"}, 'texture_size': {'type': 'number', 'description': 'Texture bake size in px (defaults per platform, else 2048)'}, 'idempotency_key': {'type': 'string', 'description': 'Optional caller-chosen dedup key (<=200 chars, [A-Za-z0-9_.:-]). Replaying the same key (per payer) returns the original job_id — no new GPU job, no new charge. Use on any retry after a timeout/5xx.'}}}
generate_avatar_from_text
Generate 3D Avatar from Text (Paid)
PAID (x402, 5 USDC): generate a production 3D avatar from a text prompt — xAI concept image → TRELLIS.2 GPU mesh → full canonical post-process (repair/validate/export). Payment settles ONLY when generation completes; a failed generation is never charged. Returns a job_id — poll with the free get_generation_status tool (typical runtime 5-15 minutes). Pass idempotency_key when a retry is possible (timeout/5xx) — replaying the same key returns the original job_id instead of a second GPU job/charge. [Paid: $5.00 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; DEFERRED settlement — charged only when the generation job completes, a failed job is never charged. Poll get_generation_status (free).]
Open world
Input schema
{'type': 'object', 'examples': [{'prompt': 'a friendly adventurer character, fantasy game hero', 'platform': 'unity'}], 'required': ['prompt'], 'properties': {'prompt': {'type': 'string', 'description': 'What to generate (subject description)'}, 'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target engine (adds rigging + engine export)'}, 'asset_kind': {'enum': ['avatar', 'prop', 'vehicle', 'environment', 'creature', 'weapon_armor', 'character_accessory', 'generic'], 'type': 'string', 'description': 'Asset taxonomy'}, 'polygon_tier': {'enum': ['mobile_light', 'mobile_standard', 'web_vr', 'desktop_standard', 'desktop_high', 'film_vfx', 'ultra_hd'], 'type': 'string', 'description': "Quality tier (defaults to the platform's configured tier)"}, 'texture_size': {'type': 'number', 'description': 'Texture bake size in px (defaults per platform, else 2048)'}, 'idempotency_key': {'type': 'string', 'description': 'Optional caller-chosen dedup key (<=200 chars, [A-Za-z0-9_.:-]). Replaying the same key (per payer) returns the original job_id — no new GPU job, no new charge. Use on any retry after a timeout/5xx.'}}}
get_generation_status
Get Generation Job Status
FREE: poll a generation job submitted by the paid generate tools. Returns status/progress; once complete AND the deferred payment has settled, returns the download URLs. A failed generation reports charged=false. Look up by job_id, or by idempotency_key + payer if the job_id was lost. [Free — no payment required.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'job_id': 'cd464f2f473a4b6e'}], 'properties': {'payer': {'type': 'string', 'description': 'x402 payer address the original generate call used — required when looking up by idempotency_key (scopes the key to its owner).'}, 'job_id': {'type': 'string', 'description': 'Job id returned by a generate tool'}, 'idempotency_key': {'type': 'string', 'description': 'Alternate lookup key: the idempotency_key passed to the original generate call. Requires payer.'}}}
post_process_mesh
Post-Process Generated Mesh (Inline GLB or URL)
Post-process a RAW generated mesh (normalize → mesh-repair → rig/skin → validate → export) and return the finished, validated GLB as base64. The inline counterpart of axis_process (which needs a server file path) — the generation post-process step, callable by an LLM/agent that holds the mesh bytes (e.g. fresh TRELLIS output) or a URL to them. Provide the mesh EXACTLY one of two ways: inline as base64 (glb_base64) or as an HTTPS URL (mesh_url) — the URL's host must be on this server's operator-configured allowlist (off by default; an unconfigured allowlist refuses every mesh_url call, it is never open to an arbitrary host). Providing both or neither is a real input error. [Paid: $1.50 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'platform': 'roblox', 'asset_kind': 'avatar', 'glb_base64': 'Z2xURgIAAAA...'}], 'properties': {'mesh_url': {'type': 'string', 'description': "HTTPS URL to fetch the raw GLB from instead of inline base64 (e.g. a presigned storage URL) — the host must be on this server's configured allowlist (off by default). Provide exactly one of glb_base64 or mesh_url."}, 'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target engine platform (adds export validation)'}, 'asset_kind': {'enum': ['avatar', 'prop', 'vehicle', 'environment', 'creature', 'weapon_armor', 'character_accessory', 'generic'], 'type': 'string', 'description': 'Asset kind (skinning auto-on for avatar only)'}, 'glb_base64': {'type': 'string', 'description': 'Base64-encoded raw binary GLB to post-process. Provide exactly one of glb_base64 or mesh_url.'}, 'polygon_tier': {'type': 'string', 'description': 'Decimation tier for the output mesh'}, 'run_skinning': {'type': 'boolean', 'description': 'Override skinning (default: avatars only)'}}}
repair_mesh
Repair Mesh to Canonical Frame
Repair a mesh into AXIS canonical frame (scale/axis/degenerates/normals) and return repair metrics. [Paid: $0.75 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'up_axis': 'Z', 'file_path': 'raw_scans/statue.obj', 'scale_unit': 'centimeters'}], 'required': ['file_path'], 'properties': {'up_axis': {'enum': ['Y', 'Z', '-Z', 'X', '-Y'], 'type': 'string', 'description': 'Source up axis'}, 'file_path': {'type': 'string', 'description': 'Path to mesh file'}, 'scale_unit': {'enum': ['meters', 'centimeters', 'millimeters', 'inches', 'feet'], 'type': 'string', 'description': 'Source scale unit'}, 'fix_normals': {'type': 'boolean', 'description': 'Recalculate missing normals'}, 'remove_degenerates': {'type': 'boolean', 'description': 'Remove zero-area triangles'}}}
retarget_animation
Retarget Animation Clip
Retarget a built-in animation clip to a platform mapping and report coverage + deterministic hashes. [Paid: $0.75 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'platform': 'unreal', 'clip_name': 'walk_cycle'}], 'required': ['clip_name', 'platform'], 'properties': {'platform': {'enum': ['unity', 'unreal', 'godot', 'roblox', 'axis_engine'], 'type': 'string', 'description': 'Target platform mapping'}, 'clip_name': {'type': 'string', 'description': 'Built-in clip name from animation library'}, 'drop_unmapped': {'type': 'boolean', 'description': 'Drop channels not found in the target mapping'}}}
roblox_compliance_check
Roblox R15 Compliance Check
Run Roblox R15 compliance checks against a mesh using canonical pipeline outputs. [Paid: $0.25 USDC via x402 for unauthenticated calls on the hosted /mcp endpoint; settled only on a successful (non-error) result.]
Read only Idempotent
Input schema
{'type': 'object', 'examples': [{'file_path': 'avatars/hero.glb'}], 'required': ['file_path'], 'properties': {'file_path': {'type': 'string', 'description': 'Path to mesh file'}}}
Changed
generate_avatar_from_image
Sept. 29, 2026, 3:02 a.m.
Changed
generate_avatar_from_text
Sept. 29, 2026, 3:02 a.m.
Changed
post_process_mesh
Sept. 29, 2026, 3:02 a.m.
Added
get_generation_status
Sept. 17, 2026, 12:35 p.m.
Added
generate_avatar_from_image
Sept. 17, 2026, 12:35 p.m.
Added
generate_avatar_from_text
Sept. 17, 2026, 12:35 p.m.
Added
roblox_compliance_check
Sept. 17, 2026, 12:35 p.m.
Added
retarget_animation
Sept. 17, 2026, 12:35 p.m.
Added
repair_mesh
Sept. 17, 2026, 12:35 p.m.
Added
axis_manifest_verify
Sept. 17, 2026, 12:35 p.m.
Added
axis_export
Sept. 17, 2026, 12:35 p.m.
Added
post_process_mesh
Sept. 17, 2026, 12:35 p.m.
Added
axis_process
Sept. 17, 2026, 12:35 p.m.
Added
axis_compare
Sept. 17, 2026, 12:35 p.m.
Added
axis_inspect
Sept. 17, 2026, 12:35 p.m.
Added
axis_validate
Sept. 17, 2026, 12:35 p.m.
Added
axis_list_capabilities
Sept. 17, 2026, 12:35 p.m.