Skip to main content
Glama
quellant

OpenSCAD MCP Server

by quellant

OpenSCAD MCP Server

MCP FastMCP Tests Coverage License

A Model Context Protocol (MCP) server that gives AI assistants the ability to render, export, and analyze 3D models using OpenSCAD. Built with FastMCP for Python.

Prerequisites

  • OpenSCAD installed on your system

  • uv (recommended) or Python 3.10+

Related MCP server: 3D MCP Server

Installation

Claude Code

Add the server with a single command:

claude mcp add openscad --transport stdio -- \
  uv run --with git+https://github.com/quellant/openscad-mcp.git openscad-mcp

Or, if OpenSCAD is not on your PATH:

claude mcp add openscad --transport stdio \
  --env OPENSCAD_PATH=/path/to/openscad -- \
  uv run --with git+https://github.com/quellant/openscad-mcp.git openscad-mcp

Use the --scope flag to control where the configuration is saved:

Scope

Flag

Effect

Local (default)

--scope local

Available only to you in the current project

Project

--scope project

Shared with the team via .mcp.json

User

--scope user

Available to you across all projects

Claude Desktop

Add to your configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "openscad": {
      "command": "uv",
      "args": [
        "run",
        "--with", "git+https://github.com/quellant/openscad-mcp.git",
        "openscad-mcp"
      ],
      "env": {
        "OPENSCAD_PATH": "/usr/bin/openscad"
      }
    }
  }
}

Then restart Claude Desktop.

Cursor / Windsurf / VS Code

Add a .mcp.json file to your project root:

{
  "mcpServers": {
    "openscad": {
      "command": "uv",
      "args": [
        "run",
        "--with", "git+https://github.com/quellant/openscad-mcp.git",
        "openscad-mcp"
      ]
    }
  }
}

Manual / Standalone

# Run directly from GitHub (no install required)
uv run --with git+https://github.com/quellant/openscad-mcp.git openscad-mcp

# Or clone and run locally
git clone https://github.com/quellant/openscad-mcp.git
cd openscad-mcp
uv run openscad-mcp

Available Tools

Rendering

Tool

Description

render_single

Render a single view with camera control, quality presets, and view presets

render_perspectives

Render multiple standard views (front, back, left, right, top, bottom, isometric) in parallel

compare_renders

Side-by-side before/after renders for visual comparison

Export & Model Management

Tool

Description

export_model

Export to STL, 3MF, AMF, OFF, DXF, or SVG

create_model

Create a new .scad file in the workspace

get_model

Read a model file and its metadata

update_model

Update an existing model's content

list_models

List all models in the workspace

delete_model

Delete a model file

Analysis & Validation

Tool

Description

validate_scad

Syntax-check code without a full render (errors, warnings, echo output)

analyze_model

Compute bounding box, dimensions, and triangle count via STL export

get_libraries

Discover installed OpenSCAD libraries

check_openscad

Verify OpenSCAD installation and version

Project Support

Tool

Description

get_project_files

List .scad files and their include/use dependency graph

clear_cache

Clear the render cache

Usage Examples

Once connected, ask your AI assistant:

  • "Render a cube with rounded edges"

  • "Show me this model from all angles"

  • "Export my gear model to STL"

  • "Compare the model before and after changing the radius to 15"

  • "Validate this OpenSCAD code for errors"

  • "What are the dimensions of this model?"

Tool Parameters

render_single

Parameter

Type

Default

Description

scad_content

string

OpenSCAD code to render*

scad_file

string

Path to .scad file*

view

string

Preset view: front, back, left, right, top, bottom, isometric, dimetric

camera_position

list/string

[70,70,70]

Camera eye position [x,y,z]

camera_target

list/string

[0,0,0]

Camera look-at point

image_size

list/string

[800,600]

Output dimensions [w,h] or "800x600"

color_scheme

string

Cornfield

OpenSCAD color scheme

variables

dict

{}

OpenSCAD -D variables

quality

string

draft, normal, or high

include_paths

list

Extra include directories (via OPENSCADPATH)

*Exactly one of scad_content or scad_file must be provided.

All parameter parsers accept multiple input formats (JSON strings, lists, dicts, CSV) for AI assistant compatibility.

Configuration

Environment Variables

Variable

Description

Default

OPENSCAD_PATH

Path to OpenSCAD executable

Auto-detected

MCP_TEMP_DIR

Temporary file directory

/tmp/openscad-mcp

MCP_TRANSPORT

Transport type: stdio, http, sse

stdio

MCP_HOST

Host for HTTP/SSE transport

localhost

MCP_PORT

Port for HTTP/SSE transport

8000

MCP_MAX_CONCURRENT_RENDERS

Max parallel renders

5

MCP_RENDER_TIMEOUT

Render timeout in seconds

300

MCP_CACHE_ENABLED

Enable render caching

true

MCP_CACHE_SIZE_MB

Max cache size in MB

500

MCP_CACHE_TTL_HOURS

Cache TTL in hours

24

MCP_LOG_LEVEL

Logging level

INFO

MCP_MAX_FILE_SIZE_MB

Max SCAD file size

10

YAML Configuration

Create a config.yaml for advanced configuration:

server:
  name: "OpenSCAD MCP Server"
  version: "0.1.0"
  transport: stdio

rendering:
  max_concurrent: 5
  timeout_seconds: 300
  default_color_scheme: Cornfield

cache:
  enabled: true
  max_size_mb: 500
  ttl_hours: 24

security:
  rate_limit: 60
  max_file_size_mb: 10
  allowed_paths: null  # null = no restrictions

Security

  • Path validation: scad_file and include_paths validated against configurable allowed_paths

  • File size limits: Content checked against max_file_size_mb

  • Variable name validation: Only ^[a-zA-Z_][a-zA-Z0-9_]*$ allowed (prevents injection)

  • Subprocess timeout: Configurable, default 300s

  • Model name validation: Alphanumeric, hyphens, and underscores only; no path traversal

Development

# Clone the repo
git clone https://github.com/quellant/openscad-mcp.git
cd openscad-mcp

# Install dependencies
uv sync --dev

# Run the server
uv run openscad-mcp

# Run tests
uv run pytest

# Lint & format
uv run ruff check src/ tests/
uv run black --check src/ tests/

# Type check
uv run mypy src/

Project Structure

openscad-mcp/
├── src/openscad_mcp/
│   ├── __init__.py          # Package exports
│   ├── server.py            # FastMCP server, all MCP tools and helpers
│   ├── types.py             # Pydantic models and enums
│   └── utils/
│       └── config.py        # Configuration with env/YAML/dotenv support
├── tests/                   # 300 tests, 80%+ coverage
├── pyproject.toml
└── README.md

Testing

# Run all tests with coverage
uv run pytest

# Run specific markers
uv run pytest -m unit
uv run pytest -m performance

# Run a single file
uv run pytest tests/test_helpers.py -v

Tests mock the OpenSCAD subprocess — no OpenSCAD installation required to run them. Coverage target: 80% minimum.

Troubleshooting

OpenSCAD Not Found

# Check if OpenSCAD is installed
which openscad        # Linux/macOS
where openscad.exe    # Windows

# Set the path explicitly
export OPENSCAD_PATH=/path/to/openscad

Server Not Connecting

# Verify the server starts correctly
uv run --with git+https://github.com/quellant/openscad-mcp.git openscad-mcp

# In Claude Code, check MCP status
/mcp

Render Timeout

Increase the timeout:

export MCP_RENDER_TIMEOUT=600

Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/my-feature)

  3. Make your changes with tests

  4. Ensure tests pass (uv run pytest)

  5. Open a Pull Request

Commit style: feat:, fix:, docs:, refactor:, chore:

License

MIT — see LICENSE

Acknowledgments

Available Tools

15 tools
analyze_modelA

Extract geometric information from an OpenSCAD model.

Exports the model to a temporary STL file, then parses vertex data to compute bounding box, dimensions, center point, and triangle count. The temporary STL is cleaned up after parsing.

Args: scad_content: OpenSCAD code to analyze (mutually exclusive with scad_file) scad_file: Path to OpenSCAD file to analyze (mutually exclusive with scad_content) variables: Variables to pass to OpenSCAD via -D flags include_paths: Additional include paths for OpenSCAD via the OPENSCADPATH environment variable ctx: MCP context for logging

Returns: Dict with success status, bounding_box (min/max xyz), dimensions (width/height/depth), center point, and triangle_count

ParametersJSON Schema
NameRequiredDescriptionDefault
scad_fileNo
variablesNo
scad_contentNo
include_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 correctly discloses the side-effect behavior: it exports to a temporary STL file and cleans it up after parsing. It also explains the internal process of parsing vertex data. It does not mention failure modes or dependencies, but the key side-effect concern is addressed.

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 well-organized with a brief overview, an Args section, and a Returns section. It is appropriately sized for the tool's complexity, and every sentence adds meaningful information without 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 4-parameter tool with no annotations, the description covers the main workflow, inputs, outputs, and side effects. It does not state that at least one of scad_content or scad_file is required, nor does it cover error cases, but the provided detail is otherwise sufficient for effective use.

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

Parameters5/5

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

The schema has 0% description coverage, so the description takes on the full burden, and it does so well. It explains scad_content vs scad_file mutual exclusivity, variables passed via -D flags, and include_paths via OPENSCADPATH. This goes well beyond the raw schema and is essential for correct invocation.

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

Purpose4/5

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

The description clearly states the tool extracts geometric information from an OpenSCAD model and names concrete outputs: bounding box, dimensions, center point, and triangle count. It is distinct enough from siblings, though it does not explicitly contrast itself with related tools like check_openscad or export_model.

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 intended use is clear: call this tool when you need geometric measurements from OpenSCAD content or a file. It does not explicitly say when not to use it or name alternative tools, but the description's purpose statement is direct and informative.

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

check_openscadA

Verify OpenSCAD installation and return version info.

Args: include_paths: Include searched paths in response ctx: MCP context for logging

Returns: Dict with OpenSCAD installation information

ParametersJSON Schema
NameRequiredDescriptionDefault
include_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description is the only source. It discloses the return type and the effect of include_paths, but does not explain what happens if OpenSCAD is not installed or any potential errors. The read-only nature 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.

Conciseness5/5

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

The description is compact and front-loaded with its purpose. The Args/Returns format is structured and free of redundant information. Every sentence contributes.

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 tool with one optional parameter and an output schema, the description covers purpose, parameter semantics, and return type. Missing details about error behavior when OpenSCAD is absent, which would be relevant for a verification tool, but overall it is sufficient for basic invocation.

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 0%, so the description must compensate. It explains 'include_paths' as 'Include searched paths in response', adding meaningful semantic meaning beyond the boolean schema. This fully clarifies the parameter's effect.

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 states 'Verify OpenSCAD installation and return version info' with a specific verb and resource. This clearly distinguishes it from sibling tools focused on model/render operations.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool or alternatives. It does not mention prerequisites, typical use cases, or when to avoid using it. The usage is only implied by the verb 'verify'.

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

clear_cacheA

Delete all cached render files and report freed space.

Removes every .png file from the configured cache directory. Does nothing (and still reports success) when the cache is disabled or the directory does not exist.

Args: ctx: MCP context for logging

Returns: Dict with success status, cleared_files count, and freed_bytes

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well. It discloses that it removes every .png file from the cache directory, that it does nothing yet still reports success when the cache is disabled or the directory does not exist, and it lists the return fields (success, cleared_files, freed_bytes). This gives the agent a clear picture of side effects and edge cases.

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 concise and front-loaded: the first sentence states the action and result. It includes only necessary details about edge cases and return values, structured with Args/Returns sections that are easy to parse. No wasted words.

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?

This simple tool has no parameters and an output schema, so the description need not explain return structure in depth, yet it already does. It covers the action, edge cases, and the return payload (success, cleared_files, freed_bytes), making it fully complete for an agent to invoke correctly.

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?

The input schema has zero parameters, so the baseline is 4. The description mentions 'ctx: MCP context for logging' in the Args section, which adds context about logging but is not part of the user-facing schema; no additional parameter semantics are needed since there are no parameters to explain.

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 begins with a specific verb and object: 'Delete all cached render files and report freed space.' It clearly distinguishes this tool from siblings like render_single and export_model, which are about generating or exporting models, while this one is about cache maintenance.

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 does not explicitly state when to use this tool versus alternatives, relying instead on the self-explanatory name. It mentions edge cases (cache disabled or directory missing) but no guidance on when to invoke it (e.g., before a re-render) or when not to (e.g., if cached files are needed).

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

compare_rendersA

Render two versions of a model for visual comparison.

Supports two modes:

  1. Two different SCAD contents: provide scad_content_before and scad_content_after.

  2. Same file with different variables: provide scad_file with variables_before and variables_after.

Both versions are rendered in parallel for efficiency. Uses the existing render_scad_to_png helper and QUALITY_PRESETS.

Args: scad_content_before: OpenSCAD code for the "before" version scad_content_after: OpenSCAD code for the "after" version scad_file: Path to OpenSCAD file (used with variable diffs) variables_before: Variables for the "before" render variables_after: Variables for the "after" render view: View preset name (default: "isometric"). Valid names: "front", "back", "left", "right", "top", "bottom", "isometric", "dimetric" image_size: Image dimensions - accepts "widthxheight", "width,height", "[width, height]", or [width, height] list (default: [800, 600]) quality: Quality preset - "draft", "normal", or "high" (default: "draft") ctx: MCP context for logging

Returns: List with before/after images and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoisometric
qualityNodraft
scad_fileNo
image_sizeNo
variables_afterNo
variables_beforeNo
scad_content_afterNo
scad_content_beforeNo

TDQS

A4.3/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 full burden. It discloses parallel rendering, use of the render_scad_to_png helper, and QUALITY_PRESETS, but does not cover edge cases like conflicting parameters or error behavior. This is moderate transparency.

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 well-organized with clear sections and front-loaded purpose. It is somewhat lengthy, but every sentence earns its place given the absence of schema descriptions and the need to explain two usage modes.

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 complex 8-parameter tool with no annotations or output schema, the description is largely complete: it covers modes, all parameters, defaults, and return type. It misses explicit mutual-exclusion details, but overall it is sufficient for an agent to invoke correctly.

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

Parameters5/5

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

With 0% schema coverage, the description compensates by documenting all 8 parameters with defaults, valid view presets, image_size format options, and quality presets. This adds substantial meaning beyond the bare input 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 begins with a specific verb+resource: 'Render two versions of a model for visual comparison.' It clearly differentiates from sibling tools like render_single and render_perspectives by focusing on comparison of two versions.

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 explicitly documents two distinct usage modes with exact parameter combinations, giving clear context for when to use each. It does not explicitly name alternatives or exclusion conditions, but the mode breakdown is strong enough for an agent to determine appropriate use.

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

create_modelA

Create a new OpenSCAD model file.

Args: name: File name for the model (alphanumeric, hyphens, underscores; .scad extension added automatically if missing) content: OpenSCAD source code for the model workspace: Directory to save the model in. Defaults to the configured temp_dir/models directory. ctx: MCP context for logging

Returns: Dict with success status, path, and name of the created file

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
contentYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description carries the behavioral transparency burden. It does disclose useful traits: .scad extension auto-appending, default workspace directory, and the return dict shape. However, it does not mention overwrite behavior, directory creation, permission requirements, or error conditions, which are notable gaps for a file-creating 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 concise and well-structured, opening with the core purpose followed by a clean Args section and a one-line Returns section. Every part adds useful information without repetition or fluff.

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 relatively simple create tool, the description covers the necessary invocation details: parameter formats, default workspace, and return values; an output schema exists and the description summarizes the response. It lacks edge-case details like file collision behavior, but the essential selection and invocation information is present.

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?

The description adds significant meaning beyond the raw schema: name format and allowed characters, automatic .scad extension handling, content as OpenSCAD source, and workspace default. However, it lists a 'ctx' argument that does not appear in the input schema, which could confuse an agent about the exact supported parameters.

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 and resource: 'Create a new OpenSCAD model file.' This specific verb-object pairing, especially the word 'new,' differentiates it from sibling tools like update_model and delete_model.

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 usage by saying 'Create a new OpenSCAD model file,' but it does not explicitly state when to prefer this tool over update_model, export_model, or other siblings, nor does it provide any 'when not to use' guidance. Usage is inferred rather than clearly delineated.

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

delete_modelA

Delete an OpenSCAD model file from the workspace.

The file must exist. Returns the path of the deleted file.

Args: name: File name of the model to delete workspace: Directory containing the model. Defaults to the configured temp_dir/models directory. ctx: MCP context for logging

Returns: Dict with success status, name, and deleted_path

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/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 adds useful context like the precondition that the file must exist and the return value (deleted_path), but it does not warn about the irreversible nature of deletion, error behavior if the file is missing, or any permission requirements. The description is not contradictory to any annotations (there are none), but it leaves room for more transparency.

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 well-structured with separate Args and Returns sections, and every sentence provides useful information. It is appropriately sized for a tool with two parameters, with no filler or repetition. The format makes it easy for an agent to parse quickly.

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?

Given the simplicity of the tool and the presence of an output schema-like description in the Returns section, the description covers the essential aspects: action, precondition, input parameters, and return value. It lacks detailed error handling or edge-case behavior, but for a straightforward delete operation, this is nearly complete. The sibling context does not require additional clarification.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description fully compensates by explaining each parameter: 'name' as the file name, 'workspace' with its default directory, and 'ctx' for logging. This adds meaning beyond the bare schema types, especially clarifying the workspace default.

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 uses a specific verb ('Delete') with a clear resource ('an OpenSCAD model file from the workspace'), making the tool's function unambiguous. It also distinguishes itself from sibling tools like get_model, create_model, and list_models by focusing on deletion, which is a unique action.

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 states a key precondition ('The file must exist') and what the tool returns, but it does not explicitly discuss when to use this tool versus alternatives such as export_model or clear_cache. There is no mention of scenarios where deletion should be avoided, so guidance is implied rather than thorough.

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

export_modelA

Export OpenSCAD code or file to STL, 3MF, AMF, OFF, DXF, or SVG.

Args: scad_content: OpenSCAD code to export (mutually exclusive with scad_file) scad_file: Path to OpenSCAD file (mutually exclusive with scad_content) output_format: Export format - "stl", "3mf", "amf", "off", "dxf", or "svg" (default: "stl") output_path: Path to write the exported file. If not specified, a temp directory is used. variables: Variables to pass to OpenSCAD via -D flags include_paths: Additional include paths for OpenSCAD via the OPENSCADPATH environment variable ctx: MCP context for logging

Returns: Dict with success status, output_path, format, and file_size_bytes

ParametersJSON Schema
NameRequiredDescriptionDefault
scad_fileNo
variablesNo
output_pathNo
scad_contentNo
include_pathsNo
output_formatNostl

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses default behavior (temp directory for output_path, 'stl' default format), how variables map to -D flags, include_paths to OPENSCADPATH, and return fields. It stops short of failure modes or prerequisites, leaving room for improvement.

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 well organized with labeled Args and Returns, one line per parameter. It is front-loaded with the main purpose, and every sentence adds value without redundancy.

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 description covers all six parameters, clarifies their semantics, and specifies the return contract. For a tool with no schema descriptions and no annotations, this is comprehensive, though it could mention error handling or OpenSCAD prerequisites.

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

Parameters5/5

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

The description adds critical meaning beyond the bare schema: mutual exclusivity of scad_content and scad_file, allowed output_format values, output_path fallback, and the semantic mapping for variables and include_paths. With 0% schema coverage, this is essential and well executed.

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 identifies the tool's action: 'Export OpenSCAD code or file to STL, 3MF, AMF, OFF, DXF, or SVG.' This specific verb and output format list distinguish it from sibling rendering tools like render_single.

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: whenever OpenSCAD code or a file needs conversion to a supported export format. It does not explicitly exclude use cases or reference alternatives, but the scope is evident from the format list.

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

get_librariesA

Discover installed OpenSCAD libraries on the system.

Searches standard OpenSCAD library paths for the current platform, plus the OPENSCADPATH environment variable. For each found library directory, lists subdirectories as libraries and reports file counts, README presence, and main entry files.

This is a read-only operation that does not require OpenSCAD to be installed.

Args: ctx: MCP context for logging

Returns: Dict with success status, library_paths searched, and libraries list with name, path, file_count, has_readme, and main_files for each library

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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. It discloses the read-only nature, that OpenSCAD is not required, that standard paths and OPENSCADPATH are searched, and that it lists subdirectories with file counts, README presence, and main entry files. This covers key behavioral traits without contradicting anything.

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

Conciseness4/5

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

The description is well-structured and front-loaded with a one-sentence summary. It uses paragraphs effectively and every sentence adds value. The Returns section is somewhat redundant given the output schema, but it does not bloat excessively.

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?

This is a simple, read-only tool with a rich output schema. The description provides enough context about what paths are searched, what data is returned, and the read-only nature. It lacks edge-case details like error handling, but for this complexity level it is adequately complete.

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?

The input schema has zero parameters, so the baseline is 4. The description adds that the only argument, ctx, is used for MCP logging, which is meaningful but minimal. No further parameter semantics are needed.

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 opens with 'Discover installed OpenSCAD libraries on the system,' using a specific verb and resource. It clearly distinguishes this from sibling tools like check_openscad, rendering, and model management tools. The scope is further clarified by mentioning standard library paths and OPENSCADPATH.

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 implies when to use the tool: to discover libraries on the system, including via OPENSCADPATH. It explicitly notes it is read-only and does not require OpenSCAD to be installed, which signals a low-risk discovery operation. However, it does not explicitly name alternatives or exclusions, so it falls short of full guidance.

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

get_modelA

Read an OpenSCAD model file and return its contents.

Args: name: File name of the model to read workspace: Directory containing the model. Defaults to the configured temp_dir/models directory. ctx: MCP context for logging

Returns: Dict with success status, name, content, path, and size_bytes

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/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 the operation reads a file (implying no mutation) and details the return dict fields (success status, name, content, path, size_bytes), plus the default workspace behavior. This goes beyond a terse statement, though it doesn't cover error handling or permissions.

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 well-structured docstring with a one-sentence summary followed by concise Args and Returns sections. Every sentence contributes useful information, with no fluff or repetition.

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 read operation, the description covers the essential aspects: what the tool does, parameters, and return payload. An output schema exists (context shows true), and the description even summarizes the return fields. It lacks error-handling details but is otherwise complete for typical usage.

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 description coverage is 0%, but the description compensates by explaining both parameters: 'name' as file name, 'workspace' as directory with a default to temp_dir/models. This adds meaning beyond the raw schema types and defaults, making parameter usage clear.

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 verb ('Read') and resource ('OpenSCAD model file'), and specifies the return of file contents. This distinguishes it from sibling tools like list_models (listing) and render_single (rendering), since it targets raw file content retrieval.

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 usage is implied by the description: read a model file to get its contents. However, it does not explicitly mention when to prefer this over alternatives (e.g., list_models for names, analyze_model for analysis) or any exclusions, so guidance is only implicit rather than explicit.

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

get_project_filesA

List all OpenSCAD files in a project directory and map their dependencies.

Recursively finds every .scad file under project_dir, parses each file for include and use statements, and returns a structured overview of the project's file tree and dependency graph.

Args: project_dir: Root directory of the OpenSCAD project. Validated against security.allowed_paths when configured. ctx: MCP context for logging

Returns: Dict with success status, files list (each with name, path, size_bytes, modified), and dependencies mapping (relative path to list of dependency strings).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/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. It discloses recursion, parsing of include/use statements, validation against security.allowed_paths, and the structured return format. It does not explicitly state that it is read-only, but 'List' and 'map' imply no mutation.

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 front-loaded with a one-sentence summary, followed by concise elaboration. The Args/Returns structure is clear and every sentence adds value—recursion, parsing, validation, and return details. No fluff.

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?

Given the tool's moderate complexity and the presence of an output schema, the description covers all necessary aspects: purpose, parameter semantics, security context, return structure, and behavioral details. It is sufficiently complete for an agent to select and invoke correctly.

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

Parameters5/5

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

The schema has one parameter (project_dir) with no description (0% coverage). The description fully compensates by explaining it as the root directory of the OpenSCAD project and mentioning security validation. It also documents ctx, which is absent from the schema, adding useful context.

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 opens with a specific verb and resource: 'List all OpenSCAD files in a project directory and map their dependencies.' This clearly differentiates from sibling tools like render_single or export_model, which focus on rendering or model management.

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 gives clear context: it recursively finds .scad files and parses include/use statements, indicating use cases like project analysis or dependency mapping. However, it does not explicitly mention when not to use it or point to alternatives, so it misses the top score.

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

list_modelsA

List all OpenSCAD model files in the workspace directory.

Args: workspace: Directory to list models from. Defaults to the configured temp_dir/models directory. ctx: MCP context for logging

Returns: Dict with success status, list of models (name, path, size_bytes, modified), and count

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/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 explains the return format (success status, list of model metadata) and the default path for the workspace, but it does not explicitly state that this is a read-only operation, nor does it mention potential errors or lack of side effects. The read-only nature is implied but not disclosed.

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 concise and well-structured with an Args/Returns format. It front-loads the core purpose in a single sentence and provides parameter and return details without unnecessary fluff. Every sentence contributes to understanding the tool.

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 list tool with a single optional parameter and an output schema available, the description covers the essential behavior: listing all models, the default directory, and the return structure. It lacks explicit error handling or edge-case behavior, but given the tool's simplicity, the coverage is quite complete.

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?

The input schema provides only the parameter name 'workspace' with no description, whereas the description explains its meaning (directory to list models from) and its default (configured temp_dir/models). This adds meaningful context beyond the schema, compensating for the 0% schema coverage. The mention of 'ctx' is extra but clearly flagged as logging context.

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 lists all OpenSCAD model files in the workspace directory, using a specific verb (list), a clear resource (OpenSCAD model files), and scope (workspace directory). This distinguishes it from siblings like get_model (retrieves a single model) and render_single (renders).

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 does not explicitly state when to use this tool versus alternatives, such as 'use when you need an overview of available models' or 'not for retrieving model content'. The usage context is implied by the wording 'List all', but no exclusions or alternative tools are mentioned.

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

render_perspectivesA

Render multiple standard views of an OpenSCAD model in a single call.

Renders the model from several predefined camera perspectives in parallel, returning all images at once. Useful for generating a comprehensive visual overview of a 3D model.

Args: scad_content: OpenSCAD code to render (mutually exclusive with scad_file) scad_file: Path to OpenSCAD file (mutually exclusive with scad_content) views: List of view names to render. Valid names: "front", "back", "left", "right", "top", "bottom", "isometric". If not specified, renders all standard views. image_size: Image dimensions - accepts "widthxheight", "width,height", "[width, height]", or [width, height] list (default: [800, 600]) color_scheme: OpenSCAD color scheme (default: "Cornfield") variables: Variables to pass to OpenSCAD via -D flags quality: Quality preset - "draft" (fast, low detail), "normal" (OpenSCAD defaults), or "high" (slow, high detail). User-provided variables override quality preset values. include_paths: Additional include paths for OpenSCAD via the OPENSCADPATH environment variable, enabling multi-file project support ctx: MCP context for logging

Returns: List of rendered PNG images and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
viewsNo
qualityNo
scad_fileNo
variablesNo
image_sizeNo
color_schemeNo
scad_contentNo
include_pathsNo

TDQS

A4.6/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 discloses parallel rendering, returns all images at once, default behavior for views, quality presets, and the variable override behavior. It does not explicitly state whether the operation is read-only, but 'render' strongly implies no modification.

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 well-structured with a one-line summary, detailed Args section, and Returns section. Every sentence provides value, and the length is justified given the 8 parameters and complex behaviors.

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?

For a tool with no annotations, no output schema, and 8 parameters, the description covers all aspects: purpose, parameters, defaults, behaviors, and return type. It omits error handling, but that is not a critical gap for this rendering tool.

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

Parameters5/5

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

Schema coverage is 0%, but the description thoroughly documents all 8 parameters, including mutual exclusivity of scad_content/scad_file, valid view names, accepted image_size formats, default values, and the behavior of variables and include_paths. This fully compensates for the schema's lack of descriptions.

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 starts with a specific verb and resource: 'Render multiple standard views of an OpenSCAD model in a single call.' It clearly distinguishes from sibling render_single by focusing on multiple predefined perspectives in parallel.

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 states it is 'useful for generating a comprehensive visual overview of a 3D model,' giving clear context for when to use it. It does not explicitly mention render_single or alternatives, but the purpose is implied through 'multiple standard views'.

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

render_singleA

Render a single view from OpenSCAD code or file.

Args: scad_content: OpenSCAD code to render (mutually exclusive with scad_file) scad_file: Path to OpenSCAD file (mutually exclusive with scad_content) view: Predefined view name ("front", "back", "left", "right", "top", "bottom", "isometric", "dimetric") camera_position: Camera position - accepts [x,y,z] list, JSON string "[x,y,z]", or dict {"x":x,"y":y,"z":z} (default: [70, 70, 70]) camera_target: Camera look-at point - accepts [x,y,z] list, JSON string, or dict (default: [0, 0, 0]) camera_up: Camera up vector - accepts [x,y,z] list, JSON string, or dict (default: [0, 0, 1]) image_size: Image dimensions - accepts [width, height] list, JSON string "[width, height]", "widthxheight", or tuple (default: [800, 600]) color_scheme: OpenSCAD color scheme (default: "Cornfield") variables: Variables to pass to OpenSCAD auto_center: Auto-center the model quality: Quality preset - "draft" (fast, low detail), "normal" (OpenSCAD defaults), or "high" (slow, high detail). User-provided variables override quality preset values. include_paths: Additional include paths for OpenSCAD via the OPENSCADPATH environment variable, enabling multi-file project support ctx: MCP context for logging

Returns: List containing the rendered PNG image and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo
qualityNo
camera_upNo
scad_fileNo
variablesNo
image_sizeNo
auto_centerNo
color_schemeNoCornfield
scad_contentNo
camera_targetNo
include_pathsNo
camera_positionNo

TDQS

A4.6/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 behavioral burden. It discloses the return format ('List containing the rendered PNG image and metadata'), the mutual exclusivity behavior, and that user-provided variables override quality preset values. It also details accepted input types for camera and image parameters. It does not, however, mention error behavior, file-system access implications, or any side effects beyond what is directly described.

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 long but exceptionally well-organized. It leads with a one-sentence summary, then an Args list with each parameter on its own line, followed by a Returns section. Every entry adds meaningful detail, and there is no redundant or filler content. For a tool with 12 parameters, this length is appropriate and readable.

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?

Given the tool's complexity (12 parameters, no annotations, no output schema), the description is remarkably complete. It covers all parameter semantics, default values, return format, mutual exclusivity, and behavioral nuances like quality override rules. The only minor omission is explicit error-handling behavior, but this does not prevent an agent from using the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It does this thoroughly, explaining each parameter's purpose, accepted formats, and defaults. For example, camera_position accepts a list, JSON string, or dict; image_size supports list, string 'widthxheight', or tuple; quality presets are enumerated with their trade-offs. This goes far beyond the bare 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 opens with 'Render a single view from OpenSCAD code or file,' using a specific verb and resource. The phrase 'single view' clearly distinguishes this tool from sibling render_perspectives, which would produce multiple views, and from validation or model tools.

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: whenever a single render of OpenSCAD code or a file is needed. It also explains key usage constraints, such as scad_content and scad_file being mutually exclusive, and parameter defaults. However, it does not explicitly name alternative tools for other use cases (e.g., render_perspectives for multiple views), nor offer exclusions beyond the mutual exclusivity.

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

update_modelA

Update an existing OpenSCAD model file with new content.

The file must already exist. Use create_model to create new files.

Args: name: File name of the model to update content: New OpenSCAD source code for the model workspace: Directory containing the model. Defaults to the configured temp_dir/models directory. ctx: MCP context for logging

Returns: Dict with success status, path, and name of the updated file

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
contentYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses prerequisites (file must exist), the action (replacing content with new SCAD source), and return values (success status, path, name). It does not explicitly say "overwrites" or cover permissions/error cases, but for a mutation tool with no annotations, this is reasonably transparent.

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

Conciseness4/5

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

The description is well-structured with Args/Returns sections and each line provides useful information. It is slightly repetitive ("existing" appears twice in the first two sentences) but overall efficient and front-loaded.

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 tool with an output schema, the description covers purpose, usage, parameters, and return values, and references the sibling create_model. It does not discuss edge cases like workspace validation or failure behavior, but the tool is straightforward and the description is sufficient.

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

Parameters5/5

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

Schema descriptions are completely absent (0% coverage), and the description compensates by explaining each parameter: name (file name), content (SCAD source code), and workspace (directory, with default). The mention of ctx, which is not in the schema, is a minor inconsistency but does not detract from the meaning of the actual params.

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 uses a specific verb ("Update") and resource ("existing OpenSCAD model file"), and explicitly distinguishes itself from create_model. The purpose is immediately clear and avoids tautology.

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

Usage Guidelines5/5

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

It explicitly states that the file must already exist and directs users to create_model for new files, providing a clear when-to-use rule and named alternative. This covers the key usage scenario and exclusion.

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

validate_scadA

Syntax-check OpenSCAD code without performing a full render.

Runs OpenSCAD with output directed to /dev/null (NUL on Windows) so it only parses and evaluates the code without generating geometry output. Much faster than a full render. Captures and categorizes ECHO, WARNING, ERROR, and DEPRECATED messages from stderr.

Args: scad_content: OpenSCAD code to validate (mutually exclusive with scad_file) scad_file: Path to OpenSCAD file to validate (mutually exclusive with scad_content) variables: Variables to pass to OpenSCAD via -D flags include_paths: Additional include paths for OpenSCAD via the OPENSCADPATH environment variable ctx: MCP context for logging

Returns: Dict with success status, valid flag, errors list, warnings list, echo_output list, and deprecated list

ParametersJSON Schema
NameRequiredDescriptionDefault
scad_fileNo
variablesNo
scad_contentNo
include_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral details: it runs OpenSCAD with output to /dev/null, captures and categorizes messages from stderr, and returns a structured dict. This goes well beyond basic schema information and gives the agent a clear expectation of side effects and output.

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 well-structured with a concise summary followed by a clear Args section and return value description. Every sentence adds value, and the length is appropriate for the tool's complexity.

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?

Given the tool's moderate complexity, the description covers all necessary aspects: purpose, usage, parameter semantics, behavioral nuance, and return format. The presence of an output schema does not diminish the completeness, as the description still explains the return dict and edge cases (e.g., message categorization).

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

Parameters5/5

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

Despite 0% schema description coverage, the description explicitly explains each parameter (scad_content, scad_file, variables, include_paths) and notes the mutual exclusivity of scad_content and scad_file. This fully compensates for the sparse schema and provides operational guidance beyond mere names.

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 function: 'Syntax-check OpenSCAD code without performing a full render.' This specific verb+resource pairing distinguishes it from sibling tools like render_single and render_perspectives, 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 Guidelines4/5

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

The description provides clear usage context by contrasting with full renders ('Much faster than a full render') and stating it only parses/evaluates code. However, it does not explicitly name alternative tools or list exclusion scenarios, so it stops short of full alternative guidance.

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

TDQS

A4.4/5.0
Disambiguation4/5

Most tools target distinct resources and actions (e.g., render_single vs. render_perspectives vs. compare_renders differ in output style). Some overlap exists between get_model, list_models, and get_project_files, but descriptions clarify different scopes (single file vs. workspace vs. project dependency mapping).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase snake_case (e.g., create_model, list_models, render_perspectives, clear_cache). There are no mixed conventions or vague verbs.

Tool Count5/5

15 tools is well within the ideal range for a domain-specific server. Each tool covers a clear function: CRUD operations, rendering, export, validation, analysis, library discovery, project inspection, and cache management, making the set feel appropriately scoped without bloat.

Completeness5/5

The tool set provides comprehensive lifecycle coverage for OpenSCAD models (create, read, update, delete, list) and extends to critical workflows like rendering, exporting, validating, analyzing geometry, comparing versions, and managing project dependencies. No obvious missing operations for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

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/quellant/openscad-mcp'

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