AXIS Avatar Foundry
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
3D avatar/asset foundry: text/image -> rigged, validated, engine-ready GLB via x402.
| Author | com.jonathanarvay |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 194 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"AXIS Avatar Foundry": {
"url": "https://api.avatar.jonathanarvay.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (14)
axis_list_capabilitiesread-onlyList all AXIS Foundry capabilities (input formats, export platforms, validation rules). [Free — no payment required.]
Parameters:
kind— string — Filter by capability kind
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_validateread-onlyValidate 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.]
Parameters:
file_path(required) — string — Path to mesh file (.glb, .obj, .stl, etc.)profile— string — Validation strictness profileplatform— string — Target platform for platform-specific validation
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_inspectread-onlyInspect 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.]
Parameters:
file_path(required) — string — Path to mesh file
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_compareread-onlyCompare 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.]
Parameters:
file_a(required) — string — Path to first mesh filefile_b(required) — string — Path to second mesh filesections— array — Limit comparison to specific contract sections
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_processread-onlyRun 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.]
Parameters:
file_path(required) — string — Path to mesh fileexport— boolean — Also export to the target platformplatform— string — Target platform
Hints: read-only yes · destructive no · idempotent yes · open-world no
post_process_meshread-onlyPost-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.]
Parameters:
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 meshrun_skinning— boolean — Override skinning (default: avatars only)
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_exportread-onlyExport 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.]
Parameters:
file_path(required) — string — Path to mesh fileplatform(required) — string — Target platform
Hints: read-only yes · destructive no · idempotent yes · open-world no
axis_manifest_verifyread-onlyVerify 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.]
Parameters:
manifest(required) — object — Export manifest JSON objectexpected_hash— string — Expected content hash for verification
Hints: read-only yes · destructive no · idempotent yes · open-world no
repair_meshread-onlyRepair 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.]
Parameters:
file_path(required) — string — Path to mesh fileup_axis— string — Source up axisscale_unit— string — Source scale unitfix_normals— boolean — Recalculate missing normalsremove_degenerates— boolean — Remove zero-area triangles
Hints: read-only yes · destructive no · idempotent yes · open-world no
retarget_animationread-onlyRetarget 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.]
Parameters:
clip_name(required) — string — Built-in clip name from animation libraryplatform(required) — string — Target platform mappingdrop_unmapped— boolean — Drop channels not found in the target mapping
Hints: read-only yes · destructive no · idempotent yes · open-world no
roblox_compliance_checkread-onlyRun 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.]
Parameters:
file_path(required) — string — Path to mesh file
Hints: read-only yes · destructive no · idempotent yes · open-world no
generate_avatar_from_textPAID (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).]
Parameters:
prompt(required) — string — What to generate (subject description)platform— string — Target engine (adds rigging + engine export)asset_kind— string — Asset taxonomypolygon_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.
Hints: read-only no · destructive no · idempotent no · open-world yes
generate_avatar_from_imagePAID (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).]
Parameters:
image_b64(required) — string — Base64-encoded reference image (PNG/JPEG)prompt— string — Optional style/subject hint alongside the imageplatform— string — Target engine (adds rigging + engine export)asset_kind— string — Asset taxonomypolygon_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.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_generation_statusread-onlyFREE: 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.]
Parameters:
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 toolidempotency_key— string — Alternate lookup key: the idempotency_key passed to the original generate call. Requires payer.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.