Model Context Protocol (MCP) server for freee API integration
Bullrun: Global Stock & UCITS ETF Research is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Research stocks and ETFs beyond the US. Bullrun covers home-market listings across the US, Europe and Asia, and the UCITS ETFs that European investors buy.
Ask it things like:
- Which UCITS ETF tracks the S&P 500 at the lowest ongoing cost, and where does it trade?
- How much do two ETFs overlap once you look through to their holdings?
- Who are this company's suppliers, customers and competitors, and how concentrated is its risk?
- Find European companies with positive earnings and free cash flow, then compare five of them side by side.
- How do inflation, interest rates and government debt compare across countries?
Tools cover company search by name, ticker or ISIN; stock and ETF screens; financial history, quality and valuation context; daily price history with technical indicators; dated company news and corporate calendars; ETF holdings, exposures, costs and overlap; company risk scores and relationships; and global macro indicators.
Every result shows its source date, reporting period and native currency. Missing data is reported as unknown, never as zero. Daily prices are stored closes, not live quotes. Nothing here is investment advice.
Connect https://mcp.bull-run.org/mcp with no API key or account. To save a research shortlist or work with your own portfolios, connect https://mcp.bull-run.org/account/mcp and sign in with a free Bullrun account (OAuth).
Limits: without signing up, each caller gets about 50 to 100 tool calls a day (500 data reads; most tool calls use 1 to 10) and at least a week of use each month (3,500 reads per 30 days). A free Bullrun account triples that, and Pro removes the daily and monthly caps (fair use applies). For a separate allowance through mcprush, use the Bullrun Research listing: Free 700 calls a month, or $9 a month for 10,000.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http bullrun-mcp https://mcp.bull-run.org/mcp
# 2 — ask your agent for something these tools do
# screen_stocks, search_stocks, find_stock_peers and 45 more
Bullrun: Global Stock & UCITS ETF Research costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http bullrun-mcp https://mcp.bull-run.org/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
48 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Screen the global Bullrun stock universe with the app rule engine using custom fundamental rules or named presets: profitable value, dividend income, growth and cash flow, cash generators, dividend growth. action=list_presets discloses exact thresholds, units, annual lookback and sorting without any backend request. action=run (default) executes one preset or custom rules; running uses the API's m
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | no | list_presets discloses named screens without any backend request; run executes a preset or custom rules and uses the metered screening budget. |
| preset | string | no | Optional named screen. Presets use disclosed fixed rules/sorting, annual lookback (2-10 years), primary active listings and a default limit of 20 (maximum 50). Omit for custom rules; do not combine wi |
| sector | string | no | Exact sector name to filter by, e.g. "Technology", "Healthcare". Omit for all sectors. |
| industry | string | no | Exact industry name to filter by, e.g. "Software - Infrastructure". Omit for all industries. |
| country | string | no | Exact country name to filter by, e.g. "United States", "Germany". Omit for all countries. |
| countries | array | no | Exact country names to include. Use this for multi-country screens; it overrides country when provided. |
| lookbackMode | string | no | Whether rule evaluation uses annual or quarterly reporting periods. Default annual; presets require annual. |
| lookback | integer | no | How many reporting periods to evaluate (default 3). Growth rules need at least 2 comparable periods; presets require 2-10 annual observations. |
| mode | string | no | Deprecated alias for lookbackMode; kept for compatibility. |
| periods | integer | no | Deprecated alias for lookback; kept for compatibility. |
| rules | array | no | Fundamental rules. Same groupId means AND; different groupIds mean OR. |
| minMarketCap | number | no | Compatibility shortcut: adds marketCap >= this absolute value to every rule group. |
| includeSecondary | boolean | no | Include secondary cross-listings of the same security. Default false (primary listings only). |
| includeInactive | boolean | no | Include delisted/inactive tickers with no recent price bar. Default false. |
| sortBy | string | no | Metric to sort by. Custom default marketCap; presets use their disclosed sorting. revenueGrowth is accepted as an alias for revenueGrowthPct. |
| order | string | no | Sort direction. Custom default desc; presets use their disclosed order. Nulls always sort last regardless of direction. |
| limit | integer | no | Maximum stocks to return: custom default 25 (1-100), preset default 20 (1-50). |
Resolve 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 al
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Company/name phrase, exact native ticker (AAPL, BMW, BRK.B), ISIN, EXCHANGE:TICKER, or Yahoo symbol (BMW.DE, NESN.SW). |
| exchange | string | no | Stored exchange code or supported MIC, e.g. XETRA/XETR, NASDAQ/XNAS, SW/XSWX. A conflicting prefix is rejected. |
| country | string | no | Exact stored country name, e.g. Germany or Switzerland. |
| currency | string | no | Listing quote currency, e.g. USD, CHF or GBX. GBX and GBP are different quote units. |
| quoteType | string | no | Default stocks, including unclassified equities. ETF/ALL allow other instrument lookup; this does not make stock-only research tools valid for funds. |
| includeSecondary | boolean | no | Include alternative venue listings. ISIN/name matches across venues require an explicit listing choice. |
| includeInactive | boolean | no | Include inactive/retired listings. Returned lifecycle/successor fields must be checked. |
| limit | integer | no | Maximum output candidates. A backend scan is capped at 500 candidates per search. |
Discover 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_s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun equity ticker, e.g. AAPL, BMW or 6324.T. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange s |
| matchBy | string | no | auto uses exact stored industry when present, otherwise sector. It does not silently widen an empty industry result to the entire sector. |
| sameCountryOnly | boolean | no | Restrict to the subject's exact stored country. Otherwise same-country candidates are shown first, followed by other countries. |
| limit | integer | no | Maximum peers. compare_stocks supports the subject plus at most four selected peers. |
Read 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 s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun stock ticker, e.g. AAPL, SAP, ABBN, 6324.T or 7203. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their |
| interval | string | no | Aggregate stored daily bars. Weekly buckets start Monday; monthly buckets use the calendar month. No intraday or live quotes. |
| startDate | string | no | Inclusive trade-date cutoff, applied after loading the latest source bars. Cannot page into history older than the source limit. |
| endDate | no | Inclusive last trade date; the API still loads the most recent source bars before this filter. | |
| limit | integer | no | Maximum most-recent DAILY source bars to load before date filtering and aggregation (hard cap 2600). Increase for indicator warm-up or longer history. |
| indicators | array | no | Optional indicators computed on the selected interval's closes after date filtering. Insufficient warm-up yields null, never a fabricated value. |
| movingAveragePeriod | integer | no | Observation count for SMA and EMA, in the selected interval. |
| rsiPeriod | integer | no | Number of close-to-close changes for Wilder RSI. MACD uses fixed EMA periods 12/26 and signal 9. |
Get 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun company ticker, e.g. AAPL, SAP, ABBN or 6324.T. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exc |
| since | string | no | Inclusive publication-time cutoff. YYYY-MM-DD means midnight UTC; timestamps need an explicit Z or UTC offset. Applied to the newest 50 stored articles, not a full historical news archive. |
| limit | integer | no | Maximum returned articles, newest publication first. Up to 50 cached source articles are read before cutoff filtering. |
Look 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Free-text ETF search by ticker, fund name, or ISIN (e.g. IE00B4L5Y983). Omit for a broad screen. |
| category | string | no | Exact broad ETF category/asset-class filter, e.g. Equity, Fixed Income, Commodity, Crypto, or Real Estate. Call get_etf_filter_options for valid values. |
| focus | string | no | Exact ETF focus/exposure filter, e.g. Japan, TOPIX, or Equity - Australia. |
| region | string | no | Exact portfolio or investment-region filter. |
| domicile | string | no | Exact fund domicile filter. |
| exchange | string | no | Exact listing exchange filter. |
| currency | string | no | Exact trading-currency filter. |
| indexKey | string | no | Exact tracked-index key, e.g. SP500 or MSCI_WORLD. Use get_etf_index_group to rank every fund on one index by cost. |
| distributionPolicy | string | no | Accumulating (reinvests income) or distributing (pays it out). |
| minAum | number | no | Minimum assets under management in the profile's reported currency units. |
| maxExpenseRatioPct | number | no | Maximum annual expense ratio in percentage points, e.g. 0.25 means 0.25%. |
| minYieldTtmPct | number | no | Minimum trailing yield in percentage points, e.g. 2 means 2%. |
| sortBy | string | no | Sort field. Relevance preserves Bullrun search ordering. |
| sortDirection | string | no | — |
| includeSecondary | boolean | no | — |
| includeInactive | boolean | no | — |
| scanLimit | integer | no | Maximum coarse-search candidates to enrich before applying quantitative filters/sorts, 25-500. |
| limit | integer | no | Maximum matching ETFs to return, 1-100. |
Screen 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Free-text match on ticker, fund name or ISIN. Omit to screen the whole universe. |
| assetClass | string | no | Exact asset-class group: EQUITY, FIXED_INCOME, COMMODITY, REAL_ESTATE, MULTI_ASSET, CASH, CURRENCY, DIGITAL_ASSETS, ALTERNATIVES or OTHER. |
| category | string | no | Exact category string. Call get_etf_filter_options for the valid values; a wrong guess silently returns zero rows. |
| domicile | string | no | Exact fund domicile, e.g. "Ireland", "Luxembourg", "United States". |
| region | string | no | Exact investment-region string. |
| exchange | string | no | Exact listing exchange, e.g. XETRA, LSE, "NYSE ARCA". |
| currency | string | no | Exact trading currency, e.g. EUR, USD, GBX. |
| indexKey | string | no | Exact tracked-index key, e.g. SP500, MSCI_WORLD, NASDAQ100. Use get_etf_index_group to compare every fund on one index instead. |
| distributionPolicy | string | no | Accumulating (reinvests income) or distributing (pays it out) — the usual first cut for a European investor. |
| productType | string | no | Exact wrapper type, e.g. UCITS_FUND. |
| ucitsStatus | string | no | UCITS restricts to wrappers a European retail investor can actually buy. |
| issuer | string | no | Substring match on the fund family/issuer, e.g. "iShares", "Amundi", "Vanguard". |
| strategy | string | no | Exact strategy classification string. |
| benchmarkSearch | string | no | Substring match on the stated benchmark name. |
| marketDevelopment | string | no | Exact market-development classification, e.g. developed vs emerging. |
| currencyHedged | string | no | HEDGED selects funds labelled currency-hedged. NOT_LABELLED_HEDGED selects funds not so labelled — absence of a label is not proof a fund is unhedged. |
| holdingSearch | string | no | Look-through filter: find funds by a CONSTITUENT ticker or company name, e.g. "NVDA" or "NVIDIA". Only funds with a stored holdings snapshot can match. |
| holdingMode | string | no | INCLUDES keeps funds holding the constituent. EXCLUDES keeps only funds with a holdings snapshot that confirms absence — funds with no snapshot are dropped, never assumed clean. |
| holdingMinWeightPct | number | no | Minimum constituent weight in percentage points for holdingSearch to count as a match. |
| rules | array | no | Numeric rules. A fund with no value for a ruled metric never matches that rule. |
Answer "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 s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| indexKey | string | no | Normalized index key, e.g. SP500, MSCI_WORLD, NASDAQ100, MSCI_EM, EURO_STOXX_50, TOPIX, FTSE100. Omit to list every index family that has at least one fund. |
| scope | string | no | ucits (default) restricts to domiciles a European retail investor can actually buy. all adds US-domiciled trackers, which look cheaper but are not purchasable by EU retail. |
| distributionPolicy | string | no | Optionally keep only accumulating or only distributing share classes. |
| exchange | string | no | Keep only funds listed on this venue and name each one's ticker there, e.g. SW (SIX Swiss Exchange), XETRA, LSE, AS, MI. A Swiss investor wanting the SIX line passes SW. |
| currency | string | no | Keep only funds with a listing trading in this currency (e.g. CHF, EUR, USD, GBP) and name that line. |
| limit | integer | no | Maximum funds (or index families) to return, 1-100. |
Resolve 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 percentag
| Parameter | Type | Required | Notes |
|---|---|---|---|
| isin | string | no | Fund ISIN, e.g. IE00B4L5Y983. The identifier European factsheets and brokers quote. |
| ticker | string | no | Any venue listing ticker of the fund, e.g. EUNL.DE or IWDA.L. Resolved to its fund ISIN first. Provide this or isin. |
List 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 k
| Parameter | Type | Required | Notes |
|---|---|---|---|
| facets | array | no | Which facets to return. Defaults to everything except the long tails fundFamilies (~890 issuers) and industries (~650 focus strings) — request those explicitly, ideally with search. |
| search | string | no | Case-insensitive substring filter applied to every requested facet, e.g. "ishares" against fundFamilies or "world" against categories. |
| limit | integer | no | Maximum values per facet, 1-1000. Each facet reports its untruncated total. |
Fetch 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker, including its exchange suffix when present, e.g. SPY, VWRL.L, or EUNL.DE. |
| include | array | no | Only these snapshot modules are fetched and returned. Default: identity, classification, market, costs. |
Return 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker, including its exchange suffix when present. |
| cursor | string | no | Opaque nextCursor returned by a previous get_etf_holdings call for the same ticker. |
| limit | integer | no | Maximum holdings to return on this page, 1-100. |
Fetch 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker. |
| series | array | no | Requested series. Unsupported stored series are reported in unavailableSeries rather than synthesized. |
| benchmarkTicker | string | no | Exact priced ticker to use when benchmark is requested. A benchmark name alone cannot resolve a price series safely. |
| interval | string | no | — |
| startDate | string | no | — |
| endDate | string | no | — |
| limit | integer | no | Maximum recent daily source bars to load before date filtering and interval aggregation. |
Calculate 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 uses the reported holding currency, els
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker. |
| types | array | no | — |
| limitPerType | integer | no | — |
Calculate 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker. |
| days | integer | no | Calendar-day lookback for daily close-price risk calculations. |
| benchmarkTicker | string | no | Optional exact priced benchmark/proxy ticker for beta, correlation, tracking error, active return, and information ratio. |
| riskFreeRatePct | number | no | Annual risk-free rate in percentage points for Sharpe, Sortino, and Calmar ratios. |
Return a normalized side-by-side comparison of two to ten ETFs across selected classification, market, fund-data, cost, income, benchmark, price-performance, price-risk, holdings, and optional overlap modules. Include overlap to measure pairwise shared securities and weighted overlap from latest stored holdings, matched by security identity rather than ticker alone; cash, currency and derivatives
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | Two to ten exact Bullrun ETF listing tickers. |
| include | array | no | Selected comparison modules. overlap is opt-in and returns pairwise shared holdings and weighted overlap from each fund's latest stored snapshot. |
| performanceDays | integer | no | Window in calendar days back from each fund's newest close; the start is the last close on or before that day. 365 matches the fund page and the screener's 1-year return. |
| topSharedLimit | integer | no | Maximum shared holdings per ETF pair when overlap is requested; does not limit the snapshots used in overlap calculations. |
Simulate 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Exact Bullrun ETF listing ticker. |
| initialInvestment | number | no | — |
| contributionAmount | number | no | — |
| contributionFrequency | string | no | — |
| years | number | no | — |
| grossAnnualReturnPct | number | no | Assumed annual return before ETF and trading costs, in percentage points. Default 0 isolates direct costs. |
| expenseRatioPct | number | no | Optional expense-ratio override in percentage points. Otherwise uses the stored ETF profile value. |
| spreadPct | number | no | Assumed full bid/ask spread in percentage points; each purchase pays half the spread. |
| commissionPerTrade | number | no | — |
Fetch 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, tot
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | The stock ticker as Bullrun lists it, e.g. "AAPL", "BMW", "NESN", "6324.T", "0700.HK" or "005930". A bare numeric code is resolved when exactly one listing matches. |
Compare two to five 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | Two to five distinct Bullrun stock tickers, e.g. AAPL, BMW, NESN, 6324.T or 7203. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indi |
| include | array | no | Selected compact modules. Fundamentals and quality use the latest usable ANNUAL fiscal year only; valuation includes stored multiples and Bullrun model context; risk includes measured dials. |
Fetch 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 pass
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | The Bullrun ticker. 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 Kon |
| periodType | string | no | Return annual rows, quarterly rows, or both. Annual rows use fiscalQuarter=0. |
| years | integer | no | How many fiscal years of history to return, counting backward from the latest fiscal year available. |
| includeEmptyRows | boolean | no | Include sparse rows that have no major income statement, balance sheet, cash-flow, or EPS values. |
Compute 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | The Bullrun ticker. 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 Kon |
| years | integer | no | How many fiscal years of annual history to evaluate. |
| estimatedWaccPct | number | no | Optional user-supplied WACC assumption, in percent. When omitted, ROIC-vs-WACC spread is returned as null. |
| taxRateFallbackPct | number | no | Fallback tax rate used for NOPAT only when reported tax/pretax data is missing or unusable. |
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 revision
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun ticker, e.g. "AAPL", "CRWD", "SPGI". Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange suffi |
| periodType | string | no | Return annual estimates, quarterly estimates, or both. |
| limit | integer | no | Maximum estimate rows to return. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun ticker, e.g. "CRWD", "SNOW", "V". 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 ( |
| metricKey | string | no | Optional metric key present in stored coverage. No particular business KPI is guaranteed to be available. |
| category | string | no | Optional category filter such as SaaS, payments, marketplace, banking, or other domain labels. |
| limit | integer | no | Maximum KPI rows to return. |
Fetch 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | The Bullrun ticker, e.g. "SPGI", "MSFT", "V". Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange suff |
| dimension | string | no | Breakdown dimension to return, or all dimensions. |
| limit | integer | no | Maximum breakdown rows to return. |
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 retaine
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun ticker, e.g. "CRWD", "SPGI", "V". 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 ( |
| fiscalYear | integer | no | Optional fiscal year filter. |
| fiscalQuarter | integer | no | Optional fiscal quarter filter. |
| search | string | no | Optional case-insensitive text/speaker search across transcript chunks. |
| maxChunks | integer | no | Maximum speaker-tagged transcript chunks to return. |
| maxCharsPerChunk | integer | no | Maximum characters per transcript chunk in the MCP response. |
Read the signed-in user's saved Research Shortlist of stock and ETF listing tickers, with dated stored prices. Requires OAuth read:shortlist. Use after the user asks for their saved research queue. Read-only; does not evaluate a screen, schedule monitoring or send notifications.
No parameter schema on file.
Add 1-20 exact Bullrun stock or ETF listing tickers to the signed-in user's Research Shortlist when the user asks to save them. Requires OAuth write:shortlist; reconnect if this scope was not granted. Resolve ambiguous names with search_stocks/search_etfs first. Existing entries are retained; repeated saves are idempotent. Each ticker is saved independently and failures are reported alongside succ
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | Exact listing tickers chosen by the user, e.g. AAPL or EUNL.DE. |
Use 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 doe
| Parameter | Type | Required | Notes |
|---|---|---|---|
| privacyMode | string | no | "full" (default) includes absolute $; "weights_only" hides cash/value/cost-basis and keeps only %. |
Use 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 %,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | integer | yes | The portfolio id, as returned by list_portfolios. |
| days | integer | no | Insights look-back window in days (default 30). |
| privacyMode | string | no | "full" (default) includes absolute $; "weights_only" returns only relative figures. |
Use when the user asks about THEIR portfolio's risk, diversification, or concentration, or whether to add a stock or ETF — 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | integer | yes | The portfolio id, as returned by list_portfolios. |
| days | integer | no | Calendar-day lookback for daily USD return analytics. Default 370. |
| candidateTicker | string | no | Optional exact Bullrun stock or ETF listing ticker to test as a candidate diversifier, e.g. AAPL, BMW, ABBN, NESN or SPY. Use the stored listing ticker; do not infer exchange suffixes. |
| candidateWeightPct | number | no | Optional hypothetical candidate allocation for pro-forma volatility. Default 5 (%). |
| includeLookThrough | boolean | no | Also compare an exact stock or ETF candidate against direct holdings and stored ETF constituents. Requires candidateTicker. Default false: no underlying holdings requests. Look-through has separate pr |
| privacyMode | string | no | "full" (default) includes absolute USD amounts; "weights_only" returns only relative figures. |
Use 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 wr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| prompt | string | no | What kind of portfolio to draft, e.g. "a defensive dividend portfolio of large EU stocks". Optional: if you omit it, the server collects a quick style/region/size brief from the user directly (a nativ |
| startingCash | number | no | Starting cash in USD (default 10000). |
| maxPositions | integer | no | Maximum number of holdings (3-20, default 10). |
| instrumentUniverse | string | no | Candidate universe: stocks only, ETFs only, or a mix. Default mix unless the prompt says otherwise. |
Use 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. Available to signed-in free accounts; daily usage lim
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | integer | yes | The Bullrun portfolio id to propose additions for. Use list_portfolios first if unsure. |
| maxPositions | integer | no | How many suggested additions to save, 1-5. Use 1 for a single-position idea; default 3. |
| instrumentUniverse | string | no | Candidate universe: stocks only, ETFs only, or a mix. Default mix. |
Use 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 bask
| Parameter | Type | Required | Notes |
|---|---|---|---|
| positions | array | yes | The exact holdings to persist (1-30). Tickers are used verbatim, never re-selected. |
| name | string | no | Portfolio name. Default "Custom Portfolio Draft". |
| startingCash | number | no | Total portfolio cash in USD. Default 10000 in weight mode; the sum of amounts in amount mode. |
| cashPct | number | no | Explicit cash percentage to hold back. Overrides the weight-remainder rule. |
Discover 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 uncapped daily usage and why (subscription / trial / admin), the granted OAuth scopes, portfolio usage vs the free/max limits, and a per-tool entitlement map: creat
No parameter schema on file.
Bullrun'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, mechan
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun ticker, e.g. "AAPL", "ASML", "NESN", "6324.T" or "0700.HK". Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings ke |
| include | array | no | Modules to return. dials = composite + six mechanism dials (market expectation, operating pressure, cash conversion, leverage, competitive position, concentration); risk_factors = filing-derived risk |
| detail | string | no | summary = scores, bands, drivers and explanations; full = also every per-input term behind each category score. |
| maxRiskFactors | integer | no | Max filing risk factors to return, most severe first. |
| maxEvents | integer | no | Max recent company events to return, most severe first. |
Bullrun'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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun ticker, e.g. "AAPL", "SAP", "ASML". 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 |
| roles | array | no | Which relationships to return, from this company's point of view. Default: all four. |
| verifiedOnly | boolean | no | true = only edges confirmed against a primary source (filing, company release). false also returns search-suggested edges, each labelled with its status and confidence. |
| evidence | string | no | none = counts only; sources = source title/URL/type per edge; excerpts = also the quoted evidence text. |
| limitPerRole | integer | no | Max counterparties per role, verified and highest-confidence first. |
Compare the cached company relationship graphs of two to five 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-sou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | Two to five distinct Bullrun listing tickers, e.g. AAPL, BMW or 6324.T. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listing |
| roles | array | no | Counterparty roles from EACH subject company's point of view; default all four. Suppliers and customers preserve the direction of SUPPLIES_TO. |
| verifiedOnly | boolean | no | Only VERIFIED edges when true. The default also includes SUGGESTED/NEEDS_REVIEW edges, explicitly labelled with their individual confidence and evidence. |
| limitPerCompany | integer | no | Maximum direct relationships returned per input company. Shared counterparties are prioritized; totals and any truncation are reported. |
Read 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| include | array | no | Selected stored calendars: upcoming earnings, upcoming ex-dividend dates, and recent listings (not an upcoming IPO schedule). |
| days | integer | no | Forward days for earnings and ex-dividend, inclusive of the API server's current date. A nonblank q makes the backend use 120 days regardless of this value. |
| listingMonths | integer | no | Trailing months for recent listings. A nonblank q makes the backend search 60 months regardless of this value. |
| q | string | no | Optional case-insensitive ticker or company-name contains search, also matched with spaces removed. This is not an exact ticker filter. A Yahoo-style symbol whose listing Bullrun stores in another for |
| minCapUsd | number | no | Optional minimum market capitalization in USD. Omit to retain API defaults: 50 million for earnings/ex-dividend and zero for listings. Listings with unknown market cap are retained even with a positiv |
| limit | integer | no | Maximum rows per selected calendar, not an overall result count. A full page may omit other matching events. |
Stored 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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun company ticker, e.g. AAPL, SAP or 6324.T. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange |
| limit | integer | no | Latest stored run dates to return, oldest first. Retention and gaps vary. Full detail supports at most six dates. |
| detail | string | no | Summary keeps scores, explanations and up to three changed inputs per category; full includes stored input terms and all returned term changes. |
A 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 s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticker | string | yes | Bullrun company ticker, e.g. AAPL, SAP or 6324.T. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings keep their exchange |
Rank 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 ro
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mechanism | string | no | Rank by the composite (OVERALL) or by one mechanism dial: MARKET (drawdown, volatility, liquidity), OPERATING (margin/cost pressure), CASH_CONVERSION (cash vs earnings, capex), LEVERAGE (debt, interes |
| bands | array | no | Keep only these bands, e.g. ["STRETCHED","ACUTE"] for the most strained readings or ["CONTAINED"] for the calmest. |
| sector | string | no | Exact sector, case-insensitive (e.g. "Technology", "Industrials"). Set includeSlices=true to list the sectors the board covers. |
| country | string | no | Exact country, case-insensitive (e.g. "United States", "Germany"). |
| minDialsLit | integer | no | Coverage floor: only companies with at least this many of the six dials measured. 4+ avoids thinly-measured composites. |
| sortBy | string | no | market_cap = largest companies first (default; a pure score sort surfaces micro-caps); score_desc = most strained first; score_asc = calmest first; worsened / improved = biggest move since the prior r |
| limit | integer | no | — |
| offset | integer | no | — |
| includeSlices | boolean | no | Also return mean composite risk by sector and by country across the scored universe. |
Companies 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). Ba
| Parameter | Type | Required | Notes |
|---|---|---|---|
| days | integer | no | Look-back window in days for band changes. |
| direction | string | no | Keep only companies whose composite got worse, got better, or both. |
| limit | integer | no | — |
| minMarketCapUsd | number | no | Only companies with at least this market capitalisation in USD, e.g. 1e9 for $1B+. Without it the list is dominated by micro-caps, whose scores move most. |
| stableBasisOnly | boolean | no | true (default) = only real movements. false also includes band changes caused purely by a category starting or stopping scoring (coverage changes, flagged basisChanged). |
Bullrun'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), th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sections | array | no | Sections to return. headline = global GDP/inflation/debt, oil, gold, DXY, US 10Y, 2s10s curve, VIX, EUR/USD, Bitcoin, policy-rate average, OECD unemployment, US jobless claims; indices = 19 world equi |
| newsLimit | integer | no | Headlines to return when the news section is requested. |
One 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| country | string | yes | Country name, e.g. "Germany", "United States" (aliases like US, UK, Korea, Eurozone are understood). Also "Euro Area". |
Cross-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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| indicator | string | yes | Which cross-country indicator: gdp_growth (annual), gdp_growth_quarterly, inflation, government_debt, unemployment, youth_unemployment, real_house_prices, house_price_to_income, house_price_to_rent, c |
| countries | array | no | Only these countries (e.g. ["Germany","France","Italy"]); aliases like US/UK understood. Omit for every covered country. |
| order | string | no | desc = highest value first, asc = lowest first. |
| limit | integer | no | — |
Historical 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_marke
| Parameter | Type | Required | Notes |
|---|---|---|---|
| code | string | no | Exact series code from another tool's historyCode field (e.g. "CNBC_US10Y", "BIS_CBPOL_US", "UNEMPLOYMENT:Germany", "YAHOO_GSPC"). |
| instrument | string | no | Or a market name: an index ("S&P 500", "DAX", "Nikkei 225"), commodity ("Brent", "Gold"), FX pair ("EUR/USD"), central bank ("Fed", "ECB", "BoE"), 10Y yield ("Germany 10Y", "US 10Y"), or headline seri |
| indicator | string | no | Or a per-country macro indicator, together with country (same keys as get_macro_indicators). |
| country | string | no | Country for indicator, e.g. "Japan". |
| from | string | no | Start date YYYY-MM-DD (inclusive). |
| to | string | no | End date YYYY-MM-DD (inclusive). |
| interval | string | no | Resample to end-of-period values. auto = the finest interval that fits maxPoints. |
| maxPoints | integer | no | Upper bound on returned points (auto interval only; an explicit interval is truncated to the most recent maxPoints). |
Bullrun'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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tickers | array | yes | 1-10 Bullrun tickers, e.g. ["AAPL","MSFT"] or ["ASML","SAP","NESN"]. Bullrun tickers: US and most European listings use the plain local symbol (AAPL, BMW, NESN, ABBN); most Asian and Indian listings k |
Rank 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-typi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| model | string | no | valuation = P/E gap on quarterly financials (profitable companies); valuation_ps = price/sales gap (covers loss-makers); valuation_annual_1y = P/E gap on annual financials (broader non-US coverage); f |
| end | string | no | top = highest percentile first (valuation: furthest BELOW typical multiple, i.e. cheapest vs fundamentals; forecast: strongest signal). bottom = lowest first (richest vs fundamentals / weakest signal) |
| coverage | string | no | full = only stocks whose model window (8 quarters / 4 years) is fully populated; limited = the rest. |
| sector | string | no | Exact sector, case-insensitive, e.g. "Technology", "Healthcare", "Financial Services". |
| country | string | no | Exact country, case-insensitive, e.g. "United States", "Germany", "Japan". |
| exchange | string | no | Exact exchange code, case-insensitive, e.g. "NASDAQ", "XETRA", "LSE". |
| limit | integer | no | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Bullrun: Global Stock & UCITS ETF Research or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| screen_stocks | no tags | |
| search_stocks | no tags | |
| find_stock_peers | no tags | |
| get_stock_price_history | no tags | |
| get_company_news | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| search_etfs | no tags | |
| screen_etfs | no tags | |
| get_etf_index_group | no tags | |
| get_etf_fund | no tags | |
| get_etf_filter_options | no tags | |
| get_etf_snapshot | untrusted-input | untrusted-input: keyword "fetch" |
| get_etf_holdings | no tags | |
| get_etf_timeseries | untrusted-input | untrusted-input: keyword "fetch" |
| get_etf_exposures | no tags | |
| get_etf_risk | no tags | |
| compare_etfs | no tags | |
| simulate_etf_cost | no tags | |
| get_stock_metrics | untrusted-input | untrusted-input: keyword "fetch" |
| compare_stocks | no tags | |
| get_financial_history | untrusted-input | untrusted-input: keyword "fetch" |
| get_quality_moat_metrics | no tags | |
| get_forward_estimates | no tags | |
| get_operating_kpis | no tags | |
| get_revenue_breakdown | untrusted-input | untrusted-input: keyword "fetch" |
| get_earnings_call_transcript | no tags | |
| list_research_shortlist | no tags | |
| save_research_shortlist | external-sinkstate-write | external-sink: keyword "send_notification"; state-write: declares readOnlyHint: false |
| list_portfolios | no tags | |
| get_portfolio_context | no tags | |
| get_portfolio_analytics | no tags | |
| create_portfolio_draft | state-write | state-write: declares readOnlyHint: false |
| create_position_draft | state-write | state-write: declares readOnlyHint: false |
| create_portfolio_from_positions | state-write | state-write: declares readOnlyHint: false |
| get_capabilities | no tags | |
| get_company_risk | no tags | |
| get_company_relationships | no tags | |
| compare_company_exposures | no tags | |
| get_corporate_calendar | no tags | |
| get_company_risk_history | no tags | |
| get_company_data_coverage | no tags | |
| screen_risk_board | no tags | |
| get_risk_movers | no tags | |
| get_global_markets_overview | no tags | |
| get_country_macro | no tags | |
| get_macro_indicators | no tags | |
| get_macro_history | no tags | |
| get_valuation_model | no tags | |
| screen_valuation_model | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.8.1.
No release note was published with this version.
- Save a research shortlist to your free Bullrun account (save_research_shortlist, list_research_shortlist); stock presets, ETF overlap and portfolio fit fold into screen_stocks, compare_etfs and get_portfolio_analytics, with the old names on /legacy/mcp (48 tools).
- Refresh the listing to match the existing live v0.7.0 connector and its 50-tool catalog. Adds stock discovery, comparison, price history, news, corporate calendar, company exposure comparison, risk history and coverage metadata to the marketplace record. Clarifies shared anonymous request limits and the separate Bullrun Research plans. Public research remains free; personal portfolio tools use Bullrun OAuth.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Bullrun: Global Stock & UCITS ETF Research can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
I use it mainly to get Claude to Access my Portfolio data from Bullrun and to give me suggestions on what I could change.
Replaces having to fetch the fund data yourself, has some built-in functions for analyzing overlap.