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

# Everstrike MCP Server: Live Market Data for AI Clients

> Connect any MCP-capable AI client to live Everstrike market data. Works with Claude Desktop, Cursor, or custom apps. Read-only, public, no signup required.

The Everstrike MCP server connects any MCP-capable AI client to live exchange data. It exposes prices, order books, recent trades, candlestick history, funding rates, and exchange status as tools that an AI model can call during a conversation — so instead of guessing at market conditions, your assistant fetches the real answer. The server is read-only and requires no account or API key.

<Note>
  This server exposes **public market data only**. No tool can place, modify, or cancel orders, and no tool reads your account. Connecting this server cannot move your funds.
</Note>

## Quick Start

<Steps>
  <Step title="No setup required">
    The Everstrike MCP server is public and requires no API key, account, or signup. The server URL is:

    ```
    https://mcp.everstrike.xyz/mcp
    ```
  </Step>

  <Step title="Add the server to your client configuration">
    Add the following to your Claude Desktop or Cursor MCP configuration file:

    ```json theme={null}
    {
      "mcpServers": {
        "everstrike": {
          "url": "https://mcp.everstrike.xyz/mcp"
        }
      }
    }
    ```
  </Step>

  <Step title="Restart your client">
    Restart Claude Desktop or Cursor. You should see ten `everstrike_*` tools become available in your client.
  </Step>
</Steps>

## cURL Example

The server speaks JSON-RPC over HTTP. Use the following commands to explore available tools and call one:

List all tools:

```bash theme={null}
curl -sX POST https://mcp.everstrike.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
```

Call a tool (fetch live BTC/USD price):

```bash theme={null}
curl -sX POST https://mcp.everstrike.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"everstrike_ticker","arguments":{"pairs":["USD_BTC_PERP"]}}}'
```

<Note>
  The `Accept` header must list **both** `application/json` and `text/event-stream`. Omitting either one causes the request to be rejected with a 406 error.
</Note>

## Market Naming

Everstrike uses a **quote-first** key convention for perpetual markets. The BTC/USD perpetual is `USD_BTC_PERP`, not `BTC_USD_PERP`. Spot markets run base-first, so the ordering depends on the instrument type.

```
USD_BTC_PERP     BTC/USD perpetual
USD_ETH_PERP     ETH/USD perpetual
USDT_USD         USDT/USD spot   ← spot is base-first
```

The server resolves several friendly spellings automatically against the live market list:

| You send       | Resolves to                |
| -------------- | -------------------------- |
| `USD_XRP_PERP` | `USD_XRP_PERP`             |
| `XRP/USD`      | `USD_XRP_PERP`             |
| `xrp-usd`      | `USD_XRP_PERP`             |
| `XRPUSD`       | `USD_XRP_PERP`             |
| `XRP`          | ✗ not resolved — ambiguous |

A bare asset name like `XRP` is ambiguous — the server cannot tell whether you mean the USD perpetual, a spot market, or an option. Send `USD_XRP_PERP` or `XRP/USD` instead. If a market cannot be resolved, the server returns suggestions rather than an error. Use `everstrike_pairs` for the full canonical list of market keys.

## Available Tools

### Prices & Markets

**`everstrike_ticker`**

Live prices: last, mark and index price, plus 24-hour change and volume.

| Parameter | Type      | Notes                                                                                     |
| --------- | --------- | ----------------------------------------------------------------------------------------- |
| `pairs`   | string\[] | Up to 6 markets. Omit for a summary of the 25 most-traded markets plus `all_market_keys`. |

Pass `pairs` when you have specific markets in mind to get every field for each one. Omit it to receive a compact summary — the full ticker spans 257 markets of \~50 fields each, so the summary is a deliberate view, not a truncation.

**`everstrike_pairs`**

Every tradable market with tick size, lot size, leverage caps, and contract type. No parameters. This is the canonical reference for market keys.

**`everstrike_assets`**

Supported assets with precision, deposit and withdrawal status, and network information. No parameters.

### Market Depth & Activity

**`everstrike_depth`**

Aggregated bid/ask depth for one market.

| Parameter | Type   | Notes         |
| --------- | ------ | ------------- |
| `pair`    | string | **Required.** |

**`everstrike_trades`**

Recent public trades for one market.

| Parameter | Type   | Notes         |
| --------- | ------ | ------------- |
| `pair`    | string | **Required.** |

**`everstrike_ohlcv`**

Candlestick history.

| Parameter  | Type    | Notes                                                           |
| ---------- | ------- | --------------------------------------------------------------- |
| `pair`     | string  | **Required.**                                                   |
| `interval` | enum    | `15s` `1m` `3m` `5m` `15m` `30m` `1h` `2h` `4h` `6h` `24h` `7d` |
| `start`    | integer | Unix **milliseconds**.                                          |
| `end`      | integer | Unix **milliseconds**.                                          |
| `price`    | enum    | `mark` (default), `last`, `index`, `all`.                       |
| `limit`    | integer | Default 60 (15 when `price` is `all`), max 500.                 |

The `price` parameter selects which price series to report:

| `price` | Reports                                |
| ------- | -------------------------------------- |
| `mark`  | Mark price — **the default**           |
| `last`  | Last traded price                      |
| `index` | Index price                            |
| `all`   | Raw candle with every field, unrenamed |

<Note>
  `start` and `end` are Unix **milliseconds**. A seconds-based timestamp asks for candles from 1970 and returns an empty series without an error. Mark price is the default because on low-volume markets the last traded price can sit unchanged for hours, making a candle series misleading.
</Note>

**`everstrike_funding`**

Historical funding rates for perpetual markets.

| Parameter | Type   | Notes                                              |
| --------- | ------ | -------------------------------------------------- |
| `pair`    | string | Optional — omit to retrieve rates for all markets. |

### Exchange

**`everstrike_status`** — Exchange-wide status: uptime, engine health, and maintenance windows. No parameters.

**`everstrike_globals`** — Aggregate statistics: open interest, volume, and user counts. No parameters.

**`everstrike_vault`** — Perpetual vault state: redemption rate, total earnings, and USD supply. No parameters.

## Rate Limits

| Dimension              | Limit                                |
| ---------------------- | ------------------------------------ |
| Requests               | 10 per second per IP, bursting to 20 |
| Concurrent connections | 16 per IP                            |
| Response size          | 60,000 characters                    |

A response that exceeds the size limit is truncated with a note suggesting a narrower request. Truncation removes data from the end, so do not assume the information you need is present in a truncated response — narrow the request and call again.

## Protocol Details

| Property         | Value                               |
| ---------------- | ----------------------------------- |
| Transport        | Streamable HTTP                     |
| Protocol version | `2025-06-18`                        |
| Session          | Stateless — no session ID is issued |
| Response format  | JSON                                |
| Authentication   | None                                |

Because the server is stateless, a bare request works immediately — no `initialize` handshake is required before calling `tools/list` or `tools/call`. Sending an `initialize` is harmless, but it must be its own request: the transport rejects a JSON-RPC batch that contains `initialize` alongside other messages.

Every request must include `Accept: application/json, text/event-stream`. Listing only one of the two types is rejected with a 406.
