Skip to main content
Glama

Describe a DXF drawing

describe_dxf
Read-only

Return a structured JSON summary of a DXF drawing — units, bounding box, layers (with the color actually drawn), per-type entity counts, and any skipped/unsupported types. Use this to answer structural questions (what layers exist, how many parts, what size, is it to scale) without rendering an image. For a PDF use describe_pdf; if you do not know the format, use describe_doc. Covers the whole drawing by default, including every page of a multi-page PDF; pass space (a name from the reply's spaces) to scope it to one page or sheet. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "source": "<source>"
    },
    "name": "describe_dxf"
  }
}

Input Schema

NameRequiredDescriptionDefault
spaceNoWhich space to work on: "Model" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's "spaces". Describe omits it for the whole drawing; render defaults to the first space.
sourceYesA publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)

Output Schema

NameRequiredDescriptionDefault
sizeYesBounding-box size in drawing units, null when empty
spaceYesWhich space this summary is scoped to, or null when it covers the whole drawing (bounds/size then describe spaces[0], the space render returns)
textsYesUnique TEXT/MTEXT strings, blocks included
unitsYesDrawing-unit label (e.g. "mm"), "" when unitless
boundsYesWorld-space extents, null for an empty drawing
formatYesWhich format was read ("dxf", "pdf")
layersYes
spacesYesEvery space in the drawing (a PDF's pages, a DXF's model space and layouts), model space first. These do not sum to entityCount: a DXF sheet's viewports re-show model geometry, so an entity can be drawn in two spaces while existing once
entityCountYes
entityTypesYesTop-level entities per DXF type
unsupportedYesPer-kind counts of what was skipped
segmentCountYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedOutput schema / properties / space / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / space / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Changed4 schema fields changed
    • addedInput schema / properties / space
      Added value: +{
      +  "description": "Which space to work on: \"Model\" (a PDF's page 1, a DXF's model space) or a page/layout name as listed in a describe reply's \"spaces\". Describe omits it for the whole drawing; render defaults to the first space.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / space
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Which space this summary is scoped to, or null when it covers the whole drawing (bounds/size then describe spaces[0], the space render returns)"
      +}
    • addedOutput schema / properties / spaces
      Added value: +{
      +  "description": "Every space in the drawing (a PDF's pages, a DXF's model space and layouts), model space first. These do not sum to entityCount: a DXF sheet's viewports re-show model geometry, so an entity can be drawn in two spaces while existing once",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "bounds": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "maxX": {
      +                "type": "number"
      +              },
      +              "maxY": {
      +                "type": "number"
      +              },
      +              "minX": {
      +                "type": "number"
      +              },
      +              "minY": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "minX",
      +              "minY",
      +              "maxX",
      +              "maxY"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "entityCount": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "description": "Pass as `space` to scope a describe or render to it",
      +        "type": "string"
      +      },
      +      "segmentCount": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "size": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "height": {
      +                "type": "number"
      +              },
      +              "width": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "width",
      +              "height"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "entityCount",
      +      "segmentCount",
      +      "bounds",
      +      "size"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "format",
      -  "units",
      -  "bounds",
      -  "size",
      -  "entityCount",
      -  "segmentCount",
      -  "layers",
      -  "entityTypes",
      -  "unsupported",
      -  "texts"
      -]New value: +[
      +  "format",
      +  "units",
      +  "bounds",
      +  "size",
      +  "space",
      +  "entityCount",
      +  "segmentCount",
      +  "spaces",
      +  "layers",
      +  "entityTypes",
      +  "unsupported",
      +  "texts"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / source / description
      Previous value: -"A publicly reachable http(s) URL to a .dxf file, or the DXF content inline as text. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"New value: +"A publicly reachable http(s) URL, or inline DXF text. A PDF is binary, so it must be a URL — inline PDF bytes are refused. (This is a hosted server — local file paths are not available; use the npx @aspicio/mcp local server for files on disk.)"
  4. Changed3 schema fields changed
    • addedOutput schema / properties / format
      Added value: +{
      +  "description": "Which format was read (\"dxf\", \"pdf\")",
      +  "type": "string"
      +}
    • changedOutput schema / properties / unsupported / description
      Previous value: -"Per-type counts of skipped entities"New value: +"Per-kind counts of what was skipped"
    • changedOutput schema / required
      Previous value: -[
      -  "units",
      -  "bounds",
      -  "size",
      -  "entityCount",
      -  "segmentCount",
      -  "layers",
      -  "entityTypes",
      -  "unsupported",
      -  "texts"
      -]New value: +[
      +  "format",
      +  "units",
      +  "bounds",
      +  "size",
      +  "entityCount",
      +  "segmentCount",
      +  "layers",
      +  "entityTypes",
      +  "unsupported",
      +  "texts"
      +]
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "bounds": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "maxX": {
      +              "type": "number"
      +            },
      +            "maxY": {
      +              "type": "number"
      +            },
      +            "minX": {
      +              "type": "number"
      +            },
      +            "minY": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "minX",
      +            "minY",
      +            "maxX",
      +            "maxY"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "World-space extents, null for an empty drawing"
      +    },
      +    "entityCount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "entityTypes": {
      +      "additionalProperties": {
      +        "type": "number"
      +      },
      +      "description": "Top-level entities per DXF type",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "layers": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "color": {
      +            "description": "The color actually drawn (dominant), as #rrggbb",
      +            "type": "string"
      +          },
      +          "entityCount": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "visible": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "entityCount",
      +          "visible",
      +          "color"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "segmentCount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "size": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "height": {
      +              "type": "number"
      +            },
      +            "width": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "width",
      +            "height"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Bounding-box size in drawing units, null when empty"
      +    },
      +    "texts": {
      +      "description": "Unique TEXT/MTEXT strings, blocks included",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "units": {
      +      "description": "Drawing-unit label (e.g. \"mm\"), \"\" when unitless",
      +      "type": "string"
      +    },
      +    "unsupported": {
      +      "additionalProperties": {
      +        "type": "number"
      +      },
      +      "description": "Per-type counts of skipped entities",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "units",
      +    "bounds",
      +    "size",
      +    "entityCount",
      +    "segmentCount",
      +    "layers",
      +    "entityTypes",
      +    "unsupported",
      +    "texts"
      +  ],
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description still adds real context: default scope is the whole drawing, `space` narrows it to one page/sheet taken from the reply's `spaces`, unsupported types are reported rather than silently dropped, and no image is rendered. It stops short of describing pagination/size limits or failure modes for malformed DXF text, so a 4 rather than a 5.

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?

Front-loaded with the output shape, then routing, then scoping, then the view_dxf caveat — a sensible order with little filler. It runs four-plus sentences with a parenthetical aside, so it's dense but each clause carries routing or behavior information; trimming the view_dxf approval guidance would be the only candidate cut.

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?

An output schema exists, so return values needn't be spelled out, and the description covers scoping, format routing, and unsupported-type reporting. Minor blemish: it references multi-page PDF behavior ('including every page of a multi-page PDF') inside a DXF-specific tool, which slightly muddies the scope of this tool's contract.

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

Parameters3/5

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

Schema description coverage is 100%, so both `source` and `space` are already documented in the schema, including the URL-vs-inline-text rule and the 'Model'/page-name convention. The description's mention of `space` largely restates that ('a name from the reply's `spaces`'), adding no new syntax or defaults beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (return a structured JSON summary) and resource (DXF drawing), then enumerates exactly what the summary contains: units, bounding box, layers with drawn colors, per-type entity counts, and skipped types. It explicitly distinguishes itself from describe_pdf and describe_doc, so an agent can pick correctly without opening schemas.

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?

Gives explicit when-to-use ('to answer structural questions ... without rendering an image') and names alternatives with conditions: describe_pdf for PDF, describe_doc when the format is unknown, and view_dxf when the user wants to explore visually. It even handles the approval-gating edge case for the sibling tool rather than letting the agent silently substitute a static render.

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.