Skip to main content
Glama

vrm-toolkit-mcp

v0.1.1 — npm / GitHub

An MCP (Model Context Protocol) server that lets an AI agent inspect, validate and preview VRM / VRMA files on your machine. Five tools, stdio transport, no network access at runtime.

VRM / VRMAファイルの検品・情報抽出・プレビューをAIエージェントから使えるようにする MCPサーバーです。ツールは5本、stdioトランスポート、実行時のネットワークアクセスなし。

Tools / ツール

Tool

What it does

説明

vrm_inspect

Structured JSON: meta (name/author/license and permission fields), humanoid bone map, expressions, polygon/texture statistics

メタ(名前/作者/ライセンス許諾)・ボーン・表情・ポリゴン/テクスチャ規模を構造化出力

vrm_validate

Finding list: missing required humanoid bones, broken node references, missing meta/license fields, unknown required extensions, configurable size/triangle/texture budgets

humanoidマッピング欠落・参照切れ・メタ/ライセンス欠落・未知の必須拡張・サイズ超過などの検品リスト

vrma_inspect

Tracks, targeted humanoid bones, expression tracks, duration, estimated frame rate

トラック・対象ボーン・表情トラック・尺・フレームレート推定

vrma_preview

Applies a VRMA to a VRM and renders a PNG still or a short WebM clip (max 10 s) through local headless Chrome/Edge

VRMAをVRMに適用し、ローカルのヘッドレスChrome/EdgeでPNG静止画または短尺WebM動画を書き出し

vrm_snapshot

Renders a rest-pose PNG with optional expression weights and view presets (front / three-quarter / side / face close-up)

表情ウェイトとビュープリセット(正面/斜め/側面/顔アップ)を指定できる静止画スクリーンショット

Structural tools (vrm_inspect, vrm_validate, vrma_inspect) parse the GLB/glTF container directly in Node and need no browser. Rendering tools (vrma_preview, vrm_snapshot) use an already-installed Chromium-based browser via puppeteer-core; nothing is downloaded.

構造系3ツールはNode単体でGLB/glTFを直接パースし、ブラウザ不要。描画系2ツールは インストール済みのChromium系ブラウザをpuppeteer-coreで使います(追加ダウンロードなし)。

Supported inputs: VRM 0.x (extensions.VRM), VRM 1.0 (extensions.VRMC_vrm), VRMA (extensions.VRMC_vrm_animation), GLB container or plain glTF JSON.

Related MCP server: Blender MCP

Requirements / 動作条件

  • Node.js 20+

  • For vrma_preview / vrm_snapshot: a local Chrome or Edge (auto-detected; override with the VRM_TOOLKIT_CHROME environment variable)

  • Input size budget: 512 MiB by default (VRM_TOOLKIT_MAX_BYTES to override)

Setup / セットアップ

Register with Claude Code / Claude Codeへの登録:

claude mcp add vrm-toolkit -- npx -y vrm-toolkit-mcp

Other MCP hosts / その他のMCPホスト: command npx, args ["-y", "vrm-toolkit-mcp"] (stdio).

From source / ソースから:

npm install
npm run build
claude mcp add vrm-toolkit -- node /absolute/path/to/vrm-toolkit/dist/main.js

Execution examples / 実行例

Real outputs from the local test run (2026-08-05, file paths shortened). ローカルテスト実行(2026-08-05)の実出力です(パスは短縮表記)。

vrm_inspect

Input: a VRoid Studio-exported VRM 1.0 avatar (15.7 MB).

{
  "file": { "path": "...\\V1.vrm", "bytes": 15737992, "container": "glb" },
  "vrm": { "specFamily": "vrm1", "specVersion": "1.0" },
  "meta": {
    "name": "V1",
    "authors": ["D"],
    "licenseUrl": "https://vrm.dev/licenses/1.0/",
    "avatarPermission": "onlyAuthor",
    "commercialUsage": "corporation",
    "creditNotation": "required",
    "allowRedistribution": false,
    "modification": "prohibited"
  },
  "humanoid": {
    "mappedBoneCount": 54,
    "bones": [
      { "bone": "hips", "node": 1, "nodeName": "J_Bip_C_Hips" },
      { "bone": "spine", "node": 34, "nodeName": "J_Bip_C_Spine" }
    ],
    "missingRequiredBones": []
  },
  "expressions": { "presetCount": 14, "presets": ["happy", "angry", "sad", "..."] },
  "geometry": {
    "meshCount": 3,
    "totalVertices": 103489,
    "totalTriangles": 33484,
    "perMesh": [
      { "name": "Face (merged)", "vertices": 33640, "triangles": 7308 },
      { "name": "Body (merged)", "vertices": 57128, "triangles": 11548 },
      { "name": "Hair001 (merged)", "vertices": 12721, "triangles": 14628 }
    ]
  },
  "textures": { "imageCount": 26, "totalImageBytes": 8033934, "maxDimension": 2048 },
  "materials": { "materialCount": 17 }
}

(Output truncated for readability; the tool returns the full bone and image lists.)

vrma_inspect

{
  "file": { "path": "...\\motion-walk-forward.vrma", "bytes": 3268, "container": "glb" },
  "vrma": { "specVersion": "1.0" },
  "humanoid": { "mappedBoneCount": 16, "bones": ["hips", "spine", "chest", "head", "..."] },
  "animation": {
    "animationCount": 1,
    "channelCount": 2,
    "channelsByPath": { "translation": 1, "rotation": 1, "scale": 0, "weights": 0 },
    "totalKeyframes": 62,
    "durationSec": 1.25,
    "fpsEstimate": 24,
    "frameCountEstimate": 31,
    "humanoidBoneTracks": [
      { "bone": "hips", "paths": ["translation"] },
      { "bone": "chest", "paths": ["rotation"] }
    ]
  }
}

vrm_validate

A finding list with stable codes and severities:

{
  "ok": false,
  "errorCount": 1,
  "warningCount": 1,
  "findings": [
    { "severity": "error", "code": "HUMANOID_REQUIRED_BONE_MISSING",
      "message": "required humanoid bone is not mapped: leftHand (vrm1 required set)" },
    { "severity": "warning", "code": "META_LICENSE_OTHER_URL_MISSING",
      "message": "licenseName is Other but otherLicenseUrl is empty" }
  ]
}

vrm_snapshot / vrma_preview

{
  "output_path": "...\\v1-three-quarter-snapshot.png",
  "format": "png", "bytes": 194005, "width": 768, "height": 1024,
  "view": "three_quarter", "pose": "rest", "humanoid_bone_count": 54
}
{
  "output_path": "...\\v1-walk-preview.webm",
  "format": "webm", "bytes": 313597, "width": 768, "height": 768,
  "clip_duration_sec": 1.25, "recorded_duration_sec": 3, "fps": 30
}

Error codes / エラーコード

Every failure is a structured tool error with one of: FILE_NOT_FOUND, SIZE_BUDGET_EXCEEDED, NOT_A_GLB, NOT_A_VRM, NOT_A_VRMA, BROWSER_NOT_FOUND, RENDER_FAILED, OUTPUT_WRITE_FAILED. The server process never crashes on a bad input file.

Privacy / プライバシー

All processing is local. The server opens no network connection, sends no telemetry, and writes only the output files you name. / 処理はすべてローカルです。ネットワーク接続・テレメトリ送信は なく、書き込みは指定した出力ファイルのみです。

Development / 開発

npm test   # build + 25 self-verification tests (structural, boundary, headless rendering)

Rendering tests skip with a notice when no local Chrome/Edge is found.

License / ライセンス

MIT (see LICENSE). / MITライセンス(LICENSE参照)。

Available Tools

5 tools
vrma_inspectA

Inspect a local VRMA (VRM animation) file: spec version, targeted humanoid bones, expression tracks, channel counts, duration, and an estimated frame rate. Structured JSON output; no rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesLocal path to a .vrma file

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses that output is structured JSON and that no rendering occurs, but it doesn't mention file access requirements, error behavior, or explicitly confirm read-only status. The 'inspect' verb implies non-destructive behavior, but richer context would improve the score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action, enumerates the inspected attributes, and concludes with output format and a key non-behavior. Every phrase contributes meaning with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple inspection tool with one parameter and no output schema, the description covers the essential aspects: what the tool does, what it returns, and what it doesn't do. It doesn't specify error handling or exact JSON structure, but the listed fields give a strong hint. Given the low complexity, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for the single parameter ('path') with a description 'Local path to a .vrma file'. The tool description adds no additional parameter-specific semantics, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Inspect') and resource ('a local VRMA (VRM animation) file'). It lists the exact information returned (spec version, targeted bones, expression tracks, etc.), which distinguishes it from sibling tools like vrm_inspect (VRM files) and vrma_preview (rendering).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the tool is for inspecting VRMA files and mentions 'no rendering,' which helps an agent decide when to use it for analysis rather than preview. However, it doesn't explicitly name alternative tools or provide when-not-to-use guidance beyond the rendering exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vrma_previewA

Render a VRMA animation applied to a VRM through a local headless Chrome/Edge. mode=image writes a PNG at time_sec; mode=video records a short WebM clip (max 10 seconds).

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoVideo mode: capture rate (default 30)
modeNoDefault image
viewNo
widthNo
heightNo
time_secNoImage mode: clip time to render (default mid-clip)
vrm_pathYesLocal path to the .vrm avatar
vrma_pathYesLocal path to the .vrma animation
output_pathYesWhere to write the PNG/WebM output
duration_secNoVideo mode: recording length

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does disclose output formats, mode-specific behavior, the 10-second limit, and the local headless Chrome/Edge dependency, but it omits side effects such as overwriting output files, failure modes when Chrome/Edge is absent, and any return/status behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the core action and resource. Every clause adds useful context: output mode, format, time/duration limits, and the headless browser dependency. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, no output schema, and no annotations, the description provides core mode semantics but leaves gaps: it doesn't explain how to use optional view/width/height params, what happens on failure, or whether output_path is overwritten. It is adequate for a simple invocation but not fully complete for a complex 10-parameter render tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers most parameters at 70% coverage, including mode, time_sec, duration_sec, paths, and fps. The description mostly restates these relations (PNG at time_sec, WebM max 10 seconds), adding little beyond the schema. It does not explain under-documented parameters like view, width, or height.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Render a VRMA animation applied to a VRM through a local headless Chrome/Edge.' It specifies the exact resources (VRMA, VRM), the output modes (PNG for image, WebM for video), and distinguishes itself from sibling inspect/snapshot tools by being the render/preview tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives mode-specific usage: 'mode=image writes a PNG at time_sec; mode=video records a short WebM clip (max 10 seconds).' However, it does not explicitly state when to use this tool versus alternatives like vrma_inspect or vrm_snapshot, nor does it mention exclusions or prerequisites beyond the local headless browser.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vrm_inspectA

Inspect a local VRM file (0.x or 1.0): meta including license/permission fields, humanoid bone map, expressions/blendshapes, polygon and texture statistics. Structured JSON output; no rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesLocal path to a .vrm file

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It specifies that the tool performs inspection (implying read-only), outputs structured JSON, and does not render anything (no rendering). This adequately communicates non-destructive behavior and output format for a simple inspection tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the verb and resource, then efficiently enumerates the inspection contents and output format. Every phrase adds value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), and the description provides a complete overview of what is inspected, the input type, the output format, and the non-rendering behavior. This is sufficient for an AI agent to select and invoke the tool correctly without needing additional details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'path' fully described as 'Local path to a .vrm file' (coverage 100%). The description adds no extra semantics about the parameter itself, but the schema already covers it. Therefore, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: inspect a local VRM file, and lists specific content areas (meta, humanoid bone map, expressions, statistics). It distinguishes from sibling tools by explicitly targeting VRM files (not VRMA) and the 'inspect' operation versus validate/preview/snapshot, making its scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to inspect a local VRM file and receive structured metadata and statistics. It does not explicitly mention when not to use it or suggest alternatives like vrm_validate, but the sibling tool names and the description's focus on inspection imply the appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vrm_snapshotA

Render a still PNG of a VRM in its rest pose through a local headless Chrome/Edge, with optional expression weights (e.g. {"happy": 1}) and view presets including a face close-up.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesLocal path to the .vrm avatar
poseNov0.1 supports the rest pose only
viewNo
widthNo
heightNo
expressionNo
output_pathYesWhere to write the PNG output

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses a key behavior ('through a local headless Chrome/Edge') and a limitation ('rest pose', though v0.1 supports only rest pose). However, it does not mention side effects like file overwriting, system requirements beyond the browser, or error behavior, leaving gaps for a render tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence with no fluff. It front-loads the core action and then lists key options, earning its place with relevant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a render tool with no output schema, the description covers the essential behavior: input, output type (PNG), pose, expression, and view presets. It misses details about return values or error handling, but for a utility that writes to an output_path, this is acceptable. The 'local headless Chrome/Edge' requirement adds important operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43%, so the description must compensate. It adds meaning to 'expression' (with an example) and 'view' (mentions face close-up), but it does not clarify 'width' or 'height' beyond their schema types. This partial compensation matches the baseline for a moderately described schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Render a still PNG'), the resource (a VRM avatar), and specific details like 'rest pose', 'expression weights', and 'view presets'. This distinguishes it from sibling tools like vrm_inspect (inspection) and vrma_preview (VRMA animation), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when a snapshot of a VRM is needed) but does not explicitly state alternatives or exclusions. It does not compare with sibling tools, so guidance is implied rather than explicitly provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vrm_validateA

Validate a local VRM file and return a finding list: missing required humanoid bones, broken node references, missing meta/license fields, unrecognized required extensions, and configurable size/triangle/texture/material budget checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesLocal path to a .vrm file
limitsNoOptional budget overrides

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It enumerates specific checks performed and mentions configurable budget limits, which is more than a generic 'validates.' However, it does not explicitly state read-only behavior or describe the finding list format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the primary action and lists specifics without waste. Every element contributes to understanding the tool's scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 2 params (one nested), no output schema, and no annotations. The description explains what it does and mentions budget checks, but lacks details about the exact structure of the finding list, error cases, or prerequisites. Given the complexity of validation, more return-value detail would be expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that 'limits' controls size/triangle/texture/material budget checks, which maps directly to the nested fields. This helps an agent understand the purpose of the limits parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a local VRM file and enumerates specific validation categories (humanoid bones, node references, meta/license, extensions, budget checks). This distinguishes it from sibling tools like vrm_inspect or vrma_preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use for validation. However, there is no explicit mention of when not to use it or alternatives (e.g., vrm_inspect for inspection). The verb 'validate' implies usage but does not distinguish from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.1
    • First observedvrm_inspect
    • First observedvrm_snapshot
    • First observedvrm_validate
    • First observedvrma_inspect
    • First observedvrma_preview

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct file type and operation: VRM inspect vs validate, VRMA inspect vs preview, and VRM snapshot for rendering. There is no overlap in purpose, making selection unambiguous.

Naming Consistency5/5

All tool names follow a consistent pattern of a file-format prefix (vrm/vrma) followed by an action word (inspect, validate, preview, snapshot). The pattern is uniform and predictable, with only a minor noun/verb nuance that does not cause confusion.

Tool Count5/5

Five tools is an ideal size for a focused VRM toolkit, covering inspection, validation, and rendering without unnecessary bulk. Each tool appears necessary and well-scoped.

Completeness4/5

The toolkit covers the core workflows for VRM/VRMA files: inspecting, validating, previewing animations, and rendering snapshots. The only minor gap is the lack of a dedicated VRMA validation tool, but this does not critically hinder the overall purpose.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dwarehouse1/vrm-toolkit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server