material-workbench
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@material-workbenchRender a painted grass tile with seed 42."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Material Workbench
Recipe-driven, deterministic procedural materials and isometric terrain tiles for game engines — a Python engine, a desktop app, and an MCP server, all rendering from the same JSON recipe.

A recipe is a small JSON document — an archetype plus a handful of parameters and a seed. Feed it to the engine and you get back textures: PBR map sets for 3D engines (Unreal/Godot/Unity), or hand-painted-looking isometric ground tiles for 2D/iso games. Same recipe, same seed, same bytes — every time. The render is content-addressed and cached by a hash of the recipe, so nothing is recomputed twice.
What you get
Two archetypes today
metal_rust— procedural rusted metal: 5 PBR maps (base color, normal, roughness, metallic, AO), tileable.painted_grass— Dofus-style painted terrain: a mottled green wash, grass tufts, and scattered blossoms, projected to a 2:1 isometric diamond with a transparent surround.
Three ways to drive it
CLI —
material-workbench render recipe.json --out ./outwrites the PBR maps to disk.Desktop app (Tauri + React + Three.js) — pick a preset, tweak sliders, preview in 3D (materials) or as an iso tile (terrain), and export.
MCP server — expose the workbench as tools to an MCP-capable agent over stdio.
Cached — every recipe carries a
render_hash; identical recipes hit the cache instead of re-rendering.Adding an archetype is one registry entry plus a render function — no central refactor.
Painted grass → iso tile | Rusted metal base color |
|
|
Related MCP server: Hayba
Prerequisites
The Python engine is cross-platform. The desktop app targets Windows 11 today (the Rust toolchain is pinned to stable-x86_64-pc-windows-msvc); the sidecar has a POSIX fallback but the Tauri shell is not yet wired/tested for macOS/Linux.
Tool | Version | Needed for |
latest | Python env + commands | |
Python | 3.12 ( | engine, CLI, MCP, sidecar |
Node.js + npm | 20.19+ (or 22.12+) | desktop app frontend (Vite 7) |
Rust (rustup) | stable | desktop app shell |
MSVC C++ Build Tools + WebView2 | — | Tauri on Windows |
Quickstart
Python engine / CLI
uv sync --extra dev
uv run pytest # run the test suite
uv run material-workbench render examples/recipe-rusty-floor.json --out ./outrender writes the PBR maps to ./out. It works for any archetype the engine supports (metal_rust, painted_grass); the isometric tile projection is exposed through the desktop app and the JSON-RPC service.
Desktop app
Order matters. The Rust shell launches the Python engine as a sidecar by locating
.venv/Scripts/python.exe(walking up from the binary). Runuv syncat the repo root before starting the app, or setPYTHON_BINto a Python with the package installed.
uv sync # 1. create the .venv the app will find
cd tauri
npm install # 2. frontend deps
npm run tauri dev # 3. build the Rust shell + launchPick a preset (Prairie, Prairie fleurie, Herbe rase, or the metal_rust presets), hit
Render (force), change the seed for variations, then Export tuile iso… to write a
transparent 2:1 diamond PNG (terrain) — or Export to UE5… to write the BC/N/ORM PBR set (materials).
To build a distributable bundle: npm run tauri build.
MCP server
uv run material-workbench serve-mcp # FastMCP over stdioRegister it with any MCP client (the tool surface mirrors the service: archetypes, recipes, render, cache).
How it works
recipe.json ──► normalize + validate ──► engine (numpy/PIL) ──► PBR maps ──► cache (by render_hash)
│
┌────────────────────────────────────────┼─────────────────────────┐
CLI JSON-RPC sidecar (Tauri app) MCP server
(write maps) (render, iso-tile export, recipes) (agent tools)The engine is pure numpy + Pillow (no GPU, no external services). Transport adapters (CLI, JSON-RPC, MCP) are thin wrappers around a single MaterialWorkbenchService. See docs/ARCHITECTURE.md for the full layering.
Project layout
src/material_workbench/ Python engine, IR, cache, adapters (CLI / JSON-RPC / MCP)
tauri/ Desktop app (React + Three.js frontend, Rust shell)
examples/ Sample recipes
tests/ pytest suite (engine, services, adapters)
tools/ Calibration & snapshot scripts (dev only)
docs/ Architecture & assetsContributing
Contributions are welcome — see CONTRIBUTING.md for the dev setup, test/lint commands, and pull-request flow. By participating you agree to the Code of Conduct.
License
MIT © 2026 hoklims
Available Tools
12 toolsarchetype_listA
List all registered archetypes with their params and modifiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It describes a read-only list operation, but does not disclose any security, performance, or data freshness implications. Minimal but acceptable for a simple listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 7 words, directly states action and result. No wasted content, front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema (true), the description sufficiently explains what the tool returns (archetypes with params and modifiers). No additional context needed for such a straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (100% coverage by empty schema), so the description adds no extra parameter info. Baseline 4 is appropriate as schema already covers all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List all registered archetypes with their params and modifiers.' Specific verb+resource, distinct from sibling tools like recipe_read or cache_lookup which operate on different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as recipe_read or cache_lookup. The description implies a simple listing but does not exclude contexts or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cache_lookupB
Look up a cached manifest by render_hash.
| Name | Required | Description | Default |
|---|---|---|---|
| render_hash | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'look up' without explaining effects, permissions, or potential failures. Lacks transparency for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action and subject; no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits context about what a manifest is, when to use cached lookup vs re-running, and any behavioral details, making it insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and description only mentions 'by render_hash' without explaining what render_hash is or its format, adding minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'look up' and resource 'cached manifest' with specific parameter 'render_hash', distinguishing it from sibling tools like recipe_read and render_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives or when not to use it. Missing context like prerequisites or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initializeC
Handshake. Returns sidecar version + cache_root + capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| client | Yes | ||
| app_version | Yes | ||
| app_data_root | Yes | ||
| workspace_root | No | ||
| protocol_version | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It only states the tool performs a handshake and returns data, but does not disclose whether it is idempotent, has side effects, requires specific authentication, or what happens on multiple calls. This is a significant gap for a tool likely called at startup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence, but it sacrifices essential detail. It is front-loaded with the key concept, but the brevity results in under-specification. Effective conciseness would include brief parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (4 required), no schema description coverage, no annotations, but an output schema, the description is insufficient. It fails to explain the purpose of each parameter or any behavioral context. While it mentions return values, it does not cover the input side at all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no information about the five parameters (client, protocol_version, app_version, app_data_root, workspace_root). It fails to explain the role or format of required fields, leaving the agent to guess their meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a 'Handshake' and returns specific data (version, cache_root, capabilities). The verb is specific and the resource is well-defined. Among sibling tools like 'shutdown' and 'recipe_read', this tool is distinct as an initialization function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a session initiation due to the name 'initialize' and its 'Handshake' metaphor, but it provides no explicit guidance on when to use it versus alternatives, nor any prerequisites or exclusions. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_mutateC
Apply patches [{param_path, value}], re-normalize, return new hash.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes | ||
| patches | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions re-normalization and returning a new hash but does not specify whether patches are applied in-place, require specific permissions, or are reversible. The mutation aspect is implied but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with key elements (apply, re-normalize, return hash). It is front-loaded and concise, though it could be slightly expanded to improve clarity without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the complexity of having two params, nested objects, and an output schema, the description is minimal. It does not explain the return value (beyond 'new hash'), possible errors, side effects, or the effect on the original recipe. The existence of an output schema is mentioned but not leveraged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It hints at patches being [{param_path, value}] but does not clarify the 'recipe' parameter structure or the exact format of patches. No further details are provided beyond what the schema offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Apply patches'), the resource ('recipe'), and mentions re-normalization and return of a new hash. It distinguishes from siblings like recipe_read and recipe_write by specifying the patch-and-normalize workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like recipe_write or recipe_normalize. The description does not provide context for appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_normalizeB
Normalize a recipe (clamp params, derive seeds, recompute hash).
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description briefly lists internal steps but does not disclose side effects, mutability, permissions, or return behavior. Incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, zero wasted words. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits prerequisites, use contexts, and behavioral details. Missing key information needed for informed selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. The description hints that the 'recipe' object contains params, seeds, hash, but does not explain the parameter structure or constraints. Minimal value added beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: normalize a recipe, specifying sub-actions (clamp params, derive seeds, recompute hash). This is a specific verb+resource and distinguishes from siblings like recipe_mutate or recipe_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_readB
Read a recipe JSON file. scope must be 'workspace' or 'app_data'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| scope | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing full burden on the description. It states 'Read a recipe JSON file' implying read-only, but lacks details on error conditions, idempotency, side effects, or required permissions. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence front-loaded with the core purpose. No redundant information; every word adds value. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 parameters and an output schema; the description tells purpose and a scope constraint. It omits context like typical usage, prerequisites, or what a recipe JSON file is. Adequate for a low-complexity tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must add meaning for the 2 parameters. It adds a constraint on 'scope' (must be 'workspace' or 'app_data'), but provides no information on 'path' format or allowed values. Partial compensation for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'recipe JSON file', indicating a retrieval operation. It differentiates from sibling tools like recipe_write or recipe_mutate, though it does not explicitly exclude all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides only a constraint on the 'scope' parameter ('must be 'workspace' or 'app_data'') but offers no guidance on when to use this tool versus alternatives like recipe_normalize or archetype_list. No when-to-use or when-not-to-use information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_validateC
Validate a recipe. Returns {valid: bool, errors: list}.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. Only states return format; does not mention read-only nature, side effects, or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence plus return format. Concise but lacks structure; could be organized with bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (validation), the description is too minimal. Missing details on validation rules, error reporting, and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no meaning to the 'recipe' parameter. Does not specify expected structure or fields beyond being an object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Validate' and the resource 'recipe'. It distinguishes from sibling tools like recipe_mutate, recipe_normalize, etc., which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool, prerequisites, or alternatives. The description does not help select between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_writeC
Write a recipe to disk after normalization. Returns render_hash.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| scope | Yes | ||
| recipe | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool writes to disk (destructive) and performs normalization, plus returns a hash. However, no further behavioral details are given, such as error conditions, required permissions, or idempotency. Given the absence of annotations, the description partially fulfills the transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, achieving conciseness. However, it is somewhat under-specified for the complexity of the tool, so it does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three required parameters (one nested object), no annotation coverage, and an output schema not described. The description fails to cover parameter meanings, usage context, or differentiation from siblings, leaving significant gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning to the three parameters (path, scope, recipe). With 0% schema description coverage, the burden falls entirely on the description, which fails to explain their semantics or format. The nested 'recipe' object especially needs clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes a recipe to disk after normalization and returns a render_hash. This gives a specific verb and resource. However, it does not differentiate from sibling tools like recipe_mutate or recipe_normalize, which may perform similar actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusion criteria. The agent must infer usage from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_cancelA
Cancel a render request. Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses idempotency but does not explain side effects, permissions, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the action and add key behavior (idempotent) with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema exists, the description omits behavior on error, prerequisites, and the meaning of cancellation, leaving gaps for a tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no information about the lone parameter 'request_id', and the schema also lacks a description, resulting in 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Cancel') and the resource ('render request'), and it distinguishes itself from the sibling tool 'render_run'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions idempotency, indicating safe repeated calls, but lacks explicit guidance on when to use versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_runC
Render a recipe. Returns manifest + render_source enum.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| recipe | Yes | ||
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behaviors like whether the operation is destructive, requires authentication, or has side effects. It only mentions the return value, omitting critical behavioral traits such as whether it modifies state or triggers asynchronous processes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), but this brevity sacrifices necessary detail. It is front-loaded with the core action, but every sentence should add value; here, it only states purpose and return, leaving out essential param and usage info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, nested objects, and an output schema, the description is severely incomplete. It fails to explain what 'render' means, how the parameters affect behavior, or when to use it among 12 sibling tools. The existence of an output schema does not compensate for missing param and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the tool description does not explain any parameters. The 'recipe' object, 'request_id' string, and 'force' boolean are left completely undocumented, forcing the agent to infer their meaning from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Render') and the resource ('a recipe'), and specifies the return values ('manifest + render_source enum'). However, it does not differentiate from sibling tools like recipe_read or recipe_mutate, though 'render' is distinct. A more explicit comparison would improve score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as recipe_read, recipe_validate, or render_cancel. The description lacks any context about prerequisites, when-not to use, or typical scenarios, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shutdownC
Returns {ok: true}. Client-side disconnect is the actual close.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns {ok: true} and that the actual disconnect is client-side, implying it is not the closing mechanism. This is a notable behavioral trait, but it lacks details on side effects, idempotency, or error states. Adequate for a minimal tool, but gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. However, the first sentence could better capture the action rather than the return value. Still, it is efficiently structured for the minimal content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (0 params, output schema exists), but the description omits critical context: what triggers the actual shutdown, whether it is safe to call multiple times, and how it relates to the connection lifecycle. Even with an output schema, the description fails to fully equip an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100% by default. The description correctly adds no parameter information, which is appropriate. Baseline 4 for zero-parameter tools, as the description cannot add value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description focuses on return value ('Returns {ok: true}') rather than stating the primary action. 'Client-side disconnect is the actual close' hints at a non-destructive signal, but the core purpose (what the tool actually does) is ambiguous. A tool named 'shutdown' should clarify whether it initiates a shutdown or merely acknowledges a request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., initialize, render_cancel). No prerequisites or context provided. The description fails to help an agent decide if this tool is appropriate for the current task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_setA
Change workspace_root at runtime. Pass null to clear.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description must carry the burden. It discloses the mutation ('change') and the special case of clearing with null, but does not mention side effects or impact on other operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, front-loaded with action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter tool with one parameter, the description is nearly complete, though it omits any mention of return values or confirmation. However, given the output schema exists (not shown), the burden is reduced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning by explaining that the parameter sets the new workspace_root and that null clears it. This goes beyond the schema's type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Change' and resource 'workspace_root', and distinguishes from sibling tools which are all about recipes and rendering. The action is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions 'at runtime' implying dynamic use but does not explicitly state when to use this tool versus alternatives or when not to use it. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct action and resource: archetypes, cache, recipes (multiple operations), rendering, server control, and workspace. No two tools overlap significantly in purpose.
All tools follow a consistent verb_noun pattern using lowercase snake_case (e.g., recipe_read, render_run). No deviations or mixed conventions.
12 tools cover the domain comprehensively without unnecessary duplication. The number feels appropriate for a material/workbench server.
Core workflows (read, write, normalize, validate, mutate, render) are present, but there is no explicit delete recipe tool or a way to list all recipes. Minor gaps that agents might work around.
Maintenance
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
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes 50+ Blender tools (object manipulation, materials, animation, etc.) via MCP for AI-driven 3D workflows and automation.1MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server enabling AI agents to author Unreal Engine 5 scenes directly, with tools for spawning actors, building PCG graphs, validating physics, generating terrain, and more through a single MCP connection.12MIT
- AlicenseAqualityBmaintenanceConnects MCP-capable agents to Blender and OpenSCAD for AI-driven 3D modeling, with tools and rules optimized for FDM-printable geometry.291MIT
- FlicenseNot gradedqualityCmaintenanceConverts GeoJSON geometries into 3D triangulated meshes using a local LLM (Ollama), exposing an MCP tool for mesh generation.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/hoklims/material-workbench'
If you have feedback or need assistance with the MCP directory API, please join our Discord server

