Skip to main content
Glama

Kolmo Construction

Seattle cost estimate

get_estimate
Read-onlyIdempotent

Seattle cost estimate: range, material/labor split, days, line items.

Fields per type below; their allowed values, ranges and pricing rules are in list_project_types. ?=optional; (mat)=get_material_options ID (a unique close name also resolves; an ambiguous one lists candidates).

interior-painting: rooms([{id,name,length,width,height,paintCeiling,paintTrim,doorCount,windowCount,surfaceCondition,trimComplexity,wallTexture,roomEmpty}]); paintQuality(mat); includesPrimer; majorColorChange?(+colorChange{currentColor,targetColor}) exterior-painting: wallArea,trimArea; doorCount; paintQuality(mat); surfacePrepLevel; includesPrimer; stories?; colorChange?(+colorChangeData{currentColor,targetColor}) flooring: rooms([{id,name,length,width}]); flooringMaterial(mat); includesUnderlayment,includesBaseboard,includesRemoval,includesSubfloorPrep; underlaymentType?,baseboardType?(mat); baseboardLinearFeet?; removalType?; transitionCount? deck: deckType; dimensions({length,width≤200,height≤30 ft}); deckingMaterial(mat); framingMaterial(mat); includesRailing,includesStairs; railingMaterial?,finishType?(mat); railingLinearFeet?; stairSteps?; landingRequired?; deckShape?; skirtingType?; existingDeckWorkItems? windows: windows([{id,windowType,width,height,quantity}]); qualityLevel; includesTrimWork,includesRemoval,energyEfficient; trimMaterial?(mat) siding: wallArea; sidingMaterial(mat); homeHeight; includesInsulation,includesRemoval,soffit; insulationType?(mat); existingSidingType?; trimLinearFeet; soffitLinearFeet? fence: linearFeet; fenceMaterial(mat); height; gateCount; gateWidth?; style?; terrain; includesRemoval,concreteFootings landscaping: yardArea; includesIrrigation,includesSod,includesMulch,includesSitePrep; irrigationType?; irrigationZones?; sodSquareFeet?; mulchSquareFeet?; plants?([{id,plantType,quantity,size}]); hardscapeFeatures?([{id,featureType,squareFeet,material}]) kitchen: kitchenSize; scope; cabinets; countertop; appliances; flooring; backsplash?,plumbingRelocation?,electricalUpgrade?,island?,lighting?; wallRemoval?; gasLine?,rangeHood? bathroom: bathroomType; bathroomSize; scope; showerTub; vanity; tileWork; showerWalls?; heatedFloors?,newLighting?,ventilation?,plumbingRelocation?,glassDoor?,showerSeat?,handShower?; grabBars? basement: basementSize; scope; ceilingHeight; moistureCondition; egress; bathroom; kitchenette; bedroomCount?; flooring; insulation; hvac; electricalSubpanel?,homeAgePre1978? adu: type; sizeSqft; finishTier; dadu only: foundation?,sitework?,utilityRunFeet?,preApprovedPlan?; treeRemovalCount?; homeAgePre1978? ada: projectScope; modifications({grabBars,walkInShower,widerDoorways,ramp,nonSlipFlooring,leverHandles,raisedToilet,rollUnderSink,accessibleCounters,stairLift}, ≥1 true); currentCondition; homeStories?; doorwayCount?; rampLengthFeet?; flooringSquareFeet? electrical: items[{id,quantity}] (ids: get_material_options) plumbing: items[{id,quantity}] (ids: get_material_options) garage-doors: items[{id,quantity}] (ids: get_material_options) doors: items[{id,quantity}] (ids: get_material_options) concrete: items[{id,quantity}] (ids: get_material_options) insulation: items[{id,quantity}] (ids: get_material_options) gutters: items[{id,quantity}] (ids: get_material_options)

Input Schema

NameRequiredDescriptionDefault
projectYesProject input fields — named per projectType in the tool description; allowed values in list_project_types.
projectTypeYesThe type of project

Output Schema

NameRequiredDescriptionDefault
excludesYesScope NOT priced here. Relay alongside any figure.
laborCostYes
lineItemsNo
totalCostYesPoint figure. Relay estimateRange instead — a single number reads as a quote.
permitCostNoPresent on deck, kitchen, bathroom, basement, adu and ada. Already inside totalCost.
attributionYes
projectTypeYes
materialCostYes
pricingBasisNo
calculatorUrlYes
estimateRangeNoPlanning range for Seattle-area work. This is what to relay, with its qualifier attached.
contingencyCostNoPresent on basement and adu. When set, a contingency is ALREADY in totalCost — do not add another.
getAccurateQuoteYes
timeEstimateDaysNo
contingencyGuidanceYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / attribution / properties / citeAs / description
      Previous value: -"Ready-made citation line. Use verbatim."New value: +"Citation line; use verbatim."
    • changedOutput schema / properties / attribution / properties / primarySource / description
      Previous value: -"Present when Kolmo verified but does not author the fact — cite both."New value: +"Kolmo verified, did not author: cite both."
    • changedOutput schema / properties / attribution / properties / sourceUrl / description
      Previous value: -"The specific page these facts render on. Link this, not the site root."New value: +"The page to link, not the site root."
  2. Changed5 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • changedInput schema / properties / project / description
      Previous value: -"Project input fields — see tool description for required fields per projectType."New value: +"Project input fields — named per projectType in the tool description; allowed values in list_project_types."
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / additionalProperties
      Removed value: -true
    • removedOutput schema / properties / attribution / additionalProperties
      Removed value: -true
  3. Changed1 schema field changed
    • changedInput schema / properties / projectType / enum
      Previous value: -[
      -  "interior-painting",
      -  "exterior-painting",
      -  "flooring",
      -  "deck",
      -  "windows",
      -  "siding",
      -  "fence",
      -  "landscaping",
      -  "kitchen",
      -  "bathroom",
      -  "basement",
      -  "adu",
      -  "ada",
      -  "electrical",
      -  "plumbing",
      -  "garage-doors",
      -  "concrete",
      -  "insulation",
      -  "gutters"
      -]New value: +[
      +  "interior-painting",
      +  "exterior-painting",
      +  "flooring",
      +  "deck",
      +  "windows",
      +  "siding",
      +  "fence",
      +  "landscaping",
      +  "kitchen",
      +  "bathroom",
      +  "basement",
      +  "adu",
      +  "ada",
      +  "electrical",
      +  "plumbing",
      +  "garage-doors",
      +  "doors",
      +  "concrete",
      +  "insulation",
      +  "gutters"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / projectType / enum
      Previous value: -[
      -  "interior-painting",
      -  "exterior-painting",
      -  "flooring",
      -  "deck",
      -  "windows",
      -  "siding",
      -  "fence",
      -  "landscaping",
      -  "kitchen",
      -  "bathroom",
      -  "basement",
      -  "adu",
      -  "ada"
      -]New value: +[
      +  "interior-painting",
      +  "exterior-painting",
      +  "flooring",
      +  "deck",
      +  "windows",
      +  "siding",
      +  "fence",
      +  "landscaping",
      +  "kitchen",
      +  "bathroom",
      +  "basement",
      +  "adu",
      +  "ada",
      +  "electrical",
      +  "plumbing",
      +  "garage-doors",
      +  "concrete",
      +  "insulation",
      +  "gutters"
      +]
    • changedOutput schema / properties / permitCost / description
      Previous value: -"Present on basement and adu, where permit cost is inside totalCost."New value: +"Present on deck, kitchen, bathroom, basement, adu and ada. Already inside totalCost."
  5. Changed3 schema fields changed
    • changedInput schema / properties / projectType / enum
      Previous value: -[
      -  "interior-painting",
      -  "deck",
      -  "exterior-painting",
      -  "flooring",
      -  "windows",
      -  "siding",
      -  "fence",
      -  "landscaping",
      -  "kitchen",
      -  "bathroom",
      -  "ada"
      -]New value: +[
      +  "interior-painting",
      +  "exterior-painting",
      +  "flooring",
      +  "deck",
      +  "windows",
      +  "siding",
      +  "fence",
      +  "landscaping",
      +  "kitchen",
      +  "bathroom",
      +  "basement",
      +  "adu",
      +  "ada"
      +]
    • addedOutput schema / properties / contingencyCost
      Added value: +{
      +  "description": "Present on basement and adu. When set, a contingency is ALREADY in totalCost — do not add another.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / permitCost
      Added value: +{
      +  "description": "Present on basement and adu, where permit cost is inside totalCost.",
      +  "type": "number"
      +}
  6. Changed6 schema fields changed
    • removedOutput schema / properties / attribution / properties / contractorLicense
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / attribution / properties / note
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / attribution / properties / organization
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / attribution / properties / retrievedFrom
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / attribution / properties / url
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / attribution / required
      Previous value: -[
      -  "organization",
      -  "contractorLicense",
      -  "url",
      -  "sourceUrl",
      -  "citeAs",
      -  "retrievedFrom",
      -  "note"
      -]New value: +[
      +  "sourceUrl",
      +  "citeAs"
      +]
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "attribution": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "citeAs": {
      +          "description": "Ready-made citation line. Use verbatim.",
      +          "type": "string"
      +        },
      +        "contractorLicense": {
      +          "type": "string"
      +        },
      +        "note": {
      +          "type": "string"
      +        },
      +        "organization": {
      +          "type": "string"
      +        },
      +        "primarySource": {
      +          "description": "Present when Kolmo verified but does not author the fact — cite both.",
      +          "type": "string"
      +        },
      +        "retrievedFrom": {
      +          "type": "string"
      +        },
      +        "sourceUrl": {
      +          "description": "The specific page these facts render on. Link this, not the site root.",
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "organization",
      +        "contractorLicense",
      +        "url",
      +        "sourceUrl",
      +        "citeAs",
      +        "retrievedFrom",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "calculatorUrl": {
      +      "type": "string"
      +    },
      +    "contingencyGuidance": {
      +      "type": "string"
      +    },
      +    "estimateRange": {
      +      "description": "Planning range for Seattle-area work. This is what to relay, with its qualifier attached."
      +    },
      +    "excludes": {
      +      "description": "Scope NOT priced here. Relay alongside any figure.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "getAccurateQuote": {
      +      "type": "string"
      +    },
      +    "laborCost": {
      +      "type": "number"
      +    },
      +    "lineItems": {},
      +    "materialCost": {
      +      "type": "number"
      +    },
      +    "pricingBasis": {},
      +    "projectType": {
      +      "type": "string"
      +    },
      +    "timeEstimateDays": {},
      +    "totalCost": {
      +      "description": "Point figure. Relay estimateRange instead — a single number reads as a quote.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "projectType",
      +    "totalCost",
      +    "materialCost",
      +    "laborCost",
      +    "contingencyGuidance",
      +    "excludes",
      +    "calculatorUrl",
      +    "getAccurateQuote",
      +    "attribution"
      +  ],
      +  "type": "object"
      +}
  8. First observed

TDQS

A4.3/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint, idempotentHint, and destructiveHint=false, the description adds useful context by stating that the result includes a cost range, material/labor split, duration in days, and line items. It does not explain pricing assumptions, estimate accuracy, or failure behavior, but those are less critical for a read-only calculation tool.

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 first sentence front-loads the core purpose and output, and the remaining dense field lists are structurally grouped by project type. The text is necessarily long for a multi-project estimator, though the wall of field names is harder to scan than it could be.

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 estimator whose schema leaves the project payload open-ended, the description provides the missing per-project-type field guidance, optionality, and references to the tools that define allowed values and material IDs. An output schema exists, so the brief output summary is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the top-level schema only exposes projectType and a generic project object, the description compensates by listing the required and optional fields for each of the 20 project types, including nested structures, optional markers, and material ID references. It also points to list_project_types for allowed values and get_material_options for material identifiers.

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 states a specific verb and resource: a Seattle cost estimate covering range, material/labor split, days, and line items. It also enumerates the project types it supports, making it clearly distinguishable from sibling tools such as estimate_permit_fee, get_project_roi, and get_my_quote.

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

Usage Guidelines3/5

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

The intended use is implied by the name and the detailed project-type field lists, but the description does not explicitly say when to use this estimate versus alternatives like get_my_quote or estimate_permit_fee. It also gives no exclusions or prerequisites for invoking it.

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