Title99/100
Search Court Availability
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Search for available court times at nearby facilities. Only call after the user has provided or confirmed sport, location, date, and time. If any are missing, ask the user before calling. Duration is optional and defaults to 60 minutes. Returns sportId (use for get_booking_link), facilities with available slots, and hint. Facilities may include perPlayerFeeDollars, perPlayerFeePolicy, and checkInPolicy when set — mention these to the user when present.
The description explains the capability, when to use it, and what to expect.
Inputs27/100
7 of 24 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
sport
Sport to search for. Case-insensitive. Common aliases accepted (e.g. "ping pong" → table-tennis, "paddle" → padel).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
duration
Optional play duration in minutes. Accepts number or string (e.g. 60 or "60"). Defaults to 60.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
date
Desired date as YYYY-MM-DD (e.g. "2026-01-22"). Pass the user's spoken date directly — no timezone conversion.
Clear enough to supply this argument.
time
Desired start time as HH:MM in 24-hour format (e.g. "15:00" or "9:00"). Pass the user's spoken time directly — no timezone conversion.
Clear enough to supply this argument.
facilityName
Fuzzy facility name filter. If the location search returns no results, the server will search by facility name as a fallback.
Clear enough to supply this argument.
location › lat
Not provided
Missing description. Explain what this value means and how to supply it.
location › lng
Not provided
Missing description. Explain what this value means and how to supply it.
location › latitude
Not provided
Missing description. Explain what this value means and how to supply it.
location › longitude
Not provided
Missing description. Explain what this value means and how to supply it.
location › city
Not provided
Missing description. Explain what this value means and how to supply it.
location › state
Not provided
Missing description. Explain what this value means and how to supply it.
location › zip
Not provided
Missing description. Explain what this value means and how to supply it.
location › zipCode
Not provided
Missing description. Explain what this value means and how to supply it.
city
Not provided
Missing description. Explain what this value means and how to supply it.
state
Not provided
Missing description. Explain what this value means and how to supply it.
zip
Not provided
Missing description. Explain what this value means and how to supply it.
zipCode
Not provided
Missing description. Explain what this value means and how to supply it.
lat
Not provided
Missing description. Explain what this value means and how to supply it.
lng
Not provided
Missing description. Explain what this value means and how to supply it.
latitude
Not provided
Missing description. Explain what this value means and how to supply it.
longitude
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
sortBy
How to sort results. "distance" (default) returns closest facilities first. "price" returns cheapest facilities first.
Clear enough to supply this argument.
maxResults
Number of facilities to return (1–10, default 3). Use more when the user wants to compare options.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Output schema63/100
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sportId",
"facilities",
"hint"
],
"properties": {
"hint": {
"type": "string"
},
"sportId": {
"type": "string"
},
"facilities": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"sport",
"sportSlug",
"address",
"city",
"state",
"distance",
"url",
"slots"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"slots": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"surface",
"startTime",
"date",
"duration",
"originalPrice",
"discountedPrice",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"date": {
"type": "string"
},
"surface": {
"type": "string"
},
"duration": {
"type": "number"
},
"startTime": {
"type": "string"
},
"originalPrice": {
"type": "number"
},
"discountedPrice": {
"type": "number"
}
},
"additionalProperties": false
}
},
"sport": {
"type": "string"
},
"state": {
"type": "string"
},
"sports": {
"type": "array",
"items": {
"type": "string"
}
},
"address": {
"type": "string"
},
"zipCode": {
"type": "string"
},
"distance": {
"type": "number"
},
"photoUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sportSlug": {
"type": "string"
},
"bookingUrl": {
"type": "string"
},
"courtCount": {
"type": "number"
},
"listingTier": {
"type": "string",
"const": "connected"
},
"paidListing": {
"type": "boolean"
},
"checkInPolicy": {
"type": "string"
},
"clickTrackUrl": {
"type": "string"
},
"perPlayerFeePolicy": {
"type": "string"
},
"perPlayerFeeDollars": {
"type": "number"
}
},
"additionalProperties": false
}
},
"fallbackReason": {
"type": "string"
}
},
"additionalProperties": false
}