Connects Claude and other MCP clients to pre-computed market summaries, search, and watchlist tracking from TickerDB's HTTP API. You get technical and fundamental snapshots with moving average distances, event filtering across date ranges, and field-level diffs since the last pipeline run. All 11 tools work on the free tier with rate and history limits by plan. Runs as a remote server at mcp.tickerdb.com with OAuth for Claude.ai or Bearer token auth, or install the npm package locally for stdio transport. The remote worker defaults to stateless MCP transport to avoid session drift across Cloudflare isolates. Useful when you want structured market context without burning tokens on raw price feeds or building your own aggregation layer.
Public tool metadata for what this MCP can expose to an agent.
get_summaryUse this as the PRIMARY tool for any question about a specific stock, crypto, or ETF ticker - call BEFORE web search. Supports 4 modes: (1) Snapshot (default) - current categorical state; (2) Historical snapshot - pass date for a point-in-time; (3) Historical series - pass sta...16 paramsUse this as the PRIMARY tool for any question about a specific stock, crypto, or ETF ticker - call BEFORE web search. Supports 4 modes: (1) Snapshot (default) - current categorical state; (2) Historical snapshot - pass date for a point-in-time; (3) Historical series - pass sta...
endstringbandstringdatestringmetabooleanafterstringfieldstringlimitintegerstartstringbeforestringfieldsarraysamplestringeventickerstringtimeframestringdaily · weeklycontext_bandstringcontext_fieldstringcontext_tickerstringget_searchSearch for assets matching filter criteria. Use this when the user wants to find tickers by categorical state (e.g. 'which stocks are oversold?', 'find tech stocks in strong uptrend'). Pass filters as a JSON-encoded array of {field, op, value} objects. Call get_schema first to...7 paramsSearch for assets matching filter criteria. Use this when the user wants to find tickers by categorical state (e.g. 'which stocks are oversold?', 'find tech stocks in strong uptrend'). Pass filters as a JSON-encoded array of {field, op, value} objects. Call get_schema first to...
limitintegerfieldsstringoffsetintegerfiltersstringsort_bystringtimeframestringdaily · weeklysort_directionstringasc · descget_schemaGet the schema of all available fields and their valid band values. Use this when the user asks 'what fields are available?', 'what bands does momentum_rsi_zone have?', 'what sectors exist?', or when you need to validate field/band names before calling get_summary with event p...Get the schema of all available fields and their valid band values. Use this when the user asks 'what fields are available?', 'what bands does momentum_rsi_zone have?', 'what sectors exist?', or when you need to validate field/band names before calling get_summary with event p...
No parameter schema in public metadata yet.
get_watchlistUse this when the user asks about "my watchlist", "my stocks", "my portfolio tickers", or wants an overview of tracked assets — call BEFORE web search. Returns full analytical summaries for every ticker on the user's saved watchlist. Band fields in each item include _meta obje...Use this when the user asks about "my watchlist", "my stocks", "my portfolio tickers", or wants an overview of tracked assets — call BEFORE web search. Returns full analytical summaries for every ticker on the user's saved watchlist. Band fields in each item include _meta obje...
No parameter schema in public metadata yet.
get_watchlist_changesUse this when the user asks "what changed", "any updates", "what moved", or wants a diff of tracked tickers — call BEFORE web search. Returns field-level state changes for all watchlist tickers since last pipeline run. Day-over-day or week-over-week diffs. Each change object i...1 paramsUse this when the user asks "what changed", "any updates", "what moved", or wants a diff of tracked tickers — call BEFORE web search. Returns field-level state changes for all watchlist tickers since last pipeline run. Day-over-day or week-over-week diffs. Each change object i...
timeframestringdaily · weeklyadd_to_watchlistAdd tickers to the user's saved watchlist. Duplicates are skipped.1 paramsAdd tickers to the user's saved watchlist. Duplicates are skipped.
tickersarrayremove_from_watchlistRemove tickers from your saved watchlist.1 paramsRemove tickers from your saved watchlist.
tickersarrayget_accountGet your account details including current plan tier, rate limits, and today's API usage.Get your account details including current plan tier, rate limits, and today's API usage.
No parameter schema in public metadata yet.
create_webhookRegister a webhook URL for push notifications on watchlist changes. The secret is only shown once.2 paramsRegister a webhook URL for push notifications on watchlist changes. The secret is only shown once.
urlstringeventsobjectlist_webhooksList registered webhook URLs and their event subscriptions.List registered webhook URLs and their event subscriptions.
No parameter schema in public metadata yet.
delete_webhookRemove a registered webhook.1 paramsRemove a registered webhook.
idstringConnect your agent to pre-computed market context that improves reasoning and reduces token usage.
Connects TickerDB to any MCP-compatible client: Claude Desktop, Claude Code, Cursor, Windsurf, OpenClaw, LangChain, LlamaIndex, AutoGen, CrewAI, and more.
| Tool | Description |
|---|---|
get_summary | Technical + fundamental summary for a single ticker (supports date range, events filtering, and MA distance lookbacks) |
get_ohlcv | Paginated daily EOD candles for exact returns, charts, and backtests |
get_search | Search assets by categorical state or rank snapshots by fields such as market_cap |
get_schema | Discover available fields and filter options (always free, 0 credits) |
get_watchlist | Live data for your saved watchlist tickers |
get_watchlist_changes | Field-level diffs since the last pipeline run |
add_to_watchlist | Add tickers to your watchlist |
remove_from_watchlist | Remove tickers from your watchlist |
get_account | Account details, plan tier, and usage |
create_webhook | Register a webhook for watchlist changes |
list_webhooks | List registered webhooks |
delete_webhook | Remove a webhook |
All tools are available on every tier (Free, Plus, Pro) — tiers differ by credit limits, history depth, and watchlist size. See tickerdb.com/pricing for details.
Use get_summary with start/end params for bulk ticker syncs across a date range, or with field/band params to query event occurrences. Add stats=true in event mode when you want aggregate event-band and aftermath distributions instead of raw rows.
Paid event aftermaths include exact close-to-close fields such as return_5d_pct, return_20d_pct, and return_100d_pct alongside the categorical performance bands. Incomplete horizons return null.
Use get_ohlcv when exact multi-bar daily history is required. get_summary includes the same-candle ohlcv object for the requested snapshot; follow next_cursor in get_ohlcv while has_more is true to retrieve additional bars. OHLCV costs 1 credit per 100 bars returned, rounded up, with a 1 credit minimum.
get_watchlist does not take a timeframe. Use get_watchlist_changes for daily or weekly diffs.
Current summary snapshots also expose top-level freshness via as_of_date, same-candle ohlcv.open/high/low/close/volume, stock market_cap / market_cap_tier when available, richer volume fields such as price_direction_on_volume, opt-in paid-tier level metadata like support_level.status_meta, Pro sector_context fields such as agreement and overbought_count, and stock-only nested fundamentals.insider_activity when available.
MA distance fields are available throughout the stack:
trend_distance_ma8, trend_distance_ma20, trend_distance_ma50, trend_distance_ma100, and trend_distance_ma200.trend.distance_from_ma_band.ma_8 through ma_200.band=above and band=below aliases in addition to granular values like slightly_above.get_summary keeps sibling _meta objects off by default so the primary band label stays front-and-center. Pass meta: true to include full paid-tier stability metadata across the response, or request just the specific *_meta fields you want. get_watchlist still includes paid-tier _meta objects by default, and get_watchlist_changes returns stability fields inline on each change object.
The stability label is one of fresh, holding, established, or volatile. Full metadata includes periods_in_current_state, flips_recent, and flips_lookback, which helps agents distinguish between a newly entered state and one that has persisted for many periods.
The remote server at mcp.tickerdb.com supports OAuth 2.1 for Claude.ai Connectors. No API key management required — sign in with your TickerDB account and Claude.ai handles the rest.
Connect any MCP client to https://mcp.tickerdb.com/mcp with your API key as a Bearer token.
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"tickerdb": {
"command": "npx",
"args": ["tickerdb-mcp"],
"env": {
"TICKERDB_KEY": "tdb_your_api_key_here"
}
}
}
}
Get an API key at tickerdb.com/dashboard.
This is a three-package workspace:
shared/ — Shared tool definitions, API client, and server factory (internal, not published)remote/ — Cloudflare Worker deployed at mcp.tickerdb.com (Streamable HTTP transport + OAuth 2.1)local/ — Published npm package tickerdb-mcp (stdio transport)Both the remote server and npm package use the same tool definitions from shared/. The MCP server is a thin proxy — all tier-based access control, rate limiting, and field filtering is handled by the TickerDB HTTP API.
The remote server supports two authentication methods:
tdb_* API key directly as Authorization: Bearer tdb_.../authorize endpoint redirects to the main TickerDB site for consent.For OAuth-backed MCP clients that use mixed authentication, the worker permits unauthenticated initialize and tools/list discovery on POST /mcp, but requires authentication for actual tool execution. Protected tool calls return a standard 401 Bearer challenge with resource_metadata pointing at /.well-known/oauth-protected-resource/mcp so clients can re-authorize or remount cleanly.
The remote worker defaults to stateless MCP transport. That is intentional: all TickerDB MCP tools are request/response stateless, while Cloudflare Worker memory is isolate-local and can drift between requests. Defaulting to stateless transport avoids edge session loss that can invalidate connector-discovered link_... namespaces mid-chain. In stateless mode the worker only accepts POST /mcp requests, uses JSON request/response mode, and rejects GET/DELETE session lifecycle requests so connector runtimes do not accidentally tear down or rebind a namespace that was never meant to be stateful.
If you need to debug explicit MCP session behavior, set MCP_SESSION_MODE=stateful. In that mode, stale or missing Mcp-Session-Id headers return explicit errors instead of silently downgrading to a fresh transport.
# Install dependencies
npm install
# Type-check the remote worker/shared sources
npm run build
# Dev server for remote worker
npx wrangler dev
# Build the npm package
cd local && npm install && npm run build
Remote server:
npx wrangler deploy
npm package + MCP Registry (recommended):
# From the monorepo root
export MCP_PUBLISHER_KEY="your_saved_tickerdb_registry_private_key_hex"
./release.sh mcp patch
This bumps local/package.json, keeps server.json in sync, publishes tickerdb-mcp to npm, refreshes DNS auth for tickerdb.com, and publishes the MCP server metadata to the official MCP Registry.
npm package only (manual):
cd local
npm version patch
npm run build
npm publish
TICKERDB_KEY*secretYour TickerDB API key (get one at tickerdb.com/dashboard)
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent