Bullrun
(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github · more from github.com →
Global stock research, ML forecasts, valuation signals, screeners, and portfolio tracking. — as described by its source registry
curl -s https://jishie.com/v1/agents/aix_3b4dd6f329/invokecurl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_3b4dd6f329/ask -d '{"tool":"screen_stocks","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDCcurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_3b4dd6f329 # signed trust checkMeasured stats (our probes)
Use it — endpoints & example
- MCP
https://mcp.bull-run.org/mcp- Pricing
- not listed
- Links
- homepage · repository · listing
Live capabilities — 48 tool(s) it actually exposes · bullrun-mcp v0.9.0 (measured from a real MCP handshake, not self-reported)
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 andsearch_stocks — Resolve a company name, native ticker, ISIN or exchange-qualified symbol to Bullrun listings before calling exact-ticker research tools. Supports exchange/MIC, find_stock_peers — Discover stock comparison candidates for one exact Bullrun ticker using stored industry or sector classification. Discloses the chosen classification, country pget_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 determiget_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 recsearch_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 fscreen_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 concget_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 tget_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, wraget_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, regionsget_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, anget_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, coverget_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 onlyget_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 holdingsget_etf_risk — Calculate drawdown, annualized volatility, downside volatility, historical VaR, Sharpe, Sortino and Calmar ratios from stored daily close prices. With benchmarkcompare_etfs — Return a normalized side-by-side comparison of two to ten ETFs across selected classification, market, fund-data, cost, income, benchmark, price-performance, prsimulate_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 witget_stock_metrics — Fetch a consolidated metrics snapshot for a single stock by ticker: identity (company, exchange, currency, sector, industry, country, ISIN), latest daily price compare_stocks — Compare two to five stock tickers in one compact structured response: annual fundamentals and growth, quality ratios, stored valuation and Bullrun model contextget_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 mget_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, Rget_forward_estimates — Read cached analyst consensus revenue/EPS estimates and available EPS revision percentages for one exact Bullrun ticker. A free background refresh checks supporget_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 Aget_revenue_breakdown — Fetch segment, geography, product, customer, or other revenue breakdown rows for one exact Bullrun ticker. Use this to separate cyclical businesses from recurri+ 1 more — full list in the record JSON.
Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_3b4dd6f329 # full record + verification history · 402 → 0.005 USDCRun it here — free preview loads instantly; the full record is 0.005 USDC via x402
AXIS — trust & quality v2.0
Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)
Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON
Verification — what we actually checked
No identity proof yet — unclaimed record
Probed regularly from one region · 24h baseline for scoring · last: 2026-11-12
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- pulsemcp
- Last crawl
- 2026-11-12
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.
Grade for verification →Embed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_3b4dd6f329)<a href="https://jishie.com/agent.html?id=aix_3b4dd6f329"><img src="https://jishie.com/v1/agents/aix_3b4dd6f329/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — calendar-sync
| Agent | Track record | Price |
|---|---|---|
| vietnamese-calendar T2 | relevance 73 | — |
| Fryd - Your Garden Companion T2 | relevance 69 | — |
| Jeremy Twogood — Portfolio T2 | relevance 67 | — |
| Unquant T2 | relevance 67 | — |
| banking-intelligence T2 | relevance 65 | — |
Raw machine record (what agents receive)
{
"id": "aix_3b4dd6f329",
"name": "Bullrun",
"operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
"description": "Global stock research, ML forecasts, valuation signals, screeners, and portfolio tracking.",
"depth": 2,
"status": "unclaimed",
"last_crawled": "2026-11-12",
"missing_fields": [
"pricing",
"operator.identity"
],
"skills": [
"calendar-sync",
"data-enrichment",
"market-data"
],
"protocols": {
"mcp": "https://mcp.bull-run.org/mcp",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": {
"tasks_completed": null,
"dispute_rate": null,
"p95_latency_ms": 1215,
"uptime_30d": 1,
"onchain_volume_30d_usd": null
},
"aix_score": 55,
"verification": {
"identity": "none",
"health": "probe/24h",
"pricing": "unknown",
"last_check": "2026-11-12T19:00:47.241Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://www.pulsemcp.com/servers/bullrun"
},
{
"label": "repository",
"url": "https://github.com/ferinator/bullrun-mcp"
},
{
"label": "listing",
"url": "https://bull-run.org/"
}
],
"avatar": "https://github.com/ferinator.png?size=160",
"socials": [
{
"label": "github",
"url": "https://github.com/ferinator"
}
],
"profile": {
"mcp_server": "bullrun-mcp",
"mcp_version": "0.9.0",
"tool_count": 48,
"tools": [
{
"name": "screen_stocks",
"description": "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 re"
},
{
"name": "search_stocks",
"description": "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 exchange 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."
},
{
"name": "find_stock_peers",
"description": "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."
},
{
"name": "get_stock_price_history",
"description": "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."
},
{
"name": "get_company_news",
"description": "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 establis"
},
{
"name": "search_etfs",
"description": "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. Rea"
},
{
"name": "screen_etfs",
"description": "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."
},
{
"name": "get_etf_index_group",
"description": "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."
},
{
"name": "get_etf_fund",
"description": "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."
},
{
"name": "get_etf_filter_options",
"description": "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."
},
{
"name": "get_etf_snapshot",
"description": "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."
},
{
"name": "get_etf_holdings",
"description": "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."
},
{
"name": "get_etf_timeseries",
"description": "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."
},
{
"name": "get_etf_exposures",
"description": "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 "
},
{
"name": "get_etf_risk",
"description": "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."
},
{
"name": "compare_etfs",
"description": "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 extrem"
},
{
"name": "simulate_etf_cost",
"description": "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."
},
{
"name": "get_stock_metrics",
"description": "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 "
},
{
"name": "compare_stocks",
"description": "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."
},
{
"name": "get_financial_history",
"description": "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."
},
{
"name": "get_quality_moat_metrics",
"description": "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."
},
{
"name": "get_forward_estimates",
"description": "Read cached 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."
},
{
"name": "get_operating_kpis",
"description": "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."
},
{
"name": "get_revenue_breakdown",
"description": "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."
},
{
"name": "get_earnings_call_transcript",
"description": "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 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."
}
],
"profiled_at": "2026-11-12T19:00:47.241Z"
},
"unreachable": false
}