Docs

One quoting contract. Any agent stack.

Connect QuoteKernel through MCP or API, yourself or through your agency or developer. Your agent collects customer answers. QuoteKernel interprets them, determines what is required, validates inputs, estimates the work, advances the quote and returns only permitted outcomes.

01 / MCP

What MCP is

MCP, the Model Context Protocol, is an open standard that lets AI agents use outside tools. An MCP server offers tools. An agent connects to the server, reads what each tool does, and calls them when it needs to.

QuoteKernel is an MCP server. Connect your agent to it and your agent gets quoting tools. Any MCP-capable agent can connect, including Claude.

02 / Connecting

Connecting to the QuoteKernel MCP server

  1. 01

    Request access

    and get your key once your request is accepted.

  2. 02

    Add the server to your agent's MCP settings.

  3. 03

    Check the connection.

    Ask your agent which QuoteKernel tools it can see. It should list the four tools below.

Each kernel offers only that business's services. Your agent can't ask for a price on a service the business doesn't offer.

03 / Quickstart

The integration loop

  1. 01

    Start an estimate.

    Call start_estimate for one service, with what the customer said.

  2. 02

    Display the kernel's next question.

    Ask it as written. Don't fill in answers for the customer.

  3. 03

    Submit the customer's answer.

    Call submit_answers with the answer as the customer gave it.

  4. 04

    Repeat until the state is final.

    Ready, requires approval, or cannot quote. Then call get_estimate, hand off to a person, or relay the refusal. Along the way, an ambiguous job may come back with an estimate range or a recommendation and its confidence.

Illustrative, not a live endpointWhat it understood
Response: start_estimatestatus: questions
{
  "estimate_id": "est_example_002",
  "status": "questions",
  "understood": {
    "event_location": "Tampa, FL",
    "event_hours": 6,
    "style": "editorial"
  },
  "questions": [
    {
      "id": "guest_count",
      "ask": "About how many guests are you expecting?"
    }
  ]
}

In this example, the agent starts a wedding photography estimate with the customer's own words. QuoteKernel reports what it understood and asks for the guest count. After the agent passes on "About 275.", the next response adds a question about second-photographer coverage. Rules and thresholds are illustrative.

04 / Tools4 tools

The tools

The tools work together as one short conversation. QuoteKernel runs it. Your agent relays it.

ToolWhat it does
list_services Lists the services this business offers. Your agent can only start an estimate for one of these.
start_estimate Starts an estimate for one service, with the customer's request in their own words. Returns an estimate id, what QuoteKernel understood, and the next questions to ask the customer, in the business's own words.
submit_answers Sends the customer's answers as they gave them. Returns what QuoteKernel understood, the next questions, including any the answers just made necessary, or "ready" when QuoteKernel has enough to price the job.
get_estimate Returns the estimate once it's ready. Called too early, it tells your agent what to do next instead of guessing.

What comes back

Every ready estimate includes:

  • display_text: one sentence for your agent to say word for word. It states the amount, says it's an estimate and not a binding quote, and gives the reference number.
  • The amount and a line-by-line breakdown, so "why is it that much?" has a real answer.
  • The answers it was priced on.
  • How long the price is good for.
  • A quote reference the customer can quote back and the business can look up.
05 / States7 outcomes

Quote states

Every response puts the estimate in one clear state. Your agent acts on the state, not on its own judgment.

StateIn the contractWhat your agent does
Needs more information status: "questions" Ask the returned questions. Submit the answers.
Invalid input question returned again, or status: "refused" with a reason Ask again, or relay the refusal. Never price around it.
Estimate range estimate_range, confidence Present the range as a range, never as a firm price. Ask the returned questions.
Recommendation recommendation, confidence Relay the recommendation and its confidence. Let the customer choose.
Requires approval status: "approval_required" Hand off to a person before anything is committed. Low confidence lands here too.
Ready status: "ready" Call get_estimate and relay display_text word for word.
Cannot quote status: "refused" Relay display_text and hand off to a person.
Illustrative, not a live endpointEstimate range
Response: an ambiguous requeststatus: questions
{
  "status": "questions",
  "estimate_range": { "low_cents": 320000, "high_cents": 450000 },
  "confidence": "medium",
  "questions": [
    {
      "id": "event_hours",
      "ask": "Roughly what time would coverage start and end?"
    }
  ]
}

Illustrative. "Most of the day" isn't firm enough for a firm quote, so the response gives a range with its confidence and the question that would firm it up. Field names and amounts are examples.

A refusal comes with a reason code and a display_text your agent can relay, like "I'll need to check that with the team." Never a partial price. A refusal is a normal answer your agent should handle. A malformed call is different: it gets an error that tells your agent which call to make instead.

06 / Safety

Never let the calling model decide what is required.

Treat model-provided values as untrusted input. QuoteKernel checks types, ranges and quote state on its side, whatever the calling agent sends.

Rules for your agent

  • Never state a price QuoteKernel didn't return.
  • Relay display_text word for word.
  • Ask the questions QuoteKernel gives you. Don't fill in answers for the customer.

The tool descriptions tell the agent these rules, with a worked example for each tool.

07 / API

The API

The API gives you the same quoting as the MCP server, over plain HTTPS requests, for agents and apps that don't use MCP.

08 / SDK

The SDK

The SDK wraps the API so you can call QuoteKernel from your own code without writing requests by hand.

Next steps