A safe MCP integration for Material Maker that enables inspection and manipulation of editable material graphs with permission-based access control
MaterialPilot demonstrates solid tool definition practices with consistent naming conventions (verb_noun pattern), comprehensive parameter schemas with type definitions, and clear descriptions. All 20 tools follow the verb_noun pattern (app_get_*, project_*, graph_*, preview_*, material_*). Descriptions average ~80-120 chars, meeting the 10-1024 char baseline. Parameters include type constraints (enums for validation profiles, resolution bounds 16-1024). However, output schemas are not documented in the provided source, only input schemas are visible. Error handling guidance is absent from descriptions. Some parameter descriptions lack actionable constraints (e.g., 'Project identifier' without format hints). Tool composition is strong: tools are single-responsibility, and chaining IDs are returned (projectId, nodeId). Security-sensitive operations (project_save, material_export_blender) include idempotencyKey and approvalToken parameters, showing awareness of idempotent and gated patterns.
Return the negotiated MaterialPilot capability manifest and operational limits.
Group negotiated capabilities into enabled and disabled feature lists.
Return a compact live/offline runtime health assessment.
Return Material Maker bridge, active project, capability, and permission status.
Return MaterialPilot and negotiated runtime versions.
Measure local server health and return a timestamp.
Capture the current canonical graph as an immutable named recovery snapshot.
Output schemas not documented. Tool descriptions specify inputs but do not document return types, field names, or structure. LLMs cannot plan downstream tool calls or extract required chaining IDs without knowing response shape.
Error handling guidance absent. Descriptions do not explain failure modes, recovery steps, or when to retry. E.g., project_save with expectedRevision mismatch, what error is returned? How should the agent recover?
Parameter descriptions lack actionable constraints. 'Project identifier, minimum 1 character' does not specify format (UUID, alphanumeric, etc.). 'File path to save to' does not document allowed directories or path traversal guards.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Return compact graph counts, outputs, selection, connectivity, and complexity.
List named recovery snapshots for one project.
Export Blender-profile PBR textures and return verified artifact hashes.
Render the live material on Material Maker's sphere or plane preview without writing a file.
Render a bounded PNG preview of one live Material Maker node output without writing a file.
Create a new editable material project with a standard PBR output node.
Return one open project by stable project ID.
Return the active project summary, or null when no project is active.
List graph identities currently exposed by a project.
Return project lifecycle and graph metadata.
List projects visible to the current MaterialPilot session.
Save the active editable Material Maker project to a policy-approved .ptex path.
Run deterministic graph validation using a selected profile.
Idempotency and destructive operation semantics unclear. project_save and material_export_blender accept idempotencyKey and approvalToken, but descriptions do not explain idempotency guarantees or what approval gates are enforced.
Pagination and result limits not specified. project_list, graph_list_named_snapshots, and project_get_graphs do not document max result count, pagination mechanism, or total count in response.