Bullrun: Global Stock & UCITS ETF Research

org.bull-run由 bull-run.org 发布官方发布者v0.9.0更新于 Oct 30, 2026

Free, no sign-up: global stocks, UCITS ETF costs and overlap, company risk and macro, all dated.

已验证Streamable HTTP可网页运行金融数据与分析

概览

AI 生成的概览

Bullrun 为助手提供带日期的全球股票与 UCITS ETF 存储型研究数据,并可选提供登录后的投资组合与自选清单工具。

可以做什么
  • 搜索、筛选并比较股票、同业、基本面、质量指标、营收拆分、风险刻度与公司关系图谱
  • 读取存储的价格历史及技术指标、公司新闻、公司行动日历与宏观概览
  • 搜索、筛选并比较 ETF,解析 ISIN 与上市地点,查看持仓、敞口、风险、时间序列与成本模拟
  • 读取或保存登录用户的研究自选清单,并查看其投资组合、分析结果与账户能力
  • 生成可审阅的模拟组合草稿与加仓建议,需在 Bullrun 中确认后才生效
适用场景
适合超出美国市场的研究问题:寻找非美国股票标的、比较 UCITS ETF 的费用与重叠持仓、查看公司风险或上下游依赖,或回顾用户自己的 Bullrun 投资组合。公开研究无需账户,可先试用再登录。
运行要求
远程 Streamable HTTP 端点;公开研究无需 API 密钥或账户。账户功能(自选清单、投资组合、草稿)需在账户端点通过 OAuth 授权,并具备 read:shortlist、write:shortlist 等相应权限。用量受限:免费或匿名使用为滚动 30 天内 700 次成功调用,Pro 与试用账户为滚动 5 小时内 1,000 次。
安装前请注意
账户工具会读取个人投资组合数据,并可保存自选清单条目与模拟草稿;草稿在 Bullrun 中确认前不会改变持仓。privacyMode=weights_only 可隐藏绝对金额。数据为存储数据而非实时:价格为每日观测值,预估、KPI 与电话会议记录覆盖有限,风险与估值信号只是测量结果,不构成投资建议。免费额度有限,Pro 为付费订阅。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Bullrun: Global Stock & UCITS ETF Research,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/org.bull-run%2Fbullrun/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "bullrun-global-stock-ucits-etf-research": {
      "type": "http",
      "url": "https://mcp.bull-run.org/mcp"
    }
  }
}

README

Bullrun: Global Stock & UCITS ETF Research

An MCP server for researching stocks and ETFs beyond the US. Find global stock candidates, compare UCITS ETF costs and overlap, and inspect company risks from your MCP client. Every figure shows its date, reporting period and native currency, and missing data is reported as unknown. Public research needs no API key or Bullrun account. Connect your free Bullrun account when you want to save research, read your portfolios or create a reviewable paper-portfolio draft.

Free: 700 successful MCP tool calls per rolling 30 days. Pro and active trials: 1,000 successful tool calls per rolling 5 hours. Bullrun Pro costs CHF 5/month or CHF 50/year. See plans and subscription details, then connect the account endpoint through OAuth to use your Pro allowance. Website screening and manual research have separate allowances.

[Bullrun MCP server] [Bullrun Research MCP server]

Public researchhttps://mcp.bull-run.org/mcp (Streamable HTTP)
Personal research and portfolioshttps://mcp.bull-run.org/account/mcp (OAuth)
Research tools only, no sign-inhttps://mcp.bull-run.org/research/mcp (the 39 research tools, no account tools or prompts)
Web appbull-run.org
Registryorg.bull-run/bullrun
GlamaServer · Connector
mcprushBullrun MCP · Bullrun Research (research tools only, with quotas per installation)
ClaudeBullrun research connector · Setup guide
PrivacyPrivacy policy

Connect

Add the hosted endpoint as a remote MCP server in your client. Public market research is anonymous. To save a research shortlist or work with your portfolios, add the account endpoint above and authorize the requested OAuth scopes. These features, including AI-generated drafts, are available to signed-in free accounts. Free use includes 700 successful MCP tool calls per rolling 30 days, per free account or anonymous network, shared across the official public, research and OAuth endpoints. Connected Pro and active-trial accounts get 1,000 successful tool calls per rolling 5 hours. Each successful call counts once, regardless of how much data it loads; failed calls use no allowance. Allowances refill automatically as earlier calls leave the rolling window. Temporary capacity limits and tool pacing may ask you to wait; follow the reply's retry guidance. Website and marketplace allowances are unchanged. Your shortlist persists in Research Shortlist, and paper drafts remain pending until you review and accept them. Saving never enables monitoring or email.

json
{  "mcpServers": {    "bullrun": { "url": "https://mcp.bull-run.org/mcp" }  }}

Configuration formats vary by client. See the connection guide.

Start with a research question

  • “Find Nestlé's stock listing and show the available company data.”
  • “List your preset stock screens, then find European companies with positive earnings and free cash flow.”
  • “Show six months of Apple's daily prices, RSI and moving averages.”
  • “Find peers for Microsoft and compare their fundamentals.”
  • “Show recent company news for NVIDIA, with publication dates and freshness.”
  • “Which UCITS funds track the S&P 500 at the lowest ongoing cost?”
  • “Compare the underlying overlap of these two ETFs.”
  • “Which companies share suppliers or customers with Apple?”

Use the prompt menu for find_ml_candidates (compare model candidates with business fundamentals), compare_ucits_costs (fund-level cost comparison) and research_shortlist_briefing (review your saved queue). These workflows retrieve research; saving requires your instruction.

Tools

Version 0.9.0 exposes 48 focused tools in both hosted and local builds (39 research tools on the research-only and marketplace connections). The exact tools and parameters are available through MCP tools/list.

The hosted server and local stdio build support MCP 2026-07-28 and older initialization-based clients. Existing server URLs and OAuth requirements stay the same; reconnect if your client caches the catalog. Server guidance is shorter, and get_financial_history defaults to five fiscal years of annual statements. Request years (1-15) and periodType: "quarterly" or "both" explicitly when you need more detail. Responses retain dates, currencies, coverage and growth summaries.

WorkflowTools
Find stocks and screensearch_stocks, screen_stocks, find_stock_peers
Prices and newsget_stock_price_history, get_company_news, get_stock_metrics
Fundamentalscompare_stocks, get_financial_history, get_quality_moat_metrics, get_revenue_breakdown
Coverage and optional datasetsget_company_data_coverage, get_forward_estimates, get_operating_kpis, get_earnings_call_transcript
Company risk and dependenciesget_company_risk, get_company_relationships, compare_company_exposures, get_company_risk_history, screen_risk_board, get_risk_movers
Corporate calendarget_corporate_calendar
ETF discoverysearch_etfs, screen_etfs, get_etf_filter_options, get_etf_index_group, get_etf_fund
ETF researchget_etf_snapshot, get_etf_holdings, get_etf_timeseries, get_etf_exposures, get_etf_risk, compare_etfs, simulate_etf_cost
Macroget_global_markets_overview, get_country_macro, get_macro_indicators, get_macro_history
Bullrun valuation modelsget_valuation_model, screen_valuation_model
Research Shortlist (sign-in)save_research_shortlist, list_research_shortlist
Personal portfolios (sign-in)list_portfolios, get_portfolio_context, get_portfolio_analytics, get_capabilities
Reviewable paper drafts (sign-in)create_portfolio_from_positions, create_portfolio_draft, create_position_draft

The consolidated tools preserve existing defaults and fetch extra analysis only when requested:

  • screen_stocks({action: "list_presets"}) lists transparent rules without running a screen. Pass a preset such as profitable_value to run it, or supply custom rules; do not combine preset and custom rule inputs.
  • compare_etfs({tickers: [...], include: ["overlap"]}) returns pairwise shared holdings, weighted overlap, snapshot dates and partial-coverage warnings. Other comparison modules can be requested alongside overlap.
  • get_portfolio_analytics({portfolioId, candidateTicker, includeLookThrough: true}) adds ETF/direct-holding duplicate exposure. It requires portfolio access and retains the selected privacyMode; ordinary analytics does not fetch holdings look-through.

Migrating older clients

The four retired names remain available in the opt-in compatibility catalog at https://mcp.bull-run.org/legacy/mcp. OAuth clients that need a login challenge can use https://mcp.bull-run.org/account/legacy/mcp. Both retain the existing authentication rules. The modern endpoints omit these aliases:

Legacy nameModern call
screen_stock_presetsscreen_stocks with action: "list_presets" or a named preset
analyze_etf_overlapcompare_etfs with include: ["overlap"]
analyze_portfolio_fitget_portfolio_analytics with candidateTicker and includeLookThrough: true
query_etfssearch_etfs, get_etf_snapshot, get_etf_holdings, and get_etf_timeseries, according to the requested operation

Reconnect after changing endpoints; modern and compatibility sessions cannot be shared. For local compatibility, run node dist/stdio.js --legacy-tools. Legacy responses retain their existing fields and units, including raw fractional ratios in query_etfs; modern ETF ratios use percentage points.

Read the returned coverage and dates. Stored prices are daily observations, not live stock quotes. Technical indicators and price returns use stored closes; an adjusted total-return series is not implied. Weekly/monthly bars are aggregated from daily data. News reads return cached articles and, except on the research endpoint, can request a bounded background refresh; an empty result is not proof that no news exists.

Consensus estimates use available Yahoo revenue/EPS targets and EPS revisions; EBITDA, management guidance and revenue revisions are not supplied by this feed. Estimate reads can queue a free consensus refresh, and US transcript reads a bounded import of the latest two calls from the existing free DefeatBeta source; the first cached response may be empty while that runs. The research endpoint (/research/mcp) queues nothing: its news, estimate and transcript reads return stored rows only, so every tool there is read-only. Non-US transcript coverage is not configured. Operating KPI observations remain limited to stored rows, with no broad KPI ingestion pipeline. Use get_company_data_coverage before relying on an optional dataset. Missing data is unknown. A risk band describes measured strain, and a model valuation gap describes relative pricing; neither is a price target or buy/sell recommendation.

The same UCITS fund can trade on several venues under different symbols. Resolve ISINs with get_etf_fund and treat those listings as one holding when evaluating overlap.

Shortlist access uses read:shortlist and write:shortlist. Reconnect the account endpoint to grant these scopes if you connected an older version. save_research_shortlist takes 1-20 exact stock or ETF listing tickers; confirmed saves and individual failures are returned separately.

Successful answers offer an optional contextual link to Bullrun's charts, screens, company networks or saved draft. Link descriptions identify settings that the app cannot reproduce. Opening a draft link never accepts it or changes holdings.

Local stdio build

The remote endpoint is the simplest connection. To build the connector for local clients or directory inspection:

sh
npm cinpm run buildnode dist/stdio.js

The stdio build reads public data from https://bull-run.org by default. Set BULLRUN_API_BASE to use another Bullrun API deployment. Anonymous stdio clients cannot read personal portfolios or create drafts.

Release verification

sh
npm testnpm run test:catalog

The public repository contains the MCP connector, not the application database or data services. The connector source, version and catalog are synchronized from the application repository's release process. MIT license.

来源:README.md,提交 69352a2

工具

48

screen_stocks

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 backend request. action=run (default) executes one preset or custom rules; running uses the API's metered screening budget. Custom screens support sector/industry/country, listing controls, annual/quarterly lookback, AND/OR rule groups and money units. Presets are mechanical starting points, not recommendations or famous-investor strategies. Read-only.

输入参数modelimitorderrulesactionpresetsectorsortBycountryperiodsindustrylookback另有 5 个

search_stocks

Find stock tickers and company listings

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 alternatives remain. No enrichment or market-data refresh. Read-only.

输入参数limitquery必填countrycurrencyexchangequoteTypeincludeInactiveincludeSecondary

find_stock_peers

Discover comparable stock candidates

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_stocks arguments. Classification peers are not verified competitors or a financial-similarity ranking; no generated peers or paid graph discovery. Read-only.

输入参数limitticker必填matchBysameCountryOnly

get_stock_price_history

Get stock price history and technical indicators

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

输入参数limitticker必填endDateintervalrsiPeriodstartDateindicatorsmovingAveragePeriod

get_company_news

Get company news with sources and freshness

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

输入参数limitsinceticker必填

search_etfs

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

输入参数focuslimitminAumregionsearchsortBycategorycurrencydomicileexchangeindexKeyscanLimit另有 6 个

screen_etfs

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 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 full-universe screen is an expensive read, and request limits depend on your connection and plan. Build one precise screen to conserve your allowance. Read-only.

输入参数limitorderrulesissuerregionsearchsortBycategorycurrencydomicileexchangeindexKey另有 12 个

get_etf_index_group

Compare funds tracking one index

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 states how many funds publish no fee at all, so a "cheapest" claim is never made over silently omitted funds. Read-only.

输入参数limitscopecurrencyexchangeindexKeydistributionPolicy

get_etf_fund

Get ETF fund by ISIN

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 percentage points. Read-only.

输入参数isinticker

get_etf_filter_options

List ETF filter values

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 known to be valid. Read-only.

输入参数limitfacetssearch

get_etf_snapshot

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 percentage points. Read-only.

输入参数ticker必填include

get_etf_holdings

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 selection will be added when the upstream API exposes it. Read-only.

输入参数limitcursorticker必填

get_etf_timeseries

Get ETF time series

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.

输入参数limitseriesticker必填endDateintervalstartDatebenchmarkTicker

get_etf_exposures

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 by ISIN or by symbol with a matching company name. Currency uses the reported holding currency, else an explicitly disclosed estimate from the company's home-market listing or usual country currency. This is a holding quote/listing-currency proxy, not revenue FX exposure, economic currency risk or hedge-adjusted fund exposure. Positions without a classification or currency basis are Unclassified / Not reported. Sector and currency cover all stored rows; country covers securities and excludes cash and derivatives. Coverage states complete bucket weights and any buckets omitted by limitPerType. Broad asset class comes from the normalized fund profile. Factor and thematic look-through are 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.

输入参数typesticker必填limitPerType

get_etf_risk

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 risk, not distribution-adjusted total-return risk. Read-only.

输入参数daysticker必填benchmarkTickerriskFreeRatePct

compare_etfs

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 stored holdings, matched by security identity rather than ticker alone; cash, currency and derivatives are excluded. Missing holdings make overlap unavailable, while partial holdings make it a lower bound. Only requested modules run; overlap alone fetches no price history. Leaders are mechanical extrema, not recommendations. Currency, holdings dates and coverage caveats are explicit. Read-only.

输入参数includetickers必填topSharedLimitperformanceDays

simulate_etf_cost

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 represented by the inputs. Read-only.

输入参数yearsticker必填spreadPctexpenseRatioPctinitialInvestmentcommissionPerTradecontributionAmountgrossAnnualReturnPctcontributionFrequency

get_stock_metrics

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/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. Use the listing ticker returned by search_stocks. US/European examples: AAPL, BMW, NESN. Most Asian listings keep their exchange suffix (6324.T, 0700.HK); some use bare codes (005930). Native or suffixed forms resolve only when one listing matches; search by company name or ISIN if unsure. Read-only.

输入参数ticker必填

compare_stocks

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 conversion, quarterly-to-annual substitution, buy/sell ranking or generated research. Read-only.

输入参数includetickers必填

get_financial_history

Get financial history

Read historical financial statements for one exact Bullrun ticker, with growth/CAGR consistency checks first, then income, balance sheet, cash flow, per-share metrics, margins and source currency. Defaults to a five-fiscal-year window of annual rows; request years=1-15 and periodType=quarterly or both for more detail. Use for growth consistency, margins, leverage and cash-flow quality; read the period/currency coverage before comparing.

输入参数yearsticker必填periodTypeincludeEmptyRows

get_quality_moat_metrics

Get quality and 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. Read-only.

输入参数yearsticker必填estimatedWaccPcttaxRateFallbackPct

get_forward_estimates

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 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. Does not change portfolios or user data.

输入参数limitticker必填periodType

get_operating_kpis

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, units and source links; company-economics observations are a separate dataset. Read-only.

输入参数limitticker必填categorymetricKey

get_revenue_breakdown

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.

输入参数limitticker必填dimension

get_earnings_call_transcript

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 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. Does not change portfolios or user data.

输入参数searchticker必填maxChunksfiscalYearfiscalQuartermaxCharsPerChunk

list_research_shortlist

Read my 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

Save research to my 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; repeated saves are idempotent. Each ticker is saved independently and failures are reported alongside successful saves, so retry only failed tickers. Does not create a portfolio, schedule monitoring or send notifications.

输入参数tickers必填

list_portfolios

List my 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 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.

输入参数privacyMode

get_portfolio_context

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

输入参数daysportfolioId必填privacyMode

get_portfolio_analytics

Get portfolio analytics

Analyze the signed-in user's portfolio risk, diversification, concentration or a candidate stock/ETF. Returns correlation/covariance, risk contributions, country/sector/currency exposures, proxy factors and stress scenarios. Use portfolioId from list_portfolios; use get_portfolio_context instead for holdings/value and matched/unmatched coverage. Set candidateTicker for correlation and pro-forma volatility; add includeLookThrough=true for direct/ETF underlying overlap in lookThroughFit with separate coverage/warnings. Look-through uses priced positions, independently of the risk-history subset; partial ETF snapshots give a lower bound. Risk math excludes holdings without sufficient price history and renormalizes over those analyzed: report the leading coverage banner and never imply whole-portfolio coverage when holdings were excluded. Requires OAuth read:portfolios and reads only the caller's data. privacyMode=weights_only hides absolute USD amounts; full is the default.

输入参数daysportfolioId必填privacyModecandidateTickercandidateWeightPctincludeLookThrough

create_portfolio_draft

Create a 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 natural-language brief (e.g. "a diversified European dividend portfolio"). Requires OAuth with the write:drafts scope. Available to signed-in free accounts; daily usage limits and portfolio capacity still apply. 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.

输入参数promptmaxPositionsstartingCashinstrumentUniverse

create_position_draft

Create a 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 portfolio. Requires OAuth with the write:drafts scope. Available to signed-in free accounts; daily usage limits and portfolio capacity still apply. 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.

输入参数portfolioId必填maxPositionsinstrumentUniverse

create_portfolio_from_positions

Save a portfolio from explicit holdings

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 basket lands exactly as given. Like the other draft tools it is available to signed-in free accounts within daily usage limits and portfolio capacity, and needs 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.

输入参数namecashPctpositions必填startingCash

get_capabilities

Get account 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 scopes, portfolio usage vs the free/max limits, and a per-tool entitlement map: create_portfolio_from_positions, create_portfolio_draft and create_position_draft (all available to signed-in free accounts, subject to usage limits), 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_risk

Get company risk profile

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

输入参数detailticker必填includemaxEventsmaxRiskFactors

get_company_relationships

Get company relationship network

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

输入参数rolesticker必填evidencelimitPerRoleverifiedOnly

compare_company_exposures

Compare shared 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_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. One cached graph read per company (plus a ticker lookup when the typed ticker has no graph); never starts paid discovery, infers exposure weights or estimates portfolio losses. Read-only.

输入参数rolestickers必填verifiedOnlylimitPerCompany

get_corporate_calendar

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 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 calendar requests, plus a ticker lookup when q carries a Yahoo exchange suffix.

输入参数qdayslimitincludeminCapUsdlistingMonths

get_company_risk_history

Get company risk history and changes

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. Read-only; does not run risk computation or paid discovery.

输入参数limitdetailticker必填

get_company_data_coverage

Get company data availability and freshness

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 stored timestamp means freshness is unknown; a reporting period is not an ingestion date. Read-only.

输入参数ticker必填

screen_risk_board

Screen the 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, 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.

输入参数bandslimitoffsetsectorsortBycountrymechanismminDialsLitincludeSlices

get_risk_movers

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

输入参数dayslimitdirectionminMarketCapUsdstableBasisOnly

get_global_markets_overview

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

输入参数sectionsnewsLimit

get_country_macro

Get country macro profile

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

输入参数country必填

get_macro_indicators

Rank countries by macro indicator

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

输入参数limitordercountriesindicator必填

get_macro_history

Get macro / market 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, 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.

输入参数tocodefromcountryintervalindicatormaxPointsinstrument

get_valuation_model

Get Bullrun 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 (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.

输入参数tickers必填

screen_valuation_model

Screen by Bullrun 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, 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.

输入参数endlimitmodelsectorcountrycoverageexchange

版本历史

4
  1. v0.9.0最新Oct 30, 2026
  2. v0.8.1Oct 20, 2026
  3. v0.7.0Oct 19, 2026
  4. v0.1.2Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分