Skip to main content
Glama

Portravo Construction Takeoff

Extract a construction plan takeoff

run_takeoff
Idempotent

Starts a paid takeoff on a project whose plan PDF was attached with attach_plan_pdf or uploaded by the user on the project page in Portravo. Each trade uses one takeoff credit (bought at $75); the whole job uses three ($149 pay as you go). Uses only existing plan allowance and purchased credits, never billed overage. Prerequisites: preflight_takeoff, the user's approval of its trades and creditsRequired, and an attached plan; set confirmed_trades to the approved selection and max_credits to the approved ceiling (defaults to one for older clients). A changed selection/cost or insufficient balance is refused before starting. Repeating a call with the same idempotency_key does not charge again. Returns asynchronous progress; use get_takeoff_status until done, then get_takeoff for source-linked human review. A completed run is not a bid-ready estimate. Failed provider runs refund the reservation; existing review work cannot be overwritten.

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": {
      "project_id": "<project_id>",
      "confirm_credit_use": "<confirm_credit_use>",
      "idempotency_key": "<idempotency_key>"
    },
    "name": "run_takeoff"
  }
}

Input Schema

NameRequiredDescriptionDefault
project_idYes
max_creditsNo
idempotency_keyYes
confirmed_tradesNo
confirm_credit_useYes

Output Schema

NameRequiredDescriptionDefault
okYes
linesYes
sheetsYes
scopeNotesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / confirmed_trades
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "electrical",
      +      "framing",
      +      "mechanical",
      +      "plumbing",
      +      "landscape",
      +      "painting",
      +      "concrete",
      +      "roofing",
      +      "drywall",
      +      "whole_job"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 9,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / max_credits
      Added value: +{
      +  "maximum": 3,
      +  "minimum": 0,
      +  "type": "integer"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnlyHint false, idempotentHint true, destructiveHint false, openWorldHint true); the description adds the substantive behavior: credit cost per trade and per job, no overage billing, refusal on changed selection or insufficient balance, refund on failed provider runs, and that existing review work cannot be overwritten. It also confirms the idempotency semantics with the concrete consequence ('does not charge again'), which is exactly the operator-relevant detail.

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 action and cost model, then prerequisites, then refusal/idempotency behavior, then the follow-up call sequence — a logical order with no filler sentences. It is dense, and the parenthetical price details ('bought at $75', '$149 pay as you go') and the UI reference to the project page in Portravo are the only mildly expendable pieces.

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 costly, asynchronous, credit-consuming mutation this covers everything the agent needs: gating prerequisites, credit ceiling semantics, refusal and refund behavior, replay safety, and the exact follow-up tools to reach a reviewed result. Return value shape is covered by the output schema, so no further return documentation is owed.

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 description coverage is 0%, so the description must carry the load, and it largely does: confirmed_trades maps to 'the approved selection', max_credits to 'the approved ceiling (defaults to one for older clients)', and idempotency_key to replay safety. The gaps are confirm_credit_use (whose const-true, explicit-consent nature is only implied by the approval language) and project_id (never explicitly tied to the attach_plan_pdf/upload provenance it references).

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 ('Starts a paid takeoff on a project') and immediately scopes it to projects whose plan PDF was attached via attach_plan_pdf or uploaded by the user. This clearly separates it from preflight_takeoff (the prerequisite check) and get_takeoff/get_takeoff_status (the read-side siblings).

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?

Explicitly names prerequisites (preflight_takeoff, user approval of trades and creditsRequired, an attached plan) and gives a full call sequence: get_takeoff_status until done, then get_takeoff for review. It also sets a boundary on what the output means ('not a bid-ready estimate'), which tells the agent when not to stop here.

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