_ registry / mcp streamable-http · checked 57m ago

TickerDB

https://mcp.tickerdb.com

Registry code: 1ca243a1a75d39c4

api record

TickerDB provides pre-computed financial market intelligence and stored EOD market data for AI agents. Use get_summary as the primary tool for ticker intelligence; use get_ohlcv when exact prices, returns, charts, or backtests are needed. Use get_search to find assets by categorical state or rank snapshots by fields such as market_cap_usd or fundamentals_pe_ratio; get_search also accepts market_* and macro_* filters to find tickers under a market or economic regime on the same date, and start/end to screen a date range. Use get_market for the market level itself: regime bands of the US equity…

endpoint
https://mcp.tickerdb.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is TickerDB live?
Yes — it answered the hub's last check (checked 57m ago). It answered 99% of checks over the last 30 days.
Is TickerDB free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does TickerDB have?
16 tools: get_insider_trades, get_indexes, get_summary, get_schema, get_market, get_account, get_changes, get_insiders, ….
Is TickerDB safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99%

90 days 99.4%· all time 99.4%

latency
800ms

last good check

priced tools
0

of 16 tools

_ answered our checks, 90 days 327 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • get market intelligence for a ticker
  • get end-of-day price history
  • search assets by technical state
  • track a watchlist
takes → gives
text, data → data
tools
5 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 16 tools
16 auth-required 16 of 16 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_insider_trades auth-required 11h ago

    One insider's disclosed transactions (SEC Form 4), ordered by disclosure time: the event series of a copy/inverse insider model. Get the slug from get_insiders first. Two rules for backtests: act at disclosed_at (when it became public), never trade_date (up to lag_days earlier; using it is look-ahead); and only open-market trades are decisions: set open_market_only=true to drop grants, option exercises, tax withholding and gifts, and consider exclude_planned=true (pre-scheduled Rule 10b5-1 sales carry little signal; nearly all of Jeff Bezos's Amazon sales are planned). Each trade has ticker (as of disclosure), side, shares, price, value, shares_owned_after, planned, late and an sec_url. Join to get_ohlcv for prices.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "insider"
      ],
      "properties": {
        "end": {
          "type": "string",
          "description": "Last disclosure date YYYY-MM-DD (default: today)."
        },
        "limit": {
          "type": "integer",
          "maximum": 1000,
          "minimum": 1,
          "description": "Rows per page, default 100, max 1000."
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "desc (default, newest first) or asc."
        },
        "start": {
          "type": "string",
          "description": "First disclosure date YYYY-MM-DD (default: start of the plan's history)."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Paging offset, default 0."
        },
        "ticker": {
          "type": "string",
          "description": "Only transactions in this company, e.g. \"AMZN\"."
        },
        "insider": {
          "type": "string",
          "description": "Insider slug from get_insiders, e.g. \"jeffrey-p-bezos\"."
        },
        "exclude_planned": {
          "type": "boolean",
          "description": "true: drop pre-planned Rule 10b5-1 trades."
        },
        "open_market_only": {
          "type": "boolean",
          "description": "true: only open-market purchases and sales (P/S)."
        }
      },
      "additionalProperties": false
    }
    arguments 53 lines
  • get_indexes auth-required 23h ago

    List the indexes whose membership TickerDB tracks (sp500, sp400, sp600, sp100, nasdaq100, russell1000, russell2000), each with the fund it is read from (e.g. IVV for the S&P 500), its first covered date (late 2019) and today's member count. Membership is the SEC Form N-PORT holdings of a fully replicating fund, point in time by filing date: typically 2-5 months behind the index provider's own changes. Use the ids with get_index_members, or as member_of in get_universe / get_search. Costs 1 credit.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • get_summary reads auth-required 8h ago

    Get pre-computed market intelligence for a specific stock, crypto, or ETF ticker. Supports 4 modes: (1) Snapshot (default) for the latest categorical state; (2) Historical snapshot by date; (3) Historical series with start and end dates; (4) Events by field and optional band (when a band was entered, what it left, how long the prior state lasted), for any tracked band: momentum_rsi_zone, trend_direction, trend_stage, trend_ma8_slope_zone through trend_ma200_slope_zone, trend_distance_ma40_zone, trend_ma_crossover_event, pattern_bull_flag_state, pattern_ascending_triangle_state, volume_ratio_zone, fear_greed_zone, fundamentals_free_cash_flow_zone, fundamentals_peg_zone, forward_outlook_earnings_zone, garp_core_score_tier and more (old names such as pattern_bull_flag or volume_ratio_band are still accepted). Add stats=true in event mode for aggregate counts by band. Results include as_of_date, same-candle OHLCV, market_cap_usd, market_cap_tier, performance_zone, trend (ma_slopes, distance_from_ma_zone, ma_compression_zone, volume_confirmation_state), momentum (raw rsi, stochastic_k, stochastic_d beside their zones), extremes (condition_rarity_percentile), volatility, volume (ratio_zone, price_on_volume_direction), patterns (*_state), support/resistance (distance_zone, volume_at_tests_zone), range_position_zone, breakout_type, fear_greed (score 0-100 and zone), levels (paid tiers), sector_context (stocks_oversold_count, stocks_count, asset_vs_sector_rsi_zone ...), and stock-only fundamentals (pe_ratio, pb_ratio, peg_ratio, peg_zone, reporting_currency, revenue_zone, profitability_zone, cash_flow_zone, balance_sheet_zone, free_cash_flow_zone, earnings_proximity_zone, analyst_consensus_zone, forward_outlook.*_zone, insider_activity) plus the garp block (Pro; GARP Core in garp.core: GARP from valuation, business quality and resilience, consistent across all history, built for backtests). Market-wide and macro regimes are not part of a ticker summary: use get_market. Summary keeps sibling _meta objects off by default; set meta=true or request explicit *_meta fields when paid-tier stability metadata is needed.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "ticker"
      ],
      "properties": {
        "end": {
          "type": "string",
          "description": "Range end date (YYYY-MM-DD). Use with start for historical series."
        },
        "band": {
          "type": "string",
          "description": "Filter events to a specific band value (e.g. deep_oversold, strong_uptrend, stage_2_growth, extreme_fear). For MA distance event fields such as trend_distance_ma40_zone, grouped aliases above and below are also supported. Only used with field."
        },
        "date": {
          "type": "string",
          "description": "Historical date (YYYY-MM-DD) for a point-in-time snapshot. Requires Plus or Pro plan. Omit for latest."
        },
        "meta": {
          "type": "boolean",
          "description": "Snapshot and history modes only. Add true to include sibling _meta / status_meta stability objects across the response. Explicit *_meta field paths in fields still work without this flag."
        },
        "after": {
          "type": "string",
          "description": "Return events after this date (YYYY-MM-DD). Only used with field."
        },
        "field": {
          "type": "string",
          "description": "Band field name for event queries (e.g. momentum_rsi_zone, extremes_condition, trend_direction, trend_stage, pattern_bull_flag_state, pattern_ascending_triangle_state, pattern_rising_wedge_state, trend_ma8_slope_zone through trend_ma200_slope_zone, trend_ma_crossover_event, trend_distance_ma40_zone, volume_ratio_zone, fear_greed_zone, fundamentals_valuation_zone, fundamentals_free_cash_flow_zone, fundamentals_peg_zone, fundamentals_analyst_consensus_zone, forward_outlook_earnings_zone, garp_core_score_tier, insider_zone). Old names are accepted. When provided, returns band transition history instead of a snapshot."
        },
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "For event mode: max results (1-50), returned newest-first by default. For sample=even date ranges: requested sampled rows, capped by plan (Free 3, Plus 10, Pro 50)."
        },
        "start": {
          "type": "string",
          "description": "Range start date (YYYY-MM-DD). Use with end for historical series."
        },
        "stats": {
          "type": "boolean",
          "description": "Event mode only. Add true to return aggregate stats instead of raw event rows."
        },
        "before": {
          "type": "string",
          "description": "Return events before this date (YYYY-MM-DD). Only used with field."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional summary fields to return. Identity fields such as market_cap_usd and market_cap_tier are always kept. Pass sections like ohlcv, trend, momentum, volatility, volume, patterns, extremes, support_level, resistance_level, fear_greed, fundamentals, sector_context, garp, or levels (paid tiers). Or pass dotted paths like ohlcv.close, trend.direction, trend.stage, trend.ma_slopes.ma_50, trend.moving_average_values.ma_50_price, trend.ma_crossover_event, trend.direction_meta, trend.distance_from_ma_zone.ma_40, trend.distance_from_ma_pct.ma_40, trend.ma_compression_zone, trend.volume_confirmation_state, momentum.rsi, momentum.rsi_zone, momentum.stochastic_k, momentum.stochastic_zone, momentum.macd_state, patterns.bull_flag_state, patterns.bull_flag_breakout, patterns.ascending_triangle_state, volatility.squeeze_active, volatility.squeeze_periods, volume.ratio_zone, volume.climax_detected, volume.price_on_volume_direction, support_level.level_price, support_level.distance_zone, support_level.status_meta, range_position_zone, breakout_type, fear_greed.score, fear_greed.zone, sector_context.rsi_zone, sector_context.asset_vs_sector_rsi_zone, sector_context.stocks_oversold_count, fundamentals.pe_ratio, fundamentals.peg_ratio, fundamentals.peg_zone, fundamentals.reporting_currency, fundamentals.valuation_zone, fundamentals.free_cash_flow_zone, fundamentals.revenue_zone, fundamentals.earnings_proximity_zone, fundamentals.analyst_consensus_zone, fundamentals.forward_outlook.earnings_zone, fundamentals.insider_activity, garp.core.score, garp.core.score_tier, garp.business_score, levels.support_levels. Flat search names (e.g. volume_ratio_zone, fundamentals_peg_ratio, garp_core_score) and pre-2026-10-31 paths (volume.ratio_band, patterns.bull_flag, fundamentals.revenue) are accepted too; responses use the new keys. trend.stage is populated on weekly snapshots when stage evidence is sufficient."
        },
        "sample": {
          "enum": [
            "even"
          ],
          "type": "string",
          "description": "Date range mode only. Use 'even' to evenly distribute snapshots across the full start/end range."
        },
        "ticker": {
          "type": "string",
          "description": "Ticker symbol, e.g. AAPL, BTCUSD, SPY"
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "Analysis timeframe. Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus"
        },
        "adjustment": {
          "enum": [
            "split",
            "split_dividend",
            "raw"
          ],
          "type": "string",
          "description": "Price basis. split (default): today's share basis, every split applied. split_dividend: splits plus cash dividends (a total-return series). raw: as traded on each date (prices in the ohlcv block)."
        },
        "context_band": {
          "type": "string",
          "description": "Only return events where the context ticker was in this band (e.g. downtrend). For MA distance context fields, grouped aliases above and below are also supported. Must be provided with context_ticker and context_field."
        },
        "context_field": {
          "type": "string",
          "description": "Band field to check on the context ticker (e.g. trend_direction, trend_stage, or trend_distance_ma40_zone). Must be provided with context_ticker and context_band."
        },
        "context_ticker": {
          "type": "string",
          "description": "Cross-asset correlation: a second ticker to filter against (e.g. SPY). Requires context_field and context_band. Plus/Pro only."
        }
      },
      "additionalProperties": false
    }
    arguments 99 lines
  • get_schema reads auth-required 4h ago

    Get the schema of all available fields and their valid band values, with a plain-words description, unit and minimum plan for each. Every field has level: ticker (per-asset snapshot columns for get_search, get_summary) or market (market_* and macro_* regime bands, one row per date, for get_market and as get_search filters matched on the same date). Use this when the user asks 'what fields are available?', 'what bands does momentum_rsi_zone have?', 'what macro bands exist?', or when you need to validate field/band names before calling get_summary with event parameters, get_search with filters, or get_market. Field names follow <group>_<name>[_<unit>]; bands end in a category word (_zone, _trend, _state ...). The response also lists the naming rules and notes that pre-2026-10-31 names are still accepted.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • get_market auth-required 19h ago

    Get the market level: regime bands for the whole US equity market (market_*) and the US economy (macro_*), one row per date, point in time. Use it for 'what regime is the market in?', 'is breadth washed out?', 'is the yield curve inverted?', 'is the economy in stagflation?', 'what is the recession risk?', 'when did the yield curve last un-invert?', 'list every market regime change in 2024'. Key bands: market_regime_zone (bull_broad, bull_narrow, correction, bear, recovery), market_breadth_ma200_zone (washed_out .. overextended), market_fear_greed_zone, market_valuation_zone, market_volatility_zone, market_risk_appetite_zone, market_earnings_season_zone, macro_regime_zone (goldilocks, reflation, stagflation, deflationary_slowdown), macro_recession_risk_zone, macro_yield_curve_zone (deeply_inverted, inverted, flat, normal, steep), macro_fed_policy_zone, macro_inflation_zone, macro_inflation_trend, macro_labor_market_zone, macro_sahm_rule_zone, macro_gdp_zone. Headline numbers: market_fear_greed_score, market_stocks_below_ma200_pct, market_aggregate_pe_ratio, macro_treasury_yield_2y_pct, macro_treasury_yield_10y_pct, macro_yield_curve_10y_minus_2y_pct, macro_fed_funds_rate_pct, macro_cpi_inflation_yoy_pct, macro_unemployment_rate_pct, macro_gdp_growth_annualized_pct. Every band carries change markers (_prev = label left on the row it changed, _periods = rows in the current label, 1 = changed today, _flips_recent_count, _stability); set changes=true to get only dates where a band changed, with from/to. macro_ values are as first published (never revised later) and low-frequency releases carry until the next one (null once stale). To find tickers under a market condition, put market_/macro_ filters into get_search instead (they match each ticker row's own date). get_schema lists every market field with level=market.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "end": {
          "type": "string",
          "description": "Range end (YYYY-MM-DD), with start."
        },
        "date": {
          "type": "string",
          "description": "One date (YYYY-MM-DD). Omit date, start and end for the newest row."
        },
        "limit": {
          "type": "integer",
          "maximum": 2000,
          "minimum": 1,
          "description": "Range rows to return. Default 100, max 2000."
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "Range order by date. Default: desc (newest first)."
        },
        "start": {
          "type": "string",
          "description": "Range start (YYYY-MM-DD), with end."
        },
        "fields": {
          "type": "string",
          "description": "JSON-encoded array of market fields to return, e.g. [\"market_regime_zone\",\"macro_regime_zone\",\"macro_yield_curve_zone\",\"macro_yield_curve_10y_minus_2y_pct\"]. Omit for every band and raw value; [\"*\"] adds the change markers."
        },
        "changes": {
          "type": "string",
          "description": "true = only dates where at least one selected band changed (each row gets changes: [{field, from, to}]); or a JSON array of bands to watch, e.g. [\"market_regime_zone\",\"macro_regime_zone\"]. Plus and Pro."
        },
        "filters": {
          "type": "string",
          "description": "JSON-encoded filter array on market fields, markers included. Example (yield curve just un-inverted): [{\"field\":\"macro_yield_curve_zone_prev\",\"op\":\"in\",\"value\":[\"inverted\",\"deeply_inverted\"]},{\"field\":\"macro_yield_curve_zone\",\"op\":\"in\",\"value\":[\"flat\",\"normal\",\"steep\"]}]. Ops: eq, neq, in, gt, gte, lt, lte."
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "daily (every US equity session) or weekly (Sunday-dated). Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus"
        }
      },
      "additionalProperties": false
    }
    arguments 53 lines
  • get_account reads auth-required 19h ago

    Get your account details including current plan tier, monthly credit limits, and current usage. Response includes tier, limits (monthly_requests, overage_enabled, search_results, history_days), and usage (monthly_requests_used, monthly_requests_remaining, credit_balance for pay-per-use accounts). Also returns scheduled_tier and scheduled_change_at if a plan change is pending.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • get_changes auth-required 19h ago

    Get field-level band changes of the newest published date for up to 50 tickers: day-over-day for daily, week-over-week for weekly. Each change is {field, from, to}; Plus and Pro also get stability, periods_in_current_state and recent flips. ticker_context gives each ticker's last_changed_date. Use it for 'what changed for AAPL, MSFT and NVDA today?' instead of pulling full summaries; use get_summary for one ticker's full state.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "tickers"
      ],
      "properties": {
        "tickers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "minItems": 1,
          "description": "Ticker symbols, e.g. [\"AAPL\", \"MSFT\"]. At most 50."
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "daily (day-over-day) or weekly (week-over-week). Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus"
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • get_insiders auth-required 23h ago

    Find insiders (people and organisations whose trades are disclosed in SEC Form 4: CEOs, officers, directors, 10%+ owners including funds) by name, ticker or type, or list them most active first. Step 1 of a copy/inverse insider model ('make a model that copies Bezos'): search the name, pick the right result from its companies, roles and activity, then call get_insider_trades with its slug. Search is loose: any order and case, word starts, initials, nicknames both ways (bill = william), typos, run-together or split names (jeffbezos, value act), legal suffixes ignored, and extra words tolerated (half the words must match; full matches rank first, matched_words says how many matched). Several people can share a name: check companies and roles. Curated aliases cover famous names filed differently (Jensen Huang files as 'Huang Jen Hsun'). Each result has lag_days_median/_p90 (days from trade to public disclosure) and late_filing_share.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "description": "Name to search, e.g. \"jeff bezos\" or \"pershing square\". Omit to list."
        },
        "role": {
          "enum": [
            "ceo",
            "cfo",
            "coo",
            "president",
            "chair",
            "officer",
            "director",
            "ten_percent_owner"
          ],
          "type": "string",
          "description": "Role ever held at any company."
        },
        "type": {
          "enum": [
            "person",
            "organization"
          ],
          "type": "string",
          "description": "person or organization (funds, trusts, companies)."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Results per page, default 20, max 100."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Paging offset, default 0."
        },
        "ticker": {
          "type": "string",
          "description": "Only insiders who filed at this company, e.g. \"AMZN\"."
        },
        "active_since": {
          "type": "string",
          "description": "YYYY-MM-DD: last disclosure on or after this date."
        }
      },
      "additionalProperties": false
    }
    arguments 52 lines
  • get_fund_holdings auth-required 15h ago

    A fund's full portfolio as public on one date (SEC Form N-PORT), largest positions first: every line as filed (stocks, bonds, cash funds, derivatives) with ticker (TickerDB symbol on that date when the CUSIP maps to an asset we cover, else null), cusip, isin, balance, value_usd, weight_pct (percent of net assets), asset_category (EC = common stock). Point in time: filing.filed_on is when the portfolio became public and filing.report_date the quarter end it describes (typically 2-5 months before the date). Coverage starts with the fund's first N-PORT (late 2019). Costs 1 credit plus 1 per 100 lines beyond 100.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fund"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Date YYYY-MM-DD (default today). History depth depends on plan."
        },
        "fund": {
          "type": "string",
          "description": "Fund ticker (e.g. \"IVV\", \"ARKK\", \"VFIAX\") or SEC series id; find with get_funds."
        },
        "limit": {
          "type": "integer",
          "maximum": 5000,
          "minimum": 1,
          "description": "Lines per page, default 500, max 5000."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Paging offset, default 0."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • get_fund_holders auth-required 15h ago

    Which funds held a stock on one date (SEC Form N-PORT, point in time: each fund's newest portfolio filed by the date), largest positions first, plus the tracked indexes it belonged to (index_memberships) and totals over every holder (fund_count, fund_shares). Each fund's shares and value_usd are as of its own report_date, typically 2-5 months earlier. Costs 1 credit plus 1 per 100 funds beyond 100.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "ticker"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Date YYYY-MM-DD (default today). History depth depends on plan."
        },
        "limit": {
          "type": "integer",
          "maximum": 1000,
          "minimum": 1,
          "description": "Funds per page, default 100, max 1000."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Paging offset, default 0."
        },
        "ticker": {
          "type": "string",
          "description": "Stock or ETF ticker, e.g. \"AAPL\" (former symbols resolve)."
        },
        "etf_only": {
          "type": "boolean",
          "description": "true: only ETFs listed in TickerDB."
        }
      },
      "additionalProperties": false
    }
    arguments 33 lines
  • get_index_members auth-required 15h ago

    An index's members on one date, point in time: the long stock positions of its tracking fund's newest SEC N-PORT portfolio FILED by that date (source.report_date is the portfolio's own quarter-end date, source.filed_on when it became public; a stock added to the index after report_date appears with the next filing). Each member has ticker (as of the date), name and weight_pct (percent of fund net assets). Ids from get_indexes. To screen members by fields, use get_universe or get_search with member_of instead. Costs 1 credit plus 1 per 100 members beyond 100.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "index"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Date YYYY-MM-DD (default today). History depth depends on plan."
        },
        "index": {
          "type": "string",
          "description": "Index id from get_indexes, e.g. \"sp500\", \"nasdaq100\", \"russell2000\"."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • get_funds auth-required 23h ago

    Find funds (ETFs and mutual funds) that publish holdings to the SEC on Form N-PORT, by name words or ticker, largest first. Each fund has fund_id (SEC series id), tickers, is_etf, its first and newest public portfolio dates. Then use get_fund_holdings for a portfolio, or held_by in get_universe / get_search. Names, tickers and sizes are current, not point in time. Costs 1 credit.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "q": {
          "type": "string",
          "description": "Words of the fund's name, any order, e.g. \"ark innovation\" or \"core s&p 500\"."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows per page, default 20, max 100."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Paging offset, default 0."
        },
        "ticker": {
          "type": "string",
          "description": "A fund ticker (e.g. \"IVV\", \"VFIAX\") or SEC series id (\"S000004310\")."
        },
        "etf_only": {
          "type": "boolean",
          "description": "true: only ETFs listed in TickerDB."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • get_universe auth-required 11h ago

    Get selected fields for EVERY asset on one date in a single call (about 11,000 rows), ordered by ticker: the input of a daily or weekly trading model run. Fields use the same names as get_search and are tier-gated the same way; at most 60 per call. Costs 5 credits per 10 fields. member_of / held_by restrict it to an index's or a fund's holdings on that date ("S&P 500 members with garp_core_score"). A row dated D reflects everything known by 04:00 UTC on D+1, so a backtest acts at the next session's open. For filtered or ranked subsets use get_search; for one ticker use get_summary.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "fields"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Date (YYYY-MM-DD). Omit for each asset class's newest published date. History depth depends on plan."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 60,
          "minItems": 1,
          "description": "Fields to return, e.g. [\"trend_direction\", \"momentum_rsi_zone\", \"market_cap_usd\"]. Same names and aliases as get_search; at most 60."
        },
        "held_by": {
          "type": "string",
          "description": "Only assets this fund held on each row's date: fund ticker (e.g. \"IVV\", \"ARKK\") or SEC series id (find with get_funds). Point in time like member_of."
        },
        "member_of": {
          "type": "string",
          "description": "Only members of this index on each row's date, e.g. \"sp500\", \"nasdaq100\", \"russell2000\" (list: get_indexes). Point in time: the tracking fund's N-PORT portfolio public on that date (typically 2-5 months old)."
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "daily, or weekly (Sunday-dated). Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus"
        },
        "asset_class": {
          "enum": [
            "stock",
            "etf",
            "crypto"
          ],
          "type": "string",
          "description": "Only this asset class. Omit for all."
        }
      },
      "additionalProperties": false
    }
    arguments 48 lines
  • get_ohlcv reads auth-required 11h ago

    Get stored end-of-day OHLCV candles for a stock, ETF, or crypto ticker, daily or weekly. Use this for exact-return calculations, charts, and backtests after get_summary identifies a setup. Results are paginated; pass next_cursor back as cursor to continue. Prices are stored as traded; adjustment picks the basis: split (default), split_dividend (total return) or raw. Credit cost is 1 credit per 100 bars returned, rounded up, with a 1 credit minimum.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "ticker"
      ],
      "properties": {
        "end": {
          "type": "string",
          "description": "Inclusive end date (YYYY-MM-DD). Compared against the candle date."
        },
        "limit": {
          "type": "integer",
          "maximum": 1000,
          "minimum": 1,
          "description": "Maximum candles to return (1-1000). Default: 100."
        },
        "order": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "Sort by candle date. Default: desc."
        },
        "start": {
          "type": "string",
          "description": "Inclusive start date (YYYY-MM-DD). Compared against the candle date, so for weekly this is the Sunday week end. Lookback is limited by plan."
        },
        "cursor": {
          "type": "string",
          "description": "Exclusive date cursor from next_cursor for pagination (YYYY-MM-DD)."
        },
        "ticker": {
          "type": "string",
          "description": "Ticker symbol, e.g. AAPL, BTCUSD, SPY"
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "Candle timeframe. Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus. Weekly candles cover Monday-Sunday and are dated by the Sunday week end, matching get_summary with timeframe=weekly. The in-progress week is not returned."
        },
        "adjustment": {
          "enum": [
            "split",
            "split_dividend",
            "raw"
          ],
          "type": "string",
          "description": "Price basis. split (default): today's share basis, every split applied. split_dividend: splits plus cash dividends (a total-return series). raw: as traded on each date (daily only for ohlcv)."
        }
      },
      "additionalProperties": false
    }
    arguments 57 lines
  • get_search reads auth-required 8h ago

    Search for assets matching filter criteria, including categorical states (e.g. oversold assets, strong uptrends, bull/bear flag setups, triangle or wedge setups, free-cash-flow surplus or burn, recent golden crosses, weekly stage 2 assets near the 40w MA with high volume, volatility squeeze active, volume climax detected, insider buying zone, sector-aligned breakouts, extreme fear, cheap PEG) or rankings by a field such as market_cap_usd on a historical date. Pass filters as a JSON-encoded array of {field, op, value} objects. Use get_schema to discover valid field names (prefer it over guessing). Bands end in a category word (_zone, _state, _direction, _trend, _tier), raw numbers in their unit (_pct, _ratio, _price, _usd, _count, _periods, _score). Examples: momentum_rsi_zone, momentum_rsi (0-100), trend_direction, trend_stage, trend_ma50_slope_zone, trend_distance_ma40_zone (raw trend_distance_ma40_pct), trend_ma_compression_zone, trend_ma_crossover_event, pattern_bull_flag_state, pattern_bull_flag_breakout, pattern_ascending_triangle_state, volume_ratio_zone, volatility_squeeze_active, range_position_zone, fundamentals_free_cash_flow_zone, fundamentals_revenue_zone, fundamentals_peg_ratio / fundamentals_peg_zone, fundamentals_earnings_proximity_zone, forward_outlook_earnings_zone, insider_zone, sector_stocks_oversold_count, fear_greed_score / fear_greed_zone (per asset), and GARP Core garp_core_score / garp_core_score_tier / garp_core_rank (GARP from valuation, business quality and resilience, consistent across all history, built for backtests). Names from before the 2026-10-31 renames (volume_ratio_band, trend_distance_ma50, pattern_bull_flag, fundamentals_revenue, range_position, sector_total_count) are still accepted; responses use the new names. MARKET CONDITIONS: market-wide market_* and economy-wide macro_* bands (e.g. market_regime_zone, market_breadth_ma200_zone, market_fear_greed_zone, macro_regime_zone, macro_yield_curve_zone, macro_yield_curve_zone_prev, macro_recession_risk_zone) can be mixed into filters: a market filter keeps only the dates where the condition held, matched on each ticker row's own date; putting a market field in fields attaches that date's value to every row. With start and end plus at least one market filter, every matching date in the range is screened (rows carry date), e.g. stocks oversold on the days breadth was washed out. Use get_market for the market rows themselves. Use fields to control returned columns and sort_by to rank results server-side.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "filters"
      ],
      "properties": {
        "end": {
          "type": "string",
          "description": "Date-range screen end (YYYY-MM-DD), with start."
        },
        "date": {
          "type": "string",
          "description": "Historical snapshot date (YYYY-MM-DD). Omit for latest per asset class. Do not combine with start/end."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "minimum": 1,
          "description": "Max results to return. Tier-gated: Starter 25, Plus 100, Pro 500. Default: 20"
        },
        "start": {
          "type": "string",
          "description": "Date-range screen start (YYYY-MM-DD), with end. Requires at least one market_* or macro_* filter, which selects the dates; rows then carry date, newest first."
        },
        "fields": {
          "type": "string",
          "description": "JSON-encoded array of column names to return. Example: [\"ticker\", \"sector\", \"market_cap_usd\", \"fundamentals_pe_ratio\", \"trend_stage\", \"trend_ma40_price\", \"trend_ma50_slope_zone\", \"trend_ma_crossover_event\", \"trend_distance_ma40_zone\", \"pattern_bull_flag_state\", \"pattern_bull_flag_breakout\", \"fundamentals_free_cash_flow_zone\", \"volume_ratio_zone\", \"fear_greed_zone\", \"insider_zone\", \"sector_agreement\", \"fundamentals_earnings_proximity_zone\", \"market_regime_zone\", \"macro_regime_zone\"]. market_* / macro_* fields attach the market value of each row's date. Omit to get a default core subset: ticker, asset_class, sector, market_cap_usd, market_cap_tier, momentum_performance_zone, trend_direction, trend_ma20_slope_zone, trend_ma_compression_zone, trend_ma_crossover_event, momentum_rsi_zone, extremes_condition, extremes_condition_rarity, volatility_regime, volume_ratio_zone, pattern_*_state for the seven patterns plus pattern_bull_flag_breakout / pattern_bear_flag_breakdown, fundamentals_valuation_zone, range_position_zone. Use [\"*\"] for all ticker fields. Specify fields to reduce token usage. trend_stage is weekly-only and should be requested with timeframe=weekly. Fundamentals, forward_outlook, insider, sector context and GARP Core fields are Pro; support/resistance/range/breakout fields need Plus; change markers (_periods, _prev, _stability, _flips_recent_count) need Plus."
        },
        "filters": {
          "type": "string",
          "description": "JSON-encoded filter array. Each filter: {\"field\": \"column_name\", \"op\": \"eq|neq|in|gt|gte|lt|lte\", \"value\": \"...\"}. Example: [{\"field\": \"momentum_rsi_zone\", \"op\": \"in\", \"value\": [\"oversold\", \"deep_oversold\"]}, {\"field\": \"sector\", \"op\": \"eq\", \"value\": \"Technology\"}]. Market conditions mix in: [{\"field\": \"market_breadth_ma200_zone\", \"op\": \"eq\", \"value\": \"washed_out\"}] or the yield curve just un-inverting: [{\"field\": \"macro_yield_curve_zone_prev\", \"op\": \"eq\", \"value\": \"inverted\"}]. Change markers work as filters too: <band>_periods = 1 means the band changed on that row, <band>_prev is the label it left."
        },
        "held_by": {
          "type": "string",
          "description": "Only assets this fund held on each row's date: fund ticker (e.g. \"IVV\", \"ARKK\") or SEC series id (find with get_funds). Point in time like member_of."
        },
        "sort_by": {
          "type": "string",
          "description": "Ticker field to sort results by (e.g. \"market_cap_usd\", \"fundamentals_pe_ratio\", \"fundamentals_peg_ratio\", \"fear_greed_score\", \"garp_core_score\", \"extremes_condition_rarity_percentile\", \"fundamentals_valuation_percentile\", \"volume_percentile\", \"sector_stocks_oversold_count\"). Market-level fields cannot be sorted on (one value per date). Server-side sorting avoids pulling extra fields for client-side ranking."
        },
        "member_of": {
          "type": "string",
          "description": "Only members of this index on each row's date, e.g. \"sp500\", \"nasdaq100\", \"russell2000\" (list: get_indexes). Point in time: the tracking fund's N-PORT portfolio public on that date (typically 2-5 months old)."
        },
        "timeframe": {
          "enum": [
            "daily",
            "weekly"
          ],
          "type": "string",
          "description": "Analysis timeframe. Daily snapshots are Pro and Commercial only (Free and Plus read weekly; daily returns 403). Default: daily on Pro and Commercial, weekly on Free and Plus"
        },
        "sort_direction": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "Sort direction. Default: desc. Use 'asc' for lowest-first (e.g. cheapest valuation percentile)."
        }
      },
      "additionalProperties": false
    }
    arguments 64 lines
  • get_status auth-required 8h ago

    When the data last changed (free, 0 credits): for daily and weekly snapshots and each asset class, the newest published date, whether it is preliminary or final (eod), its row count and when it was released; the market level's newest date; recent releases; and the release schedule. Call it to decide whether new data is out before re-pulling summaries, search results or a universe, instead of polling ticker tools.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 1ca243a1a75d39c4.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/1ca243a1a75d39c4/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/1ca243a1a75d39c4/badge.svg)](https://brick.blue/agent/1ca243a1a75d39c4?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.