> ## Documentation Index
> Fetch the complete documentation index at: https://highseat.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP server

> Connect Claude Code, Cursor, Claude Desktop or another MCP client to Highseat with an API key, so an agent can answer questions about your sites' traffic.

Highseat runs an MCP server, so an agent can read your stats and answer a question such as "What were my top referrers last week for example.com?". It reads the same reports as the API, for the sites your API key reaches. Every tool reads, and none changes anything.

```text Server URL theme={null}
https://api.highseat.com/mcp
```

The server is listed in the [MCP Registry](https://registry.modelcontextprotocol.io) as `com.highseat/mcp`.

## Connect a client

Create an API key in **Workspace settings › API keys** first: see [Authentication](/docs/api/authentication.md). A read key is enough. Limit it to the sites the agent should see.

The client sends the key as a bearer token in the `Authorization` header. Replace `hs_live_…` below with your key.

### Claude Code

```bash theme={null}
claude mcp add --transport http highseat https://api.highseat.com/mcp --header "Authorization: Bearer hs_live_…"
```

### Cursor

Add the server to `~/.cursor/mcp.json`, or to `.cursor/mcp.json` in a project:

```json theme={null}
{
  "mcpServers": {
    "highseat": {
      "url": "https://api.highseat.com/mcp",
      "headers": { "Authorization": "Bearer hs_live_…" }
    }
  }
}
```

### Claude Desktop

Claude Desktop reaches a server that takes a key through [`mcp-remote`](https://www.npmjs.com/package/mcp-remote), which needs Node.js. Open **Settings › Developer › Edit Config**, add the server, and restart Claude Desktop:

```json theme={null}
{
  "mcpServers": {
    "highseat": {
      "command": "npx",
      "args": ["mcp-remote", "https://api.highseat.com/mcp", "--header", "Authorization:${AUTH_HEADER}"],
      "env": { "AUTH_HEADER": "Bearer hs_live_…" }
    }
  }
}
```

The header goes through `env` because Claude Desktop on Windows does not escape a space inside `args`.

### Other clients

Any client that speaks Streamable HTTP and can send a header connects the same way: the server URL, plus `Authorization: Bearer hs_live_…`.

## Tools

Every `GET` endpoint of the API is a tool, named by its operation id: `listSites`, `getOverview`, `getSources`, `getFilterValues` and the rest. A tool takes the endpoint's parameters and carries its description, so the [endpoint pages](/docs/api/sites/list-sites.md) document the tools too. [Describe the API key](/docs/api/key/describe-the-api-key.md) is the one endpoint left out, because `listSites` already says which sites the key reaches.

The server also tells the agent how to use them: start with `listSites`, read the values a filter takes before filtering on one, and read a row with an empty source name as direct traffic.

## Limits and errors

A tool call is an API call. It counts against the key's hourly budget and the workspace's calls at once, as [Limits](/docs/api/limits.md) describes, and it reaches only the key's sites.

A failed call answers with the API's error code and message, such as `RATE_LIMITED` with the seconds to wait: see [Errors](/docs/api.md#errors). A call that runs longer than 30 seconds is stopped and answers `QUERY_TIMEOUT`. Ask for a shorter date range.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.