Koskamo

Stymie Golf MCP

A public, read-only MCP server providing AI agents with structured access to golf course directories, scorecards, equipment data, verified deals, and trip planning tools across six countries. It enables agents to search for courses, retrieve detailed amenities and ratings, find nearby locations, and analyze equipment without requiring user authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Stymie Golf MCP logo, by StymieCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Stymie
You need:No Stymie account or API key is required.
MCP endpoint (Streamable HTTP)
https://mcp-production-680d.up.railway.app/mcp
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 12 of 12 declare behavior hints · 5 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for golf courses by name, city, or proximity to a ZIP code
  • Retrieve hole-by-hole scorecards and course ratings
  • Find verified in-stock equipment deals checked within 48 hours
  • Plan a golf trip by ranking nearby courses based on access and hole count

Source and maintenance

Community listingRegistry 2.0.0
Maintenance checked

Protocol and capabilities

Server
stymie-golf 2.1.4
MCP protocol negotiated in check
2025-11-25
Tools
12 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

12 advertised

search_courses — Search Courses
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search for a named course or filter the directory by city/state, access, and holes. For a trip near a place, station, address, or ZIP, call find_nearby_courses FIRST; do not put the place name in query (query searches course names). You may also pass location here for a proximity search. Returns canonical Stymie URLs, reusable slugs, access, holes, scorecard availability, and straight-line miles when a location is supplied. Copy returned URLs; never construct county slugs. Next: get_course with a returned URL, or build_golf_trip with the resolved center and preferences.

search_courses input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "zip": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "US ZIP; use location for other places"
    },
    "city": {
      "type": "string",
      "description": "City name"
    },
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Page number"
    },
    "type": {
      "enum": [
        "public",
        "private",
        "semi_private",
        "municipal",
        "resort"
      ],
      "type": "string",
      "description": "Course type filter"
    },
    "holes": {
      "anyOf": [
        {
          "enum": [
            "9",
            "18",
            "27",
            "36"
          ],
          "type": "string"
        },
        {
          "type": "number",
          "const": 9
        },
        {
          "type": "number",
          "const": 18
        },
        {
          "type": "number",
          "const": 27
        },
        {
          "type": "number",
          "const": 36
        }
      ],
      "description": "Number of holes"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Results per page (max 50)"
    },
    "query": {
      "type": "string",
      "description": "Course name search (partial match)"
    },
    "state": {
      "type": "string",
      "maxLength": 3,
      "minLength": 2,
      "description": "State/province code, e.g. IL, ON, NSW"
    },
    "country": {
      "enum": [
        "US",
        "CA",
        "GB",
        "IE",
        "AU",
        "NZ"
      ],
      "type": "string"
    },
    "location": {
      "type": "string",
      "maxLength": 200,
      "description": "Plain-language place, station, address, or US ZIP; find_nearby_courses is the recommended first step for trips"
    },
    "distance_miles": {
      "type": "number",
      "default": 50,
      "maximum": 50,
      "minimum": 1
    }
  }
}
search_courses annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_course — Get Course
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details for a specific golf course by a returned Stymie URL or slug. Returns name, location, type, holes, architect, year built, amenities, public contact info, recorded closure status, and published tee ratings. A recorded open flag is not a live confirmation of seasonal opening or tee-time availability. Covers the US, Canada, UK, Ireland, Australia and New Zealand.

get_course input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Paste the canonical Stymie course URL or reusable slug returned by search_courses, find_nearby_courses, or build_golf_trip"
    }
  }
}
get_course annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_scorecard — Get Scorecard
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the full scorecard for a golf course: all tee sets with hole-by-hole par, yardage, stroke index, and front/back nine ratings. Available for thousands of courses with scorecard data.

get_scorecard input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Paste the canonical Stymie course URL or reusable slug returned by search_courses, find_nearby_courses, or build_golf_trip"
    }
  }
}
get_scorecard annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_architect — Get Architect
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get details about a golf course architect: bio, Wikipedia image, birth/death years, nationality, and all courses they designed grouped by state. Provide either the architect name or URL slug.

get_architect input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "name": {
      "type": "string",
      "description": "Architect name, e.g. \"Robert Trent Jones Sr.\""
    },
    "slug": {
      "type": "string",
      "description": "Architect slug, e.g. \"robert-trent-jones-sr\""
    }
  }
}
get_architect annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_leaderboard — Get Leaderboard
Advertised by the server during the last successful anonymous check.
Advertised read-only

Rank courses in a state using published tee data: hardest uses highest slope, easiest uses lowest slope among public/municipal courses, and longest uses maximum yardage. Returns each course name, access type, measured value and canonical Stymie URL. Link each recommended course using its returned URL and identify the ranking metric. These are tee-data rankings, not quality ratings or current booking availability; disclose private access.

get_leaderboard input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "state"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "Number of results"
    },
    "state": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "2-letter state code, e.g. \"NJ\""
    },
    "category": {
      "enum": [
        "hardest",
        "easiest",
        "longest"
      ],
      "type": "string",
      "default": "hardest",
      "description": "Ranking category"
    }
  }
}
get_leaderboard annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_tee_times — Get course booking information
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get booking information for a course already returned by search_courses or find_nearby_courses. Returns its Stymie course-page link, where the golfer can find the official website or phone, plus an optional early-access alerts page. This legacy search_tee_times tool does not search live inventory: status is always not_available. It cannot book, pay, enroll in alerts, or confirm availability.

search_tee_times input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Desired date (YYYY-MM-DD)"
    },
    "slug": {
      "type": "string",
      "description": "Canonical Stymie course URL or full_slug returned by a course lookup"
    },
    "players": {
      "type": "integer",
      "maximum": 4,
      "minimum": 1,
      "description": "Number of players"
    }
  }
}
search_tee_times annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_stymie — Search Stymie
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search Stymie across golf courses, current equipment, architects, and major site tools. Use this first when the user does not specify which Stymie collection they need.

search_stymie input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "A course, equipment model, brand, architect, destination, or golf topic"
    },
    "state": {
      "type": "string",
      "maxLength": 3,
      "minLength": 2,
      "description": "Optional 2-letter state filter for course results"
    }
  }
}
search_stymie annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_equipment — Search Equipment
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search current golf balls, drivers, putters, rangefinders, and launch monitors. Returns official Stymie detail URLs, images, MSRP, and stated best-for guidance when published.

search_equipment input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 30,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "Brand and/or model name"
    },
    "category": {
      "enum": [
        "ball",
        "driver",
        "putter",
        "rangefinder",
        "launch_monitor"
      ],
      "type": "string"
    }
  }
}
search_equipment annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_nearby_courses — Find Nearby Courses
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

START HERE to plan golf near a place, transit station, address, or US ZIP: pass the place text as location, plus access (public/private/all) and holes (9/18) if known. Coordinates are optional; no slug knowledge is needed. Resolves the location and returns its labeled center and a nearest-first ranked shortlist with canonical Stymie URLs, reusable slugs, straight-line miles, access, holes, and scorecard availability. If the place is ambiguous, ask the golfer to choose a candidate. NEXT call build_golf_trip with the returned latitude/longitude and the same preferences for 1-4 course picks. Use search_courses only for a specific course name. Copy returned URLs verbatim; distances are not drive/transit times.

find_nearby_courses input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "holes": {
      "anyOf": [
        {
          "enum": [
            "9",
            "18",
            "27",
            "36"
          ],
          "type": "string"
        },
        {
          "type": "number",
          "const": 9
        },
        {
          "type": "number",
          "const": 18
        },
        {
          "type": "number",
          "const": 27
        },
        {
          "type": "number",
          "const": 36
        }
      ],
      "description": "Total course holes; omit if flexible"
    },
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1
    },
    "state": {
      "type": "string",
      "maxLength": 3,
      "minLength": 2,
      "description": "State/province code, e.g. IL, ON, or NSW, to disambiguate a place"
    },
    "access": {
      "enum": [
        "all",
        "public",
        "private",
        "semi_private",
        "municipal",
        "resort"
      ],
      "type": "string",
      "default": "all"
    },
    "country": {
      "enum": [
        "US",
        "CA",
        "GB",
        "IE",
        "AU",
        "NZ"
      ],
      "type": "string",
      "description": "Country code to disambiguate a place; GB means UK"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90
    },
    "location": {
      "type": "string",
      "maxLength": 200,
      "description": "Place name, transit station, address, or US ZIP; extract the place from the golfer’s sentence"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180
    },
    "distance_miles": {
      "anyOf": [
        {
          "enum": [
            "5",
            "10",
            "20",
            "25",
            "50"
          ],
          "type": "string"
        },
        {
          "type": "number",
          "const": 5
        },
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 25
        },
        {
          "type": "number",
          "const": 50
        }
      ],
      "default": "25",
      "description": "Search radius in miles: one of 5, 10, 20, 25, 50"
    }
  }
}
find_nearby_courses annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
build_golf_trip — Build Golf Trip
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

AFTER find_nearby_courses, pass its center latitude/longitude, access and holes preferences, and number_of_courses to make a 1-4 course shortlist. You can also start directly with a plain-language location (place, station, address, or US ZIP). Optional tee yardage and slope ranges rank matching tees by fit plus straight-line distance; without tee preferences, courses are nearest-first and missing scorecards are retained. Returns ranked course picks with canonical Stymie URLs, reusable slugs, selection reasons, distance, access, holes, and published tee data when available. Public access excludes unknown/private courses; private picks require the golfer to confirm access. No booking, tee-time availability, transit routing, or drive times are provided. Use returned URLs as citations without inventing slugs.

build_golf_trip input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "holes": {
      "anyOf": [
        {
          "enum": [
            "9",
            "18",
            "27",
            "36"
          ],
          "type": "string"
        },
        {
          "type": "number",
          "const": 9
        },
        {
          "type": "number",
          "const": 18
        },
        {
          "type": "number",
          "const": 27
        },
        {
          "type": "number",
          "const": 36
        }
      ]
    },
    "state": {
      "type": "string",
      "maxLength": 3,
      "minLength": 2
    },
    "access": {
      "enum": [
        "all",
        "public",
        "private",
        "semi_private",
        "municipal",
        "resort"
      ],
      "type": "string",
      "default": "public"
    },
    "country": {
      "enum": [
        "US",
        "CA",
        "GB",
        "IE",
        "AU",
        "NZ"
      ],
      "type": "string",
      "description": "Country code to disambiguate a place; GB means UK"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90
    },
    "location": {
      "type": "string",
      "maxLength": 200,
      "description": "Place name, station, address, or US ZIP; omit when reusing the nearby result coordinates"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180
    },
    "slope_max": {
      "type": "integer",
      "maximum": 155,
      "minimum": 55
    },
    "slope_min": {
      "type": "integer",
      "maximum": 155,
      "minimum": 55
    },
    "tee_yards_max": {
      "type": "integer",
      "maximum": 8500,
      "minimum": 500
    },
    "tee_yards_min": {
      "type": "integer",
      "maximum": 8500,
      "minimum": 500
    },
    "distance_miles": {
      "anyOf": [
        {
          "enum": [
            "5",
            "10",
            "20",
            "25",
            "50"
          ],
          "type": "string"
        },
        {
          "type": "number",
          "const": 5
        },
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 25
        },
        {
          "type": "number",
          "const": 50
        }
      ],
      "default": "25",
      "description": "Search radius in miles: one of 5, 10, 20, 25, 50"
    },
    "number_of_courses": {
      "type": "integer",
      "default": 2,
      "maximum": 4,
      "minimum": 1
    }
  }
}
build_golf_trip annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_deals — Get Deals
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get golf-equipment sale offers that were marked in stock when checked within the last 48 hours, with a checked price below list price. Returns each product’s canonical Stymie detail URL, merchant offer URL, price, savings and checked_at time. Link every recommended product to its returned Stymie URL, and use the returned offer URL for the merchant. Prices and stock can change after checking; confirm at the merchant. Disclose that offer links may earn Stymie a commission at no extra cost to the buyer.

get_deals input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1
    },
    "category": {
      "enum": [
        "ball",
        "driver",
        "putter",
        "rangefinder",
        "launch_monitor"
      ],
      "type": "string"
    }
  }
}
get_deals annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_data_coverage — Get Data Coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return a live count of Stymie course, scorecard, logo, architect, equipment, and current-deal coverage. Use this instead of quoting hardcoded catalog sizes.

get_data_coverage input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_data_coverage annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

4 advertised

stymie-course-cards — Stymie Golf course and trip cards

Advertised by the server during the last successful anonymous check.

Read-only course shortlist with canonical Stymie links. No bookings or live tee times.

stymie-course-cards URI
ui://stymie/course-cards-v3.html

MIME type: text/html;profile=mcp-app

stymie-course-cards-legacy-1 — Stymie Golf course and trip cards

Advertised by the server during the last successful anonymous check.

Read-only course shortlist with canonical Stymie links. No bookings or live tee times.

stymie-course-cards-legacy-1 URI
ui://stymie/course-cards-v1.html

MIME type: text/html;profile=mcp-app

stymie-course-cards-legacy-2 — Stymie Golf course and trip cards

Advertised by the server during the last successful anonymous check.

Read-only course shortlist with canonical Stymie links. No bookings or live tee times.

stymie-course-cards-legacy-2 URI
ui://stymie/course-cards-v2.html

MIME type: text/html;profile=mcp-app

stymie-data-coverage — Stymie Golf data coverage

Advertised by the server during the last successful anonymous check.

A live snapshot of structured course and equipment coverage.

stymie-data-coverage URI
stymie://data-coverage

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1128 ms
95th percentile latency
1128 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1128 ms · metadata changed · 12 tool(s), 4 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http stymie-golf-mcp https://mcp-production-680d.up.railway.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add stymie-golf-mcp --url https://mcp-production-680d.up.railway.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable stymie-golf-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "stymie-golf-mcp": {
      "url": "https://mcp-production-680d.up.railway.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "stymie-golf-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp-production-680d.up.railway.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start stymie-golf-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "stymie-golf-mcp": {
      "type": "http",
      "url": "https://mcp-production-680d.up.railway.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http stymie-golf-mcp https://mcp-production-680d.up.railway.app/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp-production-680d.up.railway.app/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "stymie-golf-mcp": {
      "serverUrl": "https://mcp-production-680d.up.railway.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Stymie Golf MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.