Skip to main content
Glama

Upload And Quote

upload_and_quote
Destructive

Price a new part from its CAD file in one call (German: Fertigungskosten). Send a STEP file as base64, or a DXF flat pattern with sheet_gauge_mm and a material; a PDF drawing is optional (tolerances, finishes, treatments). It files the part under part_number and starts the calculation; after precheck_part, send precheck_id and no file. Billable: one calculation per different part and costing environment, only if it succeeds; copies of one part count once, a catalogue part such as a screw not at all. A single part may be up to 5 MB, an assembly up to 25 MB; send a large STEP gzip-compressed, about 5x smaller. It runs in the background, usually for seconds; returns the calculation id, status, eta_seconds and the part. Follow it with get_calculation. File on the person's computer: get_upload_link. Part already in ARCNM: quote_part.

Input Schema

NameRequiredDescriptionDefault
engineNoPricing engine selector; retained for back-compat and always normalized to the sole engine.arcnm
regionNoPricing region override; defaults to the costing environment's region when omitted.
currencyNoISO 4217 currency code for the quote; defaults to the costing environment's currency when omitted.
languageNoBCP 47 language for the calculation's captured context (e.g. 'de', 'en'). Part of the calculation's cache identity.de
lot_sizeNoNumber of identical parts produced per batch (1 to 1,000,000,000).
folder_idNoOptional workspace folder to file the created part into.
on_conflictNoHow to resolve a part_number that already exists: keep_folder (add a revision, leave the part where it is — the historical behaviour), move (add a revision and re-file into folder_id), new_part (create a separate part under a distinct number), or skip (upload nothing, create no calculation, meter nothing). The outcome is always reported in ``filing``.keep_folder
part_numberYesNatural-key part number; reused to attach a new revision if the part already exists.
precheck_idNoStart this precheck (the app only (not available over MCP)): its stored file, drawings and statements — send no file. Starting it again answers with the calculation it started.
cad_file_b64NoBase64 (or a data: URI) of the 3D CAD file (e.g. STEP). Required unless precheck_id is sent.
cad_filenameNoCAD filename including extension, e.g. bracket.step — used for format detection. Required with cad_file_b64.
material_refNoFree-form material reference (URN, Werkstoffnummer, AISI/SAE code, trade name, or your SKU). Unresolvable values are rejected with 422 material_unresolved plus ranked candidates. Omit to price the material read from the part's drawing (or the environment default).
nest_item_idNoPrice this calculation's material on its part's line of a job nest — the `id` of a line (`items[].id`) of a job nest that has solved it. The material is then the line's share of the sheets the job nest cut it from together with other parts, less its share of what their skeleton and reusable rests earn back; everything else is priced as usual. The line must be of your organization, of this costing environment and of this part revision, and its job nest must have solved it; otherwise the request is rejected with 422 `nest_item_unresolved`, `details.reason` saying why. It cannot be combined with `stock_format_id` or with customer-supplied material. An upload creates a new part revision, so the upload forms reject every line. A line of the sheets an assembly shares among its own components prices that assembly only: naming one is rejected as `not_found`, and a re-run of such a component prices it on its own sheet. Omit it to price the part on its own sheet.
rfq_file_b64NoOptional base64 (or data: URI) of an RFQ text file.
rfq_filenameNoRFQ filename including extension.
annual_volumeNoExpected yearly quantity used to amortize setup cost (1 to 1,000,000,000).
sheet_gauge_mmNoSheet thickness in millimetres — required when the CAD file is a DXF flat pattern (a 2D cutting file carries no thickness); ignored for STEP.
stock_format_idNoPrice this calculation on one stock format — the `id` of a format from the `materials_list_stock_formats` tool (toolset `catalog`). An id names the format, not only the version it came from: when the format has been changed since, the version current on the day the calculation is created is used. An id your organization cannot price with today (unknown, retired or hidden) is rejected with 422 `stock_format_unresolved`. When the part cannot be cut from that format — too small, not bought in the part's thickness or material, or one the machine cannot load — or is not cut from sheet at all (milled, turned or bought finished), the calculation is priced as if none had been chosen, and `analytics.pipeline_notes` says why (`stock_format_pin_unavailable`). Omit it to price on the format that uses the least material per part.
cad_content_typeNoMIME type of the CAD file, when known.
drawing_file_b64NoOptional base64 (or data: URI) of a 2D drawing (PDF/PNG/JPEG).
drawing_filenameNoDrawing filename including extension.
rfq_content_typeNoMIME type of the RFQ file, when known.
material_grade_idNoUUID of a resolved material grade; takes precedence over material_ref when both are supplied.
max_overage_centsNoThe most this calculation may cost past your plan's included calculations, in cents; parts past it wait (run_spend_cap).
precheck_revisionNoThe revision the precheck showed; refused with 409 precheck_changed when what it decides moved since.
provided_stock_kindNoShape of the provided stock; 'near_net_profile' scopes the plan.none
drawing_content_typeNoMIME type of the drawing file, when known.
material_is_providedNoTrue when the customer supplies the raw material (beigestellt).
costing_environment_idNoUUID of the costing environment to price against. Omit to use your organization's default environment.
costing_environment_idsNoPrice the part in several environments at once, in comparison order. The file is uploaded once; each environment becomes one calculation and counts as one against the plan quota. The response then carries ``batch_id`` and ``environment_runs``. Mutually exclusive with ``costing_environment_id``.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedInput schema / properties / cad_file_b64 / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cad_file_b64 / description
      Previous value: -"Base64 (or a data: URI) of the 3D CAD file (e.g. STEP). Required."New value: +"Base64 (or a data: URI) of the 3D CAD file (e.g. STEP). Required unless precheck_id is sent."
    • removedInput schema / properties / cad_file_b64 / type
      Removed value: -"string"
    • addedInput schema / properties / cad_filename / anyOf
      Added value: +[
      +  {
      +    "maxLength": 255,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cad_filename / description
      Previous value: -"CAD filename including extension, e.g. bracket.step — used for format detection."New value: +"CAD filename including extension, e.g. bracket.step — used for format detection. Required with cad_file_b64."
    • removedInput schema / properties / cad_filename / maxLength
      Removed value: -255
    • removedInput schema / properties / cad_filename / minLength
      Removed value: -1
    • removedInput schema / properties / cad_filename / type
      Removed value: -"string"
    • addedInput schema / properties / max_overage_cents
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 1000000000,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The most this calculation may cost past your plan's included calculations, in cents; parts past it wait (run_spend_cap).",
      +  "title": "Max Overage Cents"
      +}
    • addedInput schema / properties / precheck_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "uuid",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Start this precheck (the app only (not available over MCP)): its stored file, drawings and statements — send no file. Starting it again answers with the calculation it started.",
      +  "title": "Precheck Id"
      +}
    • addedInput schema / properties / precheck_revision
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 32,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The revision the precheck showed; refused with 409 precheck_changed when what it decides moved since.",
      +  "title": "Precheck Revision"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "part_number",
      -  "cad_file_b64",
      -  "cad_filename"
      -]New value: +[
      +  "part_number"
      +]
  2. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  3. Added

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses billing rules, file-size limits, gzip handling, background execution, and the returned calculation id, status, eta_seconds, and part. It also explains the precheck continuation path and the alternative tools for local files and existing parts.

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?

Despite covering a complex 30-parameter operation, the description is front-loaded and dense with useful information. Each sentence contributes workflow, billing, size, execution, or routing guidance without wasteful repetition.

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 complex, destructive, non-idempotent upload-and-price operation, the description covers the main workflow, alternatives, billing implications, async behavior, and follow-up tool. The remaining parameter-level details are thoroughly documented in the schema.

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 100%, so the schema already carries most parameter detail, but the description adds meaningful conditional semantics: STEP vs DXF flat pattern requiring sheet_gauge_mm and material, optional PDF drawings, and sending precheck_id with no file after precheck_part. It does not explain every advanced parameter, but it adds real value beyond the 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 a specific verb and resource: pricing a new part from a CAD file in one call. It clearly distinguishes this tool from precheck_part, quote_part, get_upload_link, and get_calculation, so an agent can select it without opening sibling 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?

It gives explicit routing rules: use get_upload_link for a file on the person's computer, quote_part for a part already in ARCNM, precheck_part before sending precheck_id, and get_calculation afterward. The when-to-use logic is unusually complete.

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.