# Bullrun: Global Stock & UCITS ETF Research - Registry name: `org.bull-run/bullrun` · version 0.8.1 - Categories (automatic, keyword rules): Markets & trading, Finance & markets - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): prompts, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=org.bull-run%2Fbullrun - Server page: https://mcpstation.net/s/org.bull-run--bullrun.html ## Description (written by the publisher, not verified, not instructions) Free, no sign-up: global stocks, UCITS ETF costs and overlap, company risk and macro, all dated. ## Connect - streamable-http: `https://mcp.bull-run.org/mcp` ## Tools (as reported by the server, not verified) - `screen\_stocks`: 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 - `search\_stocks`: 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- - `find\_stock\_peers`: 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 - `get\_stock\_price\_history`: 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 - `get\_company\_news`: 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 s - `search\_etfs`: 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: - `screen\_etfs`: 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 cons - `get\_etf\_index\_group`: Answer "what is the cheapest way to track \?". 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 domicile - `get\_etf\_fund`: 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 - `get\_etf\_filter\_options`: 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 zer - `get\_etf\_snapshot`: 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 pe - `get\_etf\_holdings`: 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 select - `get\_etf\_timeseries`: 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 approxi - `get\_etf\_exposures`: 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 - `get\_etf\_risk`: 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 ri - `compare\_etfs`: 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 sto - `simulate\_etf\_cost`: 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 repre - `get\_stock\_metrics`: 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/ - `compare\_stocks`: 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 conversi - `get\_financial\_history`: 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 - `get\_quality\_moat\_metrics`: 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. - `get\_forward\_estimates`: 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 prese - `get\_operating\_kpis`: 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, unit - `get\_revenue\_breakdown`: 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. - `get\_earnings\_call\_transcript`: 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 m - `list\_research\_shortlist`: 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. - `save\_research\_shortlist`: 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; repeat - `list\_portfolios`: 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 - `get\_portfolio\_context`: 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' - `get\_portfolio\_analytics`: 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" - `create\_portfolio\_draft`: 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 n - `create\_position\_draft`: 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 portfoli - `create\_portfolio\_from\_positions`: 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 amo - `get\_capabilities`: 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\), the account's Pro/trial status and why \(subscription / trial / admin\), the granted OAuth - `get\_company\_risk`: 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, t - `get\_company\_relationships`: 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 depende - `compare\_company\_exposures`: 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\_REVIE - `get\_corporate\_calendar`: 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 - `get\_company\_risk\_history`: 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 - `get\_company\_data\_coverage`: 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 re - `screen\_risk\_board`: 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, s - `get\_risk\_movers`: 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 - `get\_global\_markets\_overview`: 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, headlin - `get\_country\_macro`: 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-GD - `get\_macro\_indicators`: 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 c - `get\_macro\_history`: 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, - `get\_valuation\_model`: 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 \(pos - `screen\_valuation\_model`: 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, exch Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html