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

# MCP Client Setup

> Connect hosted MCP servers from Cursor, Claude Desktop, and generic streamable HTTP clients

## Server Map

| Server                                                                 | MCP URL                                                                                 | Health URL                                                        | Auth            |
| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --------------- |
| [Dataloader](/quantx/servers/dataloader)                               | `https://market-data-loader-production.up.railway.app/mcp/dataloader`                   | `https://market-data-loader-production.up.railway.app/health`     | optional bearer |
| [Fama-French Replicate](/quantx/servers/fama-french-replicate)         | `https://fama-french-factors-production.up.railway.app/mcp/fama_french_replicate`       | `https://fama-french-factors-production.up.railway.app/health`    | optional bearer |
| [Statistical Factor Models](/quantx/servers/statistical-factor-models) | `https://backend-production-c775c.up.railway.app/mcp/statistical-factor-models`         | `https://backend-production-c775c.up.railway.app/health`          | optional bearer |
| [Jump Models](/quantx/servers/jump-models)                             | `https://mcp-production-11da.up.railway.app/mcp/jump-models`                            | `https://mcp-production-11da.up.railway.app/health`               | no bearer       |
| [Wavelet Mean Reversion](/quantx/servers/wavelet-mean-reversion)       | `https://wavelet-mean-reversion-production.up.railway.app/mcp/waveletmeanreversion`     | `https://wavelet-mean-reversion-production.up.railway.app/health` | optional bearer |
| [Parallax ExtremeHurst](/quantx/servers/parallax-extreme-hurst)        | `coming soon`                                                                           | `https://parallax-hurst-signals-production.up.railway.app/health` | optional bearer |
| [EP Ratio Screener](/quantx/servers/ep-ratio-screener)                 | `https://ep-ratio-screener-production.up.railway.app/mcp/epratioscreener`               | `https://ep-ratio-screener-production.up.railway.app/health`      | optional bearer |
| [Volatility Scaling Lab](/quantx/servers/volatility-scaling-lab)       | `https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility` | `https://volatility-scaling-lab-production.up.railway.app/health` | optional bearer |

## Shared Assumptions

* If bearer auth is disabled, clients can connect directly without auth.
* If bearer auth is enabled, use a client that supports custom `Authorization` headers.
* Tool calls use the generated request envelope: `{"request": {...}}`.
* Verify `/health` before wiring the MCP URL into a production client.
* Direct streamable HTTP calls require a session handshake before `tools/list` or `tools/call`.
* n8n can call the same endpoints either with an MCP Client node or with HTTP Request nodes. See [n8n Workflows](/quantx/servers/deployed/n8n-workflows).

## Cursor

Cursor reads MCP config from either project-local `.cursor/mcp.json` or global `~/.cursor/mcp.json`.

<Tabs>
  <Tab title="No auth">
    ```json theme={null}
    {
      "mcpServers": {
        "dataloader": {
          "url": "https://market-data-loader-production.up.railway.app/mcp/dataloader"
        },
        "fama-french-replicate": {
          "url": "https://fama-french-factors-production.up.railway.app/mcp/fama_french_replicate"
        },
        "statistical-factor-models": {
          "url": "https://backend-production-c775c.up.railway.app/mcp/statistical-factor-models"
        },
        "jump-models": {
          "url": "https://mcp-production-11da.up.railway.app/mcp/jump-models"
        },
        "wavelet-mean-reversion": {
          "url": "https://wavelet-mean-reversion-production.up.railway.app/mcp/waveletmeanreversion"
        },
        "parallax-extreme-hurst": {
          "url": "coming soon"
        },
        "ep-ratio-screener": {
          "url": "https://ep-ratio-screener-production.up.railway.app/mcp/epratioscreener"
        },
        "volatility-scaling-lab": {
          "url": "https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility"
        }
      }
    }
    ```
  </Tab>

  <Tab title="Bearer auth">
    ```json theme={null}
    {
      "mcpServers": {
        "dataloader": {
          "url": "https://market-data-loader-production.up.railway.app/mcp/dataloader",
          "headers": {
            "Authorization": "Bearer ${env:DATALOADER_MCP_TOKEN}"
          }
        },
        "fama-french-replicate": {
          "url": "https://fama-french-factors-production.up.railway.app/mcp/fama_french_replicate",
          "headers": {
            "Authorization": "Bearer ${env:FAMA_FRENCH_REPLICATE_MCP_TOKEN}"
          }
        },
        "statistical-factor-models": {
          "url": "https://backend-production-c775c.up.railway.app/mcp/statistical-factor-models",
          "headers": {
            "Authorization": "Bearer ${env:STATISTICAL_FACTOR_MODELS_MCP_TOKEN}"
          }
        },
        "jump-models": {
          "url": "https://mcp-production-11da.up.railway.app/mcp/jump-models"
        },
        "wavelet-mean-reversion": {
          "url": "https://wavelet-mean-reversion-production.up.railway.app/mcp/waveletmeanreversion",
          "headers": {
            "Authorization": "Bearer ${env:WAVELET_MEAN_REVERSION_MCP_TOKEN}"
          }
        },
        "parallax-extreme-hurst": {
          "url": "coming soon",
          "headers": {
            "Authorization": "Bearer ${env:PARALLAX_EXTREME_HURST_MCP_TOKEN}"
          }
        },
        "ep-ratio-screener": {
          "url": "https://ep-ratio-screener-production.up.railway.app/mcp/epratioscreener",
          "headers": {
            "Authorization": "Bearer ${env:EP_RATIO_SCREENER_MCP_TOKEN}"
          }
        },
        "volatility-scaling-lab": {
          "url": "https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility",
          "headers": {
            "Authorization": "Bearer ${env:VOLATILITY_SCALING_LAB_MCP_TOKEN}"
          }
        }
      }
    }
    ```
  </Tab>
</Tabs>

If a server is authless, omit the `headers` block for that entry.

## Claude Desktop

Claude Desktop uses remote connectors for remote MCP servers.

1. Open **Settings > Connectors**.
2. Choose **Add custom connector**.
3. Enter a connector name and the remote MCP URL.
4. Connect and enable the tools you want.

<Warning>
  Claude remote connectors support authless and OAuth-based remote MCP servers. They are not a good fit for static bearer-header-only auth configured manually in local JSON. For protected endpoints, use an OAuth-capable gateway, a trusted network path, or an authless connector-facing endpoint with a limited tool surface and rate limiting.
</Warning>

## Generic HTTP / Streamable MCP Clients

### Health Check

```bash theme={null}
curl -fsS https://volatility-scaling-lab-production.up.railway.app/health
```

### List Tools With Session Handshake

```bash theme={null}
tmp_headers=$(mktemp)
tmp_body=$(mktemp)

curl -sS -D "$tmp_headers" -o "$tmp_body" \
  -X POST https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <volscale_token>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0.1"}}}'

SESSION_ID=$(awk 'tolower($1)=="mcp-session-id:" {gsub("\r","",$2); print $2}' "$tmp_headers")

curl -sS -o /dev/null \
  -X POST https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <volscale_token>" \
  -H "MCP-Session-Id: $SESSION_ID" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

curl -sS \
  -X POST https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <volscale_token>" \
  -H "MCP-Session-Id: $SESSION_ID" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

rm -f "$tmp_headers" "$tmp_body"
```

### Python FastMCP Client

```python theme={null}
import asyncio
from fastmcp import Client

async def main() -> None:
    async with Client("https://volatility-scaling-lab-production.up.railway.app/mcp/qca-open-loop-volatility") as client:
        result = await client.call_tool(
            "compute-ewma-volatility-series",
            {"request": {"ticker": "SPY", "start_date": "2020-01-01", "halflife": 252, "annualize": True}},
        )
        print(result)

asyncio.run(main())
```

## Verification Checklist

* `/health` responds successfully.
* `tools/list` returns the expected server-specific tools.
* Auth behavior matches the selected client.
* One small deterministic tool call succeeds before the server is used in a longer workflow.
