Bullrun: Global Stock & UCITS ETF Research is an MCP server with 30 tools an agent can call, among them analyze_etf_overlap, analyze_portfolio_fit, compare_etfs. It answers at https://mcp.bull-run.org/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 12 September 2026; the last check, on 24 October 2026, succeeded.
Global stock research, ML forecasts, valuation signals, screeners & portfolio tracking in Claude
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
analyze_etf_overlap | Compare 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. Cov Inputs: tickers, topSharedLimit |
analyze_portfolio_fit | Analyze 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 duplicat Inputs: portfolioId, candidateTicker, candidateWeightPct, days, includeLookThrough |
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, and holdings modules. Leaders are mechanical extrema, not recommendati Inputs: tickers, include, performanceDays |
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 p Inputs: prompt, startingCash, maxPositions, instrumentUniverse |
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 Inputs: positions, name, startingCash, cashPct |
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 REVI Inputs: portfolioId, maxPositions, instrumentUniverse |
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), whether the account has Bull |
get_earnings_call_transcript | 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 Inputs: ticker, fiscalYear, fiscalQuarter, search, maxChunks, maxCharsPerChunk |
get_etf_exposures | Calculate sector, country, currency, and broad asset exposure from the latest stored ETF holdings and Bullrun instrument mappings. Factor and thematic look-through are reported unavailable until dedicated source data exists. Coverage states Inputs: ticker, types, limitPerType |
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. Inputs: facets, search, limit |
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. Us Inputs: isin, ticker |
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 o Inputs: ticker, cursor, limit |
get_etf_index_group | 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 Inputs: indexKey, scope, distributionPolicy, limit |
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 inf Inputs: ticker, days, benchmarkTicker, riskFreeRatePct |
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 Inputs: ticker, include |
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; unavail Inputs: ticker, series, benchmarkTicker, interval, startDate, endDate |
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/C Inputs: ticker, periodType, years, includeEmptyRows |
get_forward_estimates | 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 Inputs: ticker, periodType, limit |
get_operating_kpis | 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 Inputs: ticker, metricKey, category, limit |
get_portfolio_analytics | Use 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 Inputs: portfolioId, days, candidateTicker, candidateWeightPct, privacyMode |
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 imp Inputs: portfolioId, days, privacyMode |
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 payou Inputs: ticker, years, estimatedWaccPct, taxRateFallbackPct |
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 Inputs: ticker, dimension, limit |
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 Inputs: ticker |
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 com Inputs: privacyMode |
query_etfs | Compatibility 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 smal Inputs: search, ticker, category, focus, domicile, exchange |
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, Inputs: search, assetClass, category, domicile, region, exchange |
screen_stocks | Screen 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 Inputs: sector, industry, country, countries, lookbackMode, lookback |
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 liqu Inputs: search, category, focus, region, domicile, exchange |
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 Inputs: ticker, initialInvestment, contributionAmount, contributionFrequency, years, grossAnnualReturnPct |
Every block below points at https://mcp.bull-run.org/mcp. Pick your client and copy.
claude mcp add --transport http bullrun-global-stock-ucits-etf-r https://mcp.bull-run.org/mcp
{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.bull-run.org/mcp"]
}
}
}{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"url": "https://mcp.bull-run.org/mcp"
}
}
}{
"servers": {
"bullrun-global-stock-ucits-etf-r": {
"type": "http",
"url": "https://mcp.bull-run.org/mcp"
}
}
}{
"context_servers": {
"bullrun-global-stock-ucits-etf-r": {
"url": "https://mcp.bull-run.org/mcp"
}
}
}{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"serverUrl": "https://mcp.bull-run.org/mcp"
}
}
}{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"url": "https://mcp.bull-run.org/mcp"
}
}
}name: Bullrun: Global Stock & UCITS ETF Research
version: 0.0.1
schema: v1
mcpServers:
- name: Bullrun: Global Stock & UCITS ETF Research
type: streamable-http
url: https://mcp.bull-run.org/mcp{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"httpUrl": "https://mcp.bull-run.org/mcp"
}
}
}{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"type": "http",
"url": "https://mcp.bull-run.org/mcp"
}
}
}{
"mcpServers": {
"bullrun-global-stock-ucits-etf-r": {
"url": "https://mcp.bull-run.org/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.bull-run.org%2Fmcp&type=streamable_http&id=bullrun-global-stock-ucits-etf-r&name=Bullrun%3A%20Global%20Stock%20%26%20UCITS%20ETF%20Research
It answered our last check on 24 October 2026 in 170 ms. Over 6 checks since 12 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by bull-run.org and served from mcp.bull-run.org, the vendor's own domain: https://mcp.bull-run.org/mcp.
30, as returned by the server's own tools/list on 23 September 2026: analyze_etf_overlap, analyze_portfolio_fit, compare_etfs, create_portfolio_draft, create_portfolio_from_positions, create_position_draft, get_capabilities, get_earnings_call_transcript, and 22 more.
It answered our last check on 24 October 2026 in 170 ms. Over 6 checks since 12 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.bull-run.org/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: org.bull-run. Endpoint host: mcp.bull-run.org. ARD identifier: urn:air:org.bull-run:mcp:bullrun.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.