PGA Golf
PGA's official MCP Server for all things golf-related. Find a coach, play golf, improve your game.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"pga-golf": {
"url": "https://mcp.pga.com/mcp"
}
}
}リモートエンドポイント
https://mcp.pga.com/mcpstreamable-httpできること
ツール一覧
ツール(4)
🟢search_golf_coaches(searchLocation, searchRadius, paginationCursor)
Search for qualified PGA golf coaches listed on pga.com/coach in the specified location (required). Use this tool when the user asks to find, browse, or compare coaches for private lessons in a location. For location-first discovery of clinics, camps, classes, or other group programs, use `search_golf_programs` instead. If the user asks for availability for a specific coach, use `get_golf_coach_availability` instead. Internal record identifiers (for example coach `slug` and offering `id`) are for tool calls only and must never be shown or mentioned to the user. - Search results include the coach's profile information, private-lesson offerings, pricing, and a short teaser of upcoming public programs they host (capped at 2). For location-first program discovery, use `search_golf_programs`. - Use that program context to recommend which group offering best fits the golfer when relevant; present upcoming programs when available. - Results are ordered by proximity to the search location, so list them to the user in this order. - Results are paginated, so use the pagination cursor provided at the end of the response to retrieve the next page of results.
入力スキーマ
{
"type": "object",
"properties": {
"searchLocation": {
"type": "string",
"description": "Required location used to find nearby coaches. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates."
},
"searchRadius": {
"default": 25,
"description": "Search radius in miles from `searchLocation`. Use 25 by default unless the user requests a different radius.",
"type": "number",
"minimum": 0
},
"paginationCursor": {
"description": "Pagination cursor from a prior `search_golf_coaches` response. Use only when fetching additional pages of the same search.",
"type": "string"
}
},
"required": [
"searchLocation"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}出力スキーマ
{
"type": "object",
"properties": {
"coaches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools."
},
"name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"memberType": {
"anyOf": [
{
"type": "string",
"enum": [
"PGA Member",
"PGA Associate"
]
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
},
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"type": "string",
"format": "uri",
"description": "The URL to the coach's profile"
},
"bookingUrl": {
"type": "string",
"format": "uri",
"description": "The URL to view the coach's offerings and book a lesson"
},
"nextAvailability": {
"anyOf": [
{
"type": "object",
"properties": {
"dateTime": {
"type": "string",
"description": "The next available time in ISO8601 format with offset"
},
"timezone": {
"type": "string",
"description": "The IANA timezone (e.g., America/Los_Angeles)"
}
},
"required": [
"dateTime",
"timezone"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The next available time to book a session"
},
"offerings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The unique identifier for the offering. DO NOT display this to the user. Reference this as the `offeringId` when booking a lesson via the `book_golf_lesson` tool."
},
"title": {
"type": "string",
"description": "The name of the offering. Use this instead of the `id` when describing the offering to the user"
},
"category": {
"type": "string",
"enum": [
"INTRO",
"PRIVATE",
"ON_COURSE",
"SWING_EVALUATION",
"CLUB_FITTING",
"OTHER"
]
},
"location": {
"type": "string",
"description": "Where the session will take place"
},
"timezone": {
"type": "string",
"description": "The IANA timezone (e.g., America/Los_Angeles) for the location"
},
"price": {
"type": "number",
"description": "Price per session in USD"
},
"duration": {
"type": "number",
"description": "Session duration in minutes"
},
"requiresPrepayment": {
"type": "boolean",
"description": "Whether this offering requires online prepayment"
}
},
"required": [
"id",
"title",
"category",
"location",
"timezone",
"price",
"duration",
"requiresPrepayment"
],
"additionalProperties": false
}
},
"facilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
}
},
"programs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"startDateTime": {
"type": "string",
"description": "Program start time in ISO8601 format with offset"
},
"endDateTime": {
"type": "string",
"description": "Program end time in ISO8601 format with offset"
},
"timezone": {
"type": "string",
"description": "The IANA timezone for the program times"
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Program price in USD"
},
"sessionCount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Number of sessions in the program, when available"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"registrationFull": {
"type": "boolean"
},
"hasWaitlist": {
"type": "boolean"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"programUrl": {
"type": "string",
"format": "uri",
"description": "Public URL to view details and register"
},
"facility": {
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"title",
"description",
"startDateTime",
"endDateTime",
"timezone",
"price",
"sessionCount",
"tags",
"registrationFull",
"hasWaitlist",
"photo",
"programUrl",
"facility"
],
"additionalProperties": false
},
"description": "Upcoming public group programs hosted by this coach (clinics, camps, classes), capped at 2 teasers. Use search_golf_programs for location-first discovery. Empty when none are listed."
}
},
"required": [
"slug",
"name",
"title",
"memberType",
"location",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"nextAvailability",
"offerings",
"facilities",
"programs"
],
"additionalProperties": false
}
},
"count": {
"type": "number"
},
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"coaches",
"count",
"hasNextPage",
"endCursor"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢search_golf_programs(searchLocation, searchRadius, paginationCursor)
Search for upcoming public PGA Coach programs (clinics, camps, classes, and other group events) near a location (required). Use this tool when the user asks to find programs, clinics, camps, classes, or group events — not private one-on-one lessons. For private lesson coaches, use `search_golf_coaches` instead. Internal record identifiers (for example program `id` and coach `slug`) are for tool calls only and must never be shown or mentioned to the user. - Search results include program details plus the hosting coach and facility for each program. - The response also includes top-level `coaches` and `facilities` arrays summarizing the unique coaches and venues in the result set — always present those to the user. - Results are ordered by program start instant and filtered to the requested radius. - Discovery uses nearby PGA Coach profiles (nearest 20 in the radius), then loads up to 30 upcoming public programs per coach in a 180-day window in one batched GraphQL request. Facility coordinates still have to fall inside the radius. - Results are paginated. The pagination cursor carries the remaining nearby programs so additional pages do not repeat GraphQL discovery. Reuse that cursor with the original location and radius. - Direct golfers to the program URL to view details and register. Coach profile and booking URLs are also included when the golfer wants to learn more about the coach.
入力スキーマ
{
"type": "object",
"properties": {
"searchLocation": {
"type": "string",
"description": "Required location used to find nearby PGA Coach programs. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates."
},
"searchRadius": {
"default": 50,
"description": "Search radius in miles from `searchLocation`. Use 50 by default unless the user requests a different radius.",
"type": "number",
"minimum": 0
},
"paginationCursor": {
"description": "Pagination cursor from a prior `search_golf_programs` response. Use only when fetching additional pages of the same search (same location and radius).",
"type": "string"
}
},
"required": [
"searchLocation"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}出力スキーマ
{
"type": "object",
"properties": {
"programs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Internal unique identifier for the program. Do not display or mention this value to users."
},
"title": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"startDateTime": {
"type": "string",
"description": "Program start time in ISO8601 format with offset"
},
"endDateTime": {
"type": "string",
"description": "Program end time in ISO8601 format with offset"
},
"timezone": {
"type": "string",
"description": "The IANA timezone (e.g., America/Los_Angeles)"
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Program price in USD"
},
"sessionCount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Number of sessions included in the program, when available"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"registrationFull": {
"type": "boolean"
},
"hasWaitlist": {
"type": "boolean"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"programUrl": {
"type": "string",
"format": "uri",
"description": "Public URL where a golfer can view and register"
},
"facility": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The IANA timezone for the facility, when available"
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode",
"timezone"
],
"additionalProperties": false
},
"distanceMiles": {
"type": "number",
"description": "Approximate distance from the search location in miles"
},
"coach": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"memberType": {
"anyOf": [
{
"type": "string",
"enum": [
"PGA Member",
"PGA Associate"
]
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"slug": {
"type": "string",
"description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools."
},
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"type": "string",
"format": "uri",
"description": "The URL to the coach's public PGA.com profile"
},
"bookingUrl": {
"type": "string",
"format": "uri",
"description": "The URL to view the coach's offerings and book a lesson"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
}
},
"required": [
"name",
"title",
"memberType",
"slug",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"location"
],
"additionalProperties": false
}
},
"required": [
"id",
"title",
"description",
"startDateTime",
"endDateTime",
"timezone",
"price",
"sessionCount",
"tags",
"registrationFull",
"hasWaitlist",
"photo",
"programUrl",
"facility",
"distanceMiles",
"coach"
],
"additionalProperties": false
}
},
"coaches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"memberType": {
"anyOf": [
{
"type": "string",
"enum": [
"PGA Member",
"PGA Associate"
]
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"slug": {
"type": "string",
"description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools."
},
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"type": "string",
"format": "uri",
"description": "The URL to the coach's public PGA.com profile"
},
"bookingUrl": {
"type": "string",
"format": "uri",
"description": "The URL to view the coach's offerings and book a lesson"
},
"location": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
}
},
"required": [
"name",
"title",
"memberType",
"slug",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"location"
],
"additionalProperties": false
},
"description": "Unique coaches hosting the returned programs. Present these alongside the programs so golfers can see who is teaching."
},
"facilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The IANA timezone for the facility, when available"
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode",
"timezone"
],
"additionalProperties": false
},
"description": "Unique facilities hosting the returned programs. Present these alongside the programs so golfers can see where programs are held."
},
"count": {
"type": "number"
},
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"programs",
"coaches",
"facilities",
"count",
"hasNextPage",
"endCursor"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_golf_coach_availability(slug, offeringId)
Retrieve offering details and available lesson times for one specific coach. Use this when the user asks for schedule, openings, or available times for a known coach. If the user has not selected a coach yet, call `search_golf_coaches` first (or reuse a coach already identified from `search_golf_programs`). Coach `slug` and offering `id` values are internal identifiers and must never be shown or mentioned to the user.
入力スキーマ
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Coach slug from a pga.com profile URL, prior `search_golf_coaches` results, or prior `search_golf_programs` results (e.g., `anthonyvitale`). Internal-only value; never display or mention it to the user."
},
"offeringId": {
"description": "Optional offering ID to scope availability to a single offering. Use this when the user has already selected an offering.",
"type": "string"
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}出力スキーマ
{
"type": "object",
"properties": {
"coach": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools."
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"offerings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The unique identifier for the offering. DO NOT display this to the user. Reference this as the `offeringId` when booking a lesson via the `book_golf_lesson` tool."
},
"title": {
"type": "string",
"description": "The name of the offering. Use this instead of the `id` when describing the offering to the user"
},
"location": {
"type": "string",
"description": "Where the session will take place"
},
"timezone": {
"type": "string",
"description": "The IANA timezone (e.g., America/Los_Angeles) for the location"
},
"price": {
"type": "number",
"description": "Price per session in USD"
},
"duration": {
"type": "number",
"description": "Session duration in minutes"
},
"requiresPrepayment": {
"type": "boolean",
"description": "Whether this offering requires online prepayment"
},
"availableTimes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The available times for the offering in ISO8601 (format with offset)"
}
},
"required": [
"id",
"title",
"location",
"timezone",
"price",
"duration",
"requiresPrepayment",
"availableTimes"
],
"additionalProperties": false
}
}
},
"required": [
"slug",
"name",
"title",
"photo",
"offerings"
],
"additionalProperties": false
}
},
"required": [
"coach"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢book_golf_lesson(offeringId, startDateTime, student)
Request to book a golf lesson for a specific coach's offering. - `offeringId` is an internal identifier; never show or mention it to the user. - A continuation URL will be returned that you can direct the user to after calling this tool. - If the offering was booked automatically (e.g., free lesson or no prepayment required), the confirmation code will also be included.
入力スキーマ
{
"type": "object",
"properties": {
"offeringId": {
"type": "string",
"description": "Internal offering record ID to book a lesson for. Never display or mention this identifier to the user."
},
"startDateTime": {
"type": "string",
"description": "The start date and time of the lesson in ISO 8601 format."
},
"student": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "adult"
},
"firstName": {
"type": "string",
"description": "The first name of the student booking the lesson."
},
"lastName": {
"type": "string",
"description": "The last name of the student booking the lesson."
},
"email": {
"type": "string",
"description": "The email address of the student booking the lesson."
},
"phone": {
"description": "The phone number of the student booking the lesson.",
"type": "string"
}
},
"required": [
"type",
"firstName",
"lastName",
"email"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "junior"
},
"firstName": {
"type": "string",
"description": "The first name of the student booking the lesson."
},
"lastName": {
"type": "string",
"description": "The last name of the student booking the lesson."
},
"guardianFirstName": {
"type": "string",
"description": "The first name of the guardian booking the lesson."
},
"guardianLastName": {
"type": "string",
"description": "The last name of the guardian booking the lesson."
},
"email": {
"type": "string",
"description": "The email address of the student booking the lesson."
},
"phone": {
"description": "The phone number of the student booking the lesson.",
"type": "string"
}
},
"required": [
"type",
"firstName",
"lastName",
"guardianFirstName",
"guardianLastName",
"email"
],
"description": "The contact information for the student participating in the lesson. Student type can be either 'adult' or 'junior'. If the student is a junior, the guardian's information is also required."
}
]
}
},
"required": [
"offeringId",
"startDateTime",
"student"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}出力スキーマ
{
"type": "object",
"properties": {
"lesson": {
"description": "Confirmation details for the booked lesson (if booked successfully).",
"type": "object",
"properties": {
"confirmationCode": {
"type": "string"
}
},
"required": [
"confirmationCode"
],
"additionalProperties": false
},
"continuationUrl": {
"description": "The URL to continue the booking flow after calling this tool.",
"type": "string"
},
"message": {
"type": "string",
"description": "A message describing the outcome of the booking."
}
},
"required": [
"message"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}コミュニティ
エビデンス