Stock Market Data MCP Server for Options & Fundamentals
cvforge’s data backend speaks the Model Context Protocol, so coding agents can explore the data while they build — sanity-check a field, pull a sample chain, discover FMP endpoints — without you copy-pasting anything. Inside the desktop app this is wired up automatically for Claude Code, Codex, and OpenCode. You don’t need the app: create a free account, mint a personal API key on your account page, and point any MCP-capable agent at the URL below. The free plan includes the MCP server; paid plans raise the hourly request limit and unlock the historical-options tools marked below.
Connection
- URL:
https://tap.convexvalue.com/api/data/mcp - Transport: Streamable HTTP — JSON-RPC 2.0 over a single POST per request; no sessions, no SSE. Protocol version
2024-11-05. - Auth:
Authorization: Bearer cv_live_…(a bad key is a401before the body is parsed; past auth, errors ride inside the JSON-RPC body).
Claude Code reads this from a .mcp.json in your project — the exact file cvforge scaffolds into every app:
{
"mcpServers": {
"cvserver": {
"type": "http",
"url": "https://tap.convexvalue.com/api/data/mcp",
"headers": {
"Authorization": "Bearer cv_live_your_key_here"
}
}
}
}
Codex (.codex/config.toml) and OpenCode (opencode.json) get
equivalent config with the same URL and header. You can also drive it raw:
curl -X POST -H "Authorization: Bearer cv_live_..." \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "get_chain", "arguments": { "symbol": "SPY" } }
}' \
https://tap.convexvalue.com/api/data/mcp The 8 tools
get_chain
Option chain for one underlying, grouped by expiration and strike. The MCP twin of
/chains. Its current per-contract
valuation is fair_market_value, a proprietary estimate. cvforge does not
provide option bid/ask quotes, quote sizes, midpoint, NBBO, or last-trade data.
| Parameter | Type | Description |
|---|---|---|
symbol required | string | Underlying ticker, e.g. "SPY", "AAPL", "I:SPX". Auto-uppercased. |
fields | string[] | Supported per-contract fields to return. Omit to use the server default; see the options snapshot reference. |
screen
Cross-symbol screener over every contract. The MCP twin of /screen.
| Parameter | Type | Description |
|---|---|---|
columns | string[] | Columns to project (defaults to the standard subset). |
filters required | object[] | Predicates ANDed together: { field, op, value } or { field, op, field_ref }. |
sort | object[] | { field, direction: "asc"|"desc" }, up to 4. |
limit | integer | Row cap (server max 500). |
query_sql
Read-only DuckDB SQL against the snapshot. The MCP twin of /query.
| Parameter | Type | Description |
|---|---|---|
sql required | string | A single read-only SELECT (or WITH) statement. |
max_rows | integer | Row cap (server max 10,000). |
get_option_bars Research plan
Historical OHLC bars for a single option contract. The MCP twin of /mas/aggs.
| Parameter | Type | Description |
|---|---|---|
ticker required | string | Option contract ticker from the chain, e.g. "O:SPY260116C00400000" — not an underlying. |
multiplier required | integer | Window size in timespan units. |
timespan required | string | second | minute | hour | day | week | month | quarter | year. |
from / to required | string | YYYY-MM-DD or epoch milliseconds. |
adjusted | boolean | Split-adjusted; default true. |
sort | string | "asc" or "desc" by timestamp. |
limit | integer | Max base aggregates; default 5,000, max 50,000. |
get_option_daily Research plan
One trading day’s OHLC + volume for a single contract. The MCP twin of /mas/open-close.
| Parameter | Type | Description |
|---|---|---|
ticker required | string | Option contract ticker, e.g. "O:SPY260116C00400000". |
date required | string | Trading date, YYYY-MM-DD. |
adjusted | boolean | Split-adjusted; default true. |
fmp_request
Call any of the 157 allowlisted FMP endpoints.
| Parameter | Type | Description |
|---|---|---|
endpoint required | string | FMP /stable endpoint path, e.g. "profile", "ratios", "etf/holdings", "technical-indicators/sma". |
params | object | Query parameters, e.g. { "symbol": "AAPL", "period": "annual" }. Array values are comma-joined. |
list_fmp_endpoints
Design-time discovery of the FMP catalog (static; consumes no data request).
| Parameter | Type | Description |
|---|---|---|
category | string | Filter to one category, e.g. "Statements", "Quote", "Chart". |
search | string | Case-insensitive substring match on path or category. |
list_chain_fields
Backend field discovery for chain and screen requests. No arguments; static. Treat the options snapshot reference as the product contract: a raw field name appearing in discovery does not mean that cvforge supplies that data, and it does not grant access to option quotes or NBBO.
Entitlements
The /mcp route itself is available on every plan. Tools that wrap gated
REST routes re-check entitlements per call: get_option_bars and
get_option_daily need the Research plan’s aggregates
feature. Tool calls count against your hourly request limit.
Forward compatibility
The tool catalog is served by the backend, so new tools appear without a desktop
update. Agents are told to trust tools/list over any static docs —
good advice for humans too: this page describes the catalog as of today.
For a complete market-wide screening example, see the Options Screener API with Python or the custom options screener.
Get example prompts & new data guides
Occasional emails with prompts worth trying and what’s new in the data.