{
  "tools": [
    {
      "name": "get_manifest",
      "description": "Read the tattoo QuoteManifest. Optional review_sla_seconds and routing_policy are canonical manifest fields.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "outputSchema": {
        "$ref": "../../schemas/quote-manifest.json"
      }
    },
    {
      "name": "request_quote",
      "description": "Submit answers; returns non-binding Estimate at PAYLOAD_SUBMITTED. Poll for validation and artist review. QuoteRequest supports neutral attribution, quantity and quantity_unit.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "idempotency_key": {
            "type": "string",
            "minLength": 1
          },
          "request": {
            "$ref": "../../schemas/quote-request.json"
          }
        },
        "required": [
          "idempotency_key",
          "request"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          }
        },
        "required": [
          "id",
          "state",
          "estimate"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "get_quote",
      "description": "Poll a quote without holding a call open.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          }
        },
        "required": [
          "id",
          "state",
          "estimate"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "accept_quote",
      "description": "Explicitly approve the reviewed Quote deposit amount and policies before checkout handoff. Never confirms payment. Quote includes optional deposit policy, minor-unit amounts, attribution and checkout_handoff via the canonical schemas.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "idempotency_key": {
            "type": "string",
            "minLength": 1
          },
          "approval": {
            "$ref": "../../schemas/common.json#/$defs/clientApproval"
          }
        },
        "required": [
          "id",
          "idempotency_key",
          "approval"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          },
          "checkout": {
            "$ref": "../../schemas/common.json#/$defs/checkoutHandoff",
            "type": "object",
            "properties": {
              "url": {
                "type": "null"
              }
            }
          }
        },
        "required": [
          "id",
          "state",
          "estimate",
          "quote",
          "checkout"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "review_quote",
      "description": "Trusted artist-only operation: issue binding Quote with valid_until after review. Acceptance cannot perform review.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "idempotency_key": {
            "type": "string",
            "minLength": 1
          },
          "review": {
            "type": "object",
            "properties": {
              "valid_until": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "valid_until"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "idempotency_key",
          "review"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          }
        },
        "required": [
          "id",
          "state",
          "estimate"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "decline_quote",
      "description": "Decline a pending review or binding Quote.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "idempotency_key": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id",
          "idempotency_key"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          }
        },
        "required": [
          "id",
          "state",
          "estimate"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "resubmit_quote",
      "description": "Correct a MUTATION_REQUIRED payload on the same ID; returns a fresh non-binding Estimate at PAYLOAD_SUBMITTED. QuoteRequest supports neutral attribution, quantity and quantity_unit.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "idempotency_key": {
            "type": "string",
            "minLength": 1
          },
          "request": {
            "$ref": "../../schemas/quote-request.json"
          },
          "id": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "idempotency_key",
          "request",
          "id"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "state": {
            "$ref": "../../schemas/lifecycle.json"
          },
          "estimate": {
            "$ref": "../../schemas/estimate.json"
          },
          "quote": {
            "$ref": "../../schemas/quote.json"
          }
        },
        "required": [
          "id",
          "state",
          "estimate"
        ],
        "additionalProperties": false
      }
    }
  ]
}
