# Sailing Event Performance MCP > Public, no-auth MCP (Model Context Protocol) server for competitive sailing > analysis, built on the SAP Sailing Analytics public API. Endpoint: > https://sailing.sillsengineering.com/mcp (streamable HTTP: a single POST with > JSON-RPC 2.0 per request; no SSE). Discover regattas, read results with > discards, and analyse a race leg by leg — rank at every mark, per-leg speeds > and distances, tack/gybe counts and the metres lost in each manoeuvre, course > geometry, and per-race wind bands. Attribution: data © SAP Sailing Analytics (sapsailing.com). Every tool response carries this line in its `provenance` block. If you surface this data to a person, surface the attribution with it. Key facts for agents: - No API key, no signup, no auth headers. JSON-RPC 2.0 over HTTPS POST to /mcp. - Call `describe` first. It returns what the server can and cannot answer and how the tools chain — it is the grounding surface, not marketing copy. - Eight tools: `describe`, `find_events`, `get_event`, `get_results`, `get_race`, `get_race_performance`, `get_maneuvers`, `analyze_race`. - Typical chain: find_events(query) -> get_event(name) for its races -> get_results(leaderboard) or get_race / get_race_performance / get_maneuvers / analyze_race. The leaderboard name usually equals the regatta name. - Names are exact strings. Pass regatta and race names back exactly as the previous tool returned them; do not normalise or re-case them. - `find_events` takes the event name as a person would say it. SAP abbreviates many regattas to initials plus the year — "Travemünder Woche 2026" is stored as `TW2026 - F18` — and the search resolves that, along with accents, punctuation, word order and typos. Results are ranked best-first and each carries `score` and `matched_on` explaining why it matched. Adding the boat class ("… Formula 18") ranks that fleet first. - Wind is reported in nautical FROM degrees. SAP stores the direction wind blows TO; this server converts and says so in every response. - Missing source values stay null. Nothing is invented, interpolated or back-filled — if SAP did not publish it, the field is null and the provenance block says why. - NOT available: raw GPS breadcrumb tracks and raw wind fixes. SAP gates those behind a permission this server does not hold, by design. Also unavailable: events SAP does not track. - Fair use: 30 requests/min and 300 requests/hr per IP, plus a global ceiling. HTTP 429 with Retry-After when exceeded — please back off and retry. - The server is polite to its own upstream: per-race detail is cached for 30 days (it does not change once a race is sailed), and outbound calls to SAP are rate-limited, concurrency-capped and circuit-broken. If you need breadth, prefer repeat queries over the same regatta to enumerating many new ones. - Please do not bulk-enumerate the full regatta catalogue. Ask for the events you actually want. - GET /health returns liveness. - Best effort, non-commercial, no SLA. Not for race-management or safety-of-life decisions. ## Docs - [Landing page](https://sailing.sillsengineering.com/): setup for Claude Code, claude.ai and any MCP client, the tool reference, and a worked example. ## Optional - [Server manifest](https://sailing.sillsengineering.com/.well-known/mcp.json): machine-readable MCP server card (server.json format). - [Health](https://sailing.sillsengineering.com/health): liveness endpoint.