3D avatar/asset foundry: text/image -> rigged, validated, engine-ready GLB via x402.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.]
Path to first mesh file
Path to second mesh file
Limit comparison to specific contract sections
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.]
| Argument | Type | Description |
|---|---|---|
| file_a* | string | Path to first mesh file |
| file_b* | string | Path to second mesh file |
| sections | array | Limit comparison to specific contract sections |
{
"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"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| platform* | string | Target platform |
| file_path* | string | Path to mesh file |
{
"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"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| file_path* | string | Path to mesh file |
{
"type": "object",
"examples": [
{
"file_path": "avatars/hero.glb"
}
],
"required": [
"file_path"
],
"properties": {
"file_path": {
"type": "string",
"description": "Path to mesh file"
}
}
}List all AXIS Foundry capabilities (input formats, export platforms, validation rules). [Free — no payment required.]
| Argument | Type | Description |
|---|---|---|
| kind | string | Filter by capability kind |
{
"type": "object",
"examples": [
{
"kind": "export_platform"
}
],
"properties": {
"kind": {
"enum": [
"input_format",
"export_platform",
"validation_rule"
],
"type": "string",
"description": "Filter by capability kind"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| manifest* | object | Export manifest JSON object |
| expected_hash | string | Expected content hash for verification |
{
"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"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| export | boolean | Also export to the target platform |
| platform | string | Target platform |
| file_path* | string | Path to mesh file |
{
"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"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| profile | string | Validation strictness profile |
| platform | string | Target platform for platform-specific validation |
| file_path* | string | Path to mesh file (.glb, .obj, .stl, etc.) |
{
"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.)"
}
}
}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).]
| Argument | Type | Description |
|---|---|---|
| prompt | string | Optional style/subject hint alongside the image |
| platform | string | Target engine (adds rigging + engine export) |
| image_b64* | string | Base64-encoded reference image (PNG/JPEG) |
| asset_kind | string | Asset taxonomy |
| polygon_tier | string | Quality tier (defaults to the platform's configured tier) |
| texture_size | number | Texture bake size in px (defaults per platform, else 2048) |
| idempotency_key | string | 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. |
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).]
| Argument | Type | Description |
|---|---|---|
| prompt* | string | What to generate (subject description) |
| platform | string | Target engine (adds rigging + engine export) |
| asset_kind | string | Asset taxonomy |
| polygon_tier | string | Quality tier (defaults to the platform's configured tier) |
| texture_size | number | Texture bake size in px (defaults per platform, else 2048) |
| idempotency_key | string | 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. |
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.]
| Argument | Type | Description |
|---|---|---|
| payer | string | x402 payer address the original generate call used — required when looking up by idempotency_key (scopes the key to its owner). |
| job_id | string | Job id returned by a generate tool |
| idempotency_key | string | Alternate lookup key: the idempotency_key passed to the original generate call. Requires payer. |
{
"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 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.]
| Argument | Type | Description |
|---|---|---|
| mesh_url | string | 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 | string | Target engine platform (adds export validation) |
| asset_kind | string | Asset kind (skinning auto-on for avatar only) |
| glb_base64 | string | Base64-encoded raw binary GLB to post-process. Provide exactly one of glb_base64 or mesh_url. |
| polygon_tier | string | Decimation tier for the output mesh |
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.]
| Argument | Type | Description |
|---|---|---|
| up_axis | string | Source up axis |
| file_path* | string | Path to mesh file |
| scale_unit | string | Source scale unit |
| fix_normals | boolean | Recalculate missing normals |
| remove_degenerates | boolean | Remove zero-area triangles |
{
"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 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.]
| Argument | Type | Description |
|---|---|---|
| platform* | string | Target platform mapping |
| clip_name* | string | Built-in clip name from animation library |
| drop_unmapped | boolean | Drop channels not found in the target mapping |
{
"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"
}
}
}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.]
| Argument | Type | Description |
|---|---|---|
| file_path* | string | Path to mesh file |
{
"type": "object",
"examples": [
{
"file_path": "avatars/hero.glb"
}
],
"required": [
"file_path"
],
"properties": {
"file_path": {
"type": "string",
"description": "Path to mesh file"
}
}
}{
"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."
}
}
}{
"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."
}
}
}| run_skinning |
| boolean |
| Override skinning (default: avatars only) |
{
"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)"
}
}
}