protogrid

Search / org.bull-run/bullrun

Bullrun

R0· no sign-in

Global stock search, screens, price history, news, UCITS ETFs, risk and macro; no API key

v0.7.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality57needs work
Trust92of 100
Uptime, 30 days97%
Latency p50432 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "bullrun": {
      "type": "http",
      "url": "https://mcp.bull-run.org/mcp"
    }
  }
}
claude mcp add --transport http bullrun https://mcp.bull-run.org/mcp
[mcp_servers.bullrun]
url = "https://mcp.bull-run.org/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "bullrun": {
      "type": "remote",
      "url": "https://mcp.bull-run.org/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "bullrun": {
      "type": "http",
      "url": "https://mcp.bull-run.org/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=bullrun&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmJ1bGwtcnVuLm9yZy9tY3AifQ%3D%3D"
}
{
  "servers": {
    "bullrun": {
      "type": "http",
      "url": "https://mcp.bull-run.org/mcp"
    }
  }
}
{
  "mcpServers": {
    "bullrun": {
      "httpUrl": "https://mcp.bull-run.org/mcp"
    }
  }
}
extensions:
  "bullrun":
    enabled: true
    name: "bullrun"
    type: streamable_http
    uri: "https://mcp.bull-run.org/mcp"
    timeout: 300

Quality 57 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene57 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length11 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations50 of 50 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_etf_index_group (destructiveHint, idempotentHint, openWorldHint); get_macro_indicators (destructiveHint, idempotentHint, openWorldHint); screen_stocks (destructiveHint, idempotentHint, openWorldHint); …
  • fail
    tools.token_costabout 25,462 tokens to load every tool, a large share of an agent's context
  • warn
    tools.api_dump50 tools, 70% named like REST operations: looks like an API mapped one endpoint per tool
stability25 · weight 15
  • warn
    stability.changes75 tool changes in 30 days
  • fail
    stability.rug_pull2 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

50 tools, about 25,462 tokens to load them all · tool set 9fad862fbc30 · tools last changed 2026-10-19 · checked 2026-10-19 17:57 UTC

Tool changes

  • get_earnings_call_transcriptchangeddescriptionmeaning changed
    before

    Fetch speaker-tagged earnings-call transcript chunks for one exact Bullrun ticker, optionally filtered by fiscal period or search text. Use this for management guidance language, analyst Q&A, and qualitative judgment that is not visible in financial statements. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

    after · 46% of words in common

    Read cached earnings-call paragraphs for one exact Bullrun ticker, optionally filtered by fiscal period or search text. A best-effort free background import collects at most the two latest retained calls from DefeatBeta for supported US listings, with a 24-hour stored-data cooldown; the first read may be empty. Coverage and source publication lag vary. Speaker names and paragraph order are retained; roles and prepared/Q&A section labels may be unavailable. This is a read-only research operation. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

  • get_operating_kpischangeddescription, input schemameaning changed
    before

    Fetch period-specific operating KPIs and unit-economics metrics for one exact Bullrun ticker: ARR, net revenue retention, RPO, billings, customer counts, payments volume, cross-border volume, processed transactions, or other domain-specific metrics when populated. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

    after · 49% of words in common

    Read curated, source-linked operating KPI observations for one exact Bullrun ticker. Coverage is sparse and no automatic KPI feed is configured: do not assume ARR, retention, customer counts or payments metrics are available. Check get_company_data_coverage first. Returns stored fiscal periods, units and source links; company-economics observations are a separate dataset. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

  • get_forward_estimateschangeddescription
    before

    Fetch forward consensus revenue/EPS/EBITDA estimates, management guidance ranges, and estimate-revision percentages for one exact Bullrun ticker. Also derives simple forward P/E and PEG-style context from the latest close when EPS estimates are available. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

    after · 54% of words in common

    Read cached Yahoo analyst consensus revenue/EPS estimates and available EPS revision percentages for one exact Bullrun ticker. A free background refresh checks supported symbols on demand, storing at most one snapshot per day; the first read may be empty. Fiscal periods and source currency are preserved. The configured feed does not provide EBITDA estimates, management guidance or revenue revisions. Forward P/E/PEG context uses the latest annual consensus snapshot only when quote and EPS currency units match. Read-only research operation. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

  • get_valuation_modelchangedinput schema
  • get_risk_moverschangedinput schema
  • get_company_relationshipschangedinput schema
  • get_company_riskchangedinput schema
  • get_revenue_breakdownchangedinput schema
  • get_quality_moat_metricschangedinput schema
  • get_financial_historychangedinput schema

Showing 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.

Trust 92 / 100

provenance75
liveness99
freshness100
hygiene100

+repository +dns-namespace +reachable +uptime-97% +updated-0d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.bull-run.org/mcp streamable-httpnoneyes97%432 ms2025-11-252026-10-19

Tools (50)

analyze_etf_overlapread-onlyCompare two to ten ETFs using their latest stored holdings. Returns pairwise shared holdings, weighted overlap (sum of the smaller weight for each shared holding), each fund's weight in shared names, and the largest duplicate exposures. Holdings are matched as securities, not symbols: same ISIN first, then the same symbol only where the names agree and the countries do not conflict, then the same company name within one country; each shared row says which (matchedOn). Cash, currency and derivative lines are never counted as shared. Coverage is explicit because provider holdings may be partial top-holdings samples. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
analyze_portfolio_fitread-onlyAnalyze an ETF candidate against one signed-in user's portfolio. Combines Bullrun's price-history candidate fit (correlation, beta and pro-forma volatility) with latest-holdings look-through that identifies direct and ETF-contained duplicate underlying positions. Coverage is explicit and partial provider holdings make duplicate exposure a lower bound. Requires OAuth read:portfolios. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
compare_company_exposuresread-onlyCompare the cached company relationship graphs of two to five exact stock tickers. Finds shared suppliers, customers, competitors and partners, including cross-role overlaps, using stable company entity IDs or exact tickers only. Returns directed direct relationships with VERIFIED vs SUGGESTED/NEEDS_REVIEW status, confidence, sole-source flags, disclosed metrics with meaning/unit/period, and primary-source URLs/dates. Shared groups reference the evidence-bearing relationship rows by ID. Missing graphs or edges mean unknown coverage. At most five cached reads; never starts paid discovery, infers exposure weights or estimates portfolio losses. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
compare_etfsread-onlyReturn a normalized side-by-side comparison of two to ten ETFs across selected classification, market, fund-data, cost, income, benchmark, price-performance, price-risk, and holdings modules. Leaders are mechanical extrema, not recommendations. Currency and partial-holdings caveats are explicit. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
compare_stocksread-onlyCompare two to five exact stock tickers in one compact structured response: annual fundamentals and growth, quality ratios, stored valuation and Bullrun model context, and measured risk dials. Reports each fiscal year, source date, native quote/reporting currency and missing coverage. No currency conversion, quarterly-to-annual substitution, buy/sell ranking or generated research. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
create_portfolio_draftUse when the user wants you to BUILD or PROPOSE a brand-new portfolio for them — e.g. "build me a portfolio", "put together a dividend portfolio", "draft a portfolio of AI stocks", "create a new portfolio for $10k". Generates a REVIEWABLE paper-portfolio draft for the signed-in Bullrun user from a natural-language brief (e.g. "a diversified European dividend portfolio"). Requires OAuth with the write:drafts scope and a Bullrun Pro account. This is DRAFT-ONLY and never changes any live position: the draft is saved to the user's account and appears in the Bullrun Portfolio tab under "Pending AI drafts", where the user reviews it and explicitly accepts it to create a new portfolio (or discards it). To suggest additions to an EXISTING portfolio instead, use create_position_draft. Tickers are chosen only from Bullrun's priced stock/ETF universe; pass instrumentUniverse for stocks only, ETFs only, or a mix. If the brief is vague, first ask ONE quick round of up to three multiple-choice questions (investing style, region focus, and size), each with a default the user can accept with "just pick for me", then build; skip any dimension the user already specified and do not interrogate across multiple turns. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
create_portfolio_from_positionsUse when YOU (or the user) have ALREADY decided the exact holdings and want them saved as-is — e.g. after researching and settling on a specific basket with target weights. Persists a REVIEWABLE paper-portfolio draft built from the tickers you supply, sized by weight (percent) or by explicit USD amount. Unlike create_portfolio_draft this does NOT use the LLM and NEVER re-selects tickers: your basket lands exactly as given. It is NOT Pro-gated (it mirrors manual position entry, which is free) and needs only OAuth with the write:drafts scope. DRAFT-ONLY: the draft is saved to the user's Bullrun account and appears in the Portfolio tab under "Pending AI drafts", where the user reviews it and explicitly accepts it (creating a NEW portfolio) or discards it — it never changes any live position. Tickers must exist in Bullrun's priced stock/ETF universe; any that cannot be priced are returned in `unresolved` and skipped (use search_etfs / get_etf_snapshot / screen_stocks / get_stock_metrics to confirm exact tickers first). For a vague brief where the model should pick, use create_portfolio_draft instead. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
create_position_draftUse when the user asks what to BUY or ADD to an EXISTING portfolio — e.g. "what should I buy next", "suggest a stock or ETF for my portfolio", "what should I add", "recommend a position", "any ideas to round out my holdings". Generates REVIEWABLE suggested additions for one existing Bullrun portfolio. Requires OAuth with the write:drafts scope and a Bullrun Pro account. This is DRAFT-ONLY: the suggested position(s) are saved to the user's account and appear in the Bullrun Portfolio tab under Pending AI drafts, where the user reviews and accepts them into the target portfolio or discards them. It never changes live holdings by itself. To draft a whole new portfolio from scratch use create_portfolio_draft; to test whether a specific named ticker fits, use get_portfolio_analytics with candidateTicker. Pass instrumentUniverse for stocks only, ETFs only, or a mix. If it is unclear, first confirm which portfolio (use list_portfolios when the user has more than one) and how many ideas (a single best idea or a few) in ONE quick step; otherwise just build. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
find_stock_peersread-onlyDiscover stock comparison candidates for one exact Bullrun ticker using stored industry or sector classification. Discloses the chosen classification, country preference, deterministic selection order, scan cap and issuer/listing exclusions. Excludes the subject, secondary listings and identifiable duplicate issuers/share classes. Returns compact stored multiples/growth plus ready-to-use compare_stocks arguments. Classification peers are not verified competitors or a financial-similarity ranking; no generated peers or paid graph discovery. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_capabilitiesread-onlyDiscover what the connected Bullrun account can do BEFORE attempting an action, so you can plan instead of learning by hitting a 403. Reports whether you are authenticated and as WHICH identity (email + userId), whether the account has Bullrun Pro and why (subscription / trial / admin), the granted OAuth scopes, portfolio usage vs the free/max limits, and a per-tool entitlement map: create_portfolio_from_positions (free), create_portfolio_draft and create_position_draft (Pro-only), and whether another portfolio can be created now. Call this first when a draft/write tool might be gated, or to confirm which account a request will act on. Read-only.
get_company_data_coverageread-onlyA cheap stored-data manifest for one exact company: available datasets, latest reporting periods, actual ingestion/computation timestamps where stored, and cached relationship graph status. Call before deeper research when coverage or freshness is uncertain. This reads indexed metadata, not every research endpoint, and never starts enrichment. Availability is not completeness or accuracy. A null stored timestamp means freshness is unknown; a reporting period is not an ingestion date. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_company_newsread-onlyGet cached company news for one exact Bullrun ticker, newest publication first, with publisher, source URL, publication date and stored-fetch freshness when recorded. Optional since cutoff and limit up to 50; only the newest 50 stored articles are searched. Useful for company headlines and article sources; use get_corporate_calendar for scheduled earnings/dividends and get_earnings_call_transcript for call text. Reading news also registers demand and requests a best-effort background cache refresh; this response does not wait for or confirm a refresh. Cached/empty/stale results do not establish that no new events exist. Does not change portfolios or place trades. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_company_relationshipsread-onlyBullrun's company relationship graph for one stock: named competitors, suppliers, customers and partners, each with its Bullrun ticker when the counterparty is listed, verification status (VERIFIED against a primary filing/source vs search-SUGGESTED), confidence, sole-source flag, quantified dependence where disclosed (e.g. "Cirrus Logic gets 91% of revenue from Apple") and the evidence behind it. Use for supply-chain and second-order risk questions ("who supplies X", "who depends on X", "who competes with X", "which listed companies are exposed if X stumbles"), then call get_company_risk or get_stock_metrics on the counterparties' tickers. Returns only the cached graph and never starts a paid discovery run; a company with no graph yet reports status "none". A missing edge is not proof of no relationship. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_company_riskread-onlyBullrun's company risk read for one stock: a 0-100 composite risk score and six mechanism dials (market expectation, operating pressure, cash conversion, leverage & coverage, competitive position, concentration) with band (Contained/Normal/Elevated/Stretched/Acute), direction vs the prior reading, the driving input and a plain-English explanation; plus filing-derived risk factors (severity, mechanism, source filing), identified supplier concentration (share of cost base covered, HHI, sole-source count, top supplier share) and recent material events. Use for "how risky is X", "what are the main risks for X", "is X's supply chain concentrated", or before adding a stock to a portfolio. Pair with get_company_relationships for the named competitors/suppliers/customers behind the concentration dial. Bands describe measured strain, never a buy/sell view. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_company_risk_historyread-onlyStored historical company risk category readings and their observed input changes. Shows dates, computation times, formula versions, score changes, changing input coverage and measurement bases. Use for 'how has X's risk changed?' and 'which inputs changed?'. These are retained category scores, not a complete daily series or proof of causation. Missing history is unknown, never a zero risk score. Read-only; does not run risk computation or paid discovery. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_corporate_calendarread-onlyRead stored upcoming earnings and ex-dividend dates, plus recent equity listings. Supports ticker/company search and explicit effective windows, market-cap filters, native listing quote currencies, available source metadata and partial coverage. Recent first-trade dates are not confirmed IPOs or an upcoming IPO schedule. Calendar dates and estimates can change; missing events mean unknown coverage, never proof that no event exists. Read-only; at most three backend requests. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_country_macroread-onlyOne country's macro dashboard from Bullrun's Global Markets warehouse: a 0-100 macro stress score (higher = more stress) built from six pillars - labour (unemployment, its change, youth unemployment), housing (real house prices, price-to-income and price-to-rent vs history), credit (BIS credit-to-GDP gap, household debt service, household credit), fiscal (government debt, fiscal balance), external (current account) and cycle (GDP growth, inflation) - with every input's latest value, period, source (OECD, IMF, BIS, World Bank, Eurostat), its stress contribution and a historyCode for get_macro_history. Use for "how is the German economy doing", "is there a housing bubble in Canada", "macro risks in Italy", or to judge the backdrop for a country's stocks. A thinly covered country returns state "insufficient", never a falsely calm score. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_earnings_call_transcriptread-onlyRead cached earnings-call paragraphs for one exact Bullrun ticker, optionally filtered by fiscal period or search text. A best-effort free background import collects at most the two latest retained calls from DefeatBeta for supported US listings, with a 24-hour stored-data cooldown; the first read may be empty. Coverage and source publication lag vary. Speaker names and paragraph order are retained; roles and prepared/Q&A section labels may be unavailable. This is a read-only research operation. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_exposuresread-onlyCalculate sector, country, currency, and broad asset exposure from the latest stored ETF holdings. Sector and country come from the fund provider's own holdings file where it states them (normalized to Bullrun's sector and country names), otherwise from the Bullrun instrument the holding resolves to by ISIN or by symbol with a matching company name; currency is the holding's reported currency only. Positions that cannot be classified are reported as Unclassified / Not reported rather than guessed, so each exposure list sums to the look-through weight. Factor and thematic look-through are reported unavailable until dedicated source data exists. Coverage states how much fund weight was classified and how, so partial top-holdings data is never presented as full exposure. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_filter_optionsread-onlyList the exact values accepted by the categorical filters on search_etfs and screen_etfs — asset classes, categories, index keys, product/wrapper types, regions, domiciles, currencies, exchanges, and (on request) issuers and focus strings. Those filters match exactly, so a guessed string returns zero rows and looks like "no such ETF exists"; call this first whenever a filter value is not already known to be valid. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_fundread-onlyResolve one FUND rather than one listing. Given an ISIN (or any venue ticker of the fund) it returns the fund's identity, costs, index, distribution policy, wrapper type and every venue it is listed on with exchange and trading currency. Use this when the user quotes an ISIN, asks "which ticker do I buy on my exchange?", or when several tickers may be the same underlying fund. Ratios are percentage points. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_holdingsread-onlyReturn the latest stored ETF holdings snapshot with opaque cursor pagination. The response reports the provider's stated holdings count, stored row count, covered weight, and whether the stored rows appear complete. Treat isComplete=false or null as partial look-through data. Historical as-of selection will be added when the upstream API exposes it. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_index_groupread-onlyAnswer "what is the cheapest way to track <index>?". Returns every fund tracking one index ordered cheapest fee first, deduplicated to one row per FUND rather than per venue listing (a five-venue UCITS fund is one choice, not five) with its listingCount and venues. Defaults to UCITS-buyable domiciles. Omit indexKey to list the available index families. Fees are percentage points and the response states how many funds publish no fee at all, so a "cheapest" claim is never made over silently omitted funds. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_riskread-onlyCalculate drawdown, annualized volatility, downside volatility, historical VaR, Sharpe, Sortino and Calmar ratios from stored daily close prices. With benchmarkTicker, also calculates beta, correlation, tracking error, active return and information ratio on aligned dates. Results are price-return risk, not distribution-adjusted total-return risk. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_snapshotread-onlyFetch a modular snapshot for one exact ETF listing. The include array controls which of identity, classification, market, fund_data (NAV/AUM), costs, income, and benchmark are fetched and returned. Unrequested modules are omitted; requested-but-unavailable modules are named explicitly. Ratios use percentage points. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_etf_timeseriesread-onlyFetch ETF price or price-return history at daily, weekly, or monthly intervals. NAV, true total-return, benchmark, and premium/discount series are returned only when their required source data or an explicit benchmark ticker exists; unavailable requested series are named explicitly and never approximated with price returns. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_financial_historyread-onlyFetch 1-15 years of historical financial statements for one exact Bullrun ticker. Returns annual and/or quarterly rows grouped into income statement, balance sheet, cash flow, per-share metrics, margins, source currency, and annual growth/CAGR consistency checks. Use this when evaluating multi-year revenue/net-income growth, margin trajectories, leverage, cash flow quality, or whether a stock passed a rule such as 10% revenue and net-income growth every year. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_forward_estimatesread-onlyRead cached Yahoo analyst consensus revenue/EPS estimates and available EPS revision percentages for one exact Bullrun ticker. A free background refresh checks supported symbols on demand, storing at most one snapshot per day; the first read may be empty. Fiscal periods and source currency are preserved. The configured feed does not provide EBITDA estimates, management guidance or revenue revisions. Forward P/E/PEG context uses the latest annual consensus snapshot only when quote and EPS currency units match. Read-only research operation. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_global_markets_overviewread-onlyBullrun's Global Markets dashboard in one call: world equity indices (S&P 500, Nasdaq-100, MSCI World, DAX, FTSE 100, Nikkei, Hang Seng, Nifty...), central-bank policy rates and next rate decisions (Fed, ECB, BoE, BoJ, SNB, BoC), 16 sovereign 10-year yields, 20 FX pairs, oil/gas/gold/copper, headline macro tiles (global GDP growth, inflation, debt/GDP, VIX, DXY, 2s10s curve, US jobless claims), the upcoming economic calendar, market news and the US housing balance. Each row carries a historyCode for get_macro_history. Use for "how are markets doing today", "what's the macro backdrop", "where are rates/yields", "what's on the calendar this week" or a morning briefing. Daily closes, with live intraday index levels while markets are open. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_macro_historyread-onlyHistorical time series behind the Global Markets dashboard, often decades long: equity indices, central-bank policy rates, 10-year government bond yields, FX rates, oil/gas/gold/copper, VIX, DXY, the US 2s10s curve, and per-country macro indicators (GDP growth, inflation, unemployment, house prices, credit gap, debt, confidence, macro stress). Address a series by historyCode (from get_global_markets_overview, get_country_macro or get_macro_indicators), by instrument name ("Fed", "Brent", "Germany 10Y", "S&P 500"), or by indicator + country. Returns summary statistics (latest, change over 1M/3M/1Y/5Y, range, where the latest sits in the window) plus resampled points. Use for "how have rates moved since 2022", "plot Brent over 10 years", "is German unemployment rising". Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_macro_indicatorsread-onlyCross-country macro comparison from Bullrun's Global Markets warehouse: rank up to ~200 countries on one indicator (GDP growth annual or quarterly, CPI inflation, government debt/GDP, unemployment, youth unemployment, real house-price growth, house price-to-income and price-to-rent vs history, BIS credit-to-GDP gap, household debt service, household credit/GDP, business and consumer confidence, or Bullrun's macro stress score), or compare a named set of countries. Every row has value, period, source and a historyCode for get_macro_history. Use for "fastest growing economies", "highest inflation in Europe", "most indebted G7 government", "where is housing most overvalued", "compare unemployment in Spain, Italy and Greece". Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_operating_kpisread-onlyRead curated, source-linked operating KPI observations for one exact Bullrun ticker. Coverage is sparse and no automatic KPI feed is configured: do not assume ARR, retention, customer counts or payments metrics are available. Check get_company_data_coverage first. Returns stored fiscal periods, units and source links; company-economics observations are a separate dataset. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_portfolio_analyticsread-onlyUse when the user asks about THEIR portfolio's risk, diversification, or concentration, or whether to add a stock — e.g. "is my portfolio diversified", "how risky is my portfolio", "am I too concentrated", "what's my exposure to X", "should I add NVDA", "would AAPL improve my diversification". Fetches portfolio-level relationship analytics for one signed-in user's portfolio: correlation and annualized covariance matrices across holdings, contribution-to-risk, concentration by weight and risk, currency/sector/country exposures, value/growth/momentum/quality/size proxy factor scores, scenario/stress tests (rates +100bp, oil -20%, USD +10%), and optional candidateTicker fit analysis showing correlation to the current portfolio plus pro-forma volatility (set candidateTicker when the user asks whether to add a specific stock). Pass a portfolioId from list_portfolios. The risk math only covers holdings with enough price history, dropping unpriced/unmatched ones (ETFs, funds, untracked tickers) and renormalizing all percentages over what remains; the response leads with a `coverage` banner (first text block) stating how many holdings were excluded, so never read these figures as the whole portfolio. For a plain holdings/value snapshot and the full matched/unmatched breakdown use get_portfolio_context instead. Requires OAuth (read:portfolios) and returns the caller's own data only. privacyMode defaults to "full"; "weights_only" hides absolute USD amounts while keeping weights, percentages, correlations and scores. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_portfolio_contextread-onlyUse when the user asks to look at, review, or analyze THEIR portfolio / holdings / positions — e.g. "analyze my portfolio", "how is my portfolio doing", "what's in my portfolio", "review my holdings", "how am I invested", "what should I improve". Fetches a deep snapshot of ONE of the signed-in user's portfolios: the summary (value, day change, total return), every holding (with position weight %, sector and return) and Bullrun's computed insights (benchmark comparison, concentration, diversification, dividend income). Pass a portfolioId from list_portfolios (call that first if the user hasn't named a portfolio). The response ALWAYS returns the complete holdings list with each position flagged matched/unmatched, plus a `coverage` summary: holdings that Bullrun can't link to its universe (ETFs, funds, untracked tickers) carry no weight, sector, insight or ML score, so weights/insights/ML below describe ONLY the matched subset. Read the coverage banner (the first text block) and never present matched-only figures as the whole portfolio. For risk/diversification math, correlations, factor exposure, or whether to add a specific stock, use get_portfolio_analytics instead. Requires OAuth (read:portfolios) and returns the caller's own data only. privacyMode defaults to "full" (absolute $ included); "weights_only" returns only relative figures. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_quality_moat_metricsread-onlyCompute annual quality, moat, earnings-quality, and capital-allocation metrics for one exact Bullrun ticker from existing financial statements: ROIC, ROE/ROA, ROIC-vs-supplied-WACC, accruals, cash conversion, capex intensity, dividend payout/growth, diluted share-count changes, and a buyback proxy. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_revenue_breakdownread-onlyFetch segment, geography, product, customer, or other revenue breakdown rows for one exact Bullrun ticker. Use this to separate cyclical businesses from recurring segments or inspect geographic exposure instead of relying on blended revenue. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_risk_moversread-onlyCompanies whose Bullrun composite risk score crossed into a different band (e.g. Elevated -> Stretched, or Acute -> Stretched) within the last N days, with prior and current score, the move in points, and the input driving the reading. Use for "what got riskier this week", "any risk deteriorations I should know about", or to monitor a watchlist (pass the tickers to get_company_risk afterwards). Band changes, not small score drift, so every row changed a word on the page. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_stock_metricsread-onlyFetch a consolidated metrics snapshot for a single stock by ticker: identity (company, exchange, currency, sector, industry, country, ISIN), latest daily price (OHLCV), latest valuation (market cap, P/E, dividend yield, annual dividend per share), the most recent reported financials (revenue, gross/operating income, EBITDA, net income, diluted EPS, free & operating cash flow, total debt, cash, total assets, equity) and a short company description. Prices are in the listing's trading currency; financials in their own sourceCurrency. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange suffix (Tokyo 6324.T, Hong Kong 0700.HK, Shanghai 600519.SS, Shenzhen 000001.SZ, Taiwan 2330.TW, Korea 000100.KS, Singapore D05.SI, India RELIANCE.NS), but some Japanese and Korean large caps are plain codes (Toyota 7203, Samsung 005930). Either form is resolved automatically when exactly one listing matches; use search_stocks to find a ticker by company name or ISIN. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_stock_price_historyread-onlyRead bounded stored stock OHLCV history, ascending by trade date, as daily, weekly or monthly bars, with close-based price returns/drawdown and optional deterministic SMA, EMA, Wilder RSI and MACD. Useful for price trends, volatility context and technical analysis; use get_stock_metrics for a latest company snapshot. Up to 2600 recent daily source rows; dates filter that bounded window. Provider split/dividend adjustment is unknown: returns are not verified total returns. Missing OHLCV/indicator warm-up remains null; no synthetic sessions, intraday data or live quote claims. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
get_valuation_modelread-onlyBullrun's proprietary machine-learning valuation and forecast scores for 1-10 stocks, recomputed nightly. Valuation: a LightGBM model predicts the P/E (or price/sales for loss-makers) that companies with similar fundamentals typically command a year out; the gap = typical / current multiple - 1 (positive = trades below its typical multiple), with the implied model-typical P/E, percentile and rank in the scored universe. Forecast: a relative 1-year return-rank signal with percentile. Both on quarterly and on annual financials (annual covers most non-US companies). Use for "is X cheap or expensive", "what's X's fair P/E", "compare valuations of X, Y, Z", or a valuation sanity check before buying. Descriptive context, not a price target or recommendation. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
list_portfoliosread-onlyUse when the user refers to THEIR portfolio(s) or holdings — e.g. "my portfolios", "what portfolios do I have", "how are my investments doing", "show my holdings", "my account". Lists the signed-in Bullrun user's virtual portfolios with computed summaries: name, base currency, total value (USD), day change, cost basis and total return, plus position counts. Start here when a portfolio question doesn't name a specific portfolio, then pass a portfolioId to get_portfolio_context or get_portfolio_analytics. Requires connecting this server to a Bullrun account (OAuth, read:portfolios scope) — it returns that user's own data only. privacyMode defaults to "full" (includes absolute $ amounts); pass "weights_only" to hide absolute money and return only relative figures (returns %, counts). Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
query_etfsread-onlyCompatibility tool for older clients: search the Bullrun ETF universe and optionally bundle profile, recent prices, and latest holdings for an exact ticker. New clients should use search_etfs, get_etf_snapshot, and get_etf_holdings for smaller responses, structured output, quantitative filters, and explicit coverage metadata. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
screen_etfsread-onlyScreen the WHOLE ETF universe by numeric rules and fund attributes in one pass — expense ratio, AUM, yield, trailing returns, volatility, liquidity, top-10 concentration, fund age and holdings count — combined with issuer, index, domicile, UCITS status, distribution policy, currency hedging and constituent look-through (holdingSearch finds funds by what they hold). Prefer this over search_etfs for any "cheapest / largest / best performing / most liquid" question: search_etfs only filters a bounded candidate scan, while this evaluates the full universe and reports evaluatedCount and matchCount. Percentages are percentage points. This is the heaviest read in the API and is metered against a small per-day action budget, so build one well-specified screen rather than probing repeatedly. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
screen_risk_boardread-onlyRank Bullrun's scored stock universe (~9,000 companies) by company risk: the composite risk score or any one mechanism dial (market expectation, operating pressure, cash conversion, leverage, competitive position, concentration), filtered by band, sector, country and dial coverage. Returns ticker, score, band and its meaning, direction and move since the prior reading, and the driving input per row, plus the universe band distribution and how many companies changed band at the last recompute. Use for "which large caps have stretched leverage", "most concentrated supply chains in semiconductors", "calmest German industrials", or "how risky is tech vs utilities" (includeSlices). Drill into a row with get_company_risk. A ranking of readings, not of companies to avoid. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
screen_stock_presetsread-onlyList or execute named stock-screen starting points: profitable value, dividend income, growth and cash flow, cash generators, or dividend growth. Every preset discloses exact thresholds, units, annual lookback and sorting and runs the existing backend screener rule engine. These are mechanical screens, not recommendations or replications of a famous investor's strategy. Listing presets makes no backend request. Read-only; running a screen uses the API's metered screening budget. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
screen_stocksread-onlyScreen the global Bullrun stock universe with the same rule engine as the app screener. Filter by sector, industry, country/countries, primary vs secondary listings, active vs inactive listings, lookback mode, AND/OR rule groups, comparison operators, money units, growth metrics and latest-value metrics. Returns a compact table of matching stocks. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
screen_valuation_modelread-onlyRank the whole scored stock universe (market cap >= $100M) by Bullrun's proprietary ML models: the stocks trading furthest below (or above) the P/E or price/sales multiple their fundamentals typically command, or the strongest/weakest relative 1-year forecast signals. Filter by sector, country, exchange and financial-history coverage. Each row has the valuation gap or forecast edge, the model-typical vs current P/E, percentile, rank and data quality. Use for "cheapest stocks vs fundamentals in Europe", "most expensive tech names by the model", "best forecast scores in Japan". The valuation gap is descriptive context, not a return prediction; follow up with get_stock_metrics, get_company_risk and get_quality_moat_metrics before drawing conclusions. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
search_etfsread-onlyLook up ETFs by name, ticker or ISIN, with classification, listing, index, distribution-policy, AUM, expense-ratio and yield filters. Best for finding a known fund. For ranking questions ("cheapest", "largest", "best performing", "most liquid") prefer screen_etfs, which evaluates the whole universe: here minAum and minYieldTtmPct are applied only to a bounded profile-enriched candidate scan, so do not describe the result as exhaustive when candidateCapReached is true. Use get_etf_snapshot for one listing, get_etf_fund to resolve an ISIN across venues, and get_etf_holdings for constituents. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
search_stocksread-onlyResolve a company name, native ticker, ISIN or exchange-qualified symbol to Bullrun listings before calling exact-ticker research tools. Supports exchange/MIC, country, currency and instrument-type filters. Recognized Yahoo suffixes are checked against compatible stored venues; dots in native share-class tickers are preserved. Returns explicit ambiguous candidates and never picks a listing when alternatives remain. No enrichment or market-data refresh. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.
simulate_etf_costread-onlySimulate expense-ratio, assumed bid/ask spread, commissions, and recurring contributions over a holding period. Compares the same gross-return path with and without costs and reports direct charges plus ending-value drag. Taxes, FX, market impact and brokerage-specific fees are excluded unless represented by the inputs. Read-only. Successful results include an optional platformLink for continuing this research or reviewing the exact saved draft in Bullrun. When useful, present its descriptive link and respect its description of any settings not carried over.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "org.bull-run/bullrun",
  "title": "Bullrun",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.bull-run.org/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.7.0",
  "repository": {
    "url": "https://github.com/ferinator/bullrun-mcp",
    "source": "github"
  },
  "description": "Global stock search, screens, price history, news, UCITS ETFs, risk and macro; no API key"
}