Skip to main content
Glama

Craft Quantities: construction material calculators

Create a My Project file from takeoffs

create_project_file_from_takeoffs
Read-onlyIdempotent

Creates one My Project backup file from a list of whole-job takeoffs (each a takeoff id and its measurements). Each takeoff's lines are worked as its page commits them; the reader restores the file on craftquantities.com as a new project. Nothing is stored or sent; no prices.

Input Schema

NameRequiredDescriptionDefault
nameNoThe new project's name.
detailNofull (the default): the whole answer. summary: the result lines, the citation line and the page only — fewer tokens to read.full
marketNoOptional. A market whose own opening choice some inputs take (a UK reader's code, an IEC motor), and whose currency symbol prints the caller's own money figures.
systemNoThe unit system inputs left out open in, and the one the page link opens in. The answer comes in both.metric
takeoffsYesThe takeoffs: each an id and its measurements.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "drawing": {
      -        "properties": {
      -          "carried": {
      -            "type": "boolean"
      -          },
      -          "note": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "carried"
      -        ],
      -        "type": "object"
      -      },
      -      "engine": {
      -        "type": "object"
      -      },
      -      "file": {
      -        "properties": {
      -          "content": {
      -            "properties": {
      -              "exportedAt": {
      -                "type": "string"
      -              },
      -              "magic": {
      -                "const": "craftquantities.backup"
      -              },
      -              "stores": {
      -                "type": "object"
      -              },
      -              "v": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "magic",
      -              "v",
      -              "exportedAt",
      -              "stores"
      -            ],
      -            "type": "object"
      -          },
      -          "filename": {
      -            "type": "string"
      -          },
      -          "mediaType": {
      -            "const": "application/json"
      -          }
      -        },
      -        "required": [
      -          "filename",
      -          "mediaType",
      -          "content"
      -        ],
      -        "type": "object"
      -      },
      -      "howToImport": {
      -        "type": "string"
      -      },
      -      "licence": {
      -        "properties": {
      -          "attribution": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "url",
      -          "attribution"
      -        ],
      -        "type": "object"
      -      },
      -      "notice": {
      -        "type": "string"
      -      },
      -      "project": {
      -        "properties": {
      -          "lines": {
      -            "items": {
      -              "required": [
      -                "label",
      -                "quantity",
      -                "unit",
      -                "from"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "system": {
      -            "enum": [
      -              "metric",
      -              "imperial"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "system",
      -          "lines"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "engine",
      -      "file",
      -      "project",
      -      "howToImport",
      -      "licence",
      -      "notice"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "citation": {
      -        "description": "The one citation line, built from the answer's own data.",
      -        "type": "string"
      -      },
      -      "detail": {
      -        "const": "summary"
      -      },
      -      "lines": {
      -        "description": "The result lines, as the report's table gives them.",
      -        "items": {
      -          "additionalProperties": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "more": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "notes": {
      -        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "open": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "tool": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "detail",
      -      "tool",
      -      "title",
      -      "lines",
      -      "notes",
      -      "citation",
      -      "url",
      -      "open",
      -      "more"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "drawing": {
      +        "properties": {
      +          "carried": {
      +            "type": "boolean"
      +          },
      +          "note": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "carried"
      +        ],
      +        "type": "object"
      +      },
      +      "engine": {
      +        "type": "object"
      +      },
      +      "file": {
      +        "properties": {
      +          "content": {
      +            "properties": {
      +              "exportedAt": {
      +                "type": "string"
      +              },
      +              "magic": {
      +                "const": "craftquantities.backup"
      +              },
      +              "stores": {
      +                "type": "object"
      +              },
      +              "v": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "magic",
      +              "v",
      +              "exportedAt",
      +              "stores"
      +            ],
      +            "type": "object"
      +          },
      +          "filename": {
      +            "type": "string"
      +          },
      +          "mediaType": {
      +            "const": "application/json"
      +          }
      +        },
      +        "required": [
      +          "filename",
      +          "mediaType",
      +          "content"
      +        ],
      +        "type": "object"
      +      },
      +      "howToImport": {
      +        "type": "string"
      +      },
      +      "licence": {
      +        "properties": {
      +          "attribution": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "url",
      +          "attribution"
      +        ],
      +        "type": "object"
      +      },
      +      "notice": {
      +        "type": "string"
      +      },
      +      "project": {
      +        "properties": {
      +          "lines": {
      +            "items": {
      +              "required": [
      +                "label",
      +                "quantity",
      +                "unit",
      +                "from"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "system": {
      +            "enum": [
      +              "metric",
      +              "imperial"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "system",
      +          "lines"
      +        ],
      +        "type": "object"
      +      },
      +      "state": {
      +        "properties": {
      +          "characters": {
      +            "type": "integer"
      +          },
      +          "format": {
      +            "description": "The token's format and version.",
      +            "type": "string"
      +          },
      +          "link": {
      +            "description": "Opens the project on the site from the token, carried in the address fragment, which a browser does not send to any server.",
      +            "type": "string"
      +          },
      +          "note": {
      +            "type": "string"
      +          },
      +          "token": {
      +            "anyOf": [
      +              {
      +                "description": "The project's inputs, deflated and base64url-encoded with a format version and a CRC-32 check (cqp1.…). Compact, not encrypted: anyone who has it can read it.",
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "token",
      +          "format",
      +          "note"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "engine",
      +      "file",
      +      "project",
      +      "howToImport",
      +      "licence",
      +      "notice"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "citation": {
      +        "description": "The one citation line, built from the answer's own data.",
      +        "type": "string"
      +      },
      +      "detail": {
      +        "const": "summary"
      +      },
      +      "lines": {
      +        "description": "The result lines, as the report's table gives them.",
      +        "items": {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "more": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "notes": {
      +        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "open": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "tool": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "detail",
      +      "tool",
      +      "title",
      +      "lines",
      +      "notes",
      +      "citation",
      +      "url",
      +      "open",
      +      "more"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Added

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare readOnly/idempotent/non-destructive, and the description usefully adds context the annotations cannot convey: nothing is stored or sent, no prices, and the resulting file is restored by the reader on craftquantities.com as a new project — which also reconciles the seemingly odd readOnlyHint on a 'create' tool. It omits the 10-takeoff cap and any note on determinism/repeat calls.

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?

Three short sentences, front-loaded with the core action, and each sentence carries distinct information (what it makes, how takeoffs are processed/restored, and that nothing is persisted). Some phrasing ('as its page commits them') is dense domain jargon, but no sentence is wasted.

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?

With an output schema present and full schema description coverage, the description need not explain returns or parameters; it covers the action, the persistence semantics, and the restore path. It is only mildly incomplete in not linking takeoff ids to their producing tools or noting the array limits.

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 the schema already documents name, detail, market, system, leaveOut, selection, allowances, inputUnits and measurements. The description only restates the takeoffs shape ('each a takeoff id and its measurements') and adds nothing about the optional parameters, so the baseline 3 applies.

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 states a specific verb and resource ('Creates one My Project backup file from a list of whole-job takeoffs') and names the input source, which is what separates it from the create_project_file_from_calculations/drawing/house/plan siblings. It does not explicitly call out those siblings, so the differentiation rests partly on the tool name.

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?

It explains the mechanics ('each takeoff's lines are worked as its page commits them') but never says when to choose this over the other create_project_file_* variants, nor what prerequisite a takeoff id must satisfy (e.g. coming from run_takeoff/get_takeoff). No when-not guidance and no stated alternatives.

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