About TickerDB
TickerDB is a market-data MCP server for agents analyzing stocks, ETFs, and crypto pairs. It provides pre-computed indicator states, historical transitions, and aftermath statistics alongside price data.
Key features
- 01Pre-computed technical and fundamental states
- 02Historical state-transition and aftermath statistics
- 03Daily and weekly OHLCV data
- 04Screen assets by state or ranked fields
- 05Watchlist summaries and change tracking
Use cases
- 01Screen for oversold stocks near support
- 02Review historical outcomes after an indicator state
- 03Track changes across a saved watchlist
MCP support
Exposes market-data tools to MCP clients through a hosted Streamable HTTP server or a local npm package using stdio. The hosted endpoint supports OAuth 2.1 and Bearer token authentication.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.tickerdb.com/mcpclaude mcp add --transport http com-tickerdb https://mcp.tickerdb.com/mcp{"mcpServers":{"com-tickerdb":{"type":"http","url":"https://mcp.tickerdb.com/mcp"}}}Open in Cursor{"servers":{"com-tickerdb":{"type":"http","url":"https://mcp.tickerdb.com/mcp"}}}Open in VS Code{"mcpServers":{"com-tickerdb":{"type":"http","url":"https://mcp.tickerdb.com/mcp"}}}{"mcpServers":{"com-tickerdb":{"serverUrl":"https://mcp.tickerdb.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
9| Parameter | Type | Required | Description |
|---|---|---|---|
| end | string | No | Range end date (YYYY-MM-DD). Use with start for historical series. |
| band | string | No | Filter events to a specific band value (e.g. deep_oversold, strong_uptrend, stage_2_growth). For MA distance event fields such as trend_distance_ma40, grouped aliases above and below are also supported. Only used with field. |
| date | string | No | Historical date (YYYY-MM-DD) for a point-in-time snapshot. Requires Plus or Pro plan. Omit for latest. |
| meta | boolean | No | Snapshot and history modes only. Add true to include sibling _meta / status_meta stability objects across the response. Explicit *_meta field paths in fields still work without this flag. |
| after | string | No | Return events after this date (YYYY-MM-DD). Only used with field. |
| field | string | No | Band field name for event queries (e.g. momentum_rsi_zone, extremes_condition, trend_direction, trend_stage, pattern_bull_flag, pattern_ascending_triangle, pattern_rising_wedge, trend_ma8_slope through trend_ma200_slope, trend_ma_crossover_event, trend_distance_ma40, fundamentals_valuation_zone, fundamentals_free_cash_flow, insider_zone, sector_rsi_zone, momentum_divergence_detected, fundamentals_analyst_consensus). When provided, returns band transition history instead of a snapshot. |
| limit | integer | No | For event mode: max results (1-50), returned newest-first by default. For sample=even date ranges: requested sampled rows, capped by plan (Free 3, Plus 10, Pro 50). |
| start | string | No | Range start date (YYYY-MM-DD). Use with end for historical series. |
| stats | boolean | No | Event mode only. Add true to return aggregate stats instead of raw event rows. |
| before | string | No | Return events before this date (YYYY-MM-DD). Only used with field. |
| fields | array | No | Optional summary fields to return. Identity fields such as market_cap and market_cap_tier are always kept. Pass sections like ohlcv, trend, momentum, volatility, volume, patterns, extremes, support_level, resistance_level, fundamentals, sector_context, or levels (paid tiers). Or pass dotted paths like ohlcv.close, trend.direction, trend.stage, trend.ma_slopes.ma_8, trend.ma_slopes.ma_20, trend.ma_slopes.ma_40, trend.ma_slopes.ma_50, trend.ma_slopes.ma_100, trend.ma_slopes.ma_200, trend.moving_average_values.ma_8, trend.ma_crossover_event, trend.direction_meta, trend.distance_from_ma_band.ma_40, trend.volume_confirmation, momentum.rsi, momentum.rsi_zone, momentum.stochastic_k, momentum.stochastic_d, momentum.stochastic_zone, momentum.xtrm_score, momentum.divergence_detected, momentum.divergence_type, momentum.macd_state, patterns.bull_flag, patterns.bull_flag_breakout, patterns.bear_flag, patterns.bear_flag_breakdown, patterns.ascending_triangle, patterns.rising_wedge, volatility.squeeze_active, volatility.squeeze_days, volatility.regime_trend, volume.climax_detected, volume.climax_type, volume.accumulation_state, volume.price_direction_on_volume, support_level.level_price, support_level.status_meta, resistance_level.level_price, sector_context.rsi_zone, sector_context.trend, sector_context.agreement, sector_context.asset_vs_sector_rsi, sector_context.asset_vs_sector_trend, sector_context.oversold_count, sector_context.valuation_zone, fundamentals.pe_ratio, fundamentals.valuation_zone, fundamentals.growth_zone, fundamentals.free_cash_flow, fundamentals.earnings_proximity, fundamentals.earnings_proximity_basis, fundamentals.last_earnings_surprise, fundamentals.analyst_consensus, fundamentals.analyst_consensus_direction, fundamentals.valuation_percentile, fundamentals.pe_vs_historical_zone, fundamentals.pe_vs_sector_zone, fundamentals.insider_activity, fundamentals.insider_activity.zone, fundamentals.insider_activity.net_direction, levels, levels.support_levels, levels.resistance_levels. trend.stage is populated on weekly snapshots when stage evidence is sufficient. Event field names should prefer full schema names such as momentum_rsi_zone, extremes_condition, trend_stage, pattern_bull_flag, pattern_ascending_triangle, pattern_rising_wedge, trend_ma8_slope through trend_ma200_slope, trend_ma_crossover_event, trend_distance_ma40, fundamentals_valuation_zone, fundamentals_free_cash_flow, insider_zone, sector_rsi_zone, momentum_divergence_detected, and fundamentals_analyst_consensus. |
| sample | enum | No | Date range mode only. Use 'even' to evenly distribute snapshots across the full start/end range.even |
| ticker | string | Yes | Ticker symbol, e.g. AAPL, BTCUSD, SPY |
| timeframe | enum | No | Analysis timeframe. Default: dailydaily | weekly |
| context_band | string | No | Only return events where the context ticker was in this band (e.g. downtrend). For MA distance context fields, grouped aliases above and below are also supported. Must be provided with context_ticker and context_field. |
| context_field | string | No | Band field to check on the context ticker (e.g. trend_direction, trend_stage, or trend_distance_ma40). Must be provided with context_ticker and context_band. |
| context_ticker | string | No | Cross-asset correlation: a second ticker to filter against (e.g. SPY). Requires context_field and context_band. Plus/Pro only. |
Details
From the project READMETickerDB — Stock market data for agents.
Pre-computed stock market data for AI agents. TickerDB returns indicators like trend_direction, support_level, and analyst_consensus as named states — plus what changed and what usually happens next.
10,000+ US stocks, ETFs, and crypto pairs · 182 indicators across trend, momentum, volatility, volume, patterns, support/resistance, fundamentals, and sector context · 7 years of history · tickerdb.com
Tools
| Tool | Description |
|---|---|
get_summary | Technical + fundamental snapshot for a ticker. Historical lookups, state transition history, and what usually happens after |
get_ohlcv | Daily or weekly EOD candles for returns, charts, and backtests |
get_search | Screen assets by categorical state or rank by fields like market_cap or pe_ratio |
get_schema | Discover all 182 fields and their valid band values |
get_watchlist | Full analytical summary for every ticker on your saved watchlist |
get_watchlist_changes | What changed on your watchlist — day-over-day or week-over-week |
add_to_watchlist | Add tickers to your watchlist |
remove_from_watchlist | Remove tickers from your watchlist |
get_account | Account details, plan tier, and usage |
All tools are available on every tier (Free, Plus, Pro). Tiers differ by credit limits, history depth, number of filters, and watchlist size. See tickerdb.com/pricing.
Quick start
Connect TickerDB to Claude, ChatGPT, or another MCP client (see Setup below), then try:
"Show me oversold large-cap stocks near support"
The agent calls get_search with filters for momentum_rsi_zone = oversold and market_cap_tier in [large, mega], then follows up with get_summary on individual results. No raw number crunching — the agent reads categorical states and reasons over them directly.
"What usually happens when AAPL goes oversold?"
get_summary with field=momentum_rsi_zone, band=oversold, stats=true returns aggregate aftermath distributions: how the stock performed 5, 10, 20, 50, and 100 days after each oversold entry over 7 years of history.
"What changed on my watchlist?"
get_watchlist_changes returns only the field-level state transitions since the last pipeline run — band entries, exits, and shifts — so the agent reports what moved without pulling full summaries for every ticker.
Why not just pass raw OHLCV?
A model can compute RSI from raw bars. But ask "Does AAPL look bullish?" with raw OHLCV and it burns its context on arithmetic — computing indicators one by one — instead of doing what you actually asked: noticing that RSI just hit oversold while institutions are accumulating, that the pullback is sharp but the 200-day uptrend is intact, that insiders have been selling all quarter. That's the analysis. Raw bars bury it under computation.
With TickerDB, the model sees "oversold", "accumulation", "strong_uptrend" and connects them immediately.
State transitions go further. "What happened the last time BTC was this oversold?" means computing RSI across 7 years of daily bars, finding every oversold entry, and calculating what happened after each one. With TickerDB it's one call: get_summary with field=momentum_rsi_zone, band=oversold, stats=true.
Setup
Hosted server (recommended)
The remote server at https://mcp.tickerdb.com/mcp supports OAuth 2.1 and Bearer token auth. Use Streamable HTTP transport (not legacy SSE).
| Client | How |
|---|---|
| Claude.ai | Settings → Connectors → Add → https://mcp.tickerdb.com/mcp → Authorize |
| Claude Code | claude mcp add --transport http --scope user tickerdb https://mcp.tickerdb.com/mcp |
| ChatGPT | Plugins → + → https://mcp.tickerdb.com/mcp → Create → Authorize |
| Cursor | .cursor/mcp.json → {"tickerdb": {"url": "https://mcp.tickerdb.com/mcp"}} |
| Any MCP client | Streamable HTTP to https://mcp.tickerdb.com/mcp with Authorization: Bearer tdb_... |
npm package (local stdio)
For clients that prefer a local process (Claude Desktop, etc.):
{
"mcpServers": {
"tickerdb": {
"command": "npx",
"args": ["tickerdb-mcp"],
"env": {
"TICKERDB_KEY": "tdb_your_api_key_here"
}
}
}
}
Get an API key at tickerdb.com/dashboard.
Structure
Three-package monorepo:
shared/— Tool definitions, API client, and server factory (internal)remote/— Cloudflare Worker atmcp.tickerdb.com(Streamable HTTP + OAuth 2.1)local/— Published npm packagetickerdb-mcp(stdio)
Both transports use the same tool definitions. The MCP server is a thin proxy — access control, rate limiting, and field filtering are handled by the TickerDB API.
Authentication
- Bearer token —
Authorization: Bearer tdb_... - OAuth 2.1 — dynamic client registration, PKCE, token exchange, revocation.
/authorizeredirects to tickerdb.com for consent.
Unauthenticated initialize and tools/list are permitted for tool discovery; tools/call requires auth and returns a 401 Bearer challenge with resource_metadata for clean re-authorization.
Session strategy
The remote worker defaults to stateless transport — intentionally. All tools are request/response stateless, and Cloudflare Worker memory is isolate-local. Stateless mode avoids edge session loss that can invalidate connector-discovered namespaces. Set MCP_SESSION_MODE=stateful for explicit session debugging.
Development
npm install # workspace dependencies
npm run build # type-check remote + shared
npx wrangler dev # remote dev server
cd local && npm install && npm run build # npm package
Deployment
# Remote server
npx wrangler deploy
# npm + MCP Registry (recommended)
export MCP_PUBLISHER_KEY="your_saved_tickerdb_registry_private_key_hex"
./release.sh mcp patch
# npm only
cd local && npm version patch && npm run build && npm publish
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.