Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,542Letters: 14Defects: 1,324counted 1 min ago
teppi

Server definition

Hash
sha256:a8194848d32bfee48e6c0b144c4e932b1cca881d4b0b7a2aed56f9bb6b8a4475
What it is
What a remote MCP server returned when asked what it offers: 4 tools

The blob, as servednamed by its sha256

{ "instructions": "The PGA of America MCP server is designed to provide AI agents and LLMs with the insight and expertise of over 31,000 certified PGA golf professionals through a suite of specialized tools. Use this server to find a golf coach, search for programs, book a lesson, and improve your game.\n\n## Tool Selection Guardrails\n\n- Use `search_golf_coaches` when the user is trying to find, browse, or compare coaches for private lessons in a location. Coach results also include a short teaser of upcoming public programs those coaches host.\n- Use `search_golf_programs` when the user is trying to find clinics, camps, classes, group events, or other PGA Coach programs in a location.\n- Use `get_golf_coach_availability` only when a specific coach has already been identified (via coach profile URL, known slug, or prior selection from `search_golf_coaches` or `search_golf_programs` results).\n- If the user asks for availability but has not selected a coach, run `search_golf_coaches` first (or reuse a coach already identified from `search_golf_programs`) and ask the user to choose a coach.\n- If the user request is unrelated to golf lesson/program discovery or lesson booking (for example weather, travel booking, or general sports trivia), do not call these tools.\n- Never display or mention internal identifiers to the user (for example coach `slug`, offering `id`/`offeringId`, program `id`, facility IDs, or pagination cursors). Use these values only for tool calls.\n\n## Workflows\n\n### Find a program\n\n1. Collect a location if the user has not provided one.\n2. Call `search_golf_programs` with `searchLocation` (and optional `searchRadius`; default 50 miles).\n3. Present program titles, dates, prices, hosting coaches, and facilities. Do not expose internal identifiers.\n4. Use the top-level `coaches` and `facilities` arrays to summarize who is teaching and where programs are held.\n5. Direct the user to each program's `programUrl` to view details and register. Offer coach `profileUrl` / `bookingUrl` when helpful.\n6. If the user wants more results from the same query, call `search_golf_programs` again with `paginationCursor` from the prior response while preserving the original location and radius. Additional pages reuse the collected nearby programs and do not repeat GraphQL discovery.\n\n### Book a lesson\n\nUse the following tool-call sequence to successfully book a lesson:\n\n1. Collect missing prerequisites:\n - If a coach was already identified from `search_golf_programs`, reuse that coach `slug` and skip to availability.\n - If no location is provided and no coach is selected, ask for a location before calling `search_golf_coaches`.\n - If the user wants more coach results from the same query, call `search_golf_coaches` again with `paginationCursor` from the prior response while preserving the original location and radius.\n2. If no coach is selected yet, call `search_golf_coaches` with the user's location (`searchLocation`, optionally `searchRadius`) to find candidate coaches and offerings.\n3. Present coaches and offering titles to the user, but do not expose internal identifiers. Save the selected coach `slug` and desired offering context for internal use only.\n4. Resolve references to selected coaches (for example \"Anthony\" or \"him\") to the chosen coach `slug` before continuing. If ambiguous, ask a clarifying question.\n5. Call `get_golf_coach_availability` with the selected coach `slug` to retrieve up-to-date offering availability (`availableTimes`) and offering IDs.\n - If the user already selected a specific offering, pass its `offeringId` to scope results to that offering.\n6. Let the user choose an offering and time:\n - Prefer the availability/search widgets when shown. When the user continues from a widget, read the selected booking from the widget/view model context (`offeringId`, `startDateTime`, title, coach, price) — treat that as their selection and continue in chat (do not send them back into widget forms). The visible follow-up message is human-friendly only; do not expect internal IDs in chat text.\n - Chat-only booking (no widget interaction) is also supported: ask the user to choose one available time from the tool results.\n - Resolve the offering by title from prior search or availability context when needed. If multiple offerings share a similar name, ask a clarifying question before booking.\n - Match the chosen date/time to one of the returned `availableTimes` ISO8601 values for `startDateTime`.\n7. Collect required participant details in chat (natural language), then call `book_golf_lesson`:\n - Ask who the lesson is for. If they are booking for someone other than themselves, or age is unclear, ask whether that person is 17 or younger.\n - Adult (18+): `firstName`, `lastName`, `email`, optional `phone`\n - Junior (17 or younger): `firstName`, `lastName`, `guardianFirstName`, `guardianLastName`, `email`, optional `phone`\n - Call `book_golf_lesson` with:\n - `offeringId` (from widget/view model context or availability/search result, never user-entered text)\n - `startDateTime` (exact ISO8601 from widget/view model context, or one of the returned `availableTimes`)\n - `student` object matching the `adult` or `junior` schema\n8. Handle booking outcome:\n - If `lesson.confirmationCode` is returned, confirm the booking and share the confirmation code.\n - If `continuationUrl` is returned, direct the user to that URL to complete payment or other required steps.\n - If only `message` indicates failure, report it and help the user choose another time or offering.\n", "tools": [ { "description": "Request to book a golf lesson for a specific coach's offering.\n- `offeringId` is an internal identifier; never show or mention it to the user.\n- A continuation URL will be returned that you can direct the user to after calling this tool.\n- If the offering was booked automatically (e.g., free lesson or no prepayment required), the confirmation code will also be included.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "offeringId": { "description": "Internal offering record ID to book a lesson for. Never display or mention this identifier to the user.", "type": "string" }, "startDateTime": { "description": "The start date and time of the lesson in ISO 8601 format.", "type": "string" }, "student": { "anyOf": [ { "properties": { "email": { "description": "The email address of the student booking the lesson.", "type": "string" }, "firstName": { "description": "The first name of the student booking the lesson.", "type": "string" }, "lastName": { "description": "The last name of the student booking the lesson.", "type": "string" }, "phone": { "description": "The phone number of the student booking the lesson.", "type": "string" }, "type": { "const": "adult", "type": "string" } }, "required": [ "type", "firstName", "lastName", "email" ], "type": "object" }, { "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.", "properties": { "email": { "description": "The email address of the student booking the lesson.", "type": "string" }, "firstName": { "description": "The first name of the student booking the lesson.", "type": "string" }, "guardianFirstName": { "description": "The first name of the guardian booking the lesson.", "type": "string" }, "guardianLastName": { "description": "The last name of the guardian booking the lesson.", "type": "string" }, "lastName": { "description": "The last name of the student booking the lesson.", "type": "string" }, "phone": { "description": "The phone number of the student booking the lesson.", "type": "string" }, "type": { "const": "junior", "type": "string" } }, "required": [ "type", "firstName", "lastName", "guardianFirstName", "guardianLastName", "email" ], "type": "object" } ] } }, "required": [ "offeringId", "startDateTime", "student" ], "type": "object" }, "name": "book_golf_lesson", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "continuationUrl": { "description": "The URL to continue the booking flow after calling this tool.", "type": "string" }, "lesson": { "additionalProperties": false, "description": "Confirmation details for the booked lesson (if booked successfully).", "properties": { "confirmationCode": { "type": "string" } }, "required": [ "confirmationCode" ], "type": "object" }, "message": { "description": "A message describing the outcome of the booking.", "type": "string" } }, "required": [ "message" ], "type": "object" } }, { "description": "Retrieve offering details and available lesson times for one specific coach.\nUse this when the user asks for schedule, openings, or available times for a known coach.\nIf the user has not selected a coach yet, call `search_golf_coaches` first (or reuse a coach already identified from `search_golf_programs`).\nCoach `slug` and offering `id` values are internal identifiers and must never be shown or mentioned to the user.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "offeringId": { "description": "Optional offering ID to scope availability to a single offering. Use this when the user has already selected an offering.", "type": "string" }, "slug": { "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.", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_golf_coach_availability", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "coach": { "additionalProperties": false, "properties": { "name": { "type": "string" }, "offerings": { "items": { "additionalProperties": false, "properties": { "availableTimes": { "description": "The available times for the offering in ISO8601 (format with offset)", "items": { "type": "string" }, "type": "array" }, "duration": { "description": "Session duration in minutes", "type": "number" }, "id": { "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.", "type": "string" }, "location": { "description": "Where the session will take place", "type": "string" }, "price": { "description": "Price per session in USD", "type": "number" }, "requiresPrepayment": { "description": "Whether this offering requires online prepayment", "type": "boolean" }, "timezone": { "description": "The IANA timezone (e.g., America/Los_Angeles) for the location", "type": "string" }, "title": { "description": "The name of the offering. Use this instead of the `id` when describing the offering to the user", "type": "string" } }, "required": [ "id", "title", "location", "timezone", "price", "duration", "requiresPrepayment", "availableTimes" ], "type": "object" }, "type": "array" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools.", "type": "string" }, "title": { "type": "string" } }, "required": [ "slug", "name", "title", "photo", "offerings" ], "type": "object" } }, "required": [ "coach" ], "type": "object" } }, { "description": "Search for qualified PGA golf coaches listed on pga.com/coach in the specified location (required).\nUse this tool when the user asks to find, browse, or compare coaches for private lessons in a location.\nFor location-first discovery of clinics, camps, classes, or other group programs, use `search_golf_programs` instead.\nIf the user asks for availability for a specific coach, use `get_golf_coach_availability` instead.\nInternal record identifiers (for example coach `slug` and offering `id`) are for tool calls only and must never be shown or mentioned to the user.\n- 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`.\n- Use that program context to recommend which group offering best fits the golfer when relevant; present upcoming programs when available.\n- Results are ordered by proximity to the search location, so list them to the user in this order.\n- Results are paginated, so use the pagination cursor provided at the end of the response to retrieve the next page of results.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "paginationCursor": { "description": "Pagination cursor from a prior `search_golf_coaches` response. Use only when fetching additional pages of the same search.", "type": "string" }, "searchLocation": { "description": "Required location used to find nearby coaches. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates.", "type": "string" }, "searchRadius": { "default": 25, "description": "Search radius in miles from `searchLocation`. Use 25 by default unless the user requests a different radius.", "minimum": 0, "type": "number" } }, "required": [ "searchLocation" ], "type": "object" }, "name": "search_golf_coaches", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "coaches": { "items": { "additionalProperties": false, "properties": { "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bookingUrl": { "description": "The URL to view the coach's offerings and book a lesson", "format": "uri", "type": "string" }, "facilities": { "items": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" }, "location": { "additionalProperties": false, "properties": { "city": { "type": "string" }, "state": { "type": "string" } }, "required": [ "city", "state" ], "type": "object" }, "memberType": { "anyOf": [ { "enum": [ "PGA Member", "PGA Associate" ], "type": "string" }, { "type": "null" } ], "description": "The coach's membership designation with the PGA of America" }, "name": { "type": "string" }, "nextAvailability": { "anyOf": [ { "additionalProperties": false, "properties": { "dateTime": { "description": "The next available time in ISO8601 format with offset", "type": "string" }, "timezone": { "description": "The IANA timezone (e.g., America/Los_Angeles)", "type": "string" } }, "required": [ "dateTime", "timezone" ], "type": "object" }, { "type": "null" } ], "description": "The next available time to book a session" }, "offerings": { "items": { "additionalProperties": false, "properties": { "category": { "enum": [ "INTRO", "PRIVATE", "ON_COURSE", "SWING_EVALUATION", "CLUB_FITTING", "OTHER" ], "type": "string" }, "duration": { "description": "Session duration in minutes", "type": "number" }, "id": { "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.", "type": "string" }, "location": { "description": "Where the session will take place", "type": "string" }, "price": { "description": "Price per session in USD", "type": "number" }, "requiresPrepayment": { "description": "Whether this offering requires online prepayment", "type": "boolean" }, "timezone": { "description": "The IANA timezone (e.g., America/Los_Angeles) for the location", "type": "string" }, "title": { "description": "The name of the offering. Use this instead of the `id` when describing the offering to the user", "type": "string" } }, "required": [ "id", "title", "category", "location", "timezone", "price", "duration", "requiresPrepayment" ], "type": "object" }, "type": "array" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "profileUrl": { "description": "The URL to the coach's profile", "format": "uri", "type": "string" }, "programs": { "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.", "items": { "additionalProperties": false, "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "endDateTime": { "description": "Program end time in ISO8601 format with offset", "type": "string" }, "facility": { "anyOf": [ { "additionalProperties": false, "properties": { "city": { "type": "string" }, "name": { "type": "string" }, "state": { "type": "string" }, "street": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "zipCode": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "street", "city", "state", "zipCode" ], "type": "object" }, { "type": "null" } ] }, "hasWaitlist": { "type": "boolean" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "Program price in USD" }, "programUrl": { "description": "Public URL to view details and register", "format": "uri", "type": "string" }, "registrationFull": { "type": "boolean" }, "sessionCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "Number of sessions in the program, when available" }, "startDateTime": { "description": "Program start time in ISO8601 format with offset", "type": "string" }, "tags": { "items": { "type": "string" }, "type": "array" }, "timezone": { "description": "The IANA timezone for the program times", "type": "string" }, "title": { "type": "string" } }, "required": [ "title", "description", "startDateTime", "endDateTime", "timezone", "price", "sessionCount", "tags", "registrationFull", "hasWaitlist", "photo", "programUrl", "facility" ], "type": "object" }, "type": "array" }, "slug": { "description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools.", "type": "string" }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "slug", "name", "title", "memberType", "location", "bio", "photo", "profileUrl", "bookingUrl", "nextAvailability", "offerings", "facilities", "programs" ], "type": "object" }, "type": "array" }, "count": { "type": "number" }, "endCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "hasNextPage": { "type": "boolean" } }, "required": [ "coaches", "count", "hasNextPage", "endCursor" ], "type": "object" } }, { "description": "Search for upcoming public PGA Coach programs (clinics, camps, classes, and other group events) near a location (required).\nUse this tool when the user asks to find programs, clinics, camps, classes, or group events — not private one-on-one lessons.\nFor private lesson coaches, use `search_golf_coaches` instead.\nInternal record identifiers (for example program `id` and coach `slug`) are for tool calls only and must never be shown or mentioned to the user.\n- Search results include program details plus the hosting coach and facility for each program.\n- 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.\n- Results are ordered by program start instant and filtered to the requested radius.\n- 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.\n- 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.\n- 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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "searchLocation": { "description": "Required location used to find nearby PGA Coach programs. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates.", "type": "string" }, "searchRadius": { "default": 50, "description": "Search radius in miles from `searchLocation`. Use 50 by default unless the user requests a different radius.", "minimum": 0, "type": "number" } }, "required": [ "searchLocation" ], "type": "object" }, "name": "search_golf_programs", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "coaches": { "description": "Unique coaches hosting the returned programs. Present these alongside the programs so golfers can see who is teaching.", "items": { "additionalProperties": false, "properties": { "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bookingUrl": { "description": "The URL to view the coach's offerings and book a lesson", "format": "uri", "type": "string" }, "location": { "additionalProperties": false, "properties": { "city": { "type": "string" }, "state": { "type": "string" } }, "required": [ "city", "state" ], "type": "object" }, "memberType": { "anyOf": [ { "enum": [ "PGA Member", "PGA Associate" ], "type": "string" }, { "type": "null" } ], "description": "The coach's membership designation with the PGA of America" }, "name": { "type": "string" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "profileUrl": { "description": "The URL to the coach's public PGA.com profile", "format": "uri", "type": "string" }, "slug": { "description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools.", "type": "string" }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "title", "memberType", "slug", "bio", "photo", "profileUrl", "bookingUrl", "location" ], "type": "object" }, "type": "array" }, "count": { "type": "number" }, "endCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "facilities": { "description": "Unique facilities hosting the returned programs. Present these alongside the programs so golfers can see where programs are held.", "items": { "additionalProperties": false, "properties": { "city": { "type": "string" }, "name": { "type": "string" }, "state": { "type": "string" }, "street": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "timezone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "The IANA timezone for the facility, when available" }, "zipCode": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "street", "city", "state", "zipCode", "timezone" ], "type": "object" }, "type": "array" }, "hasNextPage": { "type": "boolean" }, "programs": { "items": { "additionalProperties": false, "properties": { "coach": { "additionalProperties": false, "properties": { "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bookingUrl": { "description": "The URL to view the coach's offerings and book a lesson", "format": "uri", "type": "string" }, "location": { "additionalProperties": false, "properties": { "city": { "type": "string" }, "state": { "type": "string" } }, "required": [ "city", "state" ], "type": "object" }, "memberType": { "anyOf": [ { "enum": [ "PGA Member", "PGA Associate" ], "type": "string" }, { "type": "null" } ], "description": "The coach's membership designation with the PGA of America" }, "name": { "type": "string" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "profileUrl": { "description": "The URL to the coach's public PGA.com profile", "format": "uri", "type": "string" }, "slug": { "description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools.", "type": "string" }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "title", "memberType", "slug", "bio", "photo", "profileUrl", "bookingUrl", "location" ], "type": "object" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "distanceMiles": { "description": "Approximate distance from the search location in miles", "type": "number" }, "endDateTime": { "description": "Program end time in ISO8601 format with offset", "type": "string" }, "facility": { "additionalProperties": false, "properties": { "city": { "type": "string" }, "name": { "type": "string" }, "state": { "type": "string" }, "street": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "timezone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "The IANA timezone for the facility, when available" }, "zipCode": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "street", "city", "state", "zipCode", "timezone" ], "type": "object" }, "hasWaitlist": { "type": "boolean" }, "id": { "description": "Internal unique identifier for the program. Do not display or mention this value to users.", "type": "string" }, "photo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "Program price in USD" }, "programUrl": { "description": "Public URL where a golfer can view and register", "format": "uri", "type": "string" }, "registrationFull": { "type": "boolean" }, "sessionCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "Number of sessions included in the program, when available" }, "startDateTime": { "description": "Program start time in ISO8601 format with offset", "type": "string" }, "tags": { "items": { "type": "string" }, "type": "array" }, "timezone": { "description": "The IANA timezone (e.g., America/Los_Angeles)", "type": "string" }, "title": { "type": "string" } }, "required": [ "id", "title", "description", "startDateTime", "endDateTime", "timezone", "price", "sessionCount", "tags", "registrationFull", "hasWaitlist", "photo", "programUrl", "facility", "distanceMiles", "coach" ], "type": "object" }, "type": "array" } }, "required": [ "programs", "coaches", "facilities", "count", "hasNextPage", "endCursor" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:a8194848d32bfee48e6c0b144c4e932b1cca881d4b0b7a2aed56f9bb6b8a4475 | sha256sum