{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "enum": [
        "nyc",
        "melbourne",
        "london",
        "paris",
        "toronto",
        "washington-dc",
        "madrid",
        "miami",
        "sydney",
        "palm-springs-california",
        "adelaide",
        "cincinnati",
        "tokyo",
        "los-angeles",
        "rome",
        "houston",
        "dallas",
        "chicago",
        "hong-kong",
        "montreal",
        "austin-texas",
        "boston",
        "atlanta",
        "dubai",
        "san-francisco",
        "seattle",
        "denver",
        "orlando-florida",
        "singapore",
        "philadelphia",
        "san-diego",
        "las-vegas",
        "phoenix-arizona",
        "charlotte-north-carolina",
        "brisbane",
        "tampa-florida",
        "auckland",
        "dublin",
        "nice",
        "minneapolis",
        "birmingham",
        "barcelona",
        "berlin",
        "osaka",
        "seoul",
        "perth",
        "manchester",
        "edinburgh",
        "vienna",
        "vancouver"
      ],
      "description": "Which city, one of: nyc, melbourne, london, paris, toronto, washington-dc, madrid, miami, sydney, palm-springs-california, adelaide, cincinnati, tokyo, los-angeles, rome, houston, dallas, chicago, hong-kong, montreal, austin-texas, boston, atlanta, dubai, san-francisco, seattle, denver, orlando-florida, singapore, philadelphia, san-diego, las-vegas, phoenix-arizona, charlotte-north-carolina, brisbane, tampa-florida, auckland, dublin, nice, minneapolis, birmingham, barcelona, berlin, osaka, seoul, perth, manchester, edinburgh, vienna, vancouver (nyc is New York City). Defaults to nyc when left out; the reply says which city it answered for."
    },
    "area": {
      "type": "string",
      "description": "Borough (New York, London), suburb (Melbourne, Sydney), arrondissement (Paris) or the neighborhood the city itself puts the venue in (Toronto, Atlanta, Washington DC), exactly as the directory names it, e.g. Manhattan, Camden, Kooyong, Islington, Old Fourth Ward, \"Capitol Hill, Lincoln Park\". A name that matches nothing returns the city's valid areas."
    },
    "borough": {
      "type": "string",
      "description": "Same as area. Kept for callers written when the directory was New York only."
    },
    "name": {
      "type": "string",
      "description": "Part of a venue's name, e.g. \"central park\". Case and accents are ignored."
    },
    "access": {
      "type": "string",
      "enum": [
        "walk_on",
        "reservation",
        "private_club",
        "book",
        "members_only",
        "mixed",
        "public"
      ],
      "description": "How you get on a court. New York: walk_on (public park, no booking), reservation (public park court bookable through NYC Parks), private_club (runs its own booking). Every other city: walk_on, book (open to the public by booking), members_only, mixed (more than one arrangement at the venue: read its accessDetail), public (the source lists public courts and states no walk-on or booking rule; where its own page says more, that is the venue's accessDetail or price, in the source's words). A value a city does not use is refused with the ones it does."
    },
    "indoorOnly": {
      "type": "boolean",
      "description": "Only venues where a source confirms indoor or covered courts, which may be some courts, or winter only: read indoorOrCovered on each. Venues never researched are excluded rather than assumed outdoor."
    },
    "minCourts": {
      "type": "integer",
      "description": "Minimum number of courts at the venue. Venues whose court count is not sourced are left out when this is set."
    },
    "nearLatitude": {
      "type": "number",
      "description": "With nearLongitude: sort by distance from this point, nearest first."
    },
    "nearLongitude": {
      "type": "number",
      "description": "With nearLatitude: sort by distance from this point, nearest first."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum venues to return. Default 25, maximum 150."
    }
  },
  "additionalProperties": false,
  "$comment": "inputSchema of MCP tool find_courts, verbatim from tools/list at https://www.courts.tennis/mcp on 2026-11-04"
}