Skip to main content
Glama

export_proposal

Generates a bid proposal PDF with company letterhead, measured scope, base bid, terms, and signature blocks, flagging incomplete or unpriced items before the estimate is sent.

Instructions

Write the bid proposal PDF — the canvas Proposal dialog's download: letterhead from company, prepared-for (set_estimate_settings client), the scope (each condition, its spec description, measured quantity), the base bid (lump sum, or itemized when the project's proposal says so), inclusions / exclusions / terms and signature blocks. Every page carries a light diagonal "OpenTakeoff" and the line "Prepared with OpenTakeoff · opentakeoff.kentucky-ai.com". Pass company exactly as the estimator gave it — this server has no Company setup of its own. It never refuses an incomplete estimate; the reply's complete and unpriced say what the base bid is missing, and the user must hear it before sending. Default path: next to the loaded plan as " - proposal.pdf".

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "export_proposal"
  }
}

Input Schema

NameRequiredDescriptionDefault
pathNoWhere to write the PDF (default: "<plan dir>/<project or plan> - proposal.pdf")
companyNoThe contractor's letterhead, from the estimator
overwriteNoReplace the file at path even when it is not an OpenTakeoff export. Off by default: re-exporting over a previous export of your own already overwrites without this, so you only need it to deliberately destroy an unrelated file.
project_nameNoProject name on the proposal (default: the plan file's name)

Output Schema

NameRequiredDescriptionDefault
noteNo
pathYes
pagesYes
base_bidYes
completeYes
itemizedYes
unpricedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.1.31
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / company / additionalProperties
      Removed value: -false
    • addedOutput schema / properties / pages / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / pages / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / unpriced / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / unpriced / items / properties / unit
      Added value: +{
      +  "description": "Which of the condition's lines is unpriced",
      +  "enum": [
      +    "SF",
      +    "SY",
      +    "LF",
      +    "EA"
      +  ],
      +  "type": "string"
      +}
  2. Addedv0.1.29

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations supplied, the description carries the full behavioral burden and does so well: it discloses the watermark on every page, the non-validating behavior on incomplete estimates, the complete/unpriced fields that must be relayed to the user, and the overwrite safety model. It also warns that the server holds no company data, which is exactly the kind of operational gotcha an agent needs before calling.

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 core purpose is front-loaded in the first sentence and each subsequent sentence carries actionable detail. The construction is dense, em-dash-heavy, and the watermark sentence reads like boilerplate, but none of it is wasted since it describes an observable artifact an agent may need to explain.

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?

For a complex, multi-field, nested-object export tool with an output schema, the description covers document contents, side effects, default behavior, and the semantic meaning of the reply's flags. The remaining gap is sibling differentiation against revise_proposal / export_estimate, which would help the agent pick this tool confidently.

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 baseline is 3; the description adds value beyond it by clarifying that company is passed verbatim from the estimator with no server-side fallback, and by restating the default path formula for path and project_name. It does not add anything for the nested letterhead fields, which the schema already documents.

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?

Opens with a concrete verb and artifact: 'Write the bid proposal PDF — the canvas Proposal dialog's download', then enumerates the exact document sections produced (letterhead, prepared-for, scope, base bid, inclusions/exclusions, signature blocks). This distinguishes it clearly from export_estimate, export_takeoff, and export_report by naming the proposal deliverable and its contents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives explicit operating context: default output path, when overwrite is needed ('only... to deliberately destroy an unrelated file'), that company must come from the estimator because the server has no setup of its own, and that the tool never refuses an incomplete estimate. It stops short of contrasting when to use revise_proposal or withdraw_proposal instead, so sibling routing is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.