AgentStack
MCP verified MIT Self-run

Mcp Market Research

mcp-pedrobraiti-mcp-market-research · by pedrobraiti

Scout — an MCP server that gives AI trading agents 62 free-data research tools: stocks, ETFs, crypto, SEC filings, FRED macro, options, on-chain, StatArb pairs. Read-only, stateless, hexagonal architecture. Pairs with agentic-trading-mcp (Valet) and vizier-trading-skill.

No reviews yet
0 installs
6 views
0.0% view→install

Install

$ agentstack add mcp-pedrobraiti-mcp-market-research

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Mcp Market Research? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Scout — an MCP server that gathers and structures financial data for AI agents.

Valet trades, Scout researches. The senses layer of an agentic-trading stack — it gives an AI agent (like Claude Code) the data to research any US stock, ETF or crypto asset, in depth, from free sources. Pairs with agentic-trading-mcp (execution).

> Not financial advice. A research and data-gathering tool. It does not place orders and > does not decide what to buy — that is the agent's and agentic-trading-mcp's job. Use at your own risk.

What this is

Scout is an MCP server exposing 62 purpose-built tools an AI agent calls to research a company or market — quotes, fundamentals, technicals, options-implied volatility, SEC filings & XBRL financials, macro, news, sentiment and attention, plus a full crypto spot layer (quotes, OHLCV, on-chain network health, derivatives funding/OI, DVOL, DeFi TVL/stablecoins/yields, crypto macro and sentiment) — gathered from free, keyless data sources, in parallel, returned as typed, structured data.

It is the senses layer of a three-part split:

  • BrainVizier: the Claude Code skill that researches, decides what/when, and orchestrates this repo + the execution layer.
  • SensesScout (this repo): data & info gathering. Stateless, data-only.
  • Handsagentic-trading-mcp: execution on Interactive Brokers (stocks/ETFs) and crypto exchanges (spot, via CCXT).

Scope: US equities & ETFs plus crypto spot (what the execution side can trade). Every tool returns an {"ok": ..., "data": ...} envelope and most accept an optional as_of (point-in-time) date.

> Scout returns data, not reports. It gives the agent the numbers and sources; the agent does the > analysis and produces the output (e.g. a written report, a chart, a PDF). Ask your agent to > "research MU and write me a report/PDF" and it will call Scout's tools, then compose the result itself.

Quickstart

Scout is a standard MCP server — register it with any MCP-capable agent/client. The example below uses Claude Code (the most common one); the steps are the same elsewhere, only the register command differs.

# 1. Install
git clone https://github.com/pedrobraiti/market-research-mcp.git
cd market-research-mcp
python -m venv .venv
# Windows (PowerShell): & ".venv\Scripts\Activate.ps1"   (on a policy error: Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass)
# Linux/macOS:          source .venv/bin/activate
pip install -e .

# 2. (recommended) Configure — SEC EDGAR needs an identifiable User-Agent
cp .env.example .env      # then set SCOUT_SEC_USER_AGENT="Your Name your@email.com"

# 3. Register the MCP with Claude Code (use the venv's python — absolute path)
#   Windows:      claude mcp add scout -- "C:\path\to\market-research-mcp\.venv\Scripts\python.exe" -m scout.server.app
#   Linux/macOS:  claude mcp add scout -- /path/to/market-research-mcp/.venv/bin/python -m scout.server.app

The tools then appear to the agent (in Claude Code, a new session). Verify the data layer works at any time, independent of any agent:

python -m scout.healthcheck AAPL   # live smoke test (fetches a real quote)

Every tool answers with the same {"ok": ..., "data": ...} envelope. company_snapshot("AAPL"), for example, returns:

{
  "ok": true,
  "data": {
    "symbol": "AAPL",
    "name": "Apple Inc.",
    "currency": "USD",
    "price": "230.0",
    "previous_close": "228.0",
    "change": "2.0",
    "change_percent": "0.877193",
    "market_cap": "3500000000000",
    "pe_ratio": "35.5",
    "forward_pe": "30.1",
    "dividend_yield": "0.0044",
    "fifty_two_week_high": "260.1",
    "fifty_two_week_low": "164.0",
    "sector": "Technology",
    "industry": "Consumer Electronics",
    "market_state": "REGULAR",
    "recent_splits": []
  }
}

Then just ask the agent in natural language — e.g. "Use the scout tools to do the most complete analysis you can of a stock (say MU), then write it up as a PDF with charts." The agent fans out across the tools below, then composes the result itself.

> First-call note. On start the MCP server warms up its data libraries (yfinance + ccxt) on the > main thread — this adds ~5s to startup but is deliberate: those libraries' one-time setup > otherwise hangs when it first runs inside the async server, which would freeze the very first tool > call of a session. With the warm-up, the first real call is instant.

No API keys or logins required. The only optional setting is SCOUT_SEC_USER_AGENT (SEC policy: an identifiable User-Agent) — without it the SEC tools (filings, sec_financials, filing_search) return a clear "please set it" message; everything else works keyless.

Tools (62)

Discovery — find names, not just look them up

  • search_symbols(query, limit?) — company name / partial ticker → symbols (the entry point).
  • market_movers(category?, limit?) — market-wide top gainers / losers / most-active today.
  • sector_performance(period?, as_of?) — total return of each US sector (SPDR ETFs) — rotation.
  • etf_holdings(symbol) — an ETF's declared top holdings & sector weights (open a theme).
  • filing_search(query, forms?, limit?) — full-text search across all SEC filings → companies by what they disclose (thesis → names).
  • news_search(query, limit?, days?) — free-text news/event search across global media (GDELT). Not exhaustive — it can miss capital-structure events (raises, dilution, buybacks, M&A); cross-check filings(form_type="8-K") / filing_search for those. On a 429/timeout it returns source_status (e.g. unavailable: rate_limited) so a "couldn't fetch" is distinguishable from "no matches".

Company deep-dive

  • company_dossier(symbol, depth?, as_of?)flagship: snapshot + fundamentals + dividends + technicals + earnings + analyst view + news, gathered in parallel (degrades gracefully).
  • company_snapshot(symbol, as_of?) — price, day move, key multiples, sector/industry.
  • fundamentals(symbol, period?, as_of?) — income/balance/cash-flow figures + derived margins.
  • quality_metrics(symbol, as_of?) — ROE/ROA, margins, revenue & earnings growth and CAGR.
  • dividends(symbol, as_of?) — payment history, trailing yield, growth streak, cut flag.
  • sec_financials(symbol, as_of?)authoritative annual financials from SEC XBRL (cross-check fundamentals).
  • filings(symbol, form_type?, limit?, as_of?) — recent SEC EDGAR filings (10-K/10-Q/8-K …) with links.
  • earnings(symbol, as_of?) — next earnings date + history (estimate / actual / surprise).
  • ownership(symbol) — insider & institution %, top institutions, recent insider trades, short interest (days-to-cover, % of float, % change).
  • fda_events(company, limit?) — FDA drug approvals + recalls for a sponsor (openFDA) — pharma/biotech catalysts.

Price & technicals

  • price_history(symbol, period?, interval?, as_of?) — OHLCV bars.
  • technicals(symbol, as_of?) — SMA(50/200), EMA(20), RSI(14), MACD, ATR(14), 52-week range (raw numbers, no verdict).
  • relative_strength(symbols[], benchmark?, period?, as_of?) — each name's return vs a benchmark.
  • options_volatility(symbol, expiry?) — ATM implied vol + options-implied expected move.

Sentiment & attention

  • news(symbol, limit?) — recent headlines (pairs with extract).
  • analyst_view(symbol) — sell-side consensus & price targets (third-party opinion, as data).
  • retail_buzz(symbol?, limit?) — Reddit (WSB/stocks) mention buzz (ApeWisdom) — retail attention.
  • wikipedia_attention(article, days?) — daily Wikipedia pageviews — an attention proxy.

Macro

  • macro_context(as_of?) — key US macro (FRED) + a rich derived block: rates/curve/CPI/VIX, plus Fed net liquidity (WALCL−TGA−RRP), financial-conditions (NFCI/STLFSI4), jobless claims, growth nowcasts (GDPNow/CFNAI), VIX term structure, 5y5y forward, M2 YoY, SOFR, broad dollar, Brent-WTI, Sahm gap & recession probit.
  • cot_positioning(market, weeks?) — CFTC Commitments of Traders: speculator vs commercial net positioning, % of OI, week-over-week change, crowding z-score.
  • commodity_ratios() — macro bellwethers copper/gold (Dr. Copper, risk appetite) and gold/silver, with z-scores (yfinance).
  • world_macro(country?, codes?) — country-level macro (World Bank): GDP, inflation, unemployment…
  • treasury_data() — official US Treasury figures: total public debt, average interest rates.

Multi-symbol / portfolio (batch, stateless)

  • compare(symbols[], as_of?) — several names side by side (price, multiples, margins, sector).
  • correlation_matrix(symbols[], period?, as_of?) — pairwise return correlation (real diversification).
  • cointegration_test(symbol_a, symbol_b, lookback_days?) — Engle-Granger pairs/StatArb: hedge ratio, residual ADF stat vs critical values, spread z-score, mean-reversion half-life.
  • find_cointegrated_pairs(symbols[], lookback_days?, min_correlation?)pairs discovery: screen a basket (correlation pre-filter → ADF test), cointegrated pairs ranked strongest-first.
  • classify(symbols[], as_of?) — sector/industry/market-cap per symbol (to aggregate exposure).
  • news_digest(symbols[], limit_per_symbol?) — headlines across a watchlist, newest first.
  • calendar(symbols[], as_of?) — upcoming earnings & ex-dividend dates across symbols, sorted.

Crypto — price, technicals & discovery (symbols use the CCXT BASE/QUOTE format, e.g. BTC/USDT or BTC)

  • crypto_quote(symbol) — live spot quote: last/bid/ask + 24h move (the crypto company_snapshot).
  • crypto_price_history(symbol, timeframe?, limit?, as_of?) — OHLCV candles (CCXT, ~100 exchanges).
  • crypto_technicals(symbol, as_of?) — SMA/EMA/RSI/MACD/ATR for a pair (same math as technicals).
  • crypto_search(query, limit?) — name / partial symbol → assets (the entry point when you lack the ticker).
  • crypto_movers(category?, limit?) — top gainers / losers / most-active pairs (no symbol needed, no 429).
  • crypto_order_book(symbol, limit?) — best bid/ask, spread and depth — a pre-trade liquidity/slippage read.
  • crypto_compare(symbols[]) — several assets side by side (price, market cap, rank, supply).
  • crypto_correlation_matrix(symbols[], timeframe?, limit?) — pairwise return correlation (diversification).
  • crypto_relative_strength(symbols[], benchmark?, timeframe?, limit?) — return vs a benchmark (default BTC).

Crypto — fundamentals, derivatives & sentiment

  • crypto_dossier(symbol, depth?)flagship: quote + profile + technicals + Fear & Greed + derivatives + on-chain, in parallel.
  • crypto_asset_profile(symbol) — supply (circ/total/max), market cap, rank, ATH (Coinpaprika).
  • crypto_onchain(asset?) — network health: BTC fees/hashrate (mempool.space), ETH gas/addresses (Blockscout).
  • crypto_derivatives(symbol) — perp funding rate & open interest across Binance/Bybit/OKX (positioning context).
  • crypto_implied_vol(asset?) — the Deribit DVOL index ("crypto VIX") for BTC/ETH + history.
  • coinbase_premium(symbol?, days?) — US-spot (Coinbase) vs offshore (Binance) premium — institutional/US demand tell (CCXT).
  • btc_network() — BTC base-layer: hash rate, miner revenue, NVT (real, on-chain settlement) + live fee market & difficulty (Blockchain.com + mempool.space).
  • crypto_fear_greed(days?) — the Crypto Fear & Greed Index (0-100) + history (alternative.me).
  • crypto_buzz(symbol?, limit?) — Reddit crypto mention buzz (ApeWisdom all-crypto).

Crypto — DeFi & macro

  • crypto_macro() — total market cap, BTC/ETH dominance, DeFi share (CoinGecko).
  • crypto_sectors() — per-category (L1/DeFi/AI/memecoin…) performance (CoinGecko).
  • defi_overview(slug?) — DeFi TVL by chain, or one protocol's breakdown (DefiLlama).
  • stablecoin_supply() — stablecoin circulation & peg status (DefiLlama) — liquidity/systemic-risk read.
  • stablecoin_peg(symbols?, venue?) — USDT/USDC/DAI deviation from $1 in basis points + depeg flag (Kraken/CCXT) — the price/peg axis.
  • defi_fees(protocol?) — protocol fees & revenue (cash-flow fundamentals): total + top-N, or one protocol (DefiLlama).
  • defi_yields(chain?, project?, min_tvl?) — yield/APY pools, filterable (DefiLlama).

Web

  • extract(url) — fetch a page → clean, token-efficient markdown (honestly reports paywalls/blocks).

Architecture

Hexagonal (ports & adapters), mirroring agentic-trading-mcp: the agent talks only to the MCP tools; each data source is a swappable adapter behind a port, so a free source can be replaced or complemented without touching the domain. Design principles (stateless, data-not-verdict, point-in-time) in [DECISIONS.md](DECISIONS.md).

domain/      models + ports (the contracts)
adapters/    equities: yfinance, SEC EDGAR, FRED, World Bank, US Treasury, GDELT, ApeWisdom, Wikimedia, web, stooq
             crypto:   CCXT, Coinpaprika, alternative.me, mempool.space/Blockscout, Binance/Bybit/OKX, Deribit,
                       DefiLlama, CoinGecko
research/    meta-tools that fan several ports out in parallel (dossier, compare, correlation, sectors…)
analytics.py source-agnostic indicator math (SMA/EMA/RSI/MACD/ATR, correlation) — reused for crypto
server/      MCP server (FastMCP) + dependency composition

Data sources (all free)

| Source | Provides | Key/login | |---|---|---| | yfinance | quotes, fundamentals, dividends, prices, options, news, analysts, ownership | none | | SEC EDGAR | filings, XBRL financials, full-text search | User-Agent only | | FRED | US macro (rates, CPI, unemployment, VIX) | none (keyless CSV) | | World Bank | global country-level macro | none | | US Treasury | public debt, average interest rates | none | | GDELT | global news/event search | none | | ApeWisdom | Reddit mention buzz (stocks + crypto) | none | | Wikimedia | Wikipedia pageviews (attention) | none | | stooq | daily prices — transparent fallback for yfinance | none | | CCXT | crypto spot quotes, OHLCV, movers, order book (~100 exchanges) | none (public market data) | | Coinpaprika | crypto supply, market cap, rank, ATH, search | none | | alternative.me | Crypto Fear & Greed Index | none | | mempool.space / Blockscout | on-chain network health (BTC fees/hashrate, ETH gas/addresses) | none | | Binance / Bybit / OKX | perp funding rate & open interest (derivatives context) | none (public) | | Deribit | DVOL implied-volatility index ("crypto VIX") | none | | DefiLlama | DeFi TVL, stablecoin supply/peg, yield pools | none | | CoinGecko | crypto macro (dominance, total mcap) & sector performance | none (rate-limited) |

Paid free-tiers (Finnhub/FMP) are pluggable behind the same ports if ever wanted.

Development

pip install -e ".[dev]"
pytest -q          # 267 offline tests (fixtures faithful to the real source payloads)
ruff check .       # lint

The suite includes a smoke test of the real MCP stdio transport (it spawns python -m scout.server.app and drives it as an MCP client) — a class of bug that only reproduces over the actual transport, never through the service layer, is caught there.

License

MIT.

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.