Edinburgh Fringe 2026 for machines — MCP server and JSON API

The live Edinburgh Festival Fringe 2026 programme, two ways. Connect it to Claude, ChatGPT, Grok or Cursor and ask “what’s on at Monkey Barrel on the 14th, under £10, still on sale?”, or call the same data as JSON from your own code. Both answer from live ticket data, not from whatever a model remembers about last year’s Fringe.

No account, no API key, no sign-up. Read-only. Same underlying queries behind both, so they cannot disagree with each other or with the website.

MCP server — use the Fringe inside ChatGPT, Claude or Grok

https://edfringeguide.com/mcp

Add it to ChatGPT, Claude, Grok or Cursor

Every client takes the same thing: the URL above. Pick yours.

Claude (web, desktop, mobile)

On Free, Pro or Max: Settings → Connectors, click + Add custom connector, paste the URL, click Add. Free accounts can have one custom connector.

On Team or Enterprise an owner adds it first, under Organization settings → Connectors → Add → Custom → Web; members then hit Connect.

To use it in a chat, click + at the lower left, choose Connectors, and toggle Ed Fringe Guide on.

Open Claude connectors → Anthropic's guide

ChatGPT

Needs a paid plan (Plus, Pro, Team, Enterprise or Edu) and Developer Mode switched on — custom connectors are not available on free accounts. Then Settings → Connectors → Create, paste the URL, leave authentication set to none, and enable it in the composer.

Open ChatGPT connectors → OpenAI's guide

Grok

Click New Connector, choose Custom, and paste the URL. Leave authentication empty.

Open Grok connectors → xAI's guide

Claude Code and other CLIs
claude mcp add --transport http ed-fringe-guide https://edfringeguide.com/mcp

Restart the session afterwards — MCP servers are loaded at startup.

Cursor, VS Code, Zed, Windsurf, Qwen Code and anything config-driven

Add this to the client's MCP config file (.cursor/mcp.json, .vscode/mcp.json, Qwen Code's settings.json, or the equivalent):

{
  "mcpServers": {
    "ed-fringe-guide": {
      "type": "http",
      "url": "https://edfringeguide.com/mcp"
    }
  }
}

No account, no key, no OAuth — if a client asks for credentials, choose “no authentication”. Anything that speaks the Streamable HTTP transport will work; a client that only supports stdio needs a bridge such as mcp-remote.

Not currently possible in the consumer Gemini app or Qwen Chat, neither of which offers a custom-connector screen. Gemini CLI and Qwen Code both do, via the config file above.

What you can ask about the Fringe

Once connected, just ask normally — the assistant decides when to call the tools:

Tools

ToolWhat it doesAsk it…
search_shows Search the programme by text, date, venue, genre, price, accessibility and availability. “Find me wheelchair-accessible comedy under £12 that’s still on sale.”
whats_on Everything performing on one date, in start-time order. “What’s on the evening of the 14th near Bristo Square?”
get_show One show in full: every performance date, its ticket status and price, accessibility, booking link. “Which dates of that one are still available?”
list_venues Venues with addresses, coordinates and how many shows each is hosting. “Which venues are near the Pleasance?”
ticket_advice What to do when a show has no tickets left, including that venue’s own stated door policy. “It says sold out — is there any way in?”

Technical details

REST API — the same data as JSON

https://edfringeguide.com/api/v1

Read-only JSON over HTTPS. No key, no sign-up, CORS open to any origin. Every endpoint is a GET.

curl 'https://edfringeguide.com/api/v1/whats-on?date=2026-08-14&time_of_day=evening&max_price=12'

Endpoints

EndpointWhat it returns
GET /api/v1/shows Search the programme by text, date, venue, genre, price, accessibility, rating and availability.
GET /api/v1/whats-on Everything performing on one date, in start-time order. Prices and availability describe that date.
GET /api/v1/shows/{slug} One show in full: every performance with its ticket status, price and allocation remaining.
GET /api/v1/venues Venues with addresses, coordinates and how many shows each is hosting.
GET /api/v1/ticket-advice What to do when a show has no tickets left, including the venue's own stated door policy.

/api/v1 lists the endpoints, the valid values for every enumerated filter and the current limits. /api/v1/openapi.json is the OpenAPI 3.1 document, generated from the same constants the API validates against — so it cannot document one vocabulary and enforce another.

Filters

/shows and /whats-on take the same filters, combinable:

Accessibility

Eight tags, from the Fringe’s own vocabulary: WHEELCHAIR_ACCESS, WHEELCHAIR_ACCESSIBLE_TOILETS, AUDIO_ENHANCEMENT_SYSTEM, CAPTIONING, AUDIO_DESCRIPTION, SIGNED_PERFORMANCE, RELAXED_PERFORMANCE, TOUCH_TOUR_PERFORMANCE. Filter with access_needs (all listed must be met); read back which ones apply from accessibility.facilities and accessibility.access_performances.

An absent tag is not a denial. It means the Fringe listing recorded none, which is not the same as the feature being unavailable — check with the venue. And an access need this API does not recognise is a 400, never a silently dropped filter: a dropped access filter returns the unfiltered programme, which is how someone who needs step-free access ends up at a room up two flights of stairs.

Things it will not do quietly

An unrecognised parameter, an unknown rating or an unknown access tag is a 400, never a silently dropped filter. The difference matters: a dropped filter returns a plausible list you cannot tell apart from a real result, and for access_needs that would mean sending someone who needs step-free access the unfiltered programme.

{
  "error": {
    "code": "invalid_parameter",
    "message": "Unknown access need \"STEP_FREE\". Valid values: WHEELCHAIR_ACCESS, ..."
  }
}

Technical details

Two things worth knowing, whichever you use

“On sale” means the central Fringe box office only. A show with nothing on sale is not necessarily unattendable — venues keep their own separate allocation, run door queues and hold returns lists. That is what ticket_advice and /api/v1/ticket-advice are for, and the MCP server tells connected clients to call it before ever declaring a show unavailable.

Ratings are opinions. Great, Good, Ok and Wild Cards are the subjective views of this guide’s authors — not critic reviews, not audience scores, nothing official. Both interfaces say so on every response that carries one.