TRAILGOAT
Developers · TrailGoat as a connector

TrailGoat in your
AI assistant

Add TrailGoat to Claude, or any app that speaks MCP, and ask it about trail races: find one, read its aid stations and cutoffs, see how last year went, and get a link that opens the Run Planner at your goal time. Free, no catch. No key, no account.

Connect it

TrailGoat runs a remote MCP server. Everything starts from this one address:

https://trailgoat.run/mcp

Claude

  1. In Claude, on the web or the desktop app, open Settings, then Connectors, and choose Add custom connector.
  2. Name it TrailGoat and paste the address above. There is nothing to sign in to, so leave the advanced settings alone.
  3. In a chat, turn TrailGoat on from the tools menu and ask away.

On a Team or Enterprise plan, an owner adds custom connectors for the organisation first; then everyone can switch it on.

Claude Code

claude mcp add --transport http trailgoat https://trailgoat.run/mcp

Any other MCP client

Most clients only need the address. One set up by a file usually looks like this:

{
  "mcpServers": {
    "trailgoat": { "type": "http", "url": "https://trailgoat.run/mcp" }
  }
}

For the protocol minded: Streamable HTTP, one JSON reply per request, no sessions and no auth. It speaks protocol revision 2026-07-28, and the handshake revisions 2025-11-25, 2025-06-18 and 2025-03-26 for older clients.

Things to ask

  • Find me a 100-miler in Colorado in July with under 20,000 ft of climbing.
  • What are the aid stations and cutoffs at Leadville? Where can my crew meet me?
  • Give me a plan link for Grayson Highlands at 11 hours, starting at 6 AM.
  • Which 50Ks are within 100 miles of Asheville?
  • How many people finished last year, and what was the median time?

The tools

Four tools, all read only. Each answers with a short summary the assistant can read out and the same facts as structured data, imperial first with metric alongside, and every answer carries a link to the course page it came from.

search_courses
Races by name or nickname, near a place or a point, by distance or race category, by climbing, by month, by country and by state or region. Each result has the date, distance, climbing, place and links.
get_course
One race in full: place and date, distance, climbing, high point, surface mix, the biggest climbs, every aid station with its mile, cutoff, crew access and drop bags where the race publishes them, the finish cutoff, typical race-day weather at the start, last year's results, and links to the course page, the planner and the embeddable map.
race_history
Every edition we know of, newest first, with the results summary where we have it: starters, finishers, DNFs, winning and median time.
plan_link
A link that opens the Run Planner with the race loaded and the goal finish set, optionally the start time too: splits to every aid station, arrival times against the cutoffs, a fueling plan.

Public endpoints

The site's own pages read these, and they are safe to build on. All are GET, JSON, no key, and cached where they can be.

/api/search?q=leadville
The site's search box: races matching a name, nickname, place or distance word, best match first, in the races group.
/api/discover
Every race in the catalog in one list: name, date, distance, climbing, place and start point. What the Discover map draws.
/api/courses/{id}/embed.json
What the race-site embed draws for one course: a map-sized track, the aid stations and the profiles. For showing one race, not for collecting them.
/api/courses/{id}/climate
Typical race-day weather at the start line: the 10-year median high and low and the chance of a wet day. {"available": false} when there is nothing to say.
/api/catalog/count
How many races the catalog holds, the one number the whole site quotes.
/api/oembed?url=https://trailgoat.run/course/…
oEmbed for course pages: paste a course link into a CMS that reads oEmbed and it embeds the interactive map.

Race directors who want their course on their own site have a builder for that on the race directors page.

Rate limits

Every internet address gets a budget, shared between the course pages, these endpoints and the connector. A person, or an assistant answering a person, never comes close. A script walking the whole catalog does, within minutes.

  • Past the budget, the reply is HTTP 429 with a Retry-After header saying how many seconds to wait.
  • Through the connector it is the same 429, carrying a JSON-RPC error with code 429 and data.retryAfter in seconds.
  • Looking up a place by name (the near search) has its own, smaller budget, because the map service behind it is shared and free.

Using the data

Use it, within the limits. You are welcome to use TrailGoat through the connector and to build on the endpoints above: answer a runner's question, show a race on your club or race site, or power a tool of your own. Stay inside the rate limits and keep the link back below. The terms say the same thing.

Link back. Wherever you show TrailGoat data, link the course page it came from, the https://trailgoat.run/course/… address in every answer: in the assistant's reply, or next to the race in your app or on your site. It is how runners find the full map and the planner, and how a race director's corrections reach them.

Not allowed: copying the catalog. Walking every course to rebuild it as your own dataset, directory or product is off limits whether you collect it from the pages, the endpoints or the connector, and the rate limits stop most of it on their own. Don't present the data as a race's official information either: it comes from race websites, course files and runners, it can be wrong or out of date, and the race's own information wins.

The endpoints and limits can change; this page always has the current ones. Building something bigger, research, or a race series site? Email kris@trailgoat.run.