Real-time stock quotes, financial data, and market analytics from Tickerbot.
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 1 month ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The @tickerbot/mcp-server MCP server exposes 35 tools, focused primarily on communication capabilities. Its published description reads: "Real-time stock quotes, financial data, and market analytics from Tickerbot". It communicates over Streamable HTTP using the 2026-07-28 protocol revision, and does not require authorization to connect. MCPGrade currently rates @tickerbot/mcp-server F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Cross-tool shadowing" and "Data-exfiltration parameters". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check @tickerbot/mcp-server's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add @tickerbot/mcp-server to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://api.tickerbot.io/mcpStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
List active tickers from the Tickerbot universe (~14,500 US equities, plus the US Treasury curve and Fed policy rates under `R:`, and major FX pairs, spot metals and crypto under `X:`). Use `tickers`
Get the full current row for one ticker — every column on the schema (price, change, indicators like rsi_14, every boolean flag like above_sma_50, fundamentals like pe_ratio). Pass `asof` (YYYY-MM-DD
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: tickerbot_get_ticker_history
A tool description tries to alter the model’s use of another tool.
time SERIES use tickerbot_get_series). Returns indicators, boolean flags, and the moRecommendationDescriptions must describe only their own tool.
tool: tickerbot_subscribe_ticker
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_list_signal_events
A tool description tries to alter the model’s use of another tool.
uted spans (use tickerbot_get_series).RecommendationDescriptions must describe only their own tool.
tool: tickerbot_subscribe_signal
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_list_events
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
full corporate history" via `ticker`), plus two opt-in kinds that joinRecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_list_events
A tool description tries to alter the model’s use of another tool.
d of paginating); `join=state` attaches the ticker's state as of each evenRecommendationDescriptions must describe only their own tool.
tool: tickerbot_subscribe_events
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_scan
A tool description tries to alter the model’s use of another tool.
instead of rows (breadth stats: "count of tickers above their 200dma by sRecommendationDescriptions must describe only their own tool.
tool: tickerbot_subscribe_scan
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_create_webhook
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: tickerbot_patch_webhook
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "target_url"RecommendationRemove side-channel parameters; constrain tool inputs.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: tickerbot_subscribe_ticker
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_subscribe_ticker"RecommendationScope tools to the minimum needed.
tool: tickerbot_list_signals_catalog
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_list_signals_catalog"RecommendationScope tools to the minimum needed.
tool: tickerbot_delete_custom_signal
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_delete_custom_signal"RecommendationScope tools to the minimum needed.
tool: tickerbot_subscribe_signal
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_subscribe_signal"RecommendationScope tools to the minimum needed.
tool: tickerbot_subscribe_events
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_subscribe_events"RecommendationScope tools to the minimum needed.
tool: tickerbot_subscribe_scan
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_subscribe_scan"RecommendationScope tools to the minimum needed.
tool: tickerbot_create_webhook
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_create_webhook"RecommendationScope tools to the minimum needed.
tool: tickerbot_patch_webhook
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_patch_webhook"RecommendationScope tools to the minimum needed.
tool: tickerbot_get_webhook
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_get_webhook"RecommendationScope tools to the minimum needed.
tool: tickerbot_list_webhook_deliveries
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_list_webhook_deliveries"RecommendationScope tools to the minimum needed.
tool: tickerbot_test_webhook
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_test_webhook"RecommendationScope tools to the minimum needed.
tool: tickerbot_delete_webhook
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_delete_webhook"RecommendationScope tools to the minimum needed.
tool: tickerbot_create_universe
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_create_universe"RecommendationScope tools to the minimum needed.
tool: tickerbot_update_universe
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_update_universe"RecommendationScope tools to the minimum needed.
tool: tickerbot_delete_universe
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "tickerbot_delete_universe"RecommendationScope tools to the minimum needed.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Time-travel SNAPSHOT: the full wide row for one ticker as it stood at a past date (one row, not a series — for a multi-column time SERIES use tickerbot_get_series). Returns indicators, boolean flags,
Data-coverage report for one ticker — which intervals and columns exist, from when, at what depth. The honesty endpoint: ask this before assuming a gap in bars/series is a data outage vs. genuinely-ne
Get OHLCV (open/high/low/close/volume) bars for one or more symbols at a given interval, oldest-first. Pass a comma-separated `ticker` list (up to 50) for a bulk response keyed by symbol. Use `asof` f
Get an ETF's constituent holdings 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
Get an ETF's sector allocation (sector weights, heaviest first). When the ticker is not an ETF, `is_etf` is false and `sectors` is empty; `is_etf: true` with zero sectors means a real ETF whose sector
Register a webhook that fires when one ticker matches a condition. `condition` is a SQL WHERE-clause fragment scoped to that ticker (e.g. "rsi_14 > 70 AND relative_volume > 2"). Pass `target_url` for
THE series primitive: cross-ticker, multi-column time series on one aligned grid. Pick up to 25 columns (price, OHLCV, indicators like rsi_14, boolean flags, custom signals) and up to 50 tickers; get
List the unified signal catalog: every built-in column on the schema (`kind: builtin`) plus the caller's custom signals (`kind: custom`). Built-in rows carry the audited spec metadata — description, c
Find tickers that match a single signal right now (or at a past moment with `asof`). Booleans need no condition. Numerics need a `condition` like ">70" or "<=200". Sorted by signal value desc for nume
Occurrence SPANS of a boolean signal for one ticker, newest-first. For STATE flags (above_sma_50, in_uptrend) each row is a true-WINDOW: started_at when it flipped true, ended_at when it flipped back
Save a SQL WHERE expression as a named custom signal the caller can reference by name in future scans.
Edit one of the caller's custom signals — supply `expr`, `description`, `new_name`, or any combination. Providing `expr` recompiles it against the live column whitelist. Renaming is refused (409) whil
Delete one of the caller's custom signals. Cascade-safe by default: refused with 409 if another custom signal references it (the error lists the referencing signals). Pass `force: true` to delete anyw
Register a webhook that fires when a signal turns true (booleans) or its value crosses a condition (numerics). Optional `ticker` restricts to one symbol; omit to watch the whole universe. Pass `target
THE events primitive — one timeline over every event log, cross-ticker: dividends, splits, insider transactions, and analyst actions ("all splits this month", "every analyst action in my universe this
Create an event-trigger webhook: fires when NEW events land — dividends, splits, insider filings, analyst actions ("every split in my universe", "Goldman downgrades on large caps"). TWO composable fil
Run a SQL WHERE clause against the live ticker universe (or against a past moment with `asof` — unlimited depth on every plan). Returns matching tickers sorted by chosen column, OR — with `group_by` —
Register a webhook that fires when matches for a scan query change. Pass `target_url` for an https POST, or `channel:"discord"` + `discord_url` to post an embed to Discord; omit for in-app delivery in
Search the news archive (back to 2015) with a SQL WHERE clause. Available on every plan. Columns on news_article include `time_published`, `title`, `summary`, `source`, `source_domain`, `category`, `a
The canonical webhook create — POST /v2/webhooks with an explicit `trigger` object: { type: "scan" | "ticker" | "signal" | "event", … } plus delivery fields. The subscribe tools above are flat sugar o
Edit a webhook in place: `name`, `cadence`, `target_url`, `enabled` (pausing/resuming without losing match-state). The trigger (q) and channel are immutable by design — delete and re-create to change
List the caller's webhook subscriptions (rules created via the subscribe tools), newest-first. Use `status` to filter to active or disabled rules.
Fetch one webhook subscription by id (current state, match-set, schedule). Account-scoped: any key on the account can read any of the account's webhooks.
List recent deliveries (pings and fires) for a webhook, newest-first — for diagnosing failures. Returns metadata only (status, attempt, response code, error); the POST body is not stored.
Send a real-shape `webhook.fired` POST to the webhook's target_url synchronously, right now. The body is byte-identical to a real fire (same signing); the test marker rides in an `X-Tickerbot-Test: tr
Re-enable a disabled webhook — flips it back to `active` and clears its match-state so the next eval treats every currently-matching ticker as new. Use after fixing whatever caused auto-disable. No-op
Delete a webhook subscription by id. Use after listing webhooks when the user wants to remove an alert.
List universes — your saved ones and/or the built-in system universes (top_10, top_100). Filter with `owner` (like the signals catalog's `kind`): `me` (default, your own), `system` (built-ins), or `al
List the built-in system universes (`top_10`, `top_100` — the most-actively-traded tickers by 30-day trailing dollar volume, rebalanced monthly). Available to every account regardless of plan. Use the
Get one universe by slug, including its ticker list.
Create a new universe (named set of tickers) for scoping future scans.
Update one of the caller's universes. Pass `name`/`description` to relabel, `tickers` to replace the whole list, or `add`/`remove` to adjust subsets without replacing. System universes (`top_10`/`top_
Delete one of the caller's universes. System universes (`top_10`/`top_100`) cannot be deleted. Webhooks that reference the deleted universe will fail on their next eval, so clean those up first.