Skip to main content
Glama

Kolmo Construction

Permit fee estimate

estimate_permit_fee
Read-onlyIdempotent

Estimate the permit fee for a residential project based on jurisdiction, project type, and project valuation. Returns numeric breakdown when the authoritative rule has fee inputs, or qualitative feeNotes (with source URL) when the city publishes fees only as PDFs/spreadsheets. Never fabricates dollar amounts.

Input Schema

NameRequiredDescriptionDefault
zoneNoThe lot's zoning code, e.g. "R-20". Needed where the fee table has a column per zone (hunts-point: R-20/R-20A or R-40).
areaSqftNoSquare feet of the work. Needed where the jurisdiction charges per square foot instead of on valuation (king-county-unincorporated: deck, addition, basement conversion, ADU), or off a table by floor area (hunts-point: kitchen, bathroom, basement, addition, ADU).
projectTypeYesCanonical project type
valuationUsdYesProject valuation in USD (materials + labor)
jurisdictionSlugYesJurisdiction slug, e.g. "seattle", "bellevue", "tacoma" (use list_permit_jurisdictions to discover)

Output Schema

NameRequiredDescriptionDefault
breakdownNo
sourceUrlNo
disclaimerNo
attributionYes
permitClassNo
projectTypeYes
jurisdictionYes
valuationUsdNo
lastVerifiedAtNoDate the permit rule row was last checked against its source. It is not a verification date for the fee schedule.
feeScheduleBasisNo"city-adopted-schedule" when the figure walks the city's own adopted fee schedule; "wa-baseline-table" when it walks the standard valuation table most Washington cities adopt by reference, which is NOT that city's published fee; "none" when no figure was computed (qualitativeFeeNotes and sourceUrl carry the fee).
qualitativeFeeNotesNo

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. Changed2 schema fields changed
    • addedInput schema / properties / areaSqft
      Added value: +{
      +  "description": "Square feet of the work. Needed where the jurisdiction charges per square foot instead of on valuation (king-county-unincorporated: deck, addition, basement conversion, ADU), or off a table by floor area (hunts-point: kitchen, bathroom, basement, addition, ADU).",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / zone
      Added value: +{
      +  "description": "The lot's zoning code, e.g. \"R-20\". Needed where the fee table has a column per zone (hunts-point: R-20/R-20A or R-40).",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / feeScheduleBasis / description
      Previous value: -"\"city-adopted-schedule\" when the figure walks the city's own adopted fee schedule; \"wa-baseline-table\" when it walks the standard valuation table most Washington cities adopt by reference, which is NOT that city's published fee."New value: +"\"city-adopted-schedule\" when the figure walks the city's own adopted fee schedule; \"wa-baseline-table\" when it walks the standard valuation table most Washington cities adopt by reference, which is NOT that city's published fee; \"none\" when no figure was computed (qualitativeFeeNotes and sourceUrl carry the fee)."
  4. Changed4 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • 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
  5. Changed2 schema fields changed
    • addedOutput schema / properties / feeScheduleBasis
      Added value: +{
      +  "description": "\"city-adopted-schedule\" when the figure walks the city's own adopted fee schedule; \"wa-baseline-table\" when it walks the standard valuation table most Washington cities adopt by reference, which is NOT that city's published fee.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / lastVerifiedAt / description
      Previous value: -"Verification date for the fee schedule. Relay it with the figure."New value: +"Date the permit rule row was last checked against its source. It is not a verification date for the fee schedule."
  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"
      +    },
      +    "breakdown": {},
      +    "disclaimer": {},
      +    "jurisdiction": {
      +      "type": "string"
      +    },
      +    "lastVerifiedAt": {
      +      "description": "Verification date for the fee schedule. Relay it with the figure."
      +    },
      +    "permitClass": {},
      +    "projectType": {
      +      "type": "string"
      +    },
      +    "qualitativeFeeNotes": {},
      +    "sourceUrl": {},
      +    "valuationUsd": {}
      +  },
      +  "required": [
      +    "jurisdiction",
      +    "projectType",
      +    "attribution"
      +  ],
      +  "type": "object"
      +}
  8. Added

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real behavioral value by disclosing the two possible return shapes (numeric breakdown vs. qualitative feeNotes with source URL) and the explicit 'never fabricates dollar amounts' guarantee. It stops short of saying when each mode triggers per jurisdiction, but the core behavior is disclosed.

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?

Two sentences, front-loaded with purpose, then the fallback/guarantee. No filler, and the most decision-relevant caveat (no fabricated amounts) is prominent.

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 annotations covering safety, the description is nearly complete; it covers the PDF/spreadsheet fallback. The one gap is that it never warns that zone or areaSqft may be needed for accuracy in some jurisdictions, which an agent reading only the description could miss before calling.

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 coverage is 100% and the schema descriptions already explain the conditional role of zone and areaSqft per jurisdiction. The description only re-lists the three required inputs, adding no syntax or conditionality beyond the schema, so the baseline 3 applies.

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 ('Estimate') and resource ('permit fee') with explicit scope (residential, driven by jurisdiction/project type/valuation). This is readily separable from siblings such as check_permit_requirements, get_permit_timeline, or get_permit_rule_details.

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?

Usage context is only implied: an agent can infer this is the tool for a dollar-figure estimate on a residential project, but there is no explicit when-to-use/when-not statement and no named alternative (e.g., check_permit_requirements for rule questions). The guidance is adequate but leaves routing to inference.

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