Search / io.github.tickerbot/mcp-server
Tickerbot
R2· OAuth, onceThe stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos.
v0.1.3 · active · repository · website · descriptor JSON · versions
Search / io.github.tickerbot/mcp-server
R2· OAuth, onceThe stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos.
v0.1.3 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"tickerbot": {
"type": "http",
"url": "https://api.tickerbot.io/mcp",
"headers": {
"Authorization": "Bearer ${TICKERBOT_TOKEN}"
}
}
}
}claude mcp add --transport http tickerbot https://api.tickerbot.io/mcp --header "Authorization: Bearer ${TICKERBOT_TOKEN}"[mcp_servers.tickerbot]
url = "https://api.tickerbot.io/mcp"
bearer_token_env_var = "TICKERBOT_TOKEN"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tickerbot": {
"type": "remote",
"url": "https://api.tickerbot.io/mcp",
"enabled": true,
"headers": {
"Authorization": "Bearer {env:TICKERBOT_TOKEN}"
}
}
}
}{
"mcpServers": {
"tickerbot": {
"type": "http",
"url": "https://api.tickerbot.io/mcp",
"headers": {
"Authorization": "Bearer ${TICKERBOT_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=tickerbot&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLnRpY2tlcmJvdC5pby9tY3AiLCJoZWFkZXJzIjp7IkF1dGhvcml6YXRpb24iOiJCZWFyZXIgJHtUSUNLRVJCT1RfVE9LRU59In19"
}{
"servers": {
"tickerbot": {
"type": "http",
"url": "https://api.tickerbot.io/mcp",
"headers": {
"Authorization": "Bearer ${TICKERBOT_TOKEN}"
}
}
}
}{
"mcpServers": {
"tickerbot": {
"httpUrl": "https://api.tickerbot.io/mcp",
"headers": {
"Authorization": "Bearer ${TICKERBOT_TOKEN}"
}
}
}
}extensions:
"tickerbot":
enabled: true
name: "tickerbot"
type: streamable_http
uri: "https://api.tickerbot.io/mcp"
headers:
"Authorization": "Bearer ${TICKERBOT_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${TICKERBOT_TOKEN}. The registry never accepts secret values.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prmProtected Resource Metadata (RFC 9728) publishedauth.as_metadataauthorization server metadata reachableauth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMDauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky onestools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: tickerbot_list_tickers (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); tickerbot_list_signals (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); tickerbot_update_custom_signal (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …tools.token_costabout 14,282 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes38 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulnsno known advisory in 98 resolved packagesdeps.mcp_sdk_version@modelcontextprotocol/sdk 1.30.1 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or laterdeps.resolvable@tickerbot/[email protected] resolved: 98 packagestickerbot_list_eventschangedinput schematickerbot_get_barschangedinput schematickerbot_get_serieschangedinput schematickerbot_get_tickerchangedinput schematickerbot_list_eventschangedinput schematickerbot_get_barschangedinput schematickerbot_get_serieschangedinput schematickerbot_scanchangedinput schematickerbot_get_signalchangedinput schematickerbot_get_tickerchangedinput schemaShowing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website +reachable +uptime-100% ~updated-131d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
@tickerbot/[email protected] npm97 dependencies, resolved · MCP SDK @modelcontextprotocol/sdk 1.30.1 · advisories checked 2026-10-19
| advisory | severity | package | fixed in |
|---|---|---|---|
| GHSA-6qxp-vccf-f47hMCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server | high | @modelcontextprotocol/[email protected]MCP SDK, direct | fixed in 1.31.0 |
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://api.tickerbot.io/mcp streamable-http | oauth2 AS: https://api.tickerbot.io | yes | 100% | 459 ms | – | 2026-10-20 |
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
@tickerbot/mcp-server | npm | 0.1.3 | – | TICKERBOT_API_KEY |
tickerbot_create_custom_signal | A named boolean predicate you can reference anywhere a built-in signal goes. |
tickerbot_create_universe | Create a named ticker list owned by your account. |
tickerbot_create_webhook | Canonical 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_signal | Delete one of your custom signals. Refused by default if another of your signals references it. |
tickerbot_delete_universe | Permanently delete one of your universes. Webhooks that reference the deleted universe fail on their next eval — clean those up first. |
tickerbot_delete_webhook | Delete a webhook subscription, and its delivery history with it. |
tickerbot_enable_webhook | Re-enable a disabled webhook and start it clean. Clears match-state, so the next eval treats every currently-matching ticker as new. |
tickerbot_get_bars | OHLCV bars from 1-second through monthly. The prices underneath the table. |
tickerbot_get_etf_holdings | Returns 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_sectors | Returns 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_series | Any 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_signal | The 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_ticker | The 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_coverage | For 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. An absent `minute` span is not a gap — sub-hour bars load on the first request for a symbol. |
tickerbot_get_universe | Returns the universe doc. Use `top_10`/`top_100` to fetch a system universe; any other slug must be one your account owns. |
tickerbot_get_webhook | The current state of one webhook subscription. |
tickerbot_list_events | One 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_signals | Every 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_tickers | Every symbol we track, active or delisted, as one identity row each. Use `/v2/tickers/{ticker}` for the full row. |
tickerbot_list_universes | Every 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_deliveries | Recent deliveries for one webhook — what was sent, and what came back. |
tickerbot_list_webhooks | Every webhook subscription on this account, newest first. |
tickerbot_scan | Every 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_news | SQL 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_events | Push 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_scan | Push 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_signal | Push 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_ticker | Push 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_webhook | Send 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_signal | Update a custom signal you own — its expression, description, or name. |
tickerbot_update_universe | Update 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_webhook | Edit 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. |
Schemas: list_tools.
{
"name": "io.github.tickerbot/mcp-server",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"remotes": [
{
"url": "https://api.tickerbot.io/mcp",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"isSecret": true,
"isRequired": true,
"description": "Bearer <TICKERBOT_API_KEY>"
}
]
}
],
"version": "0.1.3",
"packages": [
{
"version": "0.1.3",
"transport": {
"type": "stdio"
},
"identifier": "@tickerbot/mcp-server",
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"environmentVariables": [
{
"name": "TICKERBOT_API_KEY",
"isSecret": true,
"isRequired": true,
"description": "Tickerbot API key (tb_live_… or tb_test_…). Get one at https://tickerbot.io/dashboard."
}
]
}
],
"repository": {
"url": "https://github.com/tickerbot/tickerbot-mcp",
"source": "github"
},
"websiteUrl": "https://tickerbot.io/mcp-server",
"description": "The stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos."
}