GroundQuote

Instant fence quotes for contractor websites: create the account, set pricing, get the embed.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
74%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,797Tokens (tool definitions)
~1.2 KBTypical response size
Moderate attention impact (1.40% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "groundquote": {
      "url": "https://groundquote-mcp-production.up.railway.app/mcp"
    }
  }
}

Remote endpoints

https://groundquote-mcp-production.up.railway.app/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_pricing_terms

Read this first and relay it to the contractor before creating an account. Returns the plain-language pricing disclosure ($5 browsing lead, $15 high-intent lead, optional $150/month unlimited; nothing charged until the contractor unlocks a lead) and the guarantees. No inputs.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_install_instructions

Explains the two install paths (iframe embed on an existing site, or a GroundQuote-hosted page for contractors with no site), what works with AI site builders, and how account ownership works. Use before you promise the contractor anything about the install.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_contractor_account(company_name, owner_email, owner_name, phone, website_url, ...)

Creates a GroundQuote account for a fence contractor and emails the contractor a link to set their own password (the email includes the pricing terms). Nothing is charged; no card is required. Returns org_id, slug, the embed snippet, terms_summary, and a setup_claim you must keep and pass to set_fence_pricing, set_branding, set_hosted_page, get_embed_code, check_account_status and resend_setup_email. Confirm the contractor has heard the pricing terms before calling. Use the contractor's own email as owner_email.

Input Schema

{
  "type": "object",
  "properties": {
    "company_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "The contractor's business name as it should appear to homeowners"
    },
    "owner_email": {
      "type": "string",
      "format": "email",
      "description": "The contractor's own email. They receive the set-password link; only they can unlock leads."
    },
    "owner_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "The contractor's name"
    },
    "phone": {
      "type": "string",
      "minLength": 10,
      "description": "The contractor's phone number"
    },
    "website_url": {
      "type": "string",
      "format": "uri",
      "description": "Their website, if they have one"
    },
    "city": {
      "type": "string",
      "maxLength": 80
    },
    "state": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2,
      "description": "Two-letter US state"
    },
    "terms_relayed": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: you have told the contractor the pricing terms from get_pricing_terms"
    }
  },
  "required": [
    "company_name",
    "owner_email",
    "owner_name",
    "phone",
    "terms_relayed"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡set_fence_pricing(org_id, setup_claim, fences, gate_single_usd, gate_double_usd, ...)

Loads the contractor's price list. Rates are dollars per linear foot by material, then style, then height ("4 ft", "6 ft", "8 ft"). Gates are flat surcharges. Ask the contractor for real numbers; never invent them. Replaces the whole fence catalog each call. Requires org_id and setup_claim from create_contractor_account.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    },
    "fences": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": {
          "type": "object",
          "additionalProperties": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 10000
          },
          "propertyNames": {
            "pattern": "^\\d{1,2} ft$"
          }
        },
        "propertyNames": {
          "minLength": 1
        }
      },
      "propertyNames": {
        "minLength": 1
      },
      "description": "material -> style -> height (\"6 ft\") -> dollars per linear foot"
    },
    "gate_single_usd": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000,
      "default": 300,
      "description": "Flat surcharge per single gate"
    },
    "gate_double_usd": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000,
      "default": 500,
      "description": "Flat surcharge per double gate"
    },
    "removal_per_ft_usd": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000,
      "description": "Old-fence removal, per linear foot; omit to leave unchanged"
    },
    "require_phone": {
      "type": "boolean",
      "description": "Require the homeowner's phone number; default true"
    }
  },
  "required": [
    "org_id",
    "setup_claim",
    "fences"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡set_branding(org_id, setup_claim, logo_url, primary_color, secondary_color, ...)

Sets logo, colors and font on the quote widget. Pass auto_fetch_from_url to read the logo and primary color from the contractor's existing site; explicit fields win over fetched values. Requires org_id and setup_claim.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    },
    "logo_url": {
      "type": "string",
      "format": "uri"
    },
    "primary_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "secondary_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "accent_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "font": {
      "type": "string",
      "enum": [
        "Inter",
        "Roboto",
        "Lato",
        "Montserrat",
        "Open Sans",
        "Outfit",
        "Plus Jakarta Sans"
      ]
    },
    "website_url": {
      "type": "string",
      "format": "uri"
    },
    "auto_fetch_from_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "org_id",
    "setup_claim"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡set_hosted_page(org_id, setup_claim, enabled, headline, subheading, ...)

For contractors without a website: turns on a branded page at groundquote.com/{slug} with headline, services and contact details. Requires org_id and setup_claim.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean",
      "default": true
    },
    "headline": {
      "type": "string",
      "maxLength": 120
    },
    "subheading": {
      "type": "string",
      "maxLength": 300
    },
    "services": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 12
    },
    "phone": {
      "type": "string",
      "maxLength": 30
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "city": {
      "type": "string",
      "maxLength": 80
    },
    "state": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "cover_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "org_id",
    "setup_claim"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_embed_code(org_id, setup_claim)

Returns the iframe HTML to paste into the contractor's site and the hosted-page URL. Requires org_id and setup_claim.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "required": [
    "org_id",
    "setup_claim"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡check_account_status(org_id, setup_claim)

Shows whether the contractor has set their password yet (setup_link_pending), the current pricing summary, branding and install details. Requires org_id and setup_claim.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "required": [
    "org_id",
    "setup_claim"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡resend_setup_email(org_id, setup_claim)

Re-sends the contractor's set-password email (max 3 per day per account). Requires org_id and setup_claim.

Input Schema

{
  "type": "object",
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "required": [
    "org_id",
    "setup_claim"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search(query)

Searches GroundQuote's documentation (what it is, pricing, install, ownership, pricing format, rules for assistants). Returns ids to pass to fetch.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢fetch(id)

Returns the full text of a documentation entry by id from search.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools