{
  "version": 1,
  "business": "mechanik-siechnice",
  "name": "Mechanik Siechnice",
  "category": "car-service",
  "town": "Siechnice",
  "publicKey": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEATQmsTotCgSEB27B9m0lNtVGBVFTpxltt7VZXQNR1d7M=\n-----END PUBLIC KEY-----\n",
  "tools": [
    {
      "name": "describe",
      "description": "Business profile, services with prices and opening hours.",
      "endpoint": "/b/mechanik-siechnice/mcp/describe",
      "input": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "availability",
      "description": "Free slots for a service on a date.",
      "endpoint": "/b/mechanik-siechnice/mcp/availability",
      "input": {
        "type": "object",
        "required": [
          "service",
          "date"
        ],
        "properties": {
          "service": {
            "type": "string",
            "enum": [
              "przeglad",
              "wymiana-oleju",
              "klocki",
              "diagnostyka"
            ]
          },
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "quote",
      "description": "A signed bid for a service in a time window.",
      "endpoint": "/b/mechanik-siechnice/mcp/quote",
      "input": {
        "type": "object",
        "required": [
          "intentId",
          "service",
          "date"
        ],
        "properties": {
          "intentId": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]{0,62}$"
          },
          "service": {
            "type": "string",
            "enum": [
              "przeglad",
              "wymiana-oleju",
              "klocki",
              "diagnostyka"
            ]
          },
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "timeFrom": {
            "type": "string",
            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
          },
          "timeTo": {
            "type": "string",
            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
          },
          "budgetMax": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "hold",
      "description": "Reserve the slot of a bid for 10 minutes.",
      "endpoint": "/b/mechanik-siechnice/mcp/hold",
      "input": {
        "type": "object",
        "required": [
          "bid"
        ],
        "properties": {
          "bid": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]{0,62}$"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "confirm",
      "description": "Confirm a hold with the person's name and phone. Idempotent.",
      "endpoint": "/b/mechanik-siechnice/mcp/confirm",
      "input": {
        "type": "object",
        "required": [
          "hold",
          "contact"
        ],
        "properties": {
          "hold": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9-]{0,62}$"
          },
          "contact": {
            "type": "object",
            "required": [
              "name",
              "phone"
            ],
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 80
              },
              "phone": {
                "type": "string",
                "pattern": "^\\+?[0-9 ]{7,20}$"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    }
  ]
}
