Find public tee times, create friend polls and prepare tee-time alerts across US golf regions.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a shareable tee-time poll from up to eight search options. Availability is checked again; this does not book a tee time. Friends vote at the returned link.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http asap-golf https://asap.golf/api/mcp
Create a shareable tee-time poll from up to eight search options. Availability is checked again; this does not book a tee time. Friends vote at the returned link.
| Argument | Type | Description |
|---|---|---|
| options* | array |
{
"type": "object",
"required": [
"options"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"courseId",
"date",
"minute",
"holes"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"holes": {
"enum": [
9,
18
],
"type": "integer"
},
"minute": {
"type": "integer",
"maximum": 1439,
"minimum": 0
},
"courseId": {
"type": "string",
"maxLength": 120,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 8,
"minItems": 1
}
},
"additionalProperties": false
}Get poll options and aggregate vote counts from an asap.golf share link or poll token. Individual ballots are not returned.
| Argument | Type | Description |
|---|---|---|
| poll* | string | The complete https://asap.golf/p/… link or its poll token. |
{
"type": "object",
"required": [
"poll"
],
"properties": {
"poll": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The complete https://asap.golf/p/… link or its poll token."
}
},
"additionalProperties": false
}List public courses in a region. Use offset to page through results.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | |
| offset | integer | |
| region* | string |
{
"type": "object",
"required": [
"region"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 100
},
"offset": {
"type": "integer",
"minimum": 0
},
"region": {
"type": "string"
}
},
"additionalProperties": false
}List supported golf regions and their time zones.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Prepare a link to review and save a tee-time alert on asap.golf. This does not create or activate an alert. The golfer must open the link, sign in, review and save it, and connect a notification method to receive alerts. Use course IDs returned by search.
| Argument | Type | Description |
|---|---|---|
| to* | integer | Latest local tee time, minutes after midnight. |
| days | integer | Number of dates for a one-time alert; default 1. |
| from* | integer | Earliest local tee time, minutes after midnight. |
| name | string | |
| holes | integer | 0 means any round length. |
| region* | string | Supported region ID returned by search. |
| players* | integer | |
| maxPrice | number | |
| weekdays | array | Days to repeat: Sunday is 0. Required for weekly alerts. |
| courseIds* | array | Connected course IDs in the selected region. |
| startDate* | string | First date in YYYY-MM-DD, in the region’s local time. |
| recurrence | string | |
| expiresDays | integer |
{
"type": "object",
"required": [
"region",
"courseIds",
"startDate",
"from",
"to",
"players"
],
"properties": {
"to": {
"type": "integer",
"maximum": 1439,
"minimum": 0,
"description": "Latest local tee time, minutes after midnight."
},
"days": {
"type": "integer",
"maximum": 7,
"minimum": 1,
"description": "Number of dates for a one-time alert; default 1."
},
"from": {
"type": "integer",
"maximum": 1439,
"minimum": 0,
"description": "Earliest local tee time, minutes after midnight."
},
"name": {
"type": "string",
"maxLength": 60
},
"holes": {
"enum": [
0,
9,
18
],
"type": "integer",
"description": "0 means any round length."
},
"region": {
"type": "string",
"description": "Supported region ID returned by search."
},
"players": {
"type": "integer",
"maximum": 4,
"minimum": 1
},
"maxPrice": {
"type": "number",
"maximum": 1000,
"minimum": 0
},
"weekdays": {
"type": "array",
"items": {
"type": "integer",
"maximum": 6,
"minimum": 0
},
"description": "Days to repeat: Sunday is 0. Required for weekly alerts."
},
"courseIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"description": "Connected course IDs in the selected region."
},
"startDate": {
"type": "string",
"description": "First date in YYYY-MM-DD, in the region’s local time."
},
"recurrence": {
"enum": [
"once",
"weekly"
],
"type": "string"
},
"expiresDays": {
"type": "integer",
"maximum": 30,
"minimum": 1
}
},
"additionalProperties": false
}Search recently cached tee times for up to 50 selected courses on one date. A cache miss is not proof of no availability. After a miss, retry with refresh=true and at most three course IDs to request fresh inventory.
| Argument | Type | Description |
|---|---|---|
| date* | string | Local date in YYYY-MM-DD format, within the next 31 days |
| holes | integer | |
| limit | integer | |
| region* | string | |
| players* | integer | |
| refresh | boolean | Refresh missing or stale inventory for at most three selected courses. |
| maxPrice | number | |
| toMinute | integer | |
| courseIds* | array | |
| fromMinute | integer |
{
"type": "object",
"required": [
"region",
"date",
"courseIds",
"players"
],
"properties": {
"date": {
"type": "string",
"description": "Local date in YYYY-MM-DD format, within the next 31 days"
},
"holes": {
"enum": [
9,
18
],
"type": "integer"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"region": {
"type": "string"
},
"players": {
"type": "integer",
"maximum": 4,
"minimum": 1
},
"refresh": {
"type": "boolean",
"description": "Refresh missing or stale inventory for at most three selected courses."
},
"maxPrice": {
"type": "number",
"maximum": 1000,
"minimum": 0
},
"toMinute": {
"type": "integer",
"maximum": 1439,
"minimum": 0
},
"courseIds": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"uniqueItems": true
},
"fromMinute": {
"type": "integer",
"maximum": 1439,
"minimum": 0
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.