MCP Server
The stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos.
0 stars80 downloads/wk
Reviews
Write oneNobody has reviewed MCP Server yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
MCP Server tools (32, 10 write)
write = sends, deletes, buys or poststickerbot_create_custom_signalwrite actionFreeA named boolean predicate you can reference anywhere a built-in signal goes.
tickerbot_create_universewrite actionFreeCreate a named ticker list owned by your account.
tickerbot_create_webhookwrite actionFreeCanonical create: a webhook is a trigger plus a delivery. Trigger shapes: scan {type:"scan", q, universe?}; ticker {type:"ticker", ticker, condition}; signal {type:"signal", signal, ticker?, universe?, condition?}; event {type:"event", kinds, tickers?, universe?, event_q?}. The subscribe tools are flat sugar over exactly this. Webhooks need a paid plan (Free has no webhook slots).
tickerbot_delete_custom_signalwrite actionFreeDelete one of your custom signals. Refused by default if another of your signals references it.
tickerbot_delete_universewrite actionFreePermanently delete one of your universes. Webhooks that reference the deleted universe fail on their next eval — clean those up first.
tickerbot_delete_webhookwrite actionFreeDelete a webhook subscription, and its delivery history with it.
tickerbot_enable_webhookFreeRe-enable a disabled webhook and start it clean. Clears match-state, so the next eval treats every currently-matching ticker as new.
tickerbot_get_barsFreeOHLCV bars from 1-second through monthly. The prices underneath the table.
tickerbot_get_etf_holdingsFreeReturns an ETF's constituents and their weights, heaviest first. When the ticker is not an ETF, `is_etf` is false and `holdings` is empty; `is_etf: true` with zero holdings means a real ETF whose holdings are not ingested yet. The reverse lookup ("which ETFs hold NVDA") is a scan filter on `etf_holders`, not this tool.
tickerbot_get_etf_sectorsFreeReturns an ETF's sector weights, heaviest first. Always complete, since sector breakdowns are small. When the ticker is not an ETF, `is_etf` is false and `sectors` is empty.
tickerbot_get_seriesFreeAny signals for any tickers on one shared time grid — up to 50 tickers by 25 columns per call. One flat row per ticker per interval step, cursor-paged backward. `transitions_only: true` with boolean signals returns only the rows where a boolean flipped.
tickerbot_get_signalFreeThe state of a signal is the set of tickers matching it right now, or with `asof`, as of any moment. One name, the whole market, one call. Booleans need no `condition`; every other type needs one, typed like the signal: ">70" (numeric), "<YYYY-MM-DDTHH:MM:SSZ" (timestamp), ">=YYYY-MM-DD" (date), "=ETF" (string). Sorted by signal value desc for non-booleans.
tickerbot_get_tickerFreeThe full ticker row, every signal on the schema page, for one symbol or a comma list of up to 50. Right now, or with `asof`, as of any past date. Pass a comma list of up to 50 symbols for a batch (`data` keyed by symbol plus `not_found`). Crypto is the X-prefixed pair (X:BTCUSD) — bare BTC/ETH are US-listed ETFs.
tickerbot_get_ticker_coverageFreeFor one ticker, what we hold and how far back — so an empty result is never ambiguous. Ask this before treating a gap in bars or series as an outage. `minute_tier.included: false` with `on_demand: true` is not a gap — sub-hour bars fetch from the provider on first request.
tickerbot_get_universeFreeReturns the universe doc. Use `top_10`/`top_100` to fetch a system universe; any other slug must be one your account owns.
tickerbot_get_webhookFreeThe current state of one webhook subscription.
tickerbot_list_eventsFreeOne timeline across every ticker: earnings, dividends, splits, insider filings, analyst actions, plus opt-in signal firings and news. Requires at least one bound: a ticker scope (ticker/tickers/universe), a time window (from/to), or firm/action — `q` alone is not a bound. `firm`/`action` match case-insensitively; a `q` payload match is case-sensitive. `join: state` attaches the ticker state as of each event.
tickerbot_list_signalsFreeEvery signal you can name in a query — the built-in signals and your own custom signals, in one catalog. Use to discover the signal names and `q` vocabulary before composing a scan; custom signals appear with `kind: custom`.
tickerbot_list_tickersFreeEvery symbol we track, active or delisted, as one identity row each. Use `/v2/tickers/{ticker}` for the full row.
tickerbot_list_universesFreeEvery universe you can reference: your own named ticker lists and the built-in ones. `owner: system` lists the built-in universes (top_10, top_100); `all` lists both. Use a slug as `universe` on scan, signal, and subscribe tools.
tickerbot_list_webhook_deliveriesFreeRecent deliveries for one webhook — what was sent, and what came back.
tickerbot_list_webhooksFreeEvery webhook subscription on this account, newest first.
tickerbot_scanFreeEvery ticker matching a SQL WHERE clause. Right now, or with `asof`, as of any past date. The `q` grammar is a flat SQL WHERE over signal names: AND/OR/NOT, comparisons, numeric and string literals, custom signals by name. No JOIN or subqueries. With `group_by` the result is rollup rows, not tickers. Example: `gap_up AND market_cap < 2000000000 AND NOT earnings_this_week`.
tickerbot_search_newsFreeSQL query over the news archive. Article rows, or rollups when you group them. Filter to a ticker with the `ticker` param, or in `q` via the auto-unnest alias `tk = 'NVDA'`. `search` is full-text over title and summary. Rollups with group_by/having return `truncated: true` instead of paging.
tickerbot_subscribe_eventsFreePush new events: we POST your endpoint when events of the kinds you chose land in the archives. Webhooks need a paid plan (Free has no webhook slots). `q` filters the ticker STATE; `event_q` filters the EVENT payload in the /v2/events grammar. Latency is the ingest cadence (analyst ≤1h, corporate kinds daily), not sub-minute.
tickerbot_subscribe_scanFreePush a whole query: we POST your endpoint every time the match set changes. Webhooks need a paid plan (Free has no webhook slots). Use for "alert me when this happens" requests.
tickerbot_subscribe_signalFreePush one signal: we POST your endpoint whenever any ticker starts matching it. Webhooks need a paid plan (Free has no webhook slots). Omit `ticker` to watch the whole universe.
tickerbot_subscribe_tickerFreePush one ticker: we POST your endpoint whenever it matches the condition you give. Webhooks need a paid plan (Free has no webhook slots). Omit `target_url` for in-app delivery.
tickerbot_test_webhookwrite actionFreeSend a real-shape test POST to your endpoint, instantly. One-shot: a failed test never retries and never auto-disables the webhook. 400 when the webhook has no target_url.
tickerbot_update_custom_signalwrite actionFreeUpdate a custom signal you own — its expression, description, or name.
tickerbot_update_universewrite actionFreeUpdate one of your universes: its name, description, or members. `tickers` replaces the whole list; `add`/`remove` adjust it. System universes cannot be edited.
tickerbot_update_webhookwrite actionFreeEdit a webhook in place — send only the fields you want to change. The trigger and channel are immutable — delete and re-create to change what fires or where it delivers. Unknown fields are a 400.
Public scan report
scanner v0.1.9 · 2026-09-27 · same rubric, same numbers if you re-run it
- Code scan8 source files scanned25/25
- Live reliabilityremote reachable in 348ms20/20
- Tool poisoning32 tool descriptions checked15/15
- Auth qualityAPI key sent as a header8/15
- Maintenancelast push 9 days ago15/15
- Maintainer identityregistry namespace matches repository owner7/10
What the publisher says
From the MCP Server repository's README, as published. We do not edit it. Read it on GitHub
@tickerbot/mcp-server
Model Context Protocol server for Tickerbot — the stock market, in SQL. Install in Claude, Cursor, VS Code Copilot, and other MCP-compatible clients to scan ~14,500 US-listed equities plus a curated set of rates, FX and crypto series, replay any day, or subscribe a query — across 421+ signal columns.
Install
You need a Tickerbot API key. Get one from your dashboard.
Claude Desktop
Add to ~/Library/Application Support/Claude/claudedesktopconfig.json (macOS) or %APPDATA%/Claude/claudedesktopconfig.json (Windows):
{
"mcpServers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": {
"TICKERBOT_API_KEY": "tb_live_..."
}
}
}
}Restart Claude Desktop.
Claude Code
claude mcp add tickerbot --env TICKERBOT_API_KEY=tb_live_... -- npx -y @tickerbot/mcp-serverCursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": { "TICKERBOT_API_KEY": "tb_live_..." }
}
}
}VS Code (Copilot)
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": { "TICKERBOT_API_KEY": "tb_live_..." }
}
}
}Tools
19 tools covering tickers, signals, scans, universes, news, and webhook subscriptions.
Strategies are not exposed via MCP — see the REST API docs for those.
Examples
Open Claude and try:
"Find oversold semiconductor stocks bouncing on volume."
"What's NVDA's RSI and short interest right now?"
"How often has the gap-up + small-cap + high-RVOL setup hit over the last 30 days?"
"Save a signal called oversoldwithvolume defined as rsi14 < 30 AND volumeratio20d > 2."*
Configuration
Remote install
For consumer chat apps (Claude.ai web/mobile, ChatGPT) that don't run subprocesses, use the hosted remote MCP endpoint at https://mcp.tickerbot.io instead. See tickerbot.io/mcp-server for setup.
License
MIT
Nothing above is checked by us. What we check is on the safety report.
Install directly
claude mcp add --transport http mcp-server https://api.tickerbot.io/mcp
MCP Server: common questions
- Is MCP Server safe?
- Yes, by our scan: it is graded A (90/100). Read the MCP Server safety report
- How do I install MCP Server?
- It runs remotely at api.tickerbot.io. Add it to Claude Code, Claude Desktop or Cursor with the snippets above, or call it through the mcp.market gateway without installing anything.
- Does MCP Server need an API key?
- Yes. The registry entry asks for
TICKERBOT_API_KEY,Authorization. - Is MCP Server maintained?
- The last commit was 10 days ago (2026-09-17). The latest release is v0.1.3.
- Is MCP Server up?
- 96% of our last 28 checks got an answer. We check remote servers about four times a day.
- What can I use instead of MCP Server?
- Servers from other publishers that do the same job: LINQ to DB MCP server, DBConvert Streams (Federated SQL) MCP server and DBHub MCP server. Compare all MCP Server alternatives.
Alternatives to MCP Server
Same job from other publishers: the closest match first, then the best rated.
- LINQ to DBInspect database schemas and execute SQL queries across multiple database providers with LINQ to DB.not reviewedEstablishedA
DBConvert Streams (Federated SQL)Read-only SQL across your PostgreSQL, MySQL, S3 buckets and local data files, in one query.not reviewedGrowingA- DBHubToken-efficient database MCP server for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLitenot reviewedWidely usedA
- GeoLensRead-only access to a self-hosted GeoLens spatial catalog: datasets, features, maps, sandboxed SQL.not reviewedEstablishedB
- StackQL MCP ServerSQL-native query and provisioning engine for cloud infrastructure, served over MCP.not reviewedEstablishedA