MCP Server
What is the MCP server?
The Quant Data MCP server lets Claude, Cursor, and any other Model Context Protocol client query our data in plain English. Paste one URL and your existing API key into your client's config, and every REST endpoint becomes a tool the model can call on your behalf.
The Model Context Protocol is an open standard that lets large language models invoke tools the same way you would call a REST endpoint. When you ask the model a market question, it reads the catalog of available tools, picks the right one, fills in its parameters, and shows you the answer alongside the structured data it pulled.
Our server is hosted, so there is nothing to install, nothing to run locally, and no separate credential to manage. Your Quant Data API key is the only thing your client needs. If you have never used our REST API, the MCP is often the fastest way to start. If you already use REST, the MCP gives you a conversational front-door to the exact same data without writing more glue code.
Why connect it
Four representative workflows that work well as conversations with a model holding all of our tools.
Server details
Where to point your client, how authentication works, and how quota is shared with the REST API.
Endpoint
Streamable HTTP, hosted on the same domain as the REST API. Point any MCP-capable client at this URL and you are connected.
Authentication
Each request carries your Quant Data key in the Authorization header using the Bearer scheme. The MCP does not store keys, does not maintain sessions, and does not issue tokens of its own. Generate or rotate keys from the API keys page in your dashboard.
Quota and billing
MCP tool calls draw from the same per-user request quota as direct REST calls. One tool call equals one request against your bucket. You can mix MCP and REST traffic on the same key without splitting subscriptions or paying twice.
Errors
When something is off (a missing key, an unknown ticker, a malformed filter, a tripped rate limit) the server surfaces the same RFC 9457 problem detail you would see on the REST side, with the field names and remediation hints intact so the model can correct itself on the next turn.
Connect your client
Pick your client below and open it for the exact config. Any other client that speaks streamable HTTP works the same way: point it at the URL, set the Authorization header, and restart the client so the tool list refreshes.
Create API key. The full key is shown only once at creation; copy it into your secrets store before navigating away. Treat the key like a password.https://api.quantdata.us/mcp, the Authorization header carrying your key, and a name for the server. Snippets for each client are in the accordion below. In every snippet, replace <YOUR_API_KEY> with the real key you copied in step 1 before saving.qd_ping; a short "server is alive" reply confirms that the URL and the key both work.Claude Desktop
Open Settings → Developer → Edit Config and merge this object into your claude_desktop_config.json. Quit and reopen the app for the change to take effect.
{ "mcpServers": { "quantdata": { "type": "http", "url": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Claude Code
Run this once from any terminal. The -s user flag makes the server available across every project on your machine; use -s local instead if you only want it inside the current repository.
claude mcp add --transport http -s user quantdata https://api.quantdata.us/mcp \ --header "Authorization: Bearer <YOUR_API_KEY>"
ChatGPT
Custom MCP connectors live behind ChatGPT's Developer Mode. Open Settings → Connectors → Advanced settings and toggle on Developer Mode, then add a custom connector with the values below. Developer Mode is in beta and available on ChatGPT Plus, Pro, Business, Enterprise, and Education plans (not Free). ChatGPT's connector flow is OAuth-first, so if the form does not surface a custom-header field, use Quant Data through one of the other clients in this list while OpenAI continues to evolve the UI.
Name Quant Data MCP Server URL https://api.quantdata.us/mcp Authentication Custom header ← only if the form exposes one Header name Authorization Header value Bearer <YOUR_API_KEY>
Cursor
Add the block to ~/.cursor/mcp.json (global) or .cursor/mcp.json at the root of your project (per-repo), then restart Cursor.
{ "mcpServers": { "quantdata": { "url": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
VS Code (Copilot Chat)
Create .vscode/mcp.json at the root of your workspace and add the block below. Reload the window so Copilot Chat picks it up. The same shape works in your user settings if you want the server available across every workspace.
{ "servers": { "quantdata": { "type": "http", "url": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Windsurf
Open Windsurf Settings → Cascade → MCP Servers and add a custom server, or edit ~/.codeium/windsurf/mcp_config.json directly. After saving, quit Windsurf completely and reopen it: closing the editor window alone does not reload MCP servers.
{ "mcpServers": { "quantdata": { "serverUrl": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Cline
In VS Code, open the Cline sidebar, click the MCP Servers tab, then Configure MCP Servers. Paste the block into Cline's cline_mcp_settings.json and save; Cline will reload the server automatically.
{ "mcpServers": { "quantdata": { "type": "streamableHttp", "url": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Gemini CLI
Add the block to ~/.gemini/settings.json (user-wide) or .gemini/settings.json inside a project (per-repo), then restart Gemini CLI. The /mcp slash command lists the servers it has loaded so you can confirm Quant Data is connected.
{ "mcpServers": { "quantdata": { "httpUrl": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } }
Goose
Add the entry to ~/.config/goose/config.yaml (or run goose configure and pick Add Extension → Remote Extension (Streaming HTTP)). Restart any open Goose sessions so the new extension loads.
extensions:
quantdata:
enabled: true
type: streamable_http
name: quantdata
uri: https://api.quantdata.us/mcp
timeout: 300
headers:
Authorization: Bearer <YOUR_API_KEY>Any other client
Any MCP client that supports streamable HTTP works. The shape of the config is consistent across them: a transport, the URL, and a header bag. If yours expects a flat object rather than a server map, the values below are everything you need.
{ "transport": "streamable-http", "url": "https://api.quantdata.us/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } }
The tool catalog
Twenty REST endpoints are mirrored as MCP tools, named qd_get_<concept> in snake_case. The twenty-one tools below cover the order-flow, exposure, statistics, volatility, and price-history surfaces, plus a small health-check helper. The newer REST-only endpoints (open-interest, max-pain, dark-pool levels, exchange notifications, market map, news articles) are reachable through the REST API today and will pick up MCP wrappers in a future release. The model sees a detailed description for each tool below, so you almost never need to name one by hand: describe what you want and the model picks for you.
qd_get_ net_ drift Per-bucket bullish vs. bearish premium delta over time.
qd_get_ net_ flow Per-bucket call and put activity, in premium or volume.
qd_get_ interval_ map Time-bucketed Greek exposure across the option chain.
qd_get_ volatility_ drift Per-minute ARV, average ATM IV, and the underlying stock price.
qd_get_ option_ price_ over_ time OHLC and volume bars for one specific option contract.
qd_get_ stock_ price_ over_ time OHLC bars for the underlying stock of one ticker.
qd_get_ dark_ flow Time-series of dark-pool notional flow for one ticker.
qd_get_ order_ flow_ consolidated Paginated tape of consolidated blocks, sweeps, and splits.
qd_get_ order_ flow_ unconsolidated Paginated tape with one row per exchange leg.
qd_get_ equity_ prints Paginated tape across lit and dark venues.
qd_get_ heat_ map Strike × expiration grid of any single option metric.
qd_get_ exposure_ by_ strike Greek-weighted exposure grouped by strike.
qd_get_ exposure_ by_ expiration The same data, aggregated favoring expiration.
qd_get_ volatility_ skew Per-strike implied-volatility curve at a point in time.
qd_get_ term_ structure Vol-skew enriched with delta and moneyness classification.
qd_get_ gainers_ losers Per-ticker rollup of bullish vs. bearish premium.
qd_get_ market_ share Per-exchange split across equity calls, puts, and index options.
qd_get_ contract_ statistics Premium, trades, and volume rolled up by contract type.
qd_get_ contract_ trade_ side_ statistics Adds an aggressor-side partition to the above.
qd_get_ iv_ rank Rolling-window IV percentile context per ticker.
qd_ping Health check that confirms the server is reachable and dispatching tool calls.
Each tool exposes the same parameters as its REST counterpart: convenience filters such as tickers, strikePrices, and expirationDates, the filter expression DSL for boolean composition, time selection through sessionDate or a timeRange, pagination via size and searchAfter on the tape tools, and field projection with includes and excludes.
How a tool call flows
The MCP and the REST API are the same surface reached two different ways.
https://api.quantdata.us/mcp with your API key in the Authorization header and the tool arguments in the body./v1 endpoint. Your key flows through unchanged, so authentication, the rate limit, and request-tracking all behave identically to a direct REST call.Because the MCP is stateless, each tool call is independent. Your client may run several in parallel, and none of them share session state on our side. If your conversation has the model fan out across twelve ticker queries at once, you will see twelve quota draws and twelve usage events.
Asking good questions
The model picks tools by reading their descriptions and matching them to the way you phrased the question. A few habits make that match noticeably better.
- Name the underlying analyst concept. Phrases like "net call drift on SPX", "the GEX wall at $440", or "dark-pool prints over $5M" map directly to the tool descriptions and help the model pick the right endpoint on the first try.
- Anchor the time window. "During today's session", "between 9:30 and 10:00 ET on Monday", or "over the last five trading days" lets the model pick a sensible
sessionDateortimeRangewithout guessing. - Cap the result size on the table-shaped tools. "Pull the top fifty consolidated trades" trims the response payload, keeps the conversation snappy, and avoids spending tokens on rows the model will not use.
- Ask follow-ups by name. "Now pull the heat map for the same ticker on the same date" reuses the prior context and keeps the model on the right surface instead of re-deriving it.
None of this is required: the model will still produce useful answers on vague prompts. Specific phrasings, named time windows, and a sense for which tool family fits the question all reduce wasted tool calls.
Where to go next
filterExpression on every tool.