# MTN Kitchens for AI agents

MTN Kitchens & Maintenance Ltd is an Auckland (NZ) custom kitchen & joinery
manufacturer. This page is the one-stop guide for an AI agent to price, design
and quote a kitchen through our public MCP server — no account, no API key.

## The one thing to know

Our MCP tools price a kitchen off the EXACT same engine as the live 3D designer
on the website (the Kāinga Ora Schedule of Rates). A price from `price_kitchen`
is the price the customer sees on the site — there is no second price list.
Price is driven by the CABINETRY (layout, run length, number and type of units).
Finishes (colours, benchtop, handles) are cosmetic. Appliances (cooker,
rangehood, fridge, dishwasher) are supplied by others and are never priced.

## Endpoints

- MCP (Streamable HTTP, JSON-RPC 2.0): POST https://mtnkm.co.nz/mcp
- MCP server card: https://mtnkm.co.nz/.well-known/mcp/server-card.json
- A2A agent card: https://mtnkm.co.nz/.well-known/agent-card.json (endpoint https://mtnkm.co.nz/a2a)
- Agent skills: https://mtnkm.co.nz/.well-known/agent-skills/index.json
- API catalog (RFC 9727): https://mtnkm.co.nz/.well-known/api-catalog
- ARD capability manifest: https://mtnkm.co.nz/.well-known/ai-catalog.json
- OAuth authorization server (RFC 8414): https://mtnkm.co.nz/.well-known/oauth-authorization-server
- OAuth protected resource (RFC 9728): https://mtnkm.co.nz/.well-known/oauth-protected-resource (token: https://mtnkm.co.nz/oauth/token, client_credentials, scope quote:write)
- Auth: https://mtnkm.co.nz/auth.md (open, no credentials)

## Tools

| Tool | What it does |
| --- | --- |
| get_kitchen_catalog | Every option (layouts, sizes, finishes, unit types & features, add-ons, discount tiers, KO rate codes). Call first. |
| price_kitchen | Exact coded price for a config: line items, per-kitchen ex/incl GST, discount, total, 3D link. |
| price_kitchen_from_plan | Read an architect's drawing (consent plan / elevation) and price it: pass `pages` (PDF text) and/or `images` (sheet pictures), or a read `design` / flat `cabinets` list. Set `kitchenCount` to price a whole development. Returns the reading (walls, cabinets, confidence, warnings) with the coded price and 3D link. |
| design_kitchen_link | A live 3D URL that opens the exact design with pricing. |
| create_kitchen_quote | Submits a REAL quote on the customer's behalf. Needs name + phone. |
| estimate_kitchen_price | Rough NZD band by job type (quick answer, not coded). |
| search_guides / find_service_area / list_services / get_business_info / get_quote_link | Q&A helpers. |

## The flow

1. get_kitchen_catalog — learn the option values.
2. Build a config (all fields optional; omitted fields use the default design).
3. price_kitchen — show the customer the coded price.
4. design_kitchen_link — hand them a live 3D link they can open and adjust.
5. create_kitchen_quote — when they ask to be contacted, submit the quote.

## The developer flow: price straight from a drawing

For a developer with plans, skip the manual config: call price_kitchen_from_plan
with the drawing and set kitchenCount to the number of units. The tool reads the
cabinetry with the same reader the on-site upload uses (widths off the printed
dimensions; sink/cooker/fridge roles off a vision pass), maps it, and prices it.
Feed the kitchen's OWN elevation and plan sheets, not a whole consent set — on a
full multi-sheet set the reader fuses room and structural dimensions and the
result carries a low confidence and a warning. Always show the customer the
confidence and warnings before relying on the number.

Provide the drawing in whichever shape you have:
- `pages`: each sheet's positioned text from a PDF text layer (most accurate).
- `images`: a base64/data-URI picture of each sheet (for roles, and scans).
- `design` or `cabinets`: a reading you already have (skip the AI step).

## Example: initialize

```json
{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-06-18" } }
```

## Example: price a kitchen (tools/call)

```json
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {
  "name": "price_kitchen",
  "arguments": { "config": {
    "layout": "l-shape", "size": "large", "cabinetFinish": "sage", "benchtop": "engineered", "kitchenCount": 1,
    "units": [
      { "type": "drawer", "features": ["pot-drawers"] },
      { "type": "cupboard", "features": ["sink"] },
      { "type": "dishwasher" },
      { "type": "cupboard", "features": ["cooktop"] },
      { "type": "drawer", "features": ["cutlery-inserts"] },
      { "type": "pantry" }
    ],
    "addOns": ["soft-close", "led-strip"]
  } }
} }
```

## Example: price 7 kitchens from a drawing (tools/call)

```json
{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {
  "name": "price_kitchen_from_plan",
  "arguments": {
    "cabinets": [
      { "widthMm": 600, "role": "drawers" },
      { "widthMm": 900, "role": "sink" },
      { "widthMm": 600, "role": "cooker" },
      { "widthMm": 600, "role": "door" }
    ],
    "runMm": 2700, "layout": "straight", "kitchenCount": 7
  }
} }
```

For a real drawing, pass `pages` (each sheet's positioned text from a PDF text
layer: `[{ page, width, height, items:[{ x, y, str, vertical? }] }]`) and
`images` (`[{ page, b64 }]`) instead of `cabinets`. The result includes a
`reading` (walls, cabinets, confidence, warnings) alongside the price.

## Example: submit a quote (tools/call)

```json
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {
  "name": "create_kitchen_quote",
  "arguments": {
    "contact": { "name": "Jane Doe", "phone": "021 555 1234", "email": "jane@example.com", "preferredContact": "phone" },
    "config": { "layout": "straight", "size": "medium", "units": [ { "type": "cupboard", "features": ["sink"] }, { "type": "cupboard", "features": ["cooktop"] } ] },
    "message": "Rental refresh in Flat Bush, hoping to start next month."
  }
} }
```

It returns a reference like MTN-1A2B3C4D, the 3D link and the coded price. MTN
follows up within 24 hours; if the customer gave an email they also get a
confirmation. Only call it when the customer has actually asked to be quoted.

A human can call +64 9 265 1172 or email mike@mtnkm.co.nz.
