{
  "schema_version": "0.1",
  "name": "Avodas",
  "url": "https://www.avodas.tech/",
  "description": "One company, seven brands. Public service information and inquiries for human review.",
  "contact": {
    "email": "hello@avodas.tech"
  },
  "documentation": {
    "agent_contract": "https://www.avodas.tech/AGENTS.md",
    "summary": "https://www.avodas.tech/llms.txt",
    "full_corpus": "https://www.avodas.tech/llms-full.txt",
    "openapi": "https://www.avodas.tech/openapi.json",
    "mcp_server_card": "https://www.avodas.tech/.well-known/mcp-server-card"
  },
  "auth": {
    "required": false
  },
  "mcp": {
    "server_name": "avodas-public",
    "endpoint": "https://mcp.avodas.tech/mcp",
    "card_url": "https://www.avodas.tech/.well-known/mcp-server-card",
    "transport": "streamable-http"
  },
  "tools": [
    {
      "name": "check_scope",
      "title": "Check whether a job is in scope",
      "description": "Decide whether a described piece of work is something Avodas does, and if so which brand. Returns in_scope, out_of_scope or unsure. Call this FIRST, before telling anyone what we do. An \"unsure\" is a real answer and means ask a person — do not resolve it yourself.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "work": {
            "type": "string",
            "maxLength": 600,
            "description": "What the person wants done, in their own words."
          },
          "location": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional. Town or area, if known."
          }
        },
        "required": [
          "work"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_services",
      "title": "List what a brand does",
      "description": "What each Avodas brand does and explicitly does not do. Omit brand to get all of them. The \"not_this\" list is as important as the services list: it is what we will not be talked into.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "enum": [
              "twinstead",
              "twinsite",
              "curastead",
              "handiwork",
              "curasite",
              "royaltiste",
              "captrove"
            ],
            "description": "Optional. One brand slug."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "get_service_area",
      "title": "Where we work",
      "description": "The region Avodas covers and the travel terms. A policy, not a promise about a specific address.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "enum": [
              "twinstead",
              "twinsite",
              "curastead",
              "handiwork",
              "curasite",
              "royaltiste",
              "captrove"
            ],
            "description": "Optional. Narrow to one brand."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "get_availability_policy",
      "title": "When we visit",
      "description": "The standing policy for site visits. THIS IS NOT A CALENDAR and there will never be one: a calendar an agent can read publishes where we are every day, and one it can write lets anybody with an HTTP client fill the week. Nothing here confirms a time.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "submit_request",
      "title": "Send an enquiry to a person",
      "description": "Send an enquiry. It is NOT a booking and NOT a quote: a person reads it and replies, usually within a working day or two. Requires a real named human and a contact address for them — a request nobody can reply to will not be actioned. Never tell anyone their job is scheduled or priced on the strength of the response.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "enum": [
              "twinstead",
              "twinsite",
              "curastead",
              "handiwork",
              "curasite",
              "royaltiste",
              "captrove"
            ],
            "description": "Which brand. Use check_scope if unsure."
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "description": "The person who wants the work — not the agent."
          },
          "email": {
            "type": "string",
            "maxLength": 160,
            "description": "Where a person should reply."
          },
          "detail": {
            "type": "string",
            "maxLength": 4000,
            "description": "What the property is, roughly how big, and what is wanted."
          },
          "phone": {
            "type": "string",
            "maxLength": 40
          },
          "property_type": {
            "type": "string",
            "maxLength": 120
          },
          "location": {
            "type": "string",
            "maxLength": 120
          },
          "timing": {
            "type": "string",
            "maxLength": 120
          }
        },
        "required": [
          "brand",
          "name",
          "email",
          "detail"
        ],
        "additionalProperties": false
      }
    }
  ],
  "inquiry": {
    "url": "https://forms.avodas.tech/enquiry",
    "method": "POST",
    "content_type": "application/json",
    "parameters": {
      "type": "object",
      "required": [
        "name",
        "email",
        "message"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 120,
          "description": "Full name of the person who wants the work",
          "minLength": 1
        },
        "email": {
          "type": "string",
          "maxLength": 200,
          "description": "Their email address, where the reply goes",
          "minLength": 1,
          "format": "email"
        },
        "phone": {
          "type": "string",
          "maxLength": 40,
          "description": "Their phone number"
        },
        "business_name": {
          "type": "string",
          "maxLength": 160,
          "description": "Business or organisation, if any"
        },
        "street": {
          "type": "string",
          "maxLength": 200,
          "description": "Property street address"
        },
        "city": {
          "type": "string",
          "maxLength": 80,
          "description": "Property city"
        },
        "state": {
          "type": "string",
          "maxLength": 40,
          "description": "Property state"
        },
        "zip": {
          "type": "string",
          "maxLength": 12,
          "description": "Property ZIP code"
        },
        "product": {
          "type": "string",
          "maxLength": 40,
          "description": "One of: Twinstead, Curastead, Twinsite, Curasite, Handiwork, Captrove, Royaltiste, Avodas consulting, Not sure",
          "enum": [
            "",
            "Twinstead",
            "Curastead",
            "Twinsite",
            "Curasite",
            "Handiwork",
            "Captrove",
            "Royaltiste",
            "Avodas consulting",
            "Not sure"
          ]
        },
        "property_type": {
          "type": "string",
          "maxLength": 80,
          "description": "e.g. house, ranch, office, warehouse, retail"
        },
        "message": {
          "type": "string",
          "maxLength": 4000,
          "description": "What they need, in their words",
          "minLength": 1
        },
        "contact_ok": {
          "type": "string",
          "maxLength": 5,
          "description": "\"yes\" if they agree to be contacted about this inquiry"
        },
        "agent": {
          "type": "string",
          "maxLength": 200,
          "description": "If you are software acting for the person: your name/product"
        },
        "source": {
          "type": "string",
          "maxLength": 200,
          "description": "The page the inquiry came from"
        }
      }
    },
    "rate_limit": "6/hour per network address"
  }
}
