Save up to 17% with yearly billing

See pricing

MCP Server

Connect SkyLink to any Model Context Protocol (MCP) client — Claude Desktop, Cursor, Cline, Windsurf, and others — and expose the full SkyLink v3.1 dataset as tools your model can invoke. There is no binary to deploy.

Once connected, natural-language prompts like "What's the METAR at KJFK?" or "Estimate block time from SFO to JFK on a 737" route to the correct SkyLink endpoints automatically. Your key is passed as a transport header — never embedded in prompts.

The MCP setup differs between the two channels, so pick yours:

Configuration

SkyLink's MCP server is a streamable HTTP endpoint — POST https://data.skylinkapi.com/mcp, stateless, authenticated with the same x-api-key header as the REST API. Most clients take a URL and a headers object:

{
  "mcpServers": {
    "skylink": {
      "url": "https://data.skylinkapi.com/mcp",
      "headers": { "x-api-key": "YOUR_API_KEY" }
    }
  }
}

Replace YOUR_API_KEY with the licence key from your Polar purchase — see Getting Started.

Config fields

FieldValueDescription
urlhttps://data.skylinkapi.com/mcpStreamable HTTP MCP endpoint
x-api-key headerYour licence keyAuthenticates tool calls against your quota
ClientWhere to paste
Claude DesktopSettings → Developer → Edit Config → mcpServers → restart
CursorSettings → MCP → Add MCP Server → Manual config → restart
Other MCP clientsFollow the client's MCP config file location — same JSON shape

Response

MCP does not return a single REST JSON body — the server exposes tools the model can call. Each tool maps to a SkyLink endpoint. Tool invocations return structured JSON identical to the corresponding REST API responses documented in this reference.

Tools are filtered by your plan — you only ever see tools your key can call, so an assistant can't waste a turn on something your plan excludes:

PlanTools visible
Basic46
Pro52 (+ 90-day history)
Ultra / Mega58 (+ 365-day history)

Tool names come from the underlying operation, for example search_airport_airports_search_get or ultra_flights_ultra_history_flights_get. Call tools/list to see the exact set your key unlocks. Requesting a tool outside your plan returns MCP error -32602: Tool <name> not found — it is never registered for your key, rather than failing at call time.

Calling directly

Your client handles the protocol, but for testing:

curl -X POST "https://data.skylinkapi.com/mcp" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Responses are server-sent events (event: message / data: {...}).

Accept headerMust include both application/json and text/event-stream, or you get 406
JSON-RPC batchingNot supported — send one request per call (400)
GET / DELETE on /mcp405 Method not allowed
Missing API key401 missing_api_key

Exact tool names and parameter schemas are listed in your MCP client after a successful connection.

Client types

"""MCP client configuration models."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass McpHttpServerEntry:    """Direct API: a streamable HTTP endpoint authenticated by header."""    url: str    headers: dict[str, str]@dataclassclass McpBridgeServerEntry:    """RapidAPI marketplace: the `mcp-remote` stdio bridge."""    command: str    args: list[str]McpServerEntry = McpHttpServerEntry | McpBridgeServerEntry@dataclassclass McpClientConfig:    mcp_servers: dict[str, McpServerEntry]

Integration

The example below builds the MCP config object from environment variables so you can paste it into Claude Desktop or Cursor.

import osMCP_URL = "https://data.skylinkapi.com/mcp"def build_mcp_config(api_key: str | None = None) -> dict:    """Build the MCP client config block for the SkyLink direct API."""    key = api_key or os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")    return {        "mcpServers": {            "skylink": {                "url": MCP_URL,                "headers": {"x-api-key": key},            }        }    }if __name__ == "__main__":    import json    print(json.dumps(build_mcp_config(), indent=2))

Implementation notes

Key handling. Store your key in your OS keychain or .env — the MCP config references it via header, not inline in chat logs.

Important: Every MCP request counts against your plan the same as a direct REST request — including initialize and tools/list, not just tools/call. See Rate Limits.

Plan-gated tools. Historical ADS-B, webhooks, and other premium endpoints remain subject to the same plan limits as REST — the MCP layer does not bypass quotas.

Troubleshooting. If tools do not appear, verify the x-api-key header is present and the URL ends in /mcp, restart the client after editing config, and check that the tools you expect are included in your plan.

Error responses

MCP connection failures surface in the client UI (auth errors, or process exit on the stdio bridge). For HTTP errors returned inside tool results, see Error Handling — shapes match direct REST usage.


Related: Getting Started · API v3.1 Overview · Rate Limits