Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

3D AI Agent Avatar

NPM · @THREE-WS/AVATAR-AGENT · SCANNED SEP 20

3D AI Agent Avatar — render any GLB, give it a Solana wallet, a voice, and pump.fun powers.

0 this week 78 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security89
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects toml 3.0.0, reached via @nirholas/pump-sdk > @coral-xyz/anchor > toml. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 80 of 276 dependencies flagged as unhealthy (2 deprecated). View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 8 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4046 tokens (~202/item across 20 items; 20 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 95% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the 3D AI Agent Avatar MCP server?

3D AI Agent Avatar runs locally as an npm package, launched with npx -y @three-ws/avatar-agent. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @three-ws/avatar-agent

# add to Claude Code
claude mcp add nirholas-3d-ai-agent-avatar -- npx -y @three-ws/avatar-agent
// .cursor/mcp.json
{
  "mcpServers": {
    "nirholas-3d-ai-agent-avatar": {
      "command": "npx",
      "args": [
        "-y",
        "@three-ws/avatar-agent"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "nirholas-3d-ai-agent-avatar": {
      "command": "npx",
      "args": [
        "-y",
        "@three-ws/avatar-agent"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add nirholas-3d-ai-agent-avatar -- npx -y @three-ws/avatar-agent
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "nirholas-3d-ai-agent-avatar": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@three-ws/avatar-agent"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add nirholas-3d-ai-agent-avatar --command npx --arg -y --arg @three-ws/avatar-agent
# ~/.hermes/config.yaml
mcp_servers:
  nirholas-3d-ai-agent-avatar:
    command: "npx"
    args: ["-y", "@three-ws/avatar-agent"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "nirholas-3d-ai-agent-avatar": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@three-ws/avatar-agent"
      ]
    }
  }
}
# add to Vellum
assistant mcp add nirholas-3d-ai-agent-avatar -t stdio -c npx -a -y @three-ws/avatar-agent
// mcp.json
{
  "mcpServers": {
    "nirholas-3d-ai-agent-avatar": {
      "command": "npx",
      "args": [
        "-y",
        "@three-ws/avatar-agent"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 18 Sept 26 +1
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 11 Sept 26 +1
    • Stability: 0.97 → pass security
  • 9 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 7 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/@three-ws/avatar-agent@1.2.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 5 findings
ID CVE Severity Vector Fix available
GHSA-3gc7-fjrx-p6mg CVE-2025-3194 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H no
GHSA-528h-pc64-c93x CVE-2026-71429 medium CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-82x6-q7mm-w9cf CVE-2026-77465 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-v5mp-jgw5-2x6j CVE-2026-63376 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L yes
GHSA-w5hq-g745-h8pq CVE-2026-41907 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 276 packages
Packages resolved 276
Deprecated 2
Stale 76
No linked repository 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 20 exposed · ~3,756 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
dress_avatar ~146

Apply (or replace) accessories on a spawned avatar session and optionally set a pose. Pass accessoryIds to set the full accessory list (empty array clears them). Pass pose to switch animations. Returns the updated viewer URL.

NameTypeReqDescription
accessoryIdsarrayFull list of accessory ids to wear. Allowed: hat-baseball, hat-beanie, hat-cowboy, glasses-round, glasses-shades, earrings-hoops, earrings-studs. Empty array clears.
posestringPose preset. Allowed: idle, wave, thumbs_up, dab, t_pose, sit, point, salute, cheer.
sessionIdstringyesSession id returned by spawn_avatar.

No output schema declared.

No examples provided.

ens_sns_resolve ~117

Resolve a human-readable name to addresses across ENS (Ethereum) and SNS (Solana, Bonfida). For .eth: returns Ethereum address + reverse lookup. For .sol: returns Solana owner wallet + the wallet's other owned .sol domains + favorite domain. Names without a suffix are tried against both registries.

NameTypeReqDescription
namestringyesName to resolve, e.g. "vitalik.eth", "bonfida.sol", or bare "vitalik" (tried in both registries).

No output schema declared.

No examples provided.

generate_avatar ~156

Generate a textured GLB from a text prompt or reference image URLs via Replicate (Hunyuan-3D 3.1 by default; configurable). Returns the GLB URL and a new avatar session you can dress + animate. Requires REPLICATE_API_TOKEN and REPLICATE_TEXT_TO_AVATAR_MODEL on the MCP server.

NameTypeReqDescription
imagesarrayReference image URLs for image-to-3D.
namestringName for the resulting avatar session.
promptstringText description of the avatar to generate.
seedinteger
texturebooleanRequest PBR textures when supported (default true).
voicestringTTS voice the session should use.

No output schema declared.

No examples provided.

inspect_glb ~87

Fetch any GLB URL (or data: URL) and return a full structural breakdown: meshes, primitives, materials, textures, animations, skins, vertex + triangle counts, world-space bounding box, and file size. Pure local parse via @gltf-transform/core — no third-party services.

NameTypeReqDescription
urlstringyesPublic URL or data: URL of a .glb file.

No output schema declared.

No examples provided.

list_animations ~69

Return the three.ws pose preset catalog (T-pose, A-pose, wave, thinker, jump, dance, warrior2, …) grouped by category. Use the ids returned here as posePresetId in render_avatar. Fetched live from three.ws so the catalog reflects the deployed version.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_avatars ~68

Return the catalog of default 3D avatars (default, cz) and accessories (hats, glasses, earrings) hosted on the three.ws CDN. Each entry includes a public GLB URL ready to load in any glTF viewer or Three.js scene. Includes the supported pose preset names.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

optimize_glb ~204

Run a @gltf-transform/functions optimization pipeline on a GLB URL: dedup → prune unused → weld duplicate vertices → optional Draco mesh compression. Returns the optimized bytes as a base64 data URL with before/after sizes. Lossless for geometry except where Draco quantization is requested.

NameTypeReqDescription
dedupbooleanMerge equivalent accessors / materials / textures. Default true.
dracobooleanApply Draco mesh compression (lossy quantization). Default false.
dracoQuantizePositionintegerPosition bits for Draco (default 14 = high fidelity).
prunebooleanRemove unused materials / nodes / meshes. Default true.
returnInlinebooleanReturn the optimized GLB inline as a base64 data URL (default true). Set false to return only stats.
urlstringyesSource GLB URL (or data: URL).
weldbooleanMerge duplicate vertices. Default true.

No output schema declared.

No examples provided.

pump_buy ~282

Swap SOL → target mint via Jupiter aggregator. Direct mode = one tx signed by the buyer. Bundled mode (jitoBundle=true) = two-tx Jito bundle where funderSecret transfers SOL + tip to the buyer atomically with the swap (sweeper-resistant). Pass target="three" to use the $three reference mint. EXECUTION ACTION.

NameTypeReqDescription
buySolnumberyesAmount of SOL to spend.
buyerSecretstringyesBase58 secret of the buyer wallet (signs the swap).
confirmbooleanMust be true to execute this irreversible swap (when REQUIRE_CONFIRM is on).
funderSecretstringBase58 secret of the funder. Required when jitoBundle=true.
jitoBundlebooleanUse a Jito bundle (atomic funder→buyer transfer + swap). Default false.
jitoTipSolnumberJito tip in SOL (default 0.005). Only used when jitoBundle=true.
priorityMicroLamportsintegerCompute-unit price (default 2_000_000).
slippageBpsintegerSlippage in basis points (default 500 = 5%).
targetstringyesTarget mint (base58) or "three" to use the THREE_MINT env.

No output schema declared.

No examples provided.

pump_collect_fees ~263

Collect a pump.fun coin's creator-fee vault and route the SOL to a safe destination, atomically, in a single tx inside a Jito bundle. Funder pays the fee + Jito tip; creator signs collectCoinCreatorFee + drain to DESTINATION. The bundle's atomicity blocks any competing collector from interleaving even if the creator key is leaked. EXECUTION ACTION.

NameTypeReqDescription
bufferLamportsintegerLamports to leave in the creator wallet (default 890880, rent-exempt minimum).
confirmbooleanMust be true to execute this irreversible collect+drain (when REQUIRE_CONFIRM is on).
creatorSecretstringyesBase58 secret of the coin creator (signs collect + drain).
destinationstringyesPubkey to receive the collected SOL.
funderSecretstringyesBase58 secret of the funder (pays fee + tip).
jitoTipSolnumberJito tip in SOL (default 0.005).
minVaultSolnumberAbort if the vault holds less than this (default 0.001).
priorityMicroLamportsintegerCompute-unit priority price (default 3_000_000).

No output schema declared.

No examples provided.

pump_launch ~498

Launch a pump.fun token atomically via a Jito bundle. Funder pays its own fee + tip and rent-funds the creator; creator signs createV2 in tx2 — both txs land in the same block or neither does. Pass devBuySol to launch-and-snipe: the creator first buy is folded into the create tx (createV2AndBuy) so it lands atomically before any sniper sees the curve. If uri is omitted, metadata is uploaded to pump.fun IPFS first from name/symbol/description/socials/imageUrl. Returns the mint address, bundle id, both tx signatures, the dev-buy quote, and the pump.fun URL. EXECUTION ACTION — creates a real mint on mainnet.

NameTypeReqDescription
confirmbooleanMust be true to execute this irreversible mint launch (when REQUIRE_CONFIRM is on).
creatorSecretstringyesBase58 secret of the creator wallet (signs createV2 — becomes on-chain creator).
descriptionstring
devBuySolnumberSOL for an atomic creator dev buy folded into the create tx (launch-and-snipe). Omit or 0 = launch only. Funded by the funder on top of rent.
funderSecretstringyesBase58 secret of the funder wallet (pays Tx1 fee + tip + rent transfer).
imageUrlstringImage to upload as the token icon (re-fetched at upload time).
jitoTipSolnumberJito tip in SOL (default 0.005).
mintSecretstringBase58 secret to use as the mint keypair (default: random).
namestringyesToken name.
priorityMicroLamportsintegerCompute-unit priority price (default 2_000_000).
rentSolnumberSOL the funder transfers to the creator for tx2 rent + fees (default 0.035).
slippageBpsintegerSlippage tolerance for the dev buy in basis points (default 500 = 5%). Only used when devBuySol > 0.
symbolstringyesToken symbol (ticker).
telegramstring
twitterstring
uristringExisting metadata URI. If omitted, metadata is uploaded first.
websitestring

No output schema declared.

No examples provided.

pump_snapshot ~116

Live snapshot for a Solana token (SPL or pump.fun): USD price (Jupiter), 24h volume + primary DEX (Dexscreener), pump.fun metadata (name/symbol/image/socials/mcap), and top-holder distribution from Solana RPC. Optional Helius DAS supply when HELIUS_API_KEY is configured. Free — no signer.

NameTypeReqDescription
tokenstringBase58 Solana mint address. Pass "three" or omit to use the $three reference mint (THREE_MINT env).

No output schema declared.

No examples provided.

render_avatar ~243

Render an avatar GLB with a three.ws pose preset, camera orbit, and optional ARKit-52 facial expression. Same pipeline as the three.ws customizer's save-snapshot flow. Returns PNG bytes as a base64 data URL. Accepts either glbUrl directly or sessionId from spawn_avatar.

NameTypeReqDescription
backgroundstringCSS color or "transparent". Default "#0a0a0a".
cameraOrbitobjectCamera orbit around the avatar.
expressionobjectARKit-52 morph target map, e.g. { mouthSmileLeft: 0.6, mouthSmileRight: 0.6 }.
glbUrlstringAvatar GLB URL. Required if sessionId is omitted.
heightintegerOutput height (default 1024).
posePresetIdstringPose preset id (e.g. "tpose", "wave", "thinker"). Call list_animations for the full catalog.
sessionIdstringAvatar session id from spawn_avatar. Overrides glbUrl.
widthintegerOutput width (default 1024).

No output schema declared.

No examples provided.

spawn_avatar ~151

Spawn a 3D avatar from a curated default (preset="default" or "cz") or from a custom GLB URL. Returns a sessionId other tools (dress_avatar, viewer_url, speak) reference, plus the avatar GLB URL and a ready-to-open three.ws viewer link.

NameTypeReqDescription
glbUrlstringCustom GLB URL — overrides preset.
namestringDisplay name for the avatar persona.
personastringShort persona/personality blurb (used by callers; not enforced server-side).
presetstringPick a curated default avatar.
voicestringOpenAI TTS voice the speak tool should use for this session.

No output schema declared.

No examples provided.

speak ~265

Synthesize speech for an avatar session and return a base64 audio data URL the client can play. Free NVIDIA NIM Magpie TTS leads when NVIDIA_API_KEY is set (non-pcm requests are served as WAV); OpenAI TTS is the paid backstop when OPENAI_API_KEY is set. Picks the session's configured voice unless overridden.

NameTypeReqDescription
formatstringAudio format (default mp3; the free NVIDIA lane serves every non-pcm request as wav).
languagestringBCP-47 language for the free NVIDIA lane (en-US default; also es-US, fr-FR, de-DE, zh-CN, vi-VN, it-IT, hi-IN, ja-JP).
modelstringOpenAI TTS model used on the paid backstop lane (default gpt-4o-mini-tts). The free NVIDIA lane always serves magpie-tts-multilingual.
sessionIdstringAvatar session id (optional — when omitted, voice falls back to the override or "nova").
speednumberPlayback speed multiplier (OpenAI lane only).
textstringyesText the avatar should say.
voicestringOverride the session voice for this call.

No output schema declared.

No examples provided.

thumbnail_glb ~155

Render any public GLB URL to a PNG via three.ws's hosted three-light rig + auto-framing camera. Returns the PNG inline as a base64 data URL (≤ ~4 MB) plus dimensions. Background defaults to #0a0a0a — pass "transparent" for compositing.

NameTypeReqDescription
backgroundstringCSS color (e.g. "#0a0a0a") or "transparent". Default "#0a0a0a".
glbUrlstringyesPublic http(s) URL of a .glb file.
heightintegerOutput height in pixels (default 1024).
widthintegerOutput width in pixels (default 1024).

No output schema declared.

No examples provided.

validate_glb ~116

Run the official Khronos gltf-validator against a GLB URL. Returns errors, warnings, infos, and hints with codes + JSON pointers, plus structural counts (animations, materials, etc.) per the validator's info report. The same engine that powers gltf.report.

NameTypeReqDescription
maxIssuesintegerCap on issues returned in each bucket (default 100). Validator may still scan all of them.
urlstringyesPublic URL or data: URL of a .glb / .gltf file to validate.

No output schema declared.

No examples provided.

viewer_url ~378

Build a shareable https://three.ws/viewer?... URL that opens any GLB in three.ws's WebGL viewer, plus a ready-to-paste iframe snippet. Supports background, auto-rotate, camera preset OR explicit camera orbit, AR mode (model-viewer), dimensions, pose, and accessory overlay. Accepts a raw glbUrl or a sessionId from spawn_avatar.

NameTypeReqDescription
accessoryIdsarrayAccessory ids to attach in the viewer.
arbooleanEnable model-viewer AR buttons on iOS/Android.
autoRotatebooleanAuto-rotate the model. Default true on the web viewer.
backgroundstringBackground color or gradient (CSS), e.g. "#0a0a0a", "linear-gradient(...)", or "transparent".
cameraAngleDegnumberYaw in degrees shorthand. Used when cameraOrbit is absent.
cameraDistancenumberDistance multiplier shorthand (1.0 = default). Used when cameraOrbit is absent.
cameraOrbitstringExplicit camera orbit in model-viewer syntax, e.g. "0deg 80deg 2m". Overrides cameraPreset.
cameraPresetstringNamed camera framing preset.
glbUrlstringDirect GLB URL. Required if sessionId is omitted.
heightintegerViewer height in pixels.
posestringPose preset id (e.g. "wave", "tpose"). Call list_animations for the catalog.
sessionIdstringAvatar sessionId returned by spawn_avatar. Overrides glbUrl.
thumbnailUrlstringOptional thumbnail to show in the iframe before the GLB loads.
widthintegerViewer width in pixels (for the iframe snippet).

No output schema declared.

No examples provided.

wallet_balance ~76

Return SOL balance and all SPL token balances (including Token-2022) for a Solana pubkey. Uses the configured SOLANA_RPC_URL. Read-only — no signer required.

NameTypeReqDescription
includeTokensbooleanInclude SPL token accounts (default true).
pubkeystringyesBase58 Solana pubkey to read.

No output schema declared.

No examples provided.

wallet_create ~187

Generate a Solana keypair locally. Optionally grind for a base58 prefix/suffix (e.g. "three") and/or attach it to an avatar session. Returns the base58 pubkey and secret ONCE — store the secret yourself; the MCP does not persist it.

NameTypeReqDescription
caseSensitivebooleanMatch case-sensitively (default true). Base58 has no 0OIl so set false to be permissive.
maxAttemptsintegerCap on grind attempts (default 500_000). Bump for longer prefixes.
sessionIdstringIf set, the wallet is attached to this avatar session.
vanityPrefixstringBase58 prefix to grind for (e.g. "three"). Up to 8 chars.
vanitySuffixstringBase58 suffix to grind for. Up to 8 chars.

No output schema declared.

No examples provided.

wallet_send ~179

Send SOL from the configured signer to a destination pubkey. The signer is supplied via the `secret` arg (base58) or via SOLANA_SECRET_KEY env on the MCP server. Returns the confirmed signature and a Solscan link. EXECUTION ACTION — funds move on mainnet, irreversible: pass confirm:true. Capped by MAX_SOL_PER_TX; destination must be in RECIPIENT_ALLOWLIST if one is configured.

NameTypeReqDescription
confirmbooleanMust be true to execute this irreversible send (when REQUIRE_CONFIRM is on).
priorityMicroLamportsintegerCompute-unit price (default 100000).
secretstringBase58 secret of the sender. Falls back to SOLANA_SECRET_KEY env.
solnumberyesAmount of SOL to send.
tostringyesDestination Solana pubkey.

No output schema declared.

No examples provided.

Common questions

What is the 3D AI Agent Avatar MCP server?

3D AI Agent Avatar is an MCP server listed in the public MCP registry as io.github.nirholas/3D-AI-Agent-Avatar. 3D AI Agent Avatar, render any GLB, give it a Solana wallet, a voice, and pump.fun powers. This page covers its npm package (@three-ws/avatar-agent).

Is the 3D AI Agent Avatar MCP server safe to use?

3D AI Agent Avatar scores 78 out of 100 on VerifyMCP. We recorded 5 known advisories against it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the 3D AI Agent Avatar MCP server expose?

3D AI Agent Avatar exposes 20 tools: inspect_glb, validate_glb, optimize_glb, thumbnail_glb, viewer_url, and 15 more. Their descriptions and schemas cost roughly 3,756 tokens of context every time the server is loaded.

Is the 3D AI Agent Avatar MCP server still maintained?

3D AI Agent Avatar is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the 3D AI Agent Avatar MCP server under?

3D AI Agent Avatar declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.