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.
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.
Connecting to the QuoteKernel MCP server
- 01
Request access
and get your key once your request is accepted.
- 02
Add the server to your agent's MCP settings.
- 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.
The integration loop
- 01
Start an estimate.
Call
start_estimatefor one service, with what the customer said. - 02
Display the kernel's next question.
Ask it as written. Don't fill in answers for the customer.
- 03
Submit the customer's answer.
Call
submit_answerswith the answer as the customer gave it. - 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.
{
"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.
The tools
The tools work together as one short conversation. QuoteKernel runs it. Your agent relays it.
| Tool | What 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.
Quote states
Every response puts the estimate in one clear state. Your agent acts on the state, not on its own judgment.
| State | In the contract | What 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. |
{
"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.
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_textword 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.
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.
The SDK
The SDK wraps the API so you can call QuoteKernel from your own code without writing requests by hand.