# io.github.tickerbot/mcp-server (npm · @tickerbot/mcp-server)

The stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos.

- Trust score: 78/100 (medium)
- Change this week: +33
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- remote · `api.tickerbot.io`: 74/100, [markdown](https://verifymcp.io/servers/tickerbot-mcp-server/api.md), [page](https://verifymcp.io/servers/tickerbot-mcp-server/api)
- npm · `@tickerbot/mcp-server`: 78/100 (this document), [markdown](https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server.md), [page](https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@tickerbot/mcp-server`
- Version: `0.1.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects hono 4.12.33, reached via @modelcontextprotocol/sdk > hono. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to tickerbot/tickerbot-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 53 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2548 tokens (~134/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add tickerbot-mcp-server -- npx -y @tickerbot/mcp-server
```

### Codex

```bash
codex mcp add tickerbot-mcp-server -- npx -y @tickerbot/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tickerbot-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@tickerbot/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tickerbot-mcp-server --command npx --arg -y --arg @tickerbot/mcp-server
```

### Hermes

```yaml
mcp_servers:
  tickerbot-mcp-server:
    command: "npx"
    args: ["-y", "@tickerbot/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "tickerbot-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@tickerbot/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 78, 0)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-02 (score 78, +58)

- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] The attested source repository moved: tickerbot/tickerbot-mcp
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.20
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 20, −4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 24, −21)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 45)

First indexed and scored.

## MCP tools (19)

### `tickerbot_list_tickers` (~247 tokens)

List active tickers from the Tickerbot universe (~12,000 US equities + top 100 crypto). Use `tickers` for bulk lookup of named symbols (returns full rows); otherwise walks the universe alphabetically with `cursor` pagination. Supports filters: search, asset_type, exchange, sector, min_market_cap.

Input parameters:

- `asset_type` (string): Filter by asset type (e.g. "equity", "crypto").
- `cursor` (string): Opaque cursor from a prior response.
- `exchange` (string): Filter by exchange (e.g. "XNYS", "XNAS", "BATS").
- `limit` (integer): Page size. Max 1000. Default 50.
- `min_market_cap` (number): Minimum market cap in USD. Orders results by market_cap desc.
- `search` (string): Case-insensitive substring filter on ticker/name. Orders results by market_cap desc.
- `sector` (string): Exact-match sector filter (e.g. "Technology").
- `tickers` (string): Comma-separated symbols (max 50). When set, returns full rows for these symbols and pagination params are ignored.

### `tickerbot_get_ticker` (~126 tokens)

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) for the row as it stood at the close of a past trading day.

Input parameters:

- `asof` (string): Optional YYYY-MM-DD. Returns the row at close of that day.
- `ticker` (string, required): Symbol. Case-insensitive. Equities: bare symbol (AAPL). Crypto: bare symbol (BTC).

### `tickerbot_get_ticker_history` (~96 tokens)

Time-travel: get the full wide row for one ticker as it stood at a past date. Returns indicators, boolean flags, and the most-recent fundamentals known on that date. Use for backtests and reconstructions.

Input parameters:

- `asof` (string, required): Target date as YYYY-MM-DD or full ISO timestamp. Returns the most-recent daily snapshot on or before this date.
- `ticker` (string, required): Symbol.

### `tickerbot_get_ticker_events` (~125 tokens)

Get the discrete event log for one ticker (splits, dividends, analyst rating changes), newest-first. Optional date window and event-kind filter.

Input parameters:

- `cursor` (string): Opaque cursor.
- `from` (string): Earliest event timestamp (inclusive). YYYY-MM-DD or ISO.
- `kind` (string): Filter by event kind.
- `limit` (integer): Page size. Max 1000. Default 100.
- `ticker` (string, required): Symbol.
- `to` (string): Latest event timestamp (inclusive). YYYY-MM-DD or ISO.

### `tickerbot_list_signals_catalog` (~104 tokens)

List the unified signal catalog: every built-in column on the schema (`kind: builtin`) plus the caller's custom signals (`kind: expression`). Use to discover what `q=` clauses and signal names are available before composing a scan.

Input parameters:

- `cursor` (string): Opaque cursor.
- `kind` (string): Filter by kind. Omit for both.
- `limit` (integer): Page size for custom slice. Max 200. Default 50.

### `tickerbot_get_signals_match` (~202 tokens)

Find tickers that match a single signal right now (or at a past date with `asof`). Booleans need no condition (returns tickers where flag is true). Numerics need a `condition` like ">70" or "<=200". Sorted by signal value desc for numerics.

Input parameters:

- `asof` (string): Optional YYYY-MM-DD. Match against historical daily state.
- `condition` (string): Required for numerics. Single bound: <op><value>, ops in (>, >=, =, !=, <, <=). E.g. ">70".
- `cursor` (string): Opaque cursor.
- `limit` (integer): Page size. Max 200. Default 50.
- `signal` (string, required): Column name on ticker. E.g. golden_cross_today, above_sma_50, rsi_14, market_cap, pe_ratio.
- `universe` (string): Optional universe slug.

### `tickerbot_get_signal_history` (~140 tokens)

Get the time series of one signal for one ticker at a chosen interval (1m, 1h, 1d, 1w). Use for charting a numeric signal's evolution or seeing when a boolean flag was on/off across time.

Input parameters:

- `cursor` (string): Opaque cursor.
- `from` (string): Earliest bar timestamp. YYYY-MM-DD or ISO.
- `interval` (string, required): Bar interval.
- `limit` (integer): Page size.
- `signal` (string, required): Column name.
- `ticker` (string, required): Symbol.
- `to` (string): Latest bar timestamp. YYYY-MM-DD or ISO.

### `tickerbot_list_signal_events` (~98 tokens)

Get the list of discrete firings of a boolean signal for one ticker (each time the flag went true). Newest-first, paginated.

Input parameters:

- `cursor` (string): Opaque cursor.
- `from` (string): Earliest event timestamp.
- `limit` (integer): Page size.
- `signal` (string, required): Boolean signal column.
- `ticker` (string, required): Symbol.
- `to` (string): Latest event timestamp.

### `tickerbot_scan` (~274 tokens)

Run a SQL WHERE clause against the live ticker universe (or against a past trading day with `asof`). Returns matching tickers sorted by chosen column. The `q` grammar is a flat WHERE: column names from the schema, AND/OR/NOT, comparison operators, numeric/string literals. No JOIN, GROUP BY, or subqueries. Example: `gap_up AND market_cap < 2000000000 AND NOT earnings_this_week`.

Input parameters:

- `asof` (string): Optional YYYY-MM-DD. Run the WHERE against historical close-of-day snapshot for this date.
- `cursor` (string): Opaque cursor.
- `dir` (string): Sort direction.
- `fields` (string): Comma-separated extra columns to include in each result row beyond the default set.
- `limit` (integer): Page size. Max 100. Default 50.
- `order` (string): Sort column. Default day_change_pct.
- `q` (string, required): SQL WHERE expression. Max 4000 chars. Identifiers are bare column names from the schema (e.g. above_sma_50, rsi_14, market_cap). Numeric literals fully specified (no 1.5B shorthand).
- `universe` (string): Optional universe slug (top_10, top_100, or your own).

### `tickerbot_list_universes` (~58 tokens)

List the caller's saved universes (named ticker sets to scope scans). Each universe has a slug, name, and ticker count.

Input parameters:

- `cursor` (string): Opaque cursor.
- `limit` (integer): Page size.

### `tickerbot_get_universe` (~31 tokens)

Get one universe by slug, including its ticker list.

Input parameters:

- `id` (string, required): Universe slug.

### `tickerbot_create_universe` (~59 tokens)

Create a new universe (named set of tickers) for scoping future scans. Returns the new universe with its assigned slug.

Input parameters:

- `name` (string, required): Human-readable name.
- `tickers` (array, required): List of ticker symbols.

### `tickerbot_create_custom_signal` (~108 tokens)

Save a SQL WHERE expression as a named custom signal the caller can reference by name in future scans. E.g. name="oversold_with_volume", expr="rsi_14 < 30 AND volume_ratio_20d > 2".

Input parameters:

- `description` (string): Optional human description.
- `expr` (string, required): SQL WHERE expression. Same grammar as scan `q`.
- `name` (string, required): Snake_case identifier for the signal (lowercase letters, digits, underscore).

### `tickerbot_search_news` (~295 tokens)

Search the news archive (back to 2015) with a SQL WHERE clause. Plan-gated: Scale+ required for the archive. Columns on news_article include `time_published`, `title`, `summary`, `source`, `source_domain`, `category`, `authors`, `topics`, `tickers` (array), `overall_sentiment_score`, `overall_sentiment_label`, `url`. To filter to one ticker use `'NVDA' = ANY(tickers)` or the auto-unnest alias `tk = 'NVDA'`. Example: `q=tk='NVDA' AND time_published >= NOW() - INTERVAL '1 day'`. Supports group_by + having for aggregation (e.g. count of articles per day).

Input parameters:

- `cursor` (string): Opaque cursor.
- `dir` (string): Sort direction.
- `group_by` (string): Comma-separated columns for aggregation (e.g. `date_trunc('day', time_published)`).
- `having` (string): WHERE-style filter on aggregates. Requires group_by.
- `limit` (integer): Page size.
- `order` (string): Sort column or SELECT alias. Default time_published (non-aggregate) or volume (aggregate).
- `q` (string, required): SQL WHERE on news_article. Required.
- `select` (string): Comma-separated columns to include. Defaults to a slim set.

### `tickerbot_subscribe_scan` (~165 tokens)

Register a webhook that fires when matches for a scan query change. Pass `target_url` to deliver to your own URL (Discord, Slack, server endpoint); omit for in-app delivery in the dashboard. `cadence` is plan-gated (Hobby max 5m, Pro+ 1m). Use to satisfy "alert me when this happens" prompts.

Input parameters:

- `cadence` (string): Evaluation cadence.
- `name` (string): Human-readable label. Defaults to a truncated version of the query.
- `q` (string, required): SQL WHERE expression — same grammar as scan.
- `target_url` (string): Optional https URL to POST matches to. Omit for in-app delivery.
- `universe` (string): Optional universe slug to scope the watch.

### `tickerbot_subscribe_signal` (~180 tokens)

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_url` for outbound delivery or omit for in-app.

Input parameters:

- `cadence` (string): Evaluation cadence.
- `condition` (string): Required for numerics: single bound like ">70" or "<=200". Ignored for booleans.
- `name` (string): Human-readable label.
- `signal` (string, required): Column name (e.g. golden_cross_today, rsi_14).
- `target_url` (string): Optional https URL for delivery; omit for in-app.
- `ticker` (string): Optional ticker to restrict the watch to one symbol.
- `universe` (string): Optional universe slug.

### `tickerbot_subscribe_ticker` (~145 tokens)

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 outbound delivery or omit for in-app.

Input parameters:

- `cadence` (string): Evaluation cadence.
- `condition` (string, required): SQL WHERE fragment evaluated for this ticker (e.g. "rsi_14 > 70 AND gap_up").
- `name` (string): Human-readable label.
- `target_url` (string): Optional https URL for delivery; omit for in-app.
- `ticker` (string, required): Symbol.

### `tickerbot_list_webhooks` (~45 tokens)

List the caller's active webhook subscriptions (rules created via the subscribe tools).

Input parameters:

- `cursor` (string): Opaque cursor.
- `limit` (integer): Page size.

### `tickerbot_delete_webhook` (~50 tokens)

Delete a webhook subscription by id. Use after listing webhooks when the user wants to remove an alert.

Input parameters:

- `id` (string, required): Webhook id (looks like `wh_…`).

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server#diagnostics

## Score history

- 2026-08-04: 78
- 2026-08-03: 78
- 2026-08-02: 78
- 2026-08-01: 20
- 2026-07-31: 20
- 2026-07-30: 24
- 2026-07-28: 45
- 2026-07-27: 45

## Links

- npm package: https://www.npmjs.com/package/@tickerbot/mcp-server
- Socket report: https://socket.dev/npm/package/@tickerbot/mcp-server
- Repository: https://github.com/tickerbot/tickerbot-mcp
- Website: https://tickerbot.io/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/tickerbot-mcp-server/tickerbot-mcp-server
