Koskamo

GroundQuote MCP

GroundQuote MCP enables AI agents to create contractor accounts, load fence pricing, configure branding, and retrieve embed codes for instant online fence quoting. It allows agents to set up the service end-to-end without needing authentication keys for the connection itself, though contractors must manage their own billing and lead unlocking.

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.

GroundQuote MCP logo, by Kilvington Digital MarketingCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Kilvington Digital Marketing
You need:No card is required to create an account
MCP endpoint (Streamable HTTP)
https://groundquote-mcp-production.up.railway.app/mcp
Vendor documentation

What you can do with it

  • Create a contractor account via API
  • Load fence and gate pricing rates
  • Retrieve the embed code for websites
  • Configure hosted page branding

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
groundquote 1.0.0
MCP protocol
2025-06-18
Tools
12 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

GroundQuote adds instant fence quoting to a fence contractor's website: the homeowner draws the fence on a satellite map and sees a price from the contractor's own rates; the contractor gets the lead. Free to install; the contractor pays $5 per browsing lead or $15 per high-intent lead only when they unlock it, or $150/month unlimited. Always call get_pricing_terms and relay it before create_contractor_account. Create accounts only with the contractor's own email. Never guess per-foot rates. Keep the setup_claim from create_contractor_account; the configuration tools require it.

Tools

12 advertised

get_pricing_terms — GroundQuote pricing terms
Advertised by the server during the last successful anonymous check.

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.

get_pricing_terms input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_install_instructions — How to install GroundQuote
Advertised by the server during the last successful anonymous check.

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.

get_install_instructions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
create_contractor_account — Create a contractor account
Advertised by the server during the last successful anonymous check.

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.

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

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.

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

For fence RENTAL companies (construction sites, events, security) rather than installers. Loads rental products priced in dollars per linear foot per period (day / week / month), the minimum term, per-rental gate charges, delivery and setup fees and optional add-ons (privacy screen, sandbag bases). Enables the rental option on the widget; leaves any installed-fence catalog untouched. Ask the company for real numbers; never invent them. Requires org_id and setup_claim from create_contractor_account.

set_rental_pricing input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim",
    "products"
  ],
  "properties": {
    "addons": {
      "type": "object",
      "description": "optional extras the customer can tick, e.g. \"Privacy Screen\" -> { price: 1.25, unit: \"ft\" }",
      "propertyNames": {
        "minLength": 1
      },
      "additionalProperties": {
        "type": "object",
        "required": [
          "price"
        ],
        "properties": {
          "unit": {
            "enum": [
              "ft",
              "panel",
              "flat"
            ],
            "type": "string",
            "default": "ft"
          },
          "price": {
            "type": "number",
            "maximum": 100000,
            "minimum": 0
          },
          "description": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false
      }
    },
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "products": {
      "type": "object",
      "description": "product name -> { description?, rates: { day?, week?, month? } }, e.g. \"Panel Fence (Freestanding)\" -> { rates: { week: 1.75, month: 2.5 } }",
      "propertyNames": {
        "minLength": 1
      },
      "additionalProperties": {
        "type": "object",
        "required": [
          "rates"
        ],
        "properties": {
          "rates": {
            "type": "object",
            "properties": {
              "day": {
                "type": "number",
                "maximum": 1000,
                "exclusiveMinimum": 0
              },
              "week": {
                "type": "number",
                "maximum": 1000,
                "exclusiveMinimum": 0
              },
              "month": {
                "type": "number",
                "maximum": 1000,
                "exclusiveMinimum": 0
              }
            },
            "description": "dollars per linear foot per period; include only the periods the company offers",
            "additionalProperties": false
          },
          "description": {
            "type": "string",
            "maxLength": 200
          }
        },
        "additionalProperties": false
      }
    },
    "rental_only": {
      "type": "boolean",
      "default": false,
      "description": "true if the company does NOT install fence: turns the fence module off so the widget shows rental only"
    },
    "setup_claim": {
      "type": "string"
    },
    "min_term_days": {
      "type": "integer",
      "default": 28,
      "maximum": 3650,
      "minimum": 1,
      "description": "Shortest rental accepted, in days (28 = one month)"
    },
    "setup_fee_usd": {
      "type": "number",
      "maximum": 100000,
      "minimum": 0,
      "description": "Setup + removal fee; omit for none"
    },
    "walk_gate_usd": {
      "type": "number",
      "default": 75,
      "maximum": 100000,
      "minimum": 0,
      "description": "Flat charge per pedestrian gate, per rental"
    },
    "drive_gate_usd": {
      "type": "number",
      "default": 200,
      "maximum": 100000,
      "minimum": 0,
      "description": "Flat charge per vehicle gate, per rental"
    },
    "setup_fee_unit": {
      "enum": [
        "flat",
        "ft"
      ],
      "type": "string",
      "default": "flat"
    },
    "panel_length_ft": {
      "type": "number",
      "default": 12,
      "maximum": 50,
      "minimum": 1,
      "description": "Panel length used for per-panel add-ons"
    },
    "delivery_fee_usd": {
      "type": "number",
      "maximum": 100000,
      "minimum": 0,
      "description": "Flat delivery + pickup fee added to every quote; omit for none"
    }
  },
  "additionalProperties": false
}
set_branding — Match the widget to the contractor's brand
Advertised by the server during the last successful anonymous check.

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.

set_branding input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim"
  ],
  "properties": {
    "font": {
      "enum": [
        "Inter",
        "Roboto",
        "Lato",
        "Montserrat",
        "Open Sans",
        "Outfit",
        "Plus Jakarta Sans"
      ],
      "type": "string"
    },
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "logo_url": {
      "type": "string",
      "format": "uri"
    },
    "setup_claim": {
      "type": "string"
    },
    "website_url": {
      "type": "string",
      "format": "uri"
    },
    "accent_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "primary_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "secondary_color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "auto_fetch_from_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "additionalProperties": false
}
set_hosted_page — Enable the hosted quote page
Advertised by the server during the last successful anonymous check.

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.

set_hosted_page input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim"
  ],
  "properties": {
    "city": {
      "type": "string",
      "maxLength": 80
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phone": {
      "type": "string",
      "maxLength": 30
    },
    "state": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2
    },
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "enabled": {
      "type": "boolean",
      "default": true
    },
    "headline": {
      "type": "string",
      "maxLength": 120
    },
    "services": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 12
    },
    "cover_url": {
      "type": "string",
      "format": "uri"
    },
    "subheading": {
      "type": "string",
      "maxLength": 300
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_embed_code — Get the embed snippet
Advertised by the server during the last successful anonymous check.

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

get_embed_code input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim"
  ],
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
check_account_status — Check account status
Advertised by the server during the last successful anonymous check.

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.

check_account_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim"
  ],
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
resend_setup_email — Resend the set-password email
Advertised by the server during the last successful anonymous check.

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

resend_setup_email input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "org_id",
    "setup_claim"
  ],
  "properties": {
    "org_id": {
      "type": "string",
      "format": "uuid"
    },
    "setup_claim": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
search — Search GroundQuote documentation
Advertised by the server during the last successful anonymous check.

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

search input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    }
  },
  "additionalProperties": false
}
fetch — Fetch a documentation page
Advertised by the server during the last successful anonymous check.

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

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

Prompts

Not advertised

No prompt definitions available.

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
581 ms
95th percentile latency
581 ms

Maintenance history

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

  • · probe · passed · 581 ms · metadata changed · 12 tool(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 groundquote-mcp https://groundquote-mcp-production.up.railway.app/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 groundquote-mcp --url https://groundquote-mcp-production.up.railway.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable groundquote-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "groundquote-mcp": {
      "url": "https://groundquote-mcp-production.up.railway.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "groundquote-mcp": {
      "type": "streamableHttp",
      "url": "https://groundquote-mcp-production.up.railway.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start groundquote-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "groundquote-mcp": {
      "type": "http",
      "url": "https://groundquote-mcp-production.up.railway.app/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 groundquote-mcp https://groundquote-mcp-production.up.railway.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "groundquote-mcp": {
      "url": "https://groundquote-mcp-production.up.railway.app/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": {
    "groundquote-mcp": {
      "serverUrl": "https://groundquote-mcp-production.up.railway.app/mcp"
    }
  }
}

Let your agent find its tools

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