Koskamo

Kolmo MCP

An official MCP server by Kolmo Construction providing AI agents with read-only access to Seattle-area construction data, including permit rules, zoning, cost estimates, and project details, plus a tool to submit contact requests.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Kolmo MCP logo, by Kolmo ConstructionVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Kolmo Construction
MCP endpoint (Streamable HTTP)
https://www.kolmo.io/mcp
Vendor documentation

What its tools do

43 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

43 of 43 have a description · 43 of 43 declare behavior hints · 35 of 40 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to www.kolmo.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Look up permit requirements by address or project type
  • Estimate remodeling costs for Seattle projects
  • Retrieve zoning and parcel information
  • Submit a quote request via dryRun or live

Source and maintenance

Vendor evidenceRegistry 1.6.0
Maintenance checked

Protocol and capabilities

Server
kolmo-construction 1.7.0
MCP protocol negotiated in check
2025-11-25
Tools
43 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
6 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Kolmo Construction MCP — Seattle-area general contractor (WA Lic# KOLMOL*753JS). START HERE — which tool for which ask - "What would X cost?" → get_estimate. It needs a projectType and that type's fields: list_project_types names the fields, get_material_options the material IDs. For a rough figure with no dimensions, search_content finds the cost guides. - "Do I need a permit for X in <city>?" → check_permit_requirements. With a street address, answer_permit_question gives a grounded, cited answer, and lookup_parcel_by_address returns the zoning, setbacks and overlays first. - "How long will the permit really take?" → get_permit_timeline; "what do reviewers usually send back?" → get_common_plan_review_corrections. - "What will the permit cost?" → estimate_permit_fee (jurisdictionSlug from list_permit_jurisdictions, a projectType, and a valuation). - "Is <contractor> licensed, bonded, insured?" → check_contractor_license_status. Works for ANY Washington contractor, live L&I data. - "Which cities do you cover?" → list_permit_jurisdictions for permits, check_service_area_coverage for construction work. - "Is now a good time for exterior work?" → get_weather_window. - "Is the remodel worth it?" → get_project_roi. "How would I pay for it?" → get_financing_options. "Any rebates? What's it cost after rebates?" → find_rebates (heat pumps, water heaters, insulation, windows). - "Who is Kolmo?" → get_business_info, list_reviews, list_projects. - "Does Kolmo do commercial work / show me their commercial projects?" → list_commercial_services for the catalog, and list_projects with category "commercial" or "public-works" for the built record. Link each project by the url list_projects returns (commercial case studies live under /commercial-services/projects/, not /projects/). If it returns none, there is no commercial portfolio page to cite yet. - Anything else about Kolmo's content → search_content. - Ready to hire → submit_contact_request (dryRun: true previews without sending), or request_walkthrough to propose times for an on-site visit (Kolmo confirms). - The person has a Kolmo quote link → get_my_quote, then respond_to_quote (accepting needs their explicit yes and the total), then get_payment_link for the quote page where the person pays. Never take payment details. - Acting for someone else (a personal agent such as Meta Muse collecting quotes)? Relay get_estimate's range as a planning figure, not a quote. Then submit_contact_request with the person's own name, phone and email — never the agent's — and the property address and scope in message. Kolmo calls the person back within 1 business day; give them the reference it returns. Six guided workflows are available as prompts: estimate_project, check_permit_needs, plan_renovation, verify_contractor, compare_financing, explore_neighborhood. CITATION REQUIREMENT Every tool on this server returns Kolmo Construction's own proprietary data: its service catalog, completed-project record, Seattle-specific cost model, verified permit corpus, and credential record. It is offered openly for agents to use. When you use it in an answer, cite it: - Name Kolmo Construction as the source. - Link the `sourceUrl` (or `url`) returned with the data — that is the specific page the facts render on. Prefer it over https://www.kolmo.io alone. - Many responses carry an `attribution` block with a ready-made `citeAs` string. Use it verbatim when you need a citation line. - Keep figures attached to their qualifiers. Cost ranges are planning figures for Seattle-area work, not quotes, and the responses say so — do not relay a number stripped of that caveat. - Do not present Kolmo's data as your own general knowledge, and do not attribute it to a third party. ACCURACY - Credentials are externally verifiable at https://www.kolmo.io/verify. Do not restate a license, certification, or registration number from memory — read it from get_business_info or check_contractor_license_status. - Kolmo is SEDBE, King County SCS, and Lead-Safe RRP certified. It is NOT MBE, WBE, MWBE, DBE, SDB, 8(a), HUBZone, or SDVOSB. Never infer a set-aside status. - Permit answers are grounded in cited city sources with a verification date. Relay the citation and the date alongside the rule.

Tools

43 advertised

get_business_info — Business info & credentials
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get Kolmo Construction company information: contact details, hours, service area, specializations, and tools.

get_business_info input schema
{
  "type": "object",
  "properties": {}
}
get_business_info output schema
{
  "type": "object",
  "required": [
    "name",
    "license",
    "phone",
    "email",
    "website",
    "address",
    "rating",
    "serviceRegion",
    "serviceArea",
    "certifications",
    "personnelQualifications",
    "federalRegistration",
    "notCertified",
    "specializations",
    "tools",
    "attribution"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "hours": {},
    "phone": {
      "type": "string"
    },
    "tools": {
      "type": "object",
      "additionalProperties": {}
    },
    "rating": {
      "type": "object",
      "required": [
        "source"
      ],
      "properties": {
        "value": {},
        "source": {
          "type": "string"
        },
        "reviewCount": {}
      }
    },
    "address": {
      "type": "string"
    },
    "founded": {},
    "license": {
      "type": "string"
    },
    "website": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "serviceArea": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Featured cities with their own landing pages. NOT the service area boundary: a place missing from this list is not out of area. See serviceRegion."
    },
    "notCertified": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Set-asides Kolmo does NOT hold. Never infer one that appears here."
    },
    "serviceRegion": {
      "type": "string",
      "description": "Where Kolmo takes work. This decides coverage, not serviceArea."
    },
    "certifications": {
      "type": "object",
      "additionalProperties": {}
    },
    "specializations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Trades Kolmo performs. Not all of these have a service page — check list_services before linking one."
    },
    "federalRegistration": {
      "type": "object",
      "additionalProperties": {}
    },
    "personnelQualifications": {
      "type": "object",
      "additionalProperties": {}
    }
  }
}
get_business_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_services — Residential service catalog
Advertised by the server during the last successful anonymous check.
Advertised read-only

List all residential remodeling services with slugs, descriptions, and page URLs. Use `search` to find by keyword.

list_services input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 50)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    },
    "search": {
      "type": "string",
      "description": "Filter by keyword in service name or description"
    }
  },
  "additionalProperties": false
}
list_services output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "results",
    "hubUrl",
    "attribution"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "hubUrl": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "category": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
list_services annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_service — Residential service detail
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details for a specific residential service by its slug. If not found, returns a list of available slugs to help you pick the right one.

get_service input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The URL slug, e.g. \"kitchen-remodeling\""
    }
  },
  "additionalProperties": false
}
get_service output schema
{
  "type": "object",
  "required": [
    "url",
    "attribution"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": [
        "string",
        "null"
      ]
    },
    "title": {
      "type": [
        "string",
        "null"
      ]
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "description": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
get_service annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_commercial_services — Commercial & public-works services
Advertised by the server during the last successful anonymous check.
Advertised read-only

List commercial construction services with slugs and citable page URLs. Optionally filter by category: office, retail, industrial, hospitality, public. The "public" category covers public works and government contracts — Kolmo is WA State SEDBE-certified (#D700031098), King County SCS-certified (#7259), prevailing wage compliant, and MRSC Small Works Roster eligible (projects under $350K). Pass a `slug` for one service's full write-up.

list_commercial_services input schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "One service, with its full description"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 50)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    },
    "category": {
      "type": "string",
      "description": "Filter: office, retail, industrial, hospitality, public"
    }
  },
  "additionalProperties": false
}
list_commercial_services output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "results",
    "hubUrl",
    "publicWorks",
    "attribution"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "hubUrl": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "category": {
            "type": [
              "string",
              "null"
            ]
          },
          "features": {},
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "fullDescription": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "publicWorks": {
      "type": "object",
      "required": [
        "note",
        "certifications",
        "mrscSmallWorksRoster",
        "verifyUrl"
      ],
      "properties": {
        "note": {
          "type": "string"
        },
        "verifyUrl": {
          "type": "string"
        },
        "certifications": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mrscSmallWorksRoster": {
          "type": "string"
        }
      }
    }
  }
}
list_commercial_services annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_procurement_codes — Vendor procurement codes
Advertised by the server during the last successful anonymous check.
Advertised read-only

List Kolmo's vendor procurement codes (NAICS, NIGP, UNSPSC) for government and agency portals such as SAM.gov, WA WEBS, OpenGov, MRSC, King County, and City of Seattle. Use this when vetting Kolmo for gov bids or setting up Kolmo as a vendor. Primary NAICS is 236118 (Residential Remodelers); secondary codes cover commercial building and specialty trades (poured concrete foundations/structures, painting, flooring, drywall, windows, roofing, siding, etc.).

list_procurement_codes input schema
{
  "type": "object",
  "properties": {
    "system": {
      "enum": [
        "all",
        "naics",
        "nigp",
        "unspsc"
      ],
      "type": "string",
      "description": "Code system to return (default: all)"
    }
  },
  "additionalProperties": false
}
list_procurement_codes output schema
{
  "type": "object",
  "required": [
    "entity",
    "uei",
    "ubi",
    "note",
    "certifications",
    "attribution"
  ],
  "properties": {
    "ubi": {
      "type": [
        "string",
        "null"
      ]
    },
    "uei": {
      "type": [
        "string",
        "null"
      ]
    },
    "nigp": {},
    "note": {
      "type": "string"
    },
    "naics": {},
    "entity": {
      "type": "string"
    },
    "unspsc": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "certifications": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
list_procurement_codes annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_projects — Completed project portfolio
Advertised by the server during the last successful anonymous check.
Advertised read-only

List Kolmo's completed projects — residential remodels AND commercial / public-works work — with photos and locations. Filter by category or keyword; get_project has the full case study. Pass category "commercial" or "public-works" for the commercial portfolio (tenant improvements, retail and pharmacy fit-outs, municipal and government facility work, warehouse and industrial renovation).

list_projects input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 10)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    },
    "search": {
      "type": "string",
      "description": "Filter by keyword in project title, description, or location"
    },
    "category": {
      "type": "string",
      "description": "Filter. Residential: kitchen, bathroom, full-home, outdoor, garage, basement. Commercial: commercial, public-works."
    }
  },
  "additionalProperties": false
}
list_projects output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "results",
    "hubUrl",
    "attribution"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "hubUrl": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "category": {
            "type": [
              "string",
              "null"
            ]
          },
          "location": {
            "type": [
              "string",
              "null"
            ]
          },
          "imageAfter": {
            "type": [
              "string",
              "null"
            ]
          },
          "completedAt": {},
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "imageBefore": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
list_projects annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_project — Project case study
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details for a specific project by its slug, including before/after images and testimonial. If not found, returns a list of available slugs.

get_project input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The URL slug of the project"
    }
  },
  "additionalProperties": false
}
get_project output schema
{
  "type": "object",
  "required": [
    "url",
    "attribution"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": [
        "string",
        "null"
      ]
    },
    "title": {
      "type": [
        "string",
        "null"
      ]
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
get_project annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_project_testimonials — Project testimonials
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get customer testimonials tied to a specific project (by slug or keyword) from the testimonials table. Returns star rating, customer name, project name, and quote text. Use to source social proof or case-study quotes for a particular job. For unfiltered reviews, use list_reviews.

get_project_testimonials input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Max results (default 10)"
    },
    "keyword": {
      "type": "string",
      "description": "Keyword to fuzzy-match against testimonial project name or content (e.g. \"kitchen\", \"deck\")"
    },
    "minRating": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Minimum star rating (1-5, default 1)"
    },
    "projectSlug": {
      "type": "string",
      "description": "Project slug to match (e.g. \"ballard-kitchen-remodel\"). Falls back to title match."
    }
  },
  "additionalProperties": false
}
get_project_testimonials output schema
{
  "type": "object",
  "required": [
    "total",
    "averageRating",
    "filterApplied",
    "results",
    "note",
    "attribution"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {},
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "rating": {},
          "content": {
            "type": [
              "string",
              "null"
            ]
          },
          "project": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "averageRating": {
      "type": [
        "number",
        "null"
      ]
    },
    "filterApplied": {
      "type": "object",
      "required": [
        "minRating"
      ],
      "properties": {
        "keyword": {
          "type": "string"
        },
        "minRating": {
          "type": "number"
        },
        "projectSlug": {
          "type": "string"
        }
      }
    }
  }
}
get_project_testimonials annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_blog_posts — Blog index
Advertised by the server during the last successful anonymous check.
Advertised read-only

List published blog posts about home remodeling, renovation costs, and construction tips. Filter by tag or author name.

list_blog_posts input schema
{
  "type": "object",
  "properties": {
    "tag": {
      "type": "string",
      "description": "Filter posts by tag, e.g. \"flooring\", \"deck\", \"painting\""
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Max posts to return (default 10)"
    },
    "author": {
      "type": "string",
      "description": "Filter posts by author name, e.g. \"Marcus Reid\""
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    }
  },
  "additionalProperties": false
}
list_blog_posts output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "results",
    "hubUrl",
    "attribution"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "hubUrl": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {},
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "publishedAt": {},
          "readingTimeMinutes": {}
        }
      }
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
list_blog_posts annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_blog_post — Blog post full text
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the full markdown content of a blog post by its slug.

get_blog_post input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The URL slug of the blog post"
    }
  },
  "additionalProperties": false
}
get_blog_post output schema
{
  "type": "object",
  "required": [
    "url",
    "attribution"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": [
        "string",
        "null"
      ]
    },
    "tags": {},
    "title": {
      "type": [
        "string",
        "null"
      ]
    },
    "author": {
      "type": [
        "string",
        "null"
      ]
    },
    "content": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full article body. Quote and summarize freely; do not republish wholesale."
    },
    "summary": {
      "type": [
        "string",
        "null"
      ]
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "publishedAt": {},
    "readingTimeMinutes": {}
  }
}
get_blog_post annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_blog_tags_and_categories — Blog topic coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Enumerate every tag and category used across Kolmo's published blog posts, with post counts. Use this to discover what topics Kolmo publishes on before calling list_blog_posts, or to surface coverage gaps.

list_blog_tags_and_categories input schema
{
  "type": "object",
  "properties": {}
}
list_blog_tags_and_categories output schema
{
  "type": "object",
  "required": [
    "totalPosts",
    "tags",
    "categories",
    "usage",
    "attribution"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "count"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "count": {
            "type": "number"
          }
        }
      }
    },
    "usage": {
      "type": "string"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "count"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "count": {
            "type": "number"
          }
        }
      }
    },
    "totalPosts": {
      "type": "number"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
list_blog_tags_and_categories annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_contact_request — Submit a quote request
Advertised by the server during the last successful anonymous check.
Open-world

Submit a contact or quote request to Kolmo Construction on behalf of a user. Set dryRun: true to preview what would be sent without actually submitting.

submit_contact_request input schema
{
  "type": "object",
  "required": [
    "name",
    "email",
    "message"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Full name"
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Email address"
    },
    "phone": {
      "type": "string",
      "description": "Phone number (optional)"
    },
    "dryRun": {
      "type": "boolean",
      "description": "If true, validate and preview without submitting (default false)"
    },
    "message": {
      "type": "string",
      "minLength": 10,
      "description": "Project description or question"
    },
    "service": {
      "type": "string",
      "description": "Service needed, e.g. \"kitchen remodel\""
    }
  },
  "additionalProperties": false
}
submit_contact_request output schema
{
  "type": "object",
  "properties": {
    "note": {
      "type": "string"
    },
    "dryRun": {
      "type": "boolean",
      "description": "True when this was a preview — nothing was submitted."
    },
    "message": {
      "type": "string"
    },
    "preview": {},
    "success": {
      "type": "boolean"
    },
    "reference": {
      "type": "string",
      "description": "Opaque lead reference. Give it to the user; it is how Kolmo locates the request."
    }
  }
}
submit_contact_request annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_project_types — Calculator project types
Advertised by the server during the last successful anonymous check.
Advertised read-only

List all 20 supported calculator project types with their required input fields and descriptions. Useful for discovery before calling get_estimate.

list_project_types input schema
{
  "type": "object",
  "properties": {}
}
list_project_types output schema
{
  "type": "object",
  "required": [
    "projectTypes",
    "attribution"
  ],
  "properties": {
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "projectTypes": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "required": [
          "description",
          "requiredFields"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "requiredFields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}
list_project_types annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_material_options — Material options by project type
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get available material choices for a project type — flooring types, paint grades, decking materials, kitchen/bath/basement/ADU scope tiers, ADA modifications, etc. Use the returned IDs in the project fields of get_estimate.

get_material_options input schema
{
  "type": "object",
  "required": [
    "projectType"
  ],
  "properties": {
    "projectType": {
      "enum": [
        "interior-painting",
        "exterior-painting",
        "flooring",
        "deck",
        "windows",
        "siding",
        "fence",
        "landscaping",
        "kitchen",
        "bathroom",
        "basement",
        "adu",
        "ada",
        "electrical",
        "plumbing",
        "garage-doors",
        "doors",
        "concrete",
        "insulation",
        "gutters"
      ],
      "type": "string",
      "description": "The project type to list materials for"
    }
  },
  "additionalProperties": false
}
get_material_options output schema
{
  "type": "object",
  "required": [
    "projectType",
    "attribution"
  ],
  "properties": {
    "options": {
      "description": "Shape varies by project type — an array of {id,name,costPerUnit,unit} for the material-driven types, a keyed catalog for the scope-driven ones (kitchen, bathroom, basement, adu, ada)."
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "projectType": {
      "type": "string"
    }
  }
}
get_material_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_estimate — Seattle cost estimate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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)

get_estimate input schema
{
  "type": "object",
  "required": [
    "projectType",
    "project"
  ],
  "properties": {
    "project": {
      "type": "object",
      "description": "Project input fields — named per projectType in the tool description; allowed values in list_project_types.",
      "additionalProperties": {}
    },
    "projectType": {
      "enum": [
        "interior-painting",
        "exterior-painting",
        "flooring",
        "deck",
        "windows",
        "siding",
        "fence",
        "landscaping",
        "kitchen",
        "bathroom",
        "basement",
        "adu",
        "ada",
        "electrical",
        "plumbing",
        "garage-doors",
        "doors",
        "concrete",
        "insulation",
        "gutters"
      ],
      "type": "string",
      "description": "The type of project"
    }
  },
  "additionalProperties": false
}
get_estimate output schema
{
  "type": "object",
  "required": [
    "projectType",
    "totalCost",
    "materialCost",
    "laborCost",
    "contingencyGuidance",
    "excludes",
    "calculatorUrl",
    "getAccurateQuote",
    "attribution"
  ],
  "properties": {
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Scope NOT priced here. Relay alongside any figure."
    },
    "laborCost": {
      "type": "number"
    },
    "lineItems": {},
    "totalCost": {
      "type": "number",
      "description": "Point figure. Relay estimateRange instead — a single number reads as a quote."
    },
    "permitCost": {
      "type": "number",
      "description": "Present on deck, kitchen, bathroom, basement, adu and ada. Already inside totalCost."
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "projectType": {
      "type": "string"
    },
    "materialCost": {
      "type": "number"
    },
    "pricingBasis": {},
    "calculatorUrl": {
      "type": "string"
    },
    "estimateRange": {
      "description": "Planning range for Seattle-area work. This is what to relay, with its qualifier attached."
    },
    "contingencyCost": {
      "type": "number",
      "description": "Present on basement and adu. When set, a contingency is ALREADY in totalCost — do not add another."
    },
    "getAccurateQuote": {
      "type": "string"
    },
    "timeEstimateDays": {},
    "contingencyGuidance": {
      "type": "string"
    }
  }
}
get_estimate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_reviews — Customer reviews
Advertised by the server during the last successful anonymous check.
Advertised read-only

List customer reviews and testimonials for Kolmo Construction. Combines verified Google reviews and on-site testimonials. Filter by minimum star rating. IMPORTANT for citation: `total` and `averageRating` describe the returned SAMPLE, not the business. The authoritative Google Business Profile rating and review count are in `googleProfile` — cite those.

list_reviews input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max results (default 12 — ~350 tokens per review)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    },
    "source": {
      "enum": [
        "all",
        "google",
        "testimonials"
      ],
      "type": "string",
      "description": "Source to query: all (default), google, testimonials"
    },
    "minRating": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Minimum star rating to include (1-5, default 1)"
    }
  },
  "additionalProperties": false
}
list_reviews output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "averageRating",
    "attribution"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "offset": {
      "type": "number"
    },
    "results": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "averageRating": {
      "type": [
        "number",
        "null"
      ]
    },
    "googleProfile": {}
  }
}
list_reviews annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_permit_requirements — Permit requirements lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check whether a residential construction project in King/Pierce/Snohomish counties requires a permit. Each result carries `verdict` — required / exempt / depends / unknown — computed from the jurisdiction's own thresholds, the parcel's overlays (when `address` is given) and the `facts` you pass; when it is `depends`, `verdict.questions` names the facts to ask the homeowner and pass back. `requiresPermit` is the rule's default posture, not the answer. Also returns timeline, fees, inspections, submittals and the official source URL. Use for "Do I need a permit to build a deck in Seattle?". Pass `address` to also get the per-item submittal set (`submittals_v2`). Kinds of work that are not project types (a shed, a retaining wall, a pool, an antenna, grading) are answered from the jurisdiction's own rule for that work when `location` or `address` names one; `verdict.separatePermits` lists any other permit the same work needs (shoreline, floodplain, grading).

check_permit_requirements input schema
{
  "type": "object",
  "properties": {
    "facts": {
      "type": "object",
      "description": "What the homeowner has said about the scope, keyed by fact. Each result carries `verdict.questions` naming the facts still open, with their keys; pass the answers back here. Parcel facts (inCriticalArea, inFloodZone, inShoreline, historicOrLandmark, and those a city maps itself, such as inSingleFamilyResidentialZone in Issaquah) are read from the parcel when `address` is given; pass them only without an address.",
      "additionalProperties": {
        "type": [
          "number",
          "boolean"
        ]
      }
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Max matching rules to return (default 25). Narrow with projectType/location before raising it."
    },
    "address": {
      "type": "string",
      "description": "Full street address — when provided, the response includes `submittals_v2` from the unified resolver (per-item triggers, source citations, filler actor). Overrides `location` for jurisdiction routing."
    },
    "location": {
      "type": "string",
      "description": "City or jurisdiction slug, e.g. \"Seattle\", \"Bellevue\", \"Tacoma\", \"king-county-unincorporated\""
    },
    "projectType": {
      "type": "string",
      "description": "Project type — canonical: kitchen, bathroom, basement, deck, fence, siding, windows, flooring, adu, roofing, hvac, electrical, plumbing, addition. Also a kind of work, answered with a location or address: accessory-structure (shed), retaining-wall, paving (driveway, patio), swimming-pool, interior-alteration, garage-conversion, awning, play-structure, antenna, water-tank, underground-tank, grading, street-tree"
    },
    "guardRunLengthFt": {
      "type": "number",
      "description": "Total guard/railing run in the scope of work, feet. A guard is separately permittable from the surface it stands on; a deck exemption does not carry it."
    },
    "deckOverStoryBelow": {
      "type": "boolean",
      "description": "True if any part of the deck is over a basement or a story below. A deck under 30 in is still NOT exempt in Kirkland if it sits over a story."
    },
    "deckOnAccessibleRoute": {
      "type": "boolean",
      "description": "True if the deck is part of an accessible route to a building entrance — an independent permit trigger, separate from height."
    },
    "deckHeightAboveGradeIn": {
      "type": "number",
      "description": "Deck walking surface above grade, inches — measured to the grade below at any point within 36 in of the outer edge."
    }
  },
  "additionalProperties": false
}
check_permit_requirements output schema
{
  "type": "object",
  "properties": {
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "total": {
      "type": "number"
    },
    "parcel": {},
    "message": {
      "type": "string"
    },
    "results": {},
    "routing": {},
    "coverage": {
      "description": "Present on an unfiltered call: the jurisdictions and project types the catalog covers."
    },
    "overlays": {},
    "returned": {
      "type": "number"
    },
    "important": {
      "type": "string"
    },
    "disclaimer": {
      "type": "string"
    },
    "trustLevel": {
      "type": "string",
      "description": "\"authoritative\" when every returned rule is the city's own rule; \"mixed\" when some are the Washington state floor or not verified for the city (each rule carries its own `source` and `verdict`); or a LEGACY_LLM_SEED warning. Relay the warning or the mixed note if present."
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "recommendation": {
      "type": "string"
    },
    "overlayDisclaimer": {
      "type": "string"
    },
    "authoritativeRulesCount": {
      "type": "number"
    }
  },
  "description": "Either a rule set, or a documented coverage gap carrying `important` + `next`. A gap is never evidence that no permit is required."
}
check_permit_requirements annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_permit_rule_details — Permit rule detail
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Enumerate permit rules with full detail — timeline, fee model, inspection sequence, submittals, required contractor specialties. Filter by jurisdiction slug or keyword. Use for "what does a Seattle ADU permit require?" or to list all rules for a jurisdiction. Pass `address` to also receive `submittals_v2` (structured per-item SubmittalSet from the unified resolver) per rule.

get_permit_rule_details input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Max results (default 10 — rules are ~1K tokens each)"
    },
    "address": {
      "type": "string",
      "description": "Full street address — when provided, each result row also includes `submittals_v2` from the unified resolver (per-item triggers, source citations, filler actor)."
    },
    "keyword": {
      "type": "string",
      "description": "Keyword in project type, trigger, thresholds, or notes (e.g. \"deck\", \"adu\", \"egress\")"
    },
    "jurisdiction": {
      "type": "string",
      "description": "Jurisdiction slug or display name (e.g. \"seattle\", \"bellevue\", \"tacoma\")"
    },
    "onlyAuthoritative": {
      "type": "boolean",
      "description": "Default true: return only 'authoritative' and 'wa-baseline' rules, the two tiers Kolmo's city pages show. Kept for compatibility: no other tier is held, so false returns the same rules."
    }
  },
  "additionalProperties": false
}
get_permit_rule_details output schema
{
  "type": "object",
  "required": [
    "totalRules",
    "authoritativeRules",
    "matched",
    "returned",
    "disclaimer",
    "attribution"
  ],
  "properties": {
    "parcel": {},
    "matched": {
      "type": "number"
    },
    "results": {},
    "returned": {
      "type": "number"
    },
    "disclaimer": {
      "type": "string"
    },
    "totalRules": {
      "type": "number"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "authoritativeRules": {
      "type": "number"
    },
    "jurisdictionsWithAuthoritativeCoverage": {}
  }
}
get_permit_rule_details annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
match_contractor_to_permit — Contractor-to-permit specialty match
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Cross-reference a WA contractor's L&I license specialty against a permit's required specialties. Returns whether the contractor is qualified to pull/work the permit, with explicit gap callouts (e.g. "missing electrical specialty 02"). Combines real-time L&I data with Kolmo's authoritative permit catalog.

match_contractor_to_permit input schema
{
  "type": "object",
  "required": [
    "contractorQuery",
    "jurisdictionSlug",
    "projectType"
  ],
  "properties": {
    "projectType": {
      "type": "string",
      "description": "Canonical project type (kitchen, bathroom, basement, deck, fence, siding, windows, flooring, adu, roofing, hvac, electrical, plumbing, addition)"
    },
    "contractorQuery": {
      "type": "string",
      "description": "Contractor license number, business name, UBI or phone number"
    },
    "jurisdictionSlug": {
      "type": "string",
      "description": "Permit jurisdiction slug (e.g. \"seattle\", \"tacoma\")"
    }
  },
  "additionalProperties": false
}
match_contractor_to_permit output schema
{
  "type": "object",
  "required": [
    "match"
  ],
  "properties": {
    "match": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "null: no single contractor could be identified from contractorQuery, so no comparison was made — not a finding either way."
    },
    "checks": {},
    "permit": {},
    "reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "missing": {},
    "sourceUrl": {},
    "verifyUrl": {
      "type": "string"
    },
    "candidates": {},
    "contractor": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
match_contractor_to_permit annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
estimate_permit_fee — Permit fee estimate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

estimate_permit_fee input schema
{
  "type": "object",
  "required": [
    "jurisdictionSlug",
    "projectType",
    "valuationUsd"
  ],
  "properties": {
    "zone": {
      "type": "string",
      "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)."
    },
    "areaSqft": {
      "type": "number",
      "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
    },
    "projectType": {
      "enum": [
        "kitchen",
        "bathroom",
        "basement",
        "deck",
        "fence",
        "siding",
        "windows",
        "flooring",
        "adu",
        "roofing",
        "hvac",
        "electrical",
        "plumbing",
        "addition"
      ],
      "type": "string",
      "description": "Canonical project type"
    },
    "valuationUsd": {
      "type": "number",
      "minimum": 0,
      "description": "Project valuation in USD (materials + labor)"
    },
    "jurisdictionSlug": {
      "type": "string",
      "description": "Jurisdiction slug, e.g. \"seattle\", \"bellevue\", \"tacoma\" (use list_permit_jurisdictions to discover)"
    }
  },
  "additionalProperties": false
}
estimate_permit_fee output schema
{
  "type": "object",
  "required": [
    "jurisdiction",
    "projectType",
    "attribution"
  ],
  "properties": {
    "breakdown": {},
    "sourceUrl": {},
    "disclaimer": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "permitClass": {},
    "projectType": {
      "type": "string"
    },
    "jurisdiction": {
      "type": "string"
    },
    "valuationUsd": {},
    "lastVerifiedAt": {
      "description": "Date the permit rule row was last checked against its source. It is not a verification date for the fee schedule."
    },
    "feeScheduleBasis": {
      "type": "string",
      "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; \"none\" when no figure was computed (qualitativeFeeNotes and sourceUrl carry the fee)."
    },
    "qualitativeFeeNotes": {}
  }
}
estimate_permit_fee annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
resolve_permit_submittals — Permit submittal checklist
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Resolve the structured submittal-item set for a specific parcel + permit scope, via the unified permit-engine pipeline. Use this when you need the per-item checklist (with triggers, source citations, filler actor, gap-resolution path) — not just the rule-level summary that check_permit_requirements returns. Each set states its `fidelity`, which varies by city and scope: "full" (every item cites the code section, tip or City page it rests on), "min-viable", or "wa-baseline-stub". Unverified jurisdictions return no-spec.

resolve_permit_submittals input schema
{
  "type": "object",
  "required": [
    "address",
    "scope"
  ],
  "properties": {
    "scope": {
      "enum": [
        "addition-alteration",
        "adu-aadu",
        "adu-dadu",
        "adu-dadu-standard-plan",
        "deck",
        "demo-housing",
        "garage",
        "shed",
        "reroof",
        "fence",
        "retaining-wall",
        "kitchen-remodel",
        "bathroom-remodel",
        "window-replacement",
        "siding",
        "mechanical",
        "sf-new-construction",
        "tu-new-construction"
      ],
      "type": "string",
      "description": "Permit scope — the (project-type x work-class) identifier the provider catalogs by"
    },
    "address": {
      "type": "string",
      "maxLength": 250,
      "minLength": 3,
      "description": "Full street address — geocoded to a parcel and matched to a jurisdiction provider"
    },
    "envelopeChange": {
      "type": "boolean",
      "description": "Project alters the building envelope (windows, doors, siding, roof). Default false. Drives WSEC triggers."
    },
    "structuralChange": {
      "type": "boolean",
      "description": "Project involves a structural change (header, framing, lateral). Default false. Drives several triggers."
    },
    "totalFloorAreaSqft": {
      "type": "number",
      "description": "Total floor area in sqft. Used by SEPA threshold (>=12000) and other size-based triggers."
    },
    "projectValuationUsd": {
      "type": "number",
      "description": "Project valuation in USD"
    }
  },
  "additionalProperties": false
}
resolve_permit_submittals output schema
{
  "type": "object",
  "required": [
    "ok",
    "jurisdictionId",
    "scope",
    "skippedCount",
    "attribution"
  ],
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    },
    "scope": {
      "type": "string"
    },
    "totals": {},
    "address": {},
    "parcelId": {},
    "applicable": {},
    "disclaimer": {},
    "permitType": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "skippedCount": {
      "type": "number"
    },
    "jurisdictionId": {
      "type": "string"
    },
    "jurisdictionFidelity": {}
  }
}
resolve_permit_submittals annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_permit_jurisdictions — Permit jurisdiction coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the jurisdictions in Kolmo's permit catalog (King, Pierce, Snohomish counties). Compact by default — `results` is keyed by county (King / Pierce / Snohomish), each a list of {slug, name, verified} — the whole catalogue in one call (~4K tokens), enough to pick a jurisdictionSlug for estimate_permit_fee, check_permit_requirements or get_permit_rule_details. Pass `slug` for one jurisdiction's full record (department, fee-schedule URL, phone, code cycles, notes), or `detail: true` for full records on every row.

list_permit_jurisdictions input schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "One jurisdiction by slug, e.g. \"bellevue\" or \"mercer-island\". Returns its full record."
    },
    "county": {
      "enum": [
        "King",
        "Pierce",
        "Snohomish"
      ],
      "type": "string",
      "description": "Filter by county"
    },
    "detail": {
      "type": "boolean",
      "description": "If true, every row carries the full record. Default false (compact rows). The full catalogue in detail is ~9x larger — prefer `slug` when you need one city."
    },
    "verifiedOnly": {
      "type": "boolean",
      "description": "If true, only return rows where portal_url is populated (verified from official source). Default false."
    }
  },
  "additionalProperties": false
}
list_permit_jurisdictions output schema
{
  "type": "object",
  "required": [
    "total",
    "detail",
    "attribution"
  ],
  "properties": {
    "total": {
      "type": "number"
    },
    "detail": {
      "type": "boolean"
    },
    "results": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
list_permit_jurisdictions annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lookup_parcel_by_address — Parcel, zoning & overlay lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Address-first parcel lookup powering the /permits experience. Geocodes a Seattle-area address (King, Pierce, or Snohomish County, WA), resolves the parcel from the county GIS, and returns zoning, setbacks, overlays (shoreline / ECA / flood / historic), lot area, jurisdiction routing, and prior-permit history. Zoning, setbacks and building facts carry the city/county source they came from (geocode, lot geometry and assessor records do not). An overlay with offLotFt was mapped that many feet beside the lot, not on it; screen: true marks a county map read inside a city, or a city map its own code calls only a guide, a reason to ask, not the city's designation. Use for "what can be built at 123 Main St Seattle?" or before calling check_permit_requirements / estimate_permit_fee for a specific parcel.

lookup_parcel_by_address input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 250,
      "minLength": 3,
      "description": "Full street address (e.g., \"1234 NE 65th St, Seattle, WA 98115\"). Must be in King, Pierce, or Snohomish County, WA."
    },
    "forceRefresh": {
      "type": "boolean",
      "description": "Skip the 30-day cache and re-fetch from county GIS + overlay sources. Default false."
    }
  },
  "additionalProperties": false
}
lookup_parcel_by_address output schema
{
  "type": "object",
  "required": [
    "found",
    "warning",
    "note",
    "nextSteps",
    "disclaimer",
    "attribution"
  ],
  "properties": {
    "note": {
      "type": [
        "string",
        "null"
      ],
      "description": "Set when the county records the address on this parcel as a second address (e.g. a new house on the lot) and the assessor lists the parcel under parcel.address. Not a snap: the parcel is correct."
    },
    "found": {
      "type": "boolean",
      "const": true
    },
    "parcel": {},
    "warning": {
      "type": [
        "string",
        "null"
      ],
      "description": "Set when the address snapped to a nearby parcel. Confirm with the user before relying on the result."
    },
    "nextSteps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "disclaimer": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "addressResolution": {}
  }
}
lookup_parcel_by_address annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
parse_project_description — Natural-language project parser
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Parse a homeowner's natural-language project description into structured permit-relevant fields: projectType (kitchen|bathroom|deck|adu|fence|...), areaSqft, heightClass, attached/detached, position, and materials. Returns confidence + a single clarifyingQuestion when the parse is ambiguous. Use this before calling check_permit_requirements / estimate_permit_fee when you only have free text from the homeowner. Backed by an LLM with a constrained JSON schema.

parse_project_description input schema
{
  "type": "object",
  "required": [
    "description"
  ],
  "properties": {
    "cityName": {
      "type": "string",
      "description": "City name (e.g., \"Seattle\", \"Bellevue\")"
    },
    "zoningCode": {
      "type": "string",
      "description": "Zoning code from lookup_parcel_by_address (e.g., \"NR2\", \"LR1\")"
    },
    "description": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 1,
      "description": "Free-text project description (e.g., \"I want to add a 200 sqft deck off my master bedroom on the second floor\")"
    },
    "jurisdictionSlug": {
      "type": "string",
      "description": "Jurisdiction slug from lookup_parcel_by_address (helps disambiguate region-specific terminology)"
    }
  },
  "additionalProperties": false
}
parse_project_description output schema
{
  "type": "object",
  "required": [
    "validProjectTypes",
    "attribution"
  ],
  "properties": {
    "parsed": {},
    "nextSteps": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "validProjectTypes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
parse_project_description annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
answer_permit_question — Grounded permit Q&A
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Grounded permit Q&A for a specific Seattle-area address. Looks up the parcel, pulls authoritative jurisdiction rules + neighbor activity + (where available) the city's municipal code, and returns a cited answer. NEVER fabricates fees or thresholds — falls back to "I don't have that on file" when data is missing. Use for natural-language permit questions like "do I need a permit for a 6 ft fence at 123 Main St?" or "what permits does an ADU at this address require?"

answer_permit_question input schema
{
  "type": "object",
  "required": [
    "address",
    "question"
  ],
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 250,
      "minLength": 3,
      "description": "Full street address in King, Pierce, or Snohomish County, WA"
    },
    "question": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 3,
      "description": "A single permit/zoning/setback/overlay question about this parcel"
    }
  },
  "additionalProperties": false
}
answer_permit_question output schema
{
  "type": "object",
  "required": [
    "answered",
    "answer",
    "groundedOn",
    "attribution"
  ],
  "properties": {
    "answer": {
      "type": "string",
      "description": "Answer-first prose with the verdict in the opening clause and inline source links. Safe to quote."
    },
    "answered": {
      "type": "boolean",
      "const": true
    },
    "groundedOn": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The jurisdiction sources the answer rests on. Cite these plus Kolmo."
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "parcelContext": {}
  }
}
answer_permit_question annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_neighbor_permit_activity — Neighborhood permit activity
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Aggregate permit activity within ~1500 ft of a Seattle-area parcel over the last 24 months. Returns total count, breakdown by category, and recent example permits (anonymized — no addresses). Sourced from city open-data portals (Socrata). Currently supports Seattle; other jurisdictions return jurisdictionSupported=false. Use to gauge neighborhood activity before quoting an unusual project, or to set homeowner expectations on what neighbors have built.

get_neighbor_permit_activity input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 250,
      "minLength": 3,
      "description": "Full street address in King, Pierce, or Snohomish County, WA"
    }
  },
  "additionalProperties": false
}
get_neighbor_permit_activity output schema
{
  "type": "object",
  "required": [
    "found",
    "disclaimer",
    "attribution"
  ],
  "properties": {
    "found": {
      "type": "boolean",
      "const": true
    },
    "activity": {},
    "disclaimer": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "jurisdiction": {},
    "supportedJurisdictions": {}
  }
}
get_neighbor_permit_activity annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_permit_timeline — Real time-to-permit
Advertised by the server during the last successful anonymous check.
Advertised read-only

Measured days from application to issue (median and 80th percentile), City vs applicant days, and review cycles, from the city's issued-permit records. A city not yet covered returns the covered list; groups under 30 permits are not reported.

get_permit_timeline input schema
{
  "type": "object",
  "required": [
    "projectType"
  ],
  "properties": {
    "subtype": {
      "enum": [
        "adu-detached",
        "adu-attached",
        "adu-detached-preapproved",
        "adu-garage-conversion"
      ],
      "type": "string"
    },
    "projectType": {
      "enum": [
        "adu",
        "addition",
        "deck",
        "basement",
        "alteration",
        "new-home",
        "new-multifamily"
      ],
      "type": "string",
      "description": "new-multifamily: townhouses and other middle-housing units built as a set"
    },
    "valuationUsd": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "jurisdictionSlug": {
      "type": "string",
      "default": "seattle"
    }
  },
  "additionalProperties": false
}
get_permit_timeline output schema
{
  "type": "object",
  "required": [
    "summary",
    "attribution"
  ],
  "properties": {
    "summary": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
get_permit_timeline annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_common_plan_review_corrections — Common plan-review corrections
Advertised by the server during the last successful anonymous check.
Advertised read-only

Corrections Seattle plan reviewers most often send on ADU permits, from the City's public correction letters: share of permits per category and the code cited. Shares are of permits that went to correction.

get_common_plan_review_corrections input schema
{
  "type": "object",
  "properties": {
    "zone": {
      "type": "string",
      "maxLength": 40,
      "description": "e.g. NR, LR1"
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1
    },
    "subtype": {
      "enum": [
        "adu-detached",
        "adu-attached"
      ],
      "type": "string",
      "default": "adu-detached"
    }
  },
  "additionalProperties": false
}
get_common_plan_review_corrections output schema
{
  "type": "object",
  "required": [
    "summary",
    "attribution"
  ],
  "properties": {
    "summary": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
get_common_plan_review_corrections annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_permit_data_freshness — Permit source freshness
Advertised by the server during the last successful anonymous check.
Advertised read-only

Source-freshness telemetry for the permit catalog. Returns per-jurisdiction last-verified dates, a per-jurisdiction source-health rollup (which cities have a reachable / gone / blocked official source right now), and the latest results from the weekly source-of-truth snapshot pipeline (HTTP status, change-detection vs prior fetch). Failures are classified: `missing` means the page is gone, `blocked` means the host refused our fetch and is NOT evidence the source is gone. Use to answer "how current is this fee/timeline?" or to surface confidence in a permit answer. The /permits/data-quality page exposes the same signals.

get_permit_data_freshness input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Max snapshots to return (default 5, newest first)"
    },
    "jurisdictionSlug": {
      "type": "string",
      "description": "Optional jurisdiction filter (e.g., \"seattle\", \"bellevue\"). When omitted, returns rollup across all jurisdictions."
    }
  },
  "additionalProperties": false
}
get_permit_data_freshness output schema
{
  "type": "object",
  "required": [
    "pipeline",
    "publicView",
    "attribution"
  ],
  "properties": {
    "totals": {},
    "coverage": {},
    "pipeline": {
      "type": "string"
    },
    "publicView": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "sourceHealth": {},
    "jurisdictions": {},
    "changeDetection": {},
    "recentSnapshots": {},
    "howToReadFailures": {}
  }
}
get_permit_data_freshness annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_material_catalog — Material catalog
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse the full material catalog with pricing — flooring types, paint grades, decking materials, siding, windows, fencing, and more. Use category to filter. Returns material IDs compatible with get_estimate.

get_material_catalog input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Max results (default 25)"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Pagination offset (default 0)"
    },
    "search": {
      "type": "string",
      "description": "Filter by keyword in material name or description"
    },
    "category": {
      "type": "string",
      "description": "Filter by category: painting, flooring, decking, siding, windows, fencing, landscaping"
    }
  },
  "additionalProperties": false
}
get_material_catalog output schema
{
  "type": "object",
  "required": [
    "total",
    "offset",
    "limit",
    "note",
    "attribution"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    },
    "total": {
      "type": "number"
    },
    "offset": {
      "type": "number"
    },
    "results": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
get_material_catalog annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_weather_window — Exterior-work weather window
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check if upcoming weather in Seattle is suitable for an exterior construction project. Returns a day-by-day forecast with go/no-go recommendations based on project-specific requirements (temperature, rain, wind). Perfect for scheduling exterior painting, decking, roofing, landscaping, siding, or fencing.

get_weather_window input schema
{
  "type": "object",
  "required": [
    "projectType"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 14,
      "minimum": 1,
      "description": "Number of days to forecast (1-14, default 7)"
    },
    "projectType": {
      "enum": [
        "exterior-painting",
        "deck",
        "roofing",
        "landscaping",
        "siding",
        "fence",
        "windows",
        "interior"
      ],
      "type": "string",
      "description": "Type of project to check weather suitability for"
    }
  },
  "additionalProperties": false
}
get_weather_window output schema
{
  "type": "object",
  "required": [
    "location",
    "forecastDays",
    "attribution"
  ],
  "properties": {
    "summary": {},
    "forecast": {},
    "location": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "projectType": {},
    "forecastDays": {
      "type": "number"
    },
    "requirements": {}
  }
}
get_weather_window annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_neighborhood_project_activity — Kolmo work in a neighborhood
Advertised by the server during the last successful anonymous check.
Advertised read-only

See what remodeling projects Kolmo Construction has completed in a specific Seattle neighborhood or city. Returns project counts by category, example projects, and typical project descriptions. Great for hyperlocal social proof — e.g. "Has Kolmo worked in Ballard?" or "What has Kolmo done in Capitol Hill?"

get_neighborhood_project_activity input schema
{
  "type": "object",
  "required": [
    "neighborhood"
  ],
  "properties": {
    "neighborhood": {
      "type": "string",
      "description": "Seattle neighborhood or city, e.g. \"Ballard\", \"Capitol Hill\", \"Bellevue\", \"Queen Anne\""
    }
  },
  "additionalProperties": false
}
get_neighborhood_project_activity output schema
{
  "type": "object",
  "required": [
    "projectsFound",
    "message"
  ],
  "properties": {
    "message": {
      "type": "string"
    },
    "byCategory": {},
    "contactUrl": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "neighborhood": {},
    "portfolioUrl": {
      "type": "string"
    },
    "projectsFound": {
      "type": "number"
    },
    "recentExamples": {},
    "overallPortfolio": {}
  }
}
get_neighborhood_project_activity annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_service_area_coverage — Service-area coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether Kolmo takes work in a given city, neighborhood, ZIP or address. Kolmo works across Washington: Puget Sound (Bellingham to Olympia) is the core area and the rest of the state is case by case. coverage is primary (a featured city or Seattle neighborhood), nearby (in the core area), case_by_case (Washington, outside Puget Sound), unconfirmed (not a place this check recognizes: treat it as in area) or out_of_area (outside Washington, the ONLY value that means Kolmo does not take the work). Follow `guidance`. Also returns the count of completed projects in or near that location.

check_service_area_coverage input schema
{
  "type": "object",
  "required": [
    "location"
  ],
  "properties": {
    "location": {
      "type": "string",
      "description": "City, neighborhood, ZIP or address to check, e.g. \"Ballard\", \"Normandy Park\", \"98105\", \"Tacoma\""
    }
  },
  "additionalProperties": false
}
check_service_area_coverage output schema
{
  "type": "object",
  "required": [
    "coverage",
    "takesWork",
    "serviceRegion",
    "serviceCities",
    "nearbyProjectCount",
    "contactUrl",
    "attribution"
  ],
  "properties": {
    "query": {},
    "verdict": {},
    "coverage": {
      "enum": [
        "primary",
        "nearby",
        "case_by_case",
        "unconfirmed",
        "out_of_area"
      ],
      "type": "string"
    },
    "takesWork": {
      "type": "boolean",
      "description": "False only when the place is outside Washington."
    },
    "contactUrl": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "matchedCity": {},
    "serviceCities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Featured cities with their own landing pages. NOT the service area boundary: a place missing from this list is not out of area. See serviceRegion."
    },
    "serviceRegion": {
      "type": "string"
    },
    "nearbyProjectCount": {
      "type": "number"
    },
    "matchedNeighborhood": {}
  }
}
check_service_area_coverage annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_project_roi — Renovation ROI
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the estimated return on investment (ROI) for a home remodeling project in the Seattle area. Based on Remodeling Magazine Cost vs. Value data for the Pacific Northwest. Helps homeowners decide which projects add the most resale value — e.g. "What ROI does a kitchen remodel get in Seattle?" or "Which remodel pays off the most?"

get_project_roi input schema
{
  "type": "object",
  "properties": {
    "projectType": {
      "type": "string",
      "description": "Type of project, e.g. \"kitchen\", \"bathroom\", \"deck\", \"windows\", \"siding\", \"ADU\", \"basement\". Omit to see all projects ranked by ROI."
    },
    "estimatedCost": {
      "type": "number",
      "description": "Your estimated project budget in USD. If provided, returns expected resale value added."
    }
  },
  "additionalProperties": false
}
get_project_roi output schema
{
  "type": "object",
  "required": [
    "market",
    "source",
    "disclaimer",
    "getAccurateQuote",
    "attribution"
  ],
  "properties": {
    "market": {
      "type": "string"
    },
    "source": {
      "type": "string",
      "description": "Third-party dataset. Cite it alongside Kolmo."
    },
    "results": {},
    "disclaimer": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "neighborhood": {},
    "getAccurateQuote": {
      "type": "string"
    }
  }
}
get_project_roi annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_contractor_license_status — WA contractor license status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Look up any Washington State contractor's license, bond, and insurance status using public L&I data (updated daily). Works for Kolmo or any competitor. Great for verifying a contractor before hiring — checks if they are licensed, bonded, and insured in WA. Search by license number, business name, UBI, or phone number. Results are ranked closest match first; when `identified` is false, several businesses match and none should be reported as the contractor.

check_contractor_license_status input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Contractor license number (e.g. \"KOLMOL*753JS\"), business name (e.g. \"Kolmo LLC\"), 9-digit UBI, or phone number"
    }
  },
  "additionalProperties": false
}
check_contractor_license_status output schema
{
  "type": "object",
  "required": [
    "found",
    "query"
  ],
  "properties": {
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "note": {
      "type": "string"
    },
    "found": {
      "type": "boolean",
      "description": "false means L&I holds no matching record — a real answer, not a lookup failure."
    },
    "query": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "results": {},
    "verifyUrl": {
      "type": "string"
    },
    "identified": {
      "type": "boolean",
      "description": "true: the top results are one business. false: several businesses match, or only part of the name did — do not report any result as the contractor asked about."
    },
    "searchedBy": {
      "type": "string",
      "description": "license-number, ubi, phone, trade-name or business-name"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "moreMatches": {
      "type": "boolean"
    }
  }
}
check_contractor_license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_author_bio — Author profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the biography, credentials, expertise areas, and recent articles for a Kolmo Construction blog author. Use this to answer "who wrote this?" or to add author context to blog content.

get_author_bio input schema
{
  "type": "object",
  "required": [
    "author"
  ],
  "properties": {
    "author": {
      "type": "string",
      "description": "Author name or slug, e.g. \"Marcus Reid\", \"marcus-reid\", \"Emily Chen\", \"emily-chen\""
    }
  },
  "additionalProperties": false
}
get_author_bio output schema
{
  "type": "object",
  "required": [
    "found"
  ],
  "properties": {
    "name": {},
    "note": {
      "type": "string"
    },
    "slug": {},
    "found": {
      "type": "boolean"
    },
    "query": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "expertise": {},
    "profileUrl": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "credentials": {},
    "totalArticles": {
      "type": "number"
    },
    "recentArticles": {},
    "availableAuthors": {}
  }
}
get_author_bio annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_content — Unified content search
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search across all Kolmo content — services, projects, and blog posts — with a single keyword query. Returns ranked results grouped by type. Use this instead of calling list_services + list_projects + list_blog_posts separately.

search_content input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Max results per type (default 5)"
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search keyword or phrase, e.g. \"deck Seattle\", \"kitchen cost\", \"permit\""
    },
    "types": {
      "type": "array",
      "items": {
        "enum": [
          "services",
          "projects",
          "blog"
        ],
        "type": "string"
      },
      "description": "Content types to include (default: all three)"
    }
  },
  "additionalProperties": false
}
search_content output schema
{
  "type": "object",
  "required": [
    "query",
    "terms",
    "resultCount",
    "totalFound",
    "results",
    "attribution"
  ],
  "properties": {
    "hint": {
      "type": "string"
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Present only on a zero-result search."
    },
    "query": {
      "type": "string"
    },
    "terms": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The query after tokenizing. Matching is per-term, not whole-string."
    },
    "results": {
      "type": "object",
      "properties": {
        "blog": {},
        "projects": {},
        "services": {}
      }
    },
    "totalFound": {
      "type": "number",
      "description": "Alias of resultCount, kept for existing callers."
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "resultCount": {
      "type": "number"
    }
  }
}
search_content annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_financing_options — Home-improvement financing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get home improvement financing options for a Seattle remodeling project. Returns loan types, estimated monthly payments, typical terms, and eligibility notes. Helps homeowners understand how to pay for a remodel — HELOC, home improvement loans, cash-out refinance, and contractor payment plans.

get_financing_options input schema
{
  "type": "object",
  "required": [
    "projectBudget"
  ],
  "properties": {
    "creditProfile": {
      "enum": [
        "excellent",
        "good",
        "fair"
      ],
      "type": "string",
      "description": "Approximate credit profile: excellent (750+), good (680-749), fair (620-679). Default: good"
    },
    "projectBudget": {
      "type": "number",
      "minimum": 1000,
      "description": "Estimated project cost in USD"
    }
  },
  "additionalProperties": false
}
get_financing_options output schema
{
  "type": "object",
  "required": [
    "disclaimer",
    "getQuote",
    "attribution"
  ],
  "properties": {
    "options": {},
    "getQuote": {
      "type": "string"
    },
    "disclaimer": {
      "type": "string"
    },
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    },
    "creditProfile": {},
    "projectBudget": {}
  }
}
get_financing_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_rebates — Energy rebates and price after rebates
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Seattle-area energy rebates (PSE, Seattle City Light, Seattle Clean Heat, HomeWise, WA HEAR) for a job: what each pays, who must install it, the price after rebates, and the program page with the date Kolmo read it. An address fills in utility, city and year built. A "check" line names the fact it still needs.

find_rebates input schema
{
  "type": "object",
  "required": [
    "work"
  ],
  "properties": {
    "city": {
      "type": "string",
      "maxLength": 60,
      "description": "When there is no address."
    },
    "work": {
      "type": "array",
      "items": {
        "enum": [
          "heat-pump",
          "heat-pump-water-heater",
          "attic-insulation",
          "wall-insulation",
          "floor-insulation",
          "air-sealing",
          "duct-sealing",
          "ventilation-fan",
          "windows",
          "smart-thermostat",
          "energy-assessment",
          "induction-cooking",
          "electric-panel"
        ],
        "type": "string"
      },
      "maxItems": 6,
      "minItems": 1
    },
    "address": {
      "type": "string",
      "maxLength": 250
    },
    "heating": {
      "enum": [
        "electric-zonal",
        "electric-furnace",
        "heat-pump",
        "gas",
        "oil",
        "propane"
      ],
      "type": "string",
      "description": "Main heat today; electric-zonal = baseboard/wall."
    },
    "quantity": {
      "type": "number",
      "description": "Windows: count. Insulation: sq ft."
    },
    "confirmed": {
      "type": "array",
      "items": {
        "enum": [
          "old-windows-wood-or-metal",
          "attic-0-4-inches",
          "walls-empty",
          "floor-0-4-inches"
        ],
        "type": "string"
      },
      "description": "Ids from a line's confirmable list the person said are true."
    },
    "yearBuilt": {
      "type": "integer"
    },
    "annualIncome": {
      "type": "number"
    },
    "householdSize": {
      "type": "integer"
    },
    "projectCostUsd": {
      "type": "number"
    },
    "electricUtility": {
      "enum": [
        "seattle-city-light",
        "pse",
        "snohomish-pud",
        "tacoma-power",
        "other"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
find_rebates output schema
{
  "type": "object",
  "required": [
    "attribution"
  ],
  "properties": {
    "home": {},
    "closed": {},
    "answers": {},
    "attribution": {
      "type": "object",
      "required": [
        "sourceUrl",
        "citeAs"
      ],
      "properties": {
        "citeAs": {
          "type": "string",
          "description": "Citation line; use verbatim."
        },
        "sourceUrl": {
          "type": "string",
          "description": "The page to link, not the site root."
        },
        "primarySource": {
          "type": "string",
          "description": "Kolmo verified, did not author: cite both."
        }
      }
    }
  }
}
find_rebates annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
request_walkthrough — Request an on-site walkthrough
Advertised by the server during the last successful anonymous check.
Open-world

Request an on-site walkthrough at 1-5 times the person proposes: 24 h to 60 days out, starting Mon-Fri 8 AM-4 PM or Sat 9 AM-12 PM Pacific. Kolmo confirms one within 1 business day; until then it is "requested", not "booked". Without quoteLink, pass the person's own name, email, phone, address and scope. dryRun: true previews.

request_walkthrough input schema
{
  "type": "object",
  "required": [
    "proposedTimes"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "notes": {
      "type": "string",
      "maxLength": 2000,
      "description": "Access, parking, pets"
    },
    "phone": {
      "type": "string",
      "minLength": 7
    },
    "scope": {
      "type": "string",
      "minLength": 10
    },
    "dryRun": {
      "type": "boolean"
    },
    "address": {
      "type": "string",
      "minLength": 5,
      "description": "Property street address and city"
    },
    "quoteLink": {
      "type": "string",
      "maxLength": 300,
      "minLength": 36,
      "description": "The person's kolmo.io/quotes/<id> link, as Kolmo sent it. Never guess one."
    },
    "proposedTimes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "ISO 8601 with offset"
    }
  },
  "additionalProperties": false
}
request_walkthrough output schema
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "reference": {
      "type": "string",
      "description": "Give this to the person."
    },
    "proposedTimes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
request_walkthrough annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_my_quote — Read a Kolmo quote
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the quote Kolmo sent the person: scope, line items, options, total, payment schedule, expiry and whether it can still be accepted. Call before respond_to_quote.

get_my_quote input schema
{
  "type": "object",
  "required": [
    "quoteLink"
  ],
  "properties": {
    "quoteLink": {
      "type": "string",
      "maxLength": 300,
      "minLength": 36,
      "description": "The person's kolmo.io/quotes/<id> link, as Kolmo sent it. Never guess one."
    }
  },
  "additionalProperties": false
}
get_my_quote output schema
{
  "type": "object",
  "required": [
    "quoteNumber",
    "status",
    "canAccept",
    "total",
    "optionGroups",
    "url"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "total": {
      "type": "number",
      "description": "Selected options, tax included, before any card fee."
    },
    "status": {
      "type": "string"
    },
    "canAccept": {
      "type": "boolean"
    },
    "quoteNumber": {
      "type": "string"
    },
    "optionGroups": {
      "type": "array"
    }
  }
}
get_my_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
respond_to_quote — Accept, decline or request changes to a quote
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Answer a Kolmo quote for the person. "accepted" binds them to the work at that total; "declined" is final; "changes_requested" keeps it open and needs notes. To accept: show the person scope, options and total from get_my_quote, get an explicit yes, pass that total as confirmedTotal.

respond_to_quote input schema
{
  "type": "object",
  "required": [
    "quoteLink",
    "response"
  ],
  "properties": {
    "notes": {
      "type": "string",
      "maxLength": 5000
    },
    "response": {
      "enum": [
        "accepted",
        "declined",
        "changes_requested"
      ],
      "type": "string"
    },
    "quoteLink": {
      "type": "string",
      "maxLength": 300,
      "minLength": 36,
      "description": "The person's kolmo.io/quotes/<id> link, as Kolmo sent it. Never guess one."
    },
    "confirmedTotal": {
      "type": "number",
      "description": "Required to accept"
    },
    "personConfirmed": {
      "type": "boolean",
      "description": "True only after the person said yes. Required to accept or decline"
    },
    "selectedOptions": {
      "type": "object",
      "properties": {
        "alternates": {
          "type": "object",
          "description": "group → choice id",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "optionalIds": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
respond_to_quote output schema
{
  "type": "object",
  "required": [
    "status",
    "message"
  ],
  "properties": {
    "total": {
      "type": [
        "number",
        "null"
      ]
    },
    "status": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  }
}
respond_to_quote annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
get_payment_link — Deposit and invoice payment links
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Invoices for an accepted Kolmo quote, with amount, status and the kolmo.io quote page where the person pays them. Never collect card or bank details.

get_payment_link input schema
{
  "type": "object",
  "required": [
    "quoteLink"
  ],
  "properties": {
    "quoteLink": {
      "type": "string",
      "maxLength": 300,
      "minLength": 36,
      "description": "The person's kolmo.io/quotes/<id> link, as Kolmo sent it. Never guess one."
    }
  },
  "additionalProperties": false
}
get_payment_link output schema
{
  "type": "object",
  "required": [
    "invoices",
    "message"
  ],
  "properties": {
    "message": {
      "type": "string"
    },
    "invoices": {
      "type": "array"
    }
  }
}
get_payment_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

6 advertised

estimate_project

Advertised by the server during the last successful anonymous check.

Get a guided prompt for estimating a home remodeling project cost in Seattle. Walks the agent through gathering dimensions, materials, and calling get_estimate.

project_type
e.g. "kitchen", "deck", "flooring", "exterior-painting" (required)
rough_size
e.g. "200 sq ft", "10x12 room", "3 bedrooms"
budget_range
e.g. "under $20k", "$30,000-$50,000"
check_permit_needs

Advertised by the server during the last successful anonymous check.

Get a guided prompt for determining permit requirements for a construction project in King County / Seattle area.

project_type
e.g. "deck", "ADU", "kitchen remodel", "fence", "addition" (required)
location
City or neighborhood, e.g. "Seattle", "Bellevue", "Kirkland"
plan_renovation

Advertised by the server during the last successful anonymous check.

Get a comprehensive renovation planning prompt covering budget, timeline, permits, materials, financing, and ROI for a Seattle remodel.

project_type
e.g. "kitchen remodel", "bathroom renovation", "deck addition" (required)
budget
e.g. "$40,000" or "around $60k"
timeline
e.g. "spring 2026", "within 6 months"
verify_contractor

Advertised by the server during the last successful anonymous check.

Get a prompt for verifying a Washington state contractor's license, bond, and insurance before hiring.

contractor_query
License number (e.g. "KOLMOL*753JS") or business name (e.g. "Kolmo Construction") (required)
compare_financing

Advertised by the server during the last successful anonymous check.

Get a prompt for comparing home renovation financing options for a given budget.

budget
Project budget in USD, e.g. 45000 (required)
credit_profile
excellent=750+, good=680-749, fair=620-679
explore_neighborhood

Advertised by the server during the last successful anonymous check.

Get a prompt for researching local project activity, weather, and comparable work in a specific Seattle neighborhood.

neighborhood
e.g. "Ballard", "Capitol Hill", "Queen Anne", "Bellevue" (required)
project_type
e.g. "deck", "kitchen", "exterior painting"

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
369 ms
95th percentile latency
369 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 369 ms · metadata changed · 43 tool(s), 6 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http kolmo-mcp https://www.kolmo.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add kolmo-mcp --url https://www.kolmo.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable kolmo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "kolmo-mcp": {
      "url": "https://www.kolmo.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "kolmo-mcp": {
      "type": "streamableHttp",
      "url": "https://www.kolmo.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start kolmo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "kolmo-mcp": {
      "type": "http",
      "url": "https://www.kolmo.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http kolmo-mcp https://www.kolmo.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.kolmo.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "kolmo-mcp": {
      "serverUrl": "https://www.kolmo.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Kolmo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Kolmo MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing