FlashAlpha ships two MCP endpoints with the same tool catalogue but different auth, and picking the wrong one is the single most common setup failure. This walks both paths and the errors you will actually hit.
FlashAlpha exposes 40 tools over the Model Context Protocol (23 live, 17 historical-replay), so you can ask Claude about gamma exposure, dealer positioning, volatility surfaces and Greeks in plain English instead of hand-rolling REST calls.
Same tools on both. Different authentication. Match the row to the client you are configuring.
| Client | URL | Auth |
|---|---|---|
| claude.ai (web) | https://lab.flashalpha.com/mcp-oauth |
|
| OAuth (one-time sign-in) | ||
| Claude Desktop | ||
https://lab.flashalpha.com/mcp-oauth (current builds) or https://lab.flashalpha.com/mcp |
||
| OAuth, or API key on older builds | ||
| Claude Code (CLI) | https://lab.flashalpha.com/mcp |
|
| API key per tool call | ||
| Cursor / Windsurf / VS Code | https://lab.flashalpha.com/mcp |
|
| API key per tool call |
The one rule: claude.ai web and current Claude Desktop builds use the -oauth endpoint and OAuth sign-in. The CLI and editor clients (Claude Code, Cursor, Windsurf, VS Code) use the plain
/mcp
endpoint and you hand Claude the key in your first message. If your Desktop build is old enough that OAuth fails, fall back to /mcp
and the apiKey path below.Cleanest setup. Sign in once, click Allow, and Claude calls tools on your behalf with no key handling. Works on Free, Pro, Max, Team and Enterprise.
FlashAlpha
https://lab.flashalpha.com/mcp-oauth
. The -oauth
suffix is required.On Desktop the only difference is the callback: you get an "Open Claude?" browser dialog that deep-links back into the app. Click Open Claude. That is expected, not an error.
Verify with a new chat: "What is my FlashAlpha account?" Claude calls get_account
and returns your email, tier and remaining quota.
Your API key never appears in Claude on this path. The OAuth resource server resolves your account from the bearer token and forwards your stored key on the internal upstream call only.
Here each tool takes an apiKey
argument. Two steps: register the URL, then tell Claude the key once per chat.
Claude Desktop config:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"flashalpha": {
"url": "https://lab.flashalpha.com/mcp"
}
}
}
Save, then fully quit and reopen Claude Desktop. A reload is not enough; the config is read once at startup.
First message in a fresh chat:
My FlashAlpha API key is fa_xxxxxxxxxxxxxxxxxxxxxxxx.
Use it on every FlashAlpha tool call.
Claude holds the key for the session and passes it as apiKey
on every call.
Other clients, same /mcp URL and same chat-paste pattern:
claude mcp add flashalpha --transport http https://lab.flashalpha.com/mcp
flashalpha
, URL https://lab.flashalpha.com/mcp
.{ "url": "https://lab.flashalpha.com/mcp" }
to your MCP settings.Why is the key not in the config? Claude Desktop's HTTP-transport MCP config only supports a URL. There is no env
or headers
pass-through that maps to a tool argument, and the key is a per-tool argument. So it comes from the conversation, or you skip it entirely with the OAuth endpoint.
"MCP Server not responding" on claude.ai. You pasted /mcp
into a custom-connector dialog that needs OAuth. The /mcp
endpoint expects an apiKey
argument the browser flow never sends, so the first call hangs. Edit the connector URL to exactly https://lab.flashalpha.com/mcp-oauth
and reconnect. This is the one nearly everyone hits.
"A server with this URL already exists" but nothing shows in your Connectors list. Claude.ai recorded the URL during an earlier handshake that failed mid-flow. Try, in order: hard-refresh (Ctrl/Cmd+Shift+R) and retry Add; open claude.ai in an incognito window and Add from there; sign out and back in. If all three still error, send Anthropic support the ofid_...
reference from the original failure and ask them to clear the orphaned record.
"A server with this URL already exists" and FlashAlpha is visible. Close the dialog, click the existing entry, use Connect / Reconnect. If stuck, delete from the ... menu and re-add.
"apiKey is required" on Desktop. Config is fine, Claude just has not been told the key in this chat. Paste it as your first message.
"Unauthorized" after hours of working. Token expired before refresh. Settings then Connectors then FlashAlpha then Reconnect.
HTTP 429. Daily quota hit (Free 5/day, Basic 100, Growth 2,500, Alpha unlimited). Reset is midnight UTC, or upgrade.
"no_data" on get_gex, get_levels, get_volatility. Markets are closed. Not a connector bug. Retry during US market hours.
Desktop ignores the new config. You reloaded instead of quitting. Cmd-Q on macOS, tray then Quit on Windows, then relaunch.
All 23 live tools work immediately. Highlights:
get_gex
, get_dex
, get_vex
, get_levels
, get_exposure_summary
, get_narrative
get_volatility
, get_stock_summary
, calculate_greeks
, solve_iv
get_stock_quote
, get_tickers
, get_option_chain
, get_account
at=<timestamp>
argument back to April 2018Four one-click workflow prompts also surface in the client UI: analyze_exposure(symbol)
, vrp_regime_check(symbol)
, historical_comparison(symbol, reference_date)
and zero_dte_brief(symbol)
.
A good first prompt: "Show me the gamma exposure for SPY and tell me where the gamma flip is."
Free tier needs only an email and password, no card: flashalpha.com/pricing. The same key works on both endpoints.