Skip to main content
Glama

Xem Studio: Part Dimensions & CAD

List one object's free download links

get_free_files
Read-onlyIdempotent

For importing a real part into CAD, 3D printing it, or modelling a mating bracket or enclosure around it. List the direct download URLs of one object's free STEP and STL files (and DXF where a 2D profile exists), with the license to credit. Use it when files are wanted rather than dimensions (get_geometry) or file contents (get_file_content). Objects whose files are a sold Xem design pack return no free files but a note with the x402 and card prices; an object with no files at all returns an empty list and points to its public sources. Neither is an error. URLs are plain HTTPS downloads that need no auth and can be fetched directly; free files are CC BY 4.0 or the Xem Studio Design License as stated in license. Read-only, no charge.

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": {
      "object": "<object>"
    },
    "name": "get_free_files"
  }
}

Input Schema

NameRequiredDescriptionDefault
filterNoKeep only files whose name or note contains this text, e.g. 'm3x10' or '2in'.
objectYesObject slug as returned by find_geometry or find_by_dimensions, e.g. '4080-aluminum-extrusion'. An exact object name or alias also resolves; anything else is an error with a hint to search first.

Output Schema

NameRequiredDescriptionDefault
noteNoWhy the list is empty, or where paid files are sold.
countNoFiles listed after the filter.
filesNoFree files, one per part or size.
indexNoURL of the object's machine-readable file index.
matingNoMating features, so a part can be prepared without a second call.
objectYesObject slug.
licenseNoLicense of the files and who to credit.
dimensionsNoSizes are exact nominal, no tolerance.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • changedInput schema / properties / object / description
      Previous value: -"Slug as returned by find_geometry or find_by_dimensions, e.g. '4080-aluminum-extrusion'. An exact name or alias also resolves."New value: +"Object slug as returned by find_geometry or find_by_dimensions, e.g. '4080-aluminum-extrusion'. An exact object name or alias also resolves; anything else is an error with a hint to search first."
    • addedOutput schema / properties / count / description
      Added value: +"Files listed after the filter."
    • addedOutput schema / properties / dimensions
      Added value: +{
      +  "description": "Sizes are exact nominal, no tolerance.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / files / description
      Added value: +"Free files, one per part or size."
    • addedOutput schema / properties / files / items / properties / name / description
      Added value: +"File name; pass it to get_file_content."
    • addedOutput schema / properties / files / items / properties / note
      Added value: +{
      +  "description": "What the file is, e.g. one size of a family.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / files / items / properties / size_mb
      Added value: +{
      +  "description": "Approximate size in MB when known.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / files / items / properties / step / description
      Added value: +"Direct STEP download URL."
    • addedOutput schema / properties / files / items / properties / stl / description
      Added value: +"Direct STL download URL, or null when only STEP exists."
    • changedOutput schema / properties / files / items / required
      Previous value: -[]New value: +[
      +  "name",
      +  "step"
      +]
    • addedOutput schema / properties / index
      Added value: +{
      +  "description": "URL of the object's machine-readable file index.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / license / description
      Added value: +"License of the files and who to credit."
    • addedOutput schema / properties / mating
      Added value: +{
      +  "description": "Mating features, so a part can be prepared without a second call.",
      +  "items": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "exact": {
      +        "description": "Its exact size, in mm, with no clearance.",
      +        "type": "string"
      +      },
      +      "feature": {
      +        "description": "The feature, e.g. 'M3 mounting holes (4)'.",
      +        "type": "string"
      +      },
      +      "files": {
      +        "description": "Which of the object's files carry this feature ('all' or a file name).",
      +        "type": "string"
      +      },
      +      "fit": {
      +        "description": "Fit class: press | slide | run | socket | clamp | designed.",
      +        "type": "string"
      +      },
      +      "mates": {
      +        "description": "What it meets: another object, a standard part, or a fastener size.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "feature",
      +      "exact",
      +      "fit"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / note / description
      Added value: +"Why the list is empty, or where paid files are sold."
    • addedOutput schema / properties / object / description
      Added value: +"Object slug."
  2. Changed2 schema fields changed
    • removedOutput schema / properties / assembly
      Removed value: -{
      -  "type": [
      -    "object",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / parts
      Removed value: -{
      -  "items": {
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
  3. Changed3 schema fields changed
    • changedInput schema / properties / filter / description
      Previous value: -"Optional substring of the file name, e.g. 'm3x10', '2in', 'ferrule'."New value: +"Keep only files whose name or note contains this text, e.g. 'm3x10' or '2in'."
    • changedInput schema / properties / object / description
      Previous value: -"The object's slug exactly as find_geometry or find_by_dimensions returns it (e.g. '4080-aluminum-extrusion'). A name or alias also works; slugs are safest."New value: +"Slug as returned by find_geometry or find_by_dimensions, e.g. '4080-aluminum-extrusion'. An exact name or alias also resolves."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "assembly": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "count": {
      +      "type": "integer"
      +    },
      +    "files": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "name": {
      +            "type": "string"
      +          },
      +          "step": {
      +            "type": "string"
      +          },
      +          "stl": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "license": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "object": {
      +      "type": "string"
      +    },
      +    "parts": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "object"
      +  ],
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / filter / description
      Previous value: -"Substring of the part name, e.g. 'm3x10', '2in', 'ferrule'"New value: +"Optional substring of the file name, e.g. 'm3x10', '2in', 'ferrule'."
    • addedInput schema / properties / object / description
      Added value: +"The object's slug exactly as find_geometry or find_by_dimensions returns it (e.g. '4080-aluminum-extrusion'). A name or alias also works; slugs are safest."
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, it discloses auth requirements ('plain HTTPS downloads that need no auth'), licensing (CC BY 4.0 or Xem Studio Design License), that paid-pack and no-file responses are not errors, and that there is no charge. That is substantial behavior an agent could not infer from structured fields.

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 use cases and the when-to-use contrast are front-loaded, and the edge-case handling follows. It is on the longer side with several clauses, but nearly every sentence carries needed information; the leading CAD/3D-printing motivation is the one mildly expendable part.

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?

An output schema exists, so return-value structure need not be described, and the description still covers licensing, empty/paid-pack outcomes, and URL auth. For a two-parameter, read-only listing tool this is complete.

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 coverage is 100% and both parameters are documented in-schema, including filter examples and the object slug/alias resolution behavior. The description does not add syntax or semantics beyond that, 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 and resource: 'List the direct download URLs of one object's free STEP and STL files (and DXF where a 2D profile exists)'. It explicitly differentiates from siblings by contrasting with get_geometry and get_file_content, so an agent can pick it 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 Guidelines5/5

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

'Use it when files are wanted rather than dimensions (get_geometry) or file contents (get_file_content)' names the alternatives and the selecting condition. It also covers edge cases: sold design packs returning a price note, and empty lists pointing to public sources, both flagged as non-errors.

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.

Resources