Skip to main content
Glama

CutOptim Engine

Validate a 2D request

validate_2d
Read-onlyIdempotent

Free, no key needed: checks a 2D request without solving it. Same arguments as optimize_2d (field descriptions there). Validate a 2D request — free, no key, no quota, no solve. Schema-validate the SAME body /v1/optimize/2d takes, WITHOUT solving or spending a call. 200 {valid:true, warnings} (warnings flag parts that fit no stock — an approximate, solve-free probe), or 400 with the exact bad field path. Open like /v1/health: validate payloads during integration before you even have a key. The engine verdict matches the optimize path exactly, engine: "max" included: a body this endpoint accepts is one /v1/optimize/2d will accept, and one it refuses (400 for an option the max tier cannot model, 503 where that tier is not enabled) is refused there too.

Input Schema

NameRequiredDescriptionDefault
partsYes
stockYes
engineNoheuristic
includeNo
optionsNo
matchedSetsNo

Output Schema

NameRequiredDescriptionDefault
modeYes
partsYes
stockYes
validYes
warningsYes
engineEnabledNo
contractVersionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / parts / items / properties / qr
      Added value: +{
      +  "maxLength": 300,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / parts / items / properties / qrs
      Added value: +{
      +  "items": {
      +    "maxLength": 300,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 2000,
      +  "minItems": 1,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / options / properties / labels
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "dimSize": {
      +      "default": "normal",
      +      "enum": [
      +        "normal",
      +        "large",
      +        "xl"
      +      ],
      +      "type": "string"
      +    },
      +    "factoryEdges": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "format": {
      +      "default": "sheet",
      +      "enum": [
      +        "sheet",
      +        "roll",
      +        "apli-03056",
      +        "brother-dk-11201"
      +      ],
      +      "type": "string"
      +    },
      +    "height": {
      +      "default": 40,
      +      "maximum": 300,
      +      "minimum": 15,
      +      "type": "number"
      +    },
      +    "hiddenFaceHint": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "offset": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "x": {
      +          "default": 0,
      +          "maximum": 20,
      +          "minimum": -20,
      +          "type": "number"
      +        },
      +        "y": {
      +          "default": 0,
      +          "maximum": 20,
      +          "minimum": -20,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "order": {
      +      "default": "input",
      +      "enum": [
      +        "input",
      +        "cut"
      +      ],
      +      "type": "string"
      +    },
      +    "partNo": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "parts": {
      +      "items": {
      +        "maximum": 999999,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "maxItems": 500,
      +      "type": "array"
      +    },
      +    "stageWords": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "c2s": {
      +          "maxLength": 6,
      +          "type": "string"
      +        },
      +        "d": {
      +          "maxLength": 6,
      +          "type": "string"
      +        },
      +        "eb": {
      +          "maxLength": 6,
      +          "type": "string"
      +        },
      +        "rc": {
      +          "maxLength": 6,
      +          "type": "string"
      +        },
      +        "s": {
      +          "maxLength": 6,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "stages": {
      +      "items": {
      +        "maxLength": 6,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 6,
      +      "type": "array"
      +    },
      +    "width": {
      +      "default": 100,
      +      "maximum": 300,
      +      "minimum": 20,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.9/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds substantial detail beyond them: the 200 shape `{valid:true, warnings}`, the 400 with exact bad field path, that warnings are a solve-free approximation, and that the engine verdict — including `engine: "max"` and 503s — matches the optimize path exactly. That equivalence guarantee is the kind of context nothing else in the structured data conveys.

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

Conciseness2/5

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

The information is front-loaded correctly, but the 'free / no key / no quota / no solve' message is restated at least three times across the text, and the simulated-response sentence largely duplicates what the output schema already defines. Roughly a third of the description could be cut without losing meaning.

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

Completeness3/5

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

Behaviorally this is close to complete: response codes, warning semantics, and parity with the optimize path are all explained, and an output schema exists so return values needn't be detailed. The gap is parameter documentation — for a six-parameter tool with a deeply nested body at 0% schema coverage, deferring entirely to another tool leaves the agent reliant on a sibling.

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

Parameters2/5

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

Schema description coverage is 0% across a deep nested schema (parts, stock, options, matchedSets), so the description carries the burden — but it only says "same arguments as optimize_2d (field descriptions there)", deferring rather than explaining. The only parameter-level insight offered is that `engine` values, including "max", are validated identically, which covers a fraction of the surface.

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?

States a specific verb and resource — schema-validates the same body `/v1/optimize/2d` accepts, without solving it — and explicitly distinguishes itself from the sibling optimize_2d by saying it does not spend a call. An agent can tell exactly what this does versus the optimize tools without opening a schema.

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?

Gives a concrete when-to-use: validate payloads during integration, before you even have a key. It also implicitly separates itself from optimize_2d (this one does not solve), and points to optimize_2d for field descriptions. Missing is an explicit statement of when NOT to use it (e.g., when you actually need a cut plan).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.