Skip to main content
Glama
benethos-hub

Yahoo Finance MCP Server

by benethos-hub

Unofficial Yahoo Finance MCP Server

CI PyPI Container Python Coverage License

An MCP server that exposes Yahoo Finance data to MCP clients (such as Claude Desktop). It runs over stdio (default, for local clients) or an HTTP transport (for standalone / containerized hosting). Market data is sourced through the yfinance library, which uses Yahoo's unofficial endpoints.

Disclaimer

  • This project is not affiliated with, endorsed by, or sponsored by Yahoo. "Yahoo" and "Yahoo Finance" are trademarks of their respective owners.

  • It relies on unofficial Yahoo Finance endpoints via yfinance. Those endpoints can change or break at any time, and Yahoo may rate limit or block requests. Review Yahoo's Terms of Service before use.

  • Data may be delayed, incomplete, or inaccurate. Nothing here is financial advice. Do not rely on it for trading or investment decisions.

  • Provided "as is", without warranty. Intended for personal and educational use. You use it at your own risk. See LICENSE.

  • For commercial use, review Yahoo's Terms of Service and consider a properly licensed market-data provider instead of the unofficial endpoints.

Tools

Every tool only reads, and each one says so to the client with the MCP annotations readOnlyHint and openWorldHint. A client that honours them may run the tools without asking for confirmation each time.

Tool

Description

search

Find instruments by name, ticker, or ISIN, returning Yahoo symbols.

get_quote

Current price and key intraday figures for a symbol.

get_quotes

Compact current quotes for several symbols at once (per-symbol not-found list).

get_history

Historical OHLCV data (period/interval or explicit date range).

get_company_info

Company profile and key statistics (sector, market cap, P/E, …).

get_financials

Income statement, balance sheet, or cash flow (annual/quarterly/ttm).

get_dividends

Dividend and stock-split history.

get_news

Recent news headlines (title, summary, publisher, URL), up to the 10 Yahoo serves.

get_recommendations

Analyst recommendation trend and price targets.

get_options

Option expiration dates and the calls/puts chain for a date, centred on the money.

get_earnings

Upcoming and historical earnings (EPS estimate/actual, surprise).

get_estimates

Forward analyst estimates (earnings, revenue, EPS trend/revisions, growth).

get_upgrades_downgrades

Recent analyst rating changes (upgrades/downgrades).

get_holders

Ownership breakdown (insider/institutional %, top institutional and mutual-fund holders).

get_insider_activity

Insider transactions, 6-month purchases/sales summary, and current roster.

get_sec_filings

Recent SEC filings (type, date, title, EDGAR/exhibit links).

get_calendar

Upcoming earnings and dividend / ex-dividend dates with estimate ranges.

get_shares

Shares-outstanding history (date → shares), the last 18 months unless a start date is given.

get_fund_data

Fund/ETF profile: overview, asset-class & sector weightings, top holdings.

get_sector

Browse a market sector by key: overview, top companies/ETFs/funds, industries.

get_industry

Browse an industry by key: overview, parent sector, top/top-performing/top-growth companies.

get_market

Trading status and headline index summary for a market (US, EUROPE, ASIA, …).

Most get_* tools take a Yahoo Finance symbol — either a ticker (AAPL, SAP.DE) or a plain ISIN. Use search to turn a company name into one. Three tools are exceptions: get_sector and get_industry take a sector or industry key (e.g. technology, semiconductors), and get_market takes a market key (e.g. US).

basic-materials (14) agricultural-inputs, aluminum, building-materials, chemicals, coking-coal, copper, gold, lumber-wood-production, other-industrial-metals-mining, other-precious-metals-mining, paper-paper-products, silver, specialty-chemicals, steel

communication-services (7) advertising-agencies, broadcasting, electronic-gaming-multimedia, entertainment, internet-content-information, publishing, telecom-services

consumer-cyclical (23) apparel-manufacturing, apparel-retail, auto-manufacturers, auto-parts, auto-truck-dealerships, department-stores, footwear-accessories, furnishings-fixtures-appliances, gambling, home-improvement-retail, internet-retail, leisure, lodging, luxury-goods, packaging-containers, personal-services, recreational-vehicles, residential-construction, resorts-casinos, restaurants, specialty-retail, textile-manufacturing, travel-services

consumer-defensive (12) beverages—brewers, beverages—non-alcoholic, beverages—wineries-distilleries, confectioners, discount-stores, education-training-services, farm-products, food-distribution, grocery-stores, household-personal-products, packaged-foods, tobacco

energy (8) oil-gas-drilling, oil-gas-e&p, oil-gas-equipment-services, oil-gas-integrated, oil-gas-midstream, oil-gas-refining-marketing, thermal-coal, uranium

financial-services (15) asset-management, banks—diversified, banks—regional, capital-markets, credit-services, financial-conglomerates, financial-data-stock-exchanges, insurance-brokers, insurance—diversified, insurance—life, insurance—property-casualty, insurance—reinsurance, insurance—specialty, mortgage-finance, shell-companies

healthcare (11) biotechnology, diagnostics-research, drug-manufacturers—general, drug-manufacturers—specialty-generic, health-information-services, healthcare-plans, medical-care-facilities, medical-devices, medical-distribution, medical-instruments-supplies, pharmaceutical-retailers

industrials (25) aerospace-defense, airlines, airports-air-services, building-products-equipment, business-equipment-supplies, conglomerates, consulting-services, electrical-equipment-parts, engineering-construction, farm-heavy-construction-machinery, industrial-distribution, infrastructure-operations, integrated-freight-logistics, marine-shipping, metal-fabrication, pollution-treatment-controls, railroads, rental-leasing-services, security-protection-services, specialty-business-services, specialty-industrial-machinery, staffing-employment-services, tools-accessories, trucking, waste-management

real-estate (12) real-estate-services, real-estate—development, real-estate—diversified, reit—diversified, reit—healthcare-facilities, reit—hotel-motel, reit—industrial, reit—mortgage, reit—office, reit—residential, reit—retail, reit—specialty

technology (12) communication-equipment, computer-hardware, consumer-electronics, electronic-components, electronics-computer-distribution, information-technology-services, scientific-technical-instruments, semiconductor-equipment-materials, semiconductors, software—application, software—infrastructure, solar

utilities (6) utilities—diversified, utilities—independent-power-producers, utilities—regulated-electric, utilities—regulated-gas, utilities—regulated-water, utilities—renewable

Related MCP server: YFinance MCP Server

Compatible clients

MCP is an open protocol, so this server is not tied to one application. Every MCP client can use it. What differs is only which transport the client speaks, and that decides how you start the server.

Locally, over stdio. The client launches the server as a subprocess and talks to it over stdin and stdout. This is the default transport and needs no network. Claude Desktop, Claude Code, Cursor, VS Code (Copilot agent mode), Zed, Windsurf, the JetBrains AI assistants, Cline, Roo Code, Continue and Goose all work this way. The configuration file differs per client, but the command is always the one shown under Quick start:

{ "command": "uvx", "args": ["benethos-yahoo-finance-mcp"] }

Over the network, streamable-HTTP. The server runs once and clients connect to http://<host>:8000/mcp. Start it with --transport streamable-http, or use the Docker image, which serves this transport by default. Browser-based and multi-user front ends need it — Open WebUI supports MCP natively over streamable-HTTP and over no other transport, because a shared web front end cannot hold one stdio process per user. LibreChat and Windsurf accept it alongside stdio.

Over the network, SSE. The older HTTP transport, still expected by some clients. Start it with --transport sse and point the client at http://<host>:8000/sse. The MCP Client Tool node in n8n connects this way.

Both HTTP transports are open by default, guarded by a Host allow-list and an optional bearer token. Read the notes under Running as a standalone server before exposing either one.

Not listed? Client support moves quickly. Check which transport yours speaks, then use the matching command above — the transports are stable even when the list of names is not.

Requirements

  • uv (recommended) — manages Python, the virtual environment, and dependencies in one tool.

  • Or, without uv: Python 3.11+ with pip / venv.

  • git is only needed for the optional install-from-source method.

Installation

Quick start: uv + Claude Desktop

The simplest way to run the server — no clone, no manual virtual environment, no git. uvx fetches and runs it on demand from PyPI (published as benethos-yahoo-finance-mcp).

  1. Install uv, if you have not already — the uv installation page covers every platform. It brings uvx, and that is the only thing needed here.

  2. Add the server to claude_desktop_config.json (Claude Desktop → Settings → Developer → Edit Config):

    {
      "mcpServers": {
        "benethos-yahoo-finance-mcp": {
          "command": "uvx",
          "args": ["benethos-yahoo-finance-mcp"]
        }
      }
    }

    Pin a version for stability with benethos-yahoo-finance-mcp==0.7.0. To enable the optional result cache, add an env block, e.g. "env": { "YF_MCP_CACHE": "1" } (see Caching).

  3. Restart Claude Desktop (quit from the tray, not just close the window). The tools then appear in the client.

Installing from source instead? You can run the unreleased main branch with uvx --from "git+https://github.com/benethos-hub/yahoo-finance-mcp.git" benethos-yahoo-finance-mcp. That path needs git on the PATH of the process the client spawns — some GUI clients don't pass a full PATH, so prefer the PyPI install above.

uvx must be on the PATH the client uses. After installing uv, fully restart the app — or use the absolute path to uvx as command. The first launch downloads the package and its dependencies, so it takes a moment. Later launches use the cache.

Other ways to install

From PyPI with pip (no uv, no clone). Install the published package into a virtual environment and run it as a module. The only platform difference is the venv interpreter path: Windows uses .venv\Scripts\python.exe, Linux/macOS use .venv/bin/python.

# Windows (PowerShell)
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install benethos-yahoo-finance-mcp
# Linux / macOS (bash)
python3 -m venv .venv
.venv/bin/python -m pip install benethos-yahoo-finance-mcp

Point Claude Desktop at the absolute path of the venv interpreter and run the module (no generated console script involved):

{
  "mcpServers": {
    "benethos-yahoo-finance-mcp": {
      "command": "/abs/path/to/.venv/bin/python",
      "args": ["-m", "benethos_yahoo_finance_mcp"]
    }
  }
}

(On Windows use C:\\abs\\path\\to\\.venv\\Scripts\\python.exe as command.)

From source with uv (for development or local changes):

git clone https://github.com/benethos-hub/yahoo-finance-mcp.git
cd yahoo-finance-mcp
uv sync --extra dev          # creates .venv + installs deps from uv.lock
uv run benethos-yahoo-finance-mcp     # run over stdio

Point Claude Desktop at the checkout:

{
  "mcpServers": {
    "benethos-yahoo-finance-mcp": {
      "command": "uv",
      "args": ["run", "--project", "/abs/path/to/yahoo-finance-mcp", "benethos-yahoo-finance-mcp"]
    }
  }
}

From source with venv + pip (no uv). The only platform difference is the venv interpreter path: Windows uses .venv\Scripts\python.exe, Linux/macOS use .venv/bin/python.

# Windows (PowerShell)
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
# Linux / macOS (bash)
python3 -m venv .venv
.venv/bin/python -m pip install -e .

Claude Desktop config uses the absolute path to the venv interpreter:

{
  "mcpServers": {
    "benethos-yahoo-finance-mcp": {
      "command": "/abs/path/to/.venv/bin/python",
      "args": ["-m", "benethos_yahoo_finance_mcp"]
    }
  }
}

(On Windows use C:\\abs\\path\\to\\.venv\\Scripts\\python.exe as command.)

Running as a standalone server

For use outside Claude Desktop — a network-reachable HTTP service — run an HTTP transport (streamable-http or sse). Docker is the simplest way.

Every option has both a CLI flag and an environment variable (handy for containers), with one deliberate exception noted below. Precedence is CLI > environment > default (--help lists the flags):

Flag

Env var

Default

Description

--version

—

—

Print the version and exit. Same value the server reports in the MCP handshake.

--transport

YF_MCP_TRANSPORT

stdio

stdio, streamable-http, or sse.

--host

YF_MCP_HOST

127.0.0.1

Bind host for HTTP transports (0.0.0.0 for remote).

--port

YF_MCP_PORT

8000

Port for HTTP transports (1 to 65535).

--path

YF_MCP_PATH

/mcp (/sse for sse)

URL path for HTTP transports.

(none)

YF_MCP_BEARER_TOKEN

unset

Require this bearer token on every HTTP request. Environment only, deliberately: an argument is visible in the process list.

--allowed-hosts

YF_MCP_ALLOWED_HOSTS

see below, or derived from origins

Comma-separated Host header allow-list for the DNS-rebinding guard.

--allowed-origins

YF_MCP_ALLOWED_ORIGINS

derived from hosts

Comma-separated Origin header allow-list.

--log-level

YF_MCP_LOG_LEVEL

INFO

DEBUG/INFO/WARNING/ERROR/CRITICAL.

--cache / --no-cache

YF_MCP_CACHE

off

Enable/disable the persistent result cache.

--cache-dir

YF_MCP_CACHE_DIR

OS cache dir

Directory for the cache file.

--cache-max-entries <N>

YF_MCP_CACHE_MAX_ENTRIES

10000

Most entries the cache keeps, the oldest go first.

--cache-ttl <NAME>=<SECONDS>

YF_MCP_CACHE_TTL_<NAME>

per-tool defaults

Override one tool's TTL.

Logging always goes to stderr, so under stdio stdout stays reserved for the JSON-RPC protocol. At INFO every tool call leaves one line with its symbol, the size of the answer, the time it took and whether the result cache answered, for example get_history SAP.DE 250 rows, truncated, 412 ms. A failed call is a WARNING naming the error's class, and so is a Yahoo rate limit. Over HTTP a refused request (status 400 and up, 401 and 421 included) is logged with the address that tried. DEBUG adds every answered request. The log never contains the bearer token, a search query, a URL's query string, the data Yahoo returned or the text of an error message.

Every line names its source short: server, tools, yahoo, cache, uvicorn for uvicorn's server log and http for requests, and the time as ISO 8601 to the millisecond with its offset, for example 2026-09-30T13:19:02.840+02:00 INFO tools: get_quote AAPL 312 ms. The time is the machine's local time. A container's is UTC (+00:00) unless you set TZ, e.g. TZ=Europe/Berlin. At a terminal the lines come in colour, set NO_COLOR to turn that off. Anywhere else, in a container log say, each line is plain text.

Bearer token (optional). Set YF_MCP_BEARER_TOKEN and every HTTP request must carry Authorization: Bearer <token>. Anything else gets HTTP 401. It is off by default, because the ordinary case is a server on the loopback address of the machine that uses it, where a token guards against nothing. It is a single shared secret compared in constant time, not an OAuth flow — the question is only whether the caller is expected. stdio ignores it: the client owns that process and nothing else can reach it.

A token does not make a port safe to publish. The data here is public and read-only, so the realistic damage is somebody spending your Yahoo rate limit, not reading something private. Beyond a trusted network, put a reverse proxy with real authentication in front.

Host header / DNS-rebinding guard. The MCP HTTP transport validates the Host header. A localhost bind keeps a protective allow-list (localhost/127.0.0.1). An exposed bind (0.0.0.0) accepts any Host by default, so containers and other hosts can reach it out of the box. To lock it down again, set --allowed-hosts (e.g. benethos-yahoo-finance-mcp:8000) — clients whose Host is not on the list then get HTTP 421. --allowed-origins works on its own as well, and either list is derived from the other when only one is given. compose.yaml sets the list for you: localhost:*,127.0.0.1:*,[::1]:*,benethos-yahoo-finance-mcp:*. Without it a web page whose domain an attacker points at 127.0.0.1 could call every tool from a browser on the host. Add the name a proxy in front uses.

Docker

The published image is the shortest path to a running server — no Python, no clone, no build. Every release is pushed to the GitHub Container Registry for linux/amd64 and linux/arm64:

docker run --rm -p 8000:8000 ghcr.io/benethos-hub/yahoo-finance-mcp:latest
# Server is now reachable at http://localhost:8000/mcp

Pin a version for anything you depend on — :0.7.0 for an exact release, :0.7 to follow its patch releases. :latest moves with every release, and :edge is built from main on demand and is not a release at all.

The image hosts the server over the streamable-HTTP transport. The stdio transport is for local subprocess use and is not what you containerize. Dependencies are installed reproducibly from uv.lock via uv, and the base images are pinned by digest, so a rebuild of the same commit gets the same bytes.

The image is configured entirely through environment variables (see the options table above) — it carries no default command arguments, so overriding a single setting with -e does not disturb the others.

# Build it yourself instead of pulling (e.g. to run an unreleased main)
docker build -t benethos-yahoo-finance-mcp .

# Run with the built-in defaults (streamable-HTTP on 0.0.0.0:8000)
docker run --rm -p 8000:8000 benethos-yahoo-finance-mcp
# Server is now reachable at http://localhost:8000/mcp

# Override settings via -e, opt into the cache and persist it in a named volume
docker run --rm -p 9000:9000 \
    -e YF_MCP_PORT=9000 \
    -e YF_MCP_LOG_LEVEL=DEBUG \
    -e YF_MCP_CACHE=1 \
    -v benethos-yahoo-finance-mcp-cache:/cache \
    benethos-yahoo-finance-mcp

The image runs as a non-root user and includes a healthcheck on the configured HTTP port. The healthcheck reads that port from YF_MCP_PORT, so change it with -e YF_MCP_PORT=9000, not with an appended --port 9000, or the container stays unhealthy. The cache is off by default. Enable it with -e YF_MCP_CACHE=1, in which case it is written to /cache (declared as a volume) — mount a named volume there to keep it across container restarts. To require a bearer token on every request, put YF_MCP_BEARER_TOKEN=... in a .env (see .env.example) and pass --env-file .env. -e YF_MCP_BEARER_TOKEN=... works as well, but leaves the secret in your shell history. Beyond a trusted network, front it with a reverse proxy that authenticates. Docker keeps the container's log without a cap unless told otherwise, so add --log-opt max-size=10m --log-opt max-file=5 to a docker run that is meant to stay up, or set the same in the daemon's log-opts once for every container.

The server needs a home directory it can resolve, because yfinance keeps a small cache of its own there and looks the location up as soon as it is imported. The image's user has one, and Docker and Kubernetes give any other UID HOME=/, so nothing needs doing in the usual setups. If you run as a UID with no passwd entry and remove HOME, which a hardened pod spec or a systemd unit can do, the server stops at startup with could not determine the home directory. Set HOME or an absolute XDG_CACHE_HOME and it starts.

Docker Compose

A compose.yaml is provided (settings under environment:, secrets in an optional .env, cache in a named volume). As shipped it builds from this checkout, which is what you want while developing and the only way to run an unreleased main. To operate the released server instead, swap two commented lines at the top of the service so it pulls ghcr.io/benethos-hub/yahoo-finance-mcp — the file is then all you need, with no clone and no Dockerfile. The choice and the pull_policy values are documented in the file itself.

docker compose up -d      # build (if needed) and start in the background
docker compose logs -f    # follow logs
docker compose down       # stop and remove

This requires Docker Compose v2 (the compose CLI plugin). The server is then reachable at http://localhost:8000/mcp.

The port is published on 127.0.0.1 only, so the service is reachable from the host but not from the rest of the network. That is deliberate, since the server is unauthenticated unless YF_MCP_BEARER_TOKEN is set. To expose it, remove the 127.0.0.1: prefix from the ports: entry in compose.yaml, set the token at the very least, and put a reverse proxy with authentication in front of it.

The compose file caps the log Docker keeps of the container at 5 files of 10 MB, the oldest dropped first (logging: in the service). Before, the log grew for as long as the container ran. To keep more, raise max-size or max-file. To keep the log elsewhere, replace the driver, for example with journald, and read it with journalctl CONTAINER_NAME=benethos-yahoo-finance-mcp.

Secrets go in a .env next to compose.yaml, which Compose reads through env_file and git and the Docker build context both ignore. Copy .env.example to .env and set YF_MCP_BEARER_TOKEN there, not in compose.yaml, which is tracked. The file is optional, and without it the service runs on the values in compose.yaml. A name set under environment: in compose.yaml wins over the same name in .env. This needs Docker Compose 2.24 or newer. Only Compose reads the file. The server itself never loads it, so for a plain docker run pass --env-file .env, and for a local or Claude Desktop setup keep using the environment.

Manual (uv or venv)

With uv (any OS):

# Streamable HTTP on http://127.0.0.1:8000/mcp
uv run benethos-yahoo-finance-mcp --transport streamable-http

# Bind all interfaces on a custom port / path
uv run benethos-yahoo-finance-mcp \
    --transport streamable-http --host 0.0.0.0 --port 9000 --path /yf

With the venv interpreter directly (Windows: .venv\Scripts\python.exe):

.venv/bin/python -m benethos_yahoo_finance_mcp --transport streamable-http

Example prompts

Once the server is connected, ask the client in plain language and it will pick the tools. Replace the bracketed placeholders with concrete values.

Price & quote

  • "What's the current price of [Ticker], and how far is it from its 52-week high?"

  • "Is [Ticker] trading above or below its 50- and 200-day moving averages?"

  • "Get the daily closes of [Ticker] for the last 6 months and compute RSI and MACD."

  • "What was the deepest drawdown of [Ticker] in the last 12 months?"

  • "Compare [Ticker A] and [Ticker B] over the last 3 months and show which held up better."

  • "Get current quotes for [Ticker A], [Ticker B] and [Ticker C] and compare them in a table."

Company & valuation

  • "Give me P/E, beta, market cap and dividend yield for [Ticker]."

  • "What does [Company name] actually do, and which sector and industry is it in?"

  • "Show the last three annual income statements for [Ticker] and how revenue developed."

  • "How has [Ticker]'s share count changed over the past years, and does that mean buybacks or dilution?"

Analysts & news

  • "What's the analyst consensus for [Ticker], and how far is the average price target from the current price?"

  • "Any upgrades or downgrades for [Ticker] in the last few weeks?"

  • "What are the forward revenue and EPS estimates for [Ticker], and how were they revised recently?"

  • "Summarize the recent news on [Ticker]."

Earnings & calendar

  • "When does [Ticker] report next, and what EPS is expected?"

  • "How did [Ticker] do against estimates in the last few quarters?"

  • "When are [Ticker]'s next earnings and ex-dividend dates?"

Dividends

  • "Show [Ticker]'s dividends over the last ten years and the current yield."

  • "Has [Ticker] cut its dividend in the last 20 years, and did it split the stock?"

Ownership & insiders

  • "Who are the largest institutional holders of [Ticker]?"

  • "What share of [Ticker] is held by insiders versus institutions?"

  • "Has there been notable insider buying or selling in [Ticker] recently?"

Funds & ETFs

  • "What are the top holdings and sector weightings of the ETF [Ticker]?"

  • "What's the asset-class split of [ETF Ticker], and which fund family runs it?"

Filings

  • "Show the most recent SEC filings for [US Ticker] with links."

Options

  • "Which option expiration dates are available for [US Ticker]?"

  • "Show the calls and puts for [US Ticker] expiring [Date]."

Sectors & markets

  • "What are the top companies and industries in the technology sector?"

  • "Show the top-performing companies in the semiconductors industry."

  • "Is the US market open right now, and when does it open next?"

  • "How did the major indices in Europe and Asia close?"

Finding a symbol

  • "Which Yahoo ticker belongs to [Company name] on [Exchange]?"

  • "Resolve the ISIN [ISIN] to a Yahoo ticker."

A daily round-up

  • "For [Ticker A], [Ticker B] and [Ticker C]: pull quote, six months of history, company info and analyst recommendations, then give me a short picture of each."

The server computes nothing itself. It passes through what Yahoo returns, which already includes derived figures such as moving averages, P/E, beta and dividend yield. Anything Yahoo does not carry — RSI, MACD, drawdown, sentiment, total return — the model works out from the raw series.

Symbol resolution

All get_* tools expect a Yahoo Finance symbol. Both a ticker (AAPL, SAP.DE) and a plain ISIN (US0378331005) work. An ISIN is resolved by yfinance itself: anything shaped like one is looked up through Yahoo's search the moment the ticker object is created, and the ticker found stands in for it from then on. The server passes the symbol through unchanged apart from trimming and uppercasing, and echoes what it was given. A symbol has at most 32 characters and the shape Yahoo uses, letters, digits and . - ^ = &, as in ^GSPC, EURUSD=X or BRK-B. Anything else, and an ISIN-shaped string that Yahoo cannot resolve, answers as an unknown symbol.

To turn a company name into a symbol, call search first — the same Yahoo search endpoint handles free text, tickers, and ISINs. A ticker is preferable to an ISIN in any case, because the symbol reported back then stays consistent across tools.

Two caveats. That ISINs work is observed behaviour of an unofficial endpoint, not a guarantee: it did not work in earlier versions and it may stop again. And German WKNs resolve nowhere, not through the tools and not through search — Yahoo has no lookup for them, so ask for a ticker, an ISIN or the company name instead.

Caching

An opt-in persistent cache. When enabled, successful tool results are cached in a small SQLite file with a per-tool time-to-live (TTL) to reduce load on Yahoo's endpoints and survive restarts. Fast-moving data has a short TTL, stable data a long one.

Every call asks Yahoo anew, and the cache is what makes a repeat cheap, across restarts and as rate-limit protection. It is off by default because the ordinary case is an interactive session over stdio, where a repeat is rare and fresh data counts for more, and because a file on disk is the operator's choice.

Cache names (used for --cache-ttl <NAME>=<SECONDS> and YF_MCP_CACHE_TTL_<NAME>) and their default TTLs:

Name

Tool

Default TTL

quote

get_quote

30 s

quotes

get_quotes

30 s

history

get_history

10 min

news

get_news

10 min

options

get_options

10 min

search

search

1 h

company_info

get_company_info

6 h

dividends

get_dividends

6 h

recommendations

get_recommendations

6 h

earnings

get_earnings

6 h

estimates

get_estimates

6 h

upgrades_downgrades

get_upgrades_downgrades

6 h

insider_activity

get_insider_activity

6 h

sec_filings

get_sec_filings

6 h

calendar

get_calendar

6 h

financials

get_financials

24 h

holders

get_holders

24 h

shares

get_shares

24 h

fund_data

get_fund_data

24 h

sector

get_sector

24 h

industry

get_industry

24 h

market

get_market

60 s

  • Off by default. Enable with --cache or YF_MCP_CACHE=1.

  • Location: the OS user cache directory, or --cache-dir / YF_MCP_CACHE_DIR. The file grows with what it holds and shrinks again after expired entries are swept. A file made by an earlier version is rewritten once at start.

  • Size: at most 10 000 entries, the most recently written kept, set with --cache-max-entries / YF_MCP_CACHE_MAX_ENTRIES.

  • Override a TTL: --cache-ttl quote=15 (repeatable) or the YF_MCP_CACHE_TTL_<NAME> env var (e.g. YF_MCP_CACHE_TTL_QUOTE=15). Set a TTL to 0 to bypass caching for that tool.

Precedence is CLI > environment > default. Errors are never cached, and a failing cache never fails a call: a locked or damaged cache file is logged and the data is fetched as if caching were off.

When to enable it

Enable the cache (--cache / YF_MCP_CACHE=1) if you:

  • run the server as a long-running or containerized HTTP service that restarts periodically (the cache survives restarts → instant repeat results).

  • hit Yahoo rate limits or make many repeated identical requests over time.

  • mostly query slow-changing data (search, company info, financials), where staleness is irrelevant.

Leave it off (the default) if you:

  • run it locally over stdio for interactive sessions — a repeat of the same question within minutes is rare there, and fresh data counts for more.

  • need the freshest possible data.

  • use it only occasionally.

Development

Install the dev extras, then run the test, lint, and type-check steps (the same ones CI runs).

With uv (any OS):

uv sync --extra dev

uv run pytest -q                 # unit tests (offline)
uv run ruff check .              # lint
uv run ruff format .             # format
uv run mypy                      # type check
uv run pytest --cov=benethos_yahoo_finance_mcp   # coverage

With the venv interpreter directly (replace .venv/bin/python with .venv\Scripts\python.exe on Windows):

.venv/bin/python -m pip install -e ".[dev]"

.venv/bin/python -m pytest -q                 # unit tests (offline)
.venv/bin/python -m ruff check .              # lint
.venv/bin/python -m ruff format .             # format
.venv/bin/python -m mypy                      # type check
.venv/bin/python -m pytest --cov=benethos_yahoo_finance_mcp   # coverage

The unit tests mock yfinance and run fully offline. tests/smoke.py performs an ad-hoc check against live Yahoo Finance and is not part of the unit suite. CI also runs across Python 3.11–3.14 and enforces an 80% coverage floor. Two more jobs install without the lockfile: fresh-install with the newest versions pyproject.toml allows, lowest-versions with the oldest.

Trademarks

"Yahoo" and "Yahoo Finance" are trademarks of Yahoo Inc. This project is not affiliated with, endorsed by, or sponsored by Yahoo, and it is not an official Yahoo product.

The names are used here only to describe what the software does, namely read market data from Yahoo Finance through the yfinance library. That is the only accurate way to say it. All trademarks remain the property of their respective owners.

The project itself is published as benethos-yahoo-finance-mcp and is maintained independently under the MIT licence.

Available Tools

22 tools
get_calendarA
Read-only

Get upcoming corporate-calendar events for a Yahoo symbol.

Returns the next earnings date(s) with analyst estimate ranges and the next dividend / ex-dividend dates. Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), so the description's added value is the error behavior for non-equity symbols and the shape of the returned data. It does not mention rate limits or symbol-normalization quirks, but for a read-only lookup it is adequately transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and return contents, with the equity-only caveat placed last. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with an output schema and covering annotations, the description supplies everything an agent needs: what is returned, the equity scope, and the failure mode. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains the symbol format (ticker or ISIN) plus the advice to use 'search' for company names. The description adds only the equity-only constraint on the symbol, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get upcoming corporate-calendar events) and enumerates exactly what comes back: next earnings date(s) with estimate ranges plus dividend/ex-dividend dates. This clearly separates it from narrower siblings like get_earnings and get_dividends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit when-not: non-equity symbols (ETF, fund, crypto) return an error. It does not, however, route the agent to specific alternatives such as get_dividends or get_earnings when only one piece of the calendar is wanted, so alternative-selection guidance is partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_infoB
Read-only

Get a company profile and key statistics for a Yahoo symbol.

Returns name, sector/industry, location, employee count, and valuation metrics (market cap, P/E, beta, 52-week range, dividend yield) plus a business summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and there is no contradiction. The description adds only the content inventory of the result, which is thin behavioral context and partly redundant given an output schema exists; nothing about failures, rate limits, or data freshness is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and purpose, followed by a compact enumeration of return fields. Two sentences with no filler, though the field list is somewhat list-heavy rather than value-adding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return values, and the annotations cover the safety profile. It adequately conveys purpose and scope; the only real gap is missing usage routing among the many overlapping sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents the single 'symbol' parameter, including ISIN/ticker examples and the 'use search first' rule. The description adds no syntax or format detail beyond what the schema already provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb ('Get') and resource ('company profile and key statistics') and enumerates the returned fields, so the agent knows this is a profile/valuation lookup rather than a raw price quote. It does not, however, name or distinguish itself from siblings like get_quote, get_financials, or get_industry, which overlap on 'statistics'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not guidance appears in the description. The helpful hint 'For a company name, use search first' lives in the schema parameter description, not the tool description, and no alternative for quote/financial data is suggested despite many overlapping siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dividendsA
Read-only

Get the dividend and stock-split history for a Yahoo symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that both dividends and splits are returned, but says nothing about the time range covered, default period, or pagination, which matters for a history-style call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no filler, resource named before the qualifier. Front-loaded and exactly as long as it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation, and the single required parameter is fully documented with annotations covering the safety profile. The definition is nearly self-sufficient; only the absence of any time-range or routing guidance keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already documents the symbol format, the ISIN example, and the maxLength. The description's 'for a Yahoo symbol' adds consistency but no new syntax or constraints, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and a precisely scoped resource (dividend and stock-split history) qualified by the symbol type. This cleanly separates it from siblings like get_history (price history) and get_shares, so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and by the resource named, but the description offers no when-to-use/when-not guidance or alternatives (e.g. get_history for prices). The only routing hint in the whole definition lives in the schema ('For a company name, use search first'), not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_earningsA
Read-only

Get upcoming and historical earnings for a Yahoo symbol.

Returns the earnings calendar (upcoming and past dates with EPS estimate, reported EPS, and surprise %) plus the recent earnings history. Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of earnings rows to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, openWorldHint), so the description only needs added context — and it delivers: the exact return payload shape (calendar plus recent history) and a failure-mode disclosure (non-equity symbols error out). It does not cover pagination or error shapes beyond the equity case, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb+resource, then a compact sentence enumerating returned fields, then the equity-only caveat. Three tight sentences with no filler; only minor room to trim the field enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only lookup with a full output schema and annotation coverage, the description supplies purpose, payload contents, and the key failure mode. The only gap is sibling differentiation, which is not strictly required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the limit bound (1-50, default 12) and the symbol format guidance (ticker or ISIN, 'use search first'), so the schema carries the parameter burden. The description adds nothing about either parameter, which is the expected baseline 3 when coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Get upcoming and historical earnings for a Yahoo symbol', with the returned content spelled out (EPS estimate, reported EPS, surprise %). It is clear what the tool does, but it never distinguishes itself from overlapping siblings such as get_estimates or get_calendar, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — the agent can infer this is for earnings data on equities, and the description adds a real constraint ('Equity-only: an ETF, fund or crypto symbol answers with an error'). However there is no explicit when-to-use-vs-alternative routing against get_estimates/get_calendar/get_financials, which an agent would need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_estimatesA
Read-only

Get forward analyst estimates for a Yahoo symbol.

Returns earnings and revenue estimates, EPS trend and revisions, and growth estimates (small tables keyed by period). Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the equity-only failure mode and the shape of the payload (small tables keyed by period).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, followed by two short sentences of return details and the equity constraint. No filler; slightly loose line-wrapping but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with annotations and an output schema, the description covers purpose, payload contents, and the key error condition. Return-value formatting is left to the output schema, which is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'symbol' parameter is fully documented in the schema (ticker/ISIN formats, redirect to 'search' for company names). The description adds no parameter detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get forward analyst estimates for a Yahoo symbol') and enumerates the returned content (earnings/revenue estimates, EPS trend and revisions, growth estimates). It is clearly distinct from get_quote/get_financials, though it never explicitly contrasts itself with the closest sibling, get_earnings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage constraint: 'Equity-only: an ETF, fund or crypto symbol answers with an error that says so.' That is an explicit when-not condition. It stops short of naming an alternative tool (e.g. get_fund_data) for non-equity symbols.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_financialsB
Read-only

Get a financial statement for a Yahoo symbol.

Each row is a line item and each column a reporting period, most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
freqNoReporting frequency: 'annual', 'quarterly', or 'ttm' (trailing twelve months, income and cashflow only).annual
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.
statementNoWhich statement: 'income' (income statement), 'balance' (balance sheet), or 'cashflow' (cash flow).income

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds the result orientation (rows are line items, columns are periods, most recent first), but says nothing about pagination, statement availability limits, or error behavior for invalid symbols.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the purpose before the result-shape note, and no filler. Slightly terse at the cost of routing information, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering read-only/open-world behavior, the description only needs to frame purpose and result orientation, which it does. Missing guidance on choosing between this and the many sibling financial-data tools is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so freq, symbol, and statement are each fully documented in the schema, including the 'ttm is income and cashflow only' caveat. The description adds no parameter-level detail beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (a financial statement) scoped to a Yahoo symbol, which distinguishes it from siblings like get_earnings or get_estimates. It does not explicitly name those alternatives, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance in the description: no mention of when to prefer this over get_earnings, get_estimates, or get_fund_data, and no stated prerequisites. The only routing hint ('For a company name, use search first') lives in the symbol parameter schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fund_dataA
Read-only

Get fund/ETF profile data for a Yahoo symbol.

Returns the fund overview, asset-class and sector weightings, and the top holdings. Fund/ETF-only, raises for stocks and crypto, which have no fund data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of top holdings to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network scope are covered. The description adds genuinely new behavior: the tool raises an error for non-fund symbols. It stops short of noting rate limits, symbol-resolution behavior (ISIN), or whether missing data yields empty sections.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and then the returned fields, followed by the negative case. No filler and nothing repeated from structured fields verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary, and the description covers purpose, scope, and the error condition. The only gap is the absence of a redirect for non-fund symbols to a sibling tool, which an agent would have to infer from the sibling list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both `symbol` (ticker/ISIN) and `limit` (max holdings, default 25, max 100) are fully documented in the schema. The description's mention of 'top holdings' only loosely gestures at `limit` and adds no syntax or default info beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get fund/ETF profile data for a Yahoo symbol') and enumerates the returned content: overview, asset-class and sector weightings, top holdings. The 'Fund/ETF-only' scope plus the explicit failure for stocks/crypto cleanly separates it from siblings like get_company_info, get_holders, and get_quote without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tells the agent exactly which inputs are valid (funds/ETFs) and which are not (stocks, crypto, which raise), which is a real routing signal. It does not name the alternative tool to use for a stock symbol (e.g. get_company_info), so the when-not case is covered but the redirect is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_historyA
Read-only

Get historical OHLCV (open/high/low/close/volume) data for a symbol.

Query a look-back period or an explicit start/end range. Results are capped at the most recent 250 rows, with truncated set when cut.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd date 'YYYY-MM-DD', exclusive: for one day pass the day after. Used only together with 'start'.
startNoStart date 'YYYY-MM-DD'. Overrides 'period' when set.
periodNoLook-back window: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max, or any count of d, wk, mo or y such as 7mo. Ignored when 'start' is given.1mo
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.
intervalNoBar size. One of: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 4h, 1d, 5d, 1wk, 1mo, 3mo. Intraday intervals only cover recent dates.1d

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds a valuable behavioral detail: results are capped at 250 rows and a `truncated` flag is set when cut. It does not explain rate limits, data freshness, or intraday constraints, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a brief clause, front-loaded with the core purpose and then the query modes and truncation behavior. No wasted words, though the truncation clause could be slightly more prominent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters with full schema descriptions, annotations, and an output schema, the description covers the essential purpose and adds the non-obvious 250-row cap/truncation behavior. It is nearly complete for an agent to call correctly, though it could mention symbol lookup alternatives more explicitly (though the schema already does).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters (period precedence, start/end exclusivity, interval enums, symbol format). The description adds no parameter-level meaning beyond what the schema provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (historical OHLCV data for a symbol). It is clearly distinct from get_quote (current price) and get_financials, but it does not explicitly name a sibling to reinforce the distinction—it relies on the resource semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions querying by period or start/end, which implies usage, but it does not provide explicit when-to-use vs. when-to-choose-another-tool guidance or exclusions. The schema already documents period vs start precedence, so the description adds little routing value.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_holdersA
Read-only

Get the ownership breakdown for a Yahoo symbol.

Returns the high-level holder summary (insider/institutional percentages) plus the top institutional and mutual-fund holders. Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of institutional/mutual-fund holders to return per list.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description adds genuine behavioral context: the failure mode for non-equity symbols and the shape of the returned data. It does not mention pagination or limits on the summary section, which would be the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the core purpose first, the return contents second, the equity-only restriction last. No filler, no restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, yet it still gives a useful preview of the payload. Combined with the equity-only constraint, an agent has enough to decide and call correctly; only the alternative routing for non-equity symbols is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both 'symbol' and 'limit' are fully documented in the schema, including ticker/ISIN formats and the 1–100 range. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the ownership breakdown for a Yahoo symbol') and enumerates the payload ('insider/institutional percentages plus the top institutional and mutual-fund holders'). This clearly separates it from siblings like get_insider_activity, get_shares, and get_fund_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes applicability: 'Equity-only: an ETF, fund or crypto symbol answers with an error that says so.' That is a real when-not condition an agent can act on. It stops short of naming which sibling to call instead (e.g. get_fund_data for funds), so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_industryA
Read-only

Browse an industry by its Yahoo key (not a ticker symbol).

Returns the industry overview, its parent sector, top companies, and the top-performing and top-growth companies. Discover valid industry keys from the industries list returned by get_sector. This takes an industry key like semiconductors — not a ticker symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesA Yahoo industry key (lowercase, hyphenated), e.g. 'semiconductors' or 'software-infrastructure'. Discover valid keys from the 'industries' list returned by get_sector.
limitNoMaximum number of top companies to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true, so the read-only safety profile is covered. The description aligns with that by saying 'Browse' and describes what is returned, but it does not add much behavioral context beyond the annotations—no ordering, pagination, or edge-case behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and return contents. It is concise, though the final sentence repeats 'not a ticker symbol' from the opening, making the wording slightly redundant without harming clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the input schema covers all parameters, the description supplies the essential extra context: where keys come from, what the output covers, and what kind of input is expected. Nothing important is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'key' and 'limit' fully documented including types, defaults, and constraints. The description reinforces the key-discovery instruction and the non-ticker warning, but adds no meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: browse an industry by its Yahoo key. It enumerates concrete return contents (industry overview, parent sector, top companies, top performers/growth), which clearly distinguishes it from sibling tools like get_company_info or get_sector. The repeated 'not a ticker symbol' further pins down the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance on how to obtain valid keys: from the 'industries' list returned by get_sector, with 'semiconductors' as an example. It also warns not to pass a ticker symbol. However, it does not explicitly compare this tool to alternatives or state when to prefer it over a sibling such as get_sector, so it falls just short of a perfect usage guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_insider_activityA
Read-only

Get insider trading activity for a Yahoo symbol.

Returns individual insider transactions, a 6-month purchases/sales summary, and the current insider roster. Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of insider transactions/roster rows to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), and the description adds value beyond them: the three-part return shape and the equity-only failure mode. It does not mention pagination or rate limits, but the output schema handles return structure, so the remaining gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose, then return contents, then the constraint. Front-loaded and every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full parameter coverage, the description only needs to supply the routing constraint, which it does via the equity-only caveat. Only the sibling differentiation (vs. get_holders) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters (symbol formats, ISIN, limit bounds) are already fully documented in the schema. The description adds no syntax or format detail beyond it, which is the baseline-3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Get insider trading activity for a Yahoo symbol') plus an enumeration of the three outputs (individual transactions, 6-month summary, roster). Clear enough to distinguish from get_quote/get_holders by content, though it never names the institutional-holder sibling it is most likely to be confused with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real usage constraint: equity-only, with an explicit error for ETF/fund/crypto symbols, and the schema points company-name lookups to 'search' first. No explicit when-to-prefer-this-over-alternatives statement, so it stops just short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_marketA
Read-only

Get the trading status and headline index summary for a market.

Answers questions like whether the market is open, when it opens or closes next, and how the major indices are doing. Takes a market key such as US or EUROPE — not a ticker symbol. status (open/closed plus the next open and close times) is only available for US and is null for every other key, which is an upstream limitation rather than an error. The index summary, with price, previous close and change, works for all keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoA Yahoo market key (uppercase). One of: US, GB, ASIA, EUROPE, RATES, COMMODITIES, CURRENCIES, CRYPTOCURRENCIES. Only 'US' reports a trading status, the others return the index summary with 'status' set to null.US

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context: the 'status' field is null for non-US keys due to an upstream limitation, not an error. This prevents an agent from misinterpreting null results as failures. It also clarifies that the index summary works for all keys, which is useful behavioral information beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the core purpose, the second gives example questions and the key-vs-ticker distinction, and the third covers the US-only status limitation. Every sentence earns its place, and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with a rich schema and an output schema, the description is complete. It covers what the tool does, how to use it, the key limitation (US-only status), and what to expect for other keys. An agent has everything needed to invoke it correctly without further investigation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the 'key' parameter thoroughly, including the allowed values and the US-only status behavior. The description reinforces this by giving examples ('US', 'EUROPE') and restating the key distinction (market key vs ticker). This adds a small amount of clarity beyond the schema, but the schema does most of the work, so a 4 is appropriate rather than a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a clear resource ('trading status and headline index summary for a market'), and explicitly distinguishes itself from ticker-based tools by saying it takes a market key, not a ticker symbol. It also names the sibling 'get_quotes' implicitly by contrast, making it easy for an agent to select this tool for market-level status rather than individual securities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool: to answer whether a market is open, when it opens/closes next, and how major indices are doing. It also gives an exclusion: it is not for ticker symbols, and it notes that 'status' is only available for 'US'. This is clear guidance that prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_newsB
Read-only

Get recent news headlines for a Yahoo symbol (up to limit, 1-10).

Each article includes title, summary, publisher, publish time, and URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of headlines to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the headline-count bound (1-10) and the article field list, but the latter simply restates what the existing output schema already provides. No permission, rate-limit, or recency behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences that front-load the core action; nothing is bloated. The second sentence largely duplicates the output schema, which slightly reduces its value but costs little space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with an output schema and clear annotations, the description is nearly sufficient — the agent knows what it returns and the count bound. The only substantive gap is any guidance on choosing this over sibling news-adjacent tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (symbol and limit, including the 1-10 range and ISIN/company-name guidance) are fully documented in the schema. The description repeats the limit range but adds no format or syntax detail beyond it, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get recent news headlines for a Yahoo symbol'), which is clear and distinguishes it from sibling quote/financial tools by subject matter. It does not explicitly name a sibling or contrast scope against them, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as get_company_info or search; the 'use search first for a company name' hint lives in the symbol parameter schema, not the description. The agent must infer usage purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_optionsA
Read-only

Get the option chain for a Yahoo symbol.

Call without expiration to list available expiration dates. Call with an expiration (YYYY-MM-DD from that list) to get the calls and puts for that date, up to 60 strikes each centred on the current price, with truncated set when a wider chain was cut. Yahoo carries chains for US-listed instruments only, so a non-US symbol has none and that says nothing about the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.
expirationNoExpiration date 'YYYY-MM-DD' from the list returned when called without it. Omit to list available expiration dates.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint and openWorldHint; the description adds real behavioral context: chains are capped at 60 strikes centred on the current price, a 'truncated' flag signals a cut chain, and coverage is restricted to US-listed instruments. These are non-obvious traits the agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the primary action, then the two calling modes, then the coverage caveat. No filler and no repetition of schema mechanics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, but the description still supplies the key interpretive detail (60-strike cap, truncated flag). Combined with the parameter routing and the US-only caveat, an agent has everything needed to call and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description earns an increment by specifying that 'expiration' must be a value taken from the list returned by the no-argument call, tying the two parameters together as a workflow.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Get the option chain for a Yahoo symbol'), which clearly differentiates it from get_quote, get_history and the other sibling tools. The dual-mode behavior is stated up front so an agent knows exactly what resource it is retrieving.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing for both modes: call without 'expiration' to list dates, call with it to get the chain for a date drawn from that list. It also states a when-not condition ('a non-US symbol has none and that says nothing about the symbol'), preventing a false negative interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_quoteB
Read-only

Get the current price and key intraday figures for a Yahoo symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-data profile is covered. The description adds that the data is 'current' with intraday figures, implying a live snapshot rather than historical data, but says nothing about staleness, market-hours behavior, or error handling for invalid symbols.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb, resource and scope arrive immediately and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully documented one-parameter schema and an output schema present, the description need not explain return values. It is nearly complete, though it omits any routing cue versus the sibling get_quotes, which is the one thing an agent choosing between them might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single parameter's schema already documents accepted forms (ticker, ISIN) plus the 'search first' fallback. The description contributes no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (current price and key intraday figures) scoped to a Yahoo symbol, which is clearer than a bare name restatement. However, it does not distinguish itself from the near-identical sibling get_quotes, leaving the plural/singular split to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is given. The description never mentions the sibling get_quotes for batch retrieval, nor does it carry over the schema's hint to run 'search' first for company names — that guidance lives only in the parameter description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_quotesA
Read-only

Get compact current quotes for several Yahoo symbols in one call.

Use this to compare or fetch prices for multiple tickers at once. Each symbol is looked up individually and returns currency, last price, previous close, open, day high/low, and market cap. Symbols that return no data are listed under not_found rather than failing the whole call.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesYahoo tickers or ISINs, e.g. ['AAPL', 'MSFT', 'SAP.DE']. Not company names. Up to 50, extras are dropped.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so safety is covered by structured data. The description adds real behavioral value beyond that: per-symbol independent lookup and the partial-failure semantics that symbols with no data land in 'not_found' instead of aborting the whole call. It does not mention rate limits or the 50-symbol truncation behavior (that lives in the schema), but the error-handling disclosure is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with the core action, then usage, then per-symbol behavior and failure handling. Every sentence carries distinct information with no filler, and the most important scoping detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need only summary treatment, yet the description still names the key fields and explains the not_found edge case. Combined with the fully covered parameter schema and read-only/open-world annotations, nothing an agent needs to invoke and interpret this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'symbols' parameter already documents tickers/ISINs, the exclusion of company names, and the 50-item cap. The description adds no parameter-level detail beyond the schema, so baseline 3 is appropriate; the sentences about return fields are output, not parameter, semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get compact current quotes') plus an explicit scope ('for several Yahoo symbols in one call'), which cleanly distinguishes it from the singular sibling get_quote. An agent can tell what it returns and that it is the batch variant without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Use this to compare or fetch prices for multiple tickers at once' gives clear usage context that implicitly separates it from get_quote for a single ticker. It stops short of naming the alternative tool or stating an explicit when-not condition, so it falls just below the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recommendationsA
Read-only

Get analyst recommendation trends and price targets for a Yahoo symbol.

Returns the buy/hold/sell trend over recent months plus current/high/low/ mean/median analyst price targets when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and world-access behavior are covered. The description adds a small amount of context by noting the trend is over recent months and price targets are returned 'when available,' but does not disclose auth, rate limits, or freshness details. With annotations covering the core behavior, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads what the tool does. The second sentence largely restates return values that are also captured by the output schema, but it remains brief and is not overly repetitive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple, read-only getter with one well-documented parameter and an output schema, so extensive description is not required. It covers purpose and output content sufficiently, though adding a pointer to sibling alternatives would make the context more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single symbol parameter, and the schema already documents valid formats including tickers, ISINs, and the need to use 'search' for company names. The description adds no parameter-level detail beyond saying it is for a Yahoo symbol, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: getting analyst recommendation trends and price targets for a Yahoo symbol. It identifies the exact data domain (buy/hold/sell trends and price targets), which distinguishes it from siblings like get_estimates and get_upgrades_downgrades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns but gives no guidance on when to use it versus alternatives such as get_upgrades_downgrades or get_estimates. It does not mention prerequisites or conditions that select this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sec_filingsA
Read-only

Get recent SEC filings for a Yahoo symbol.

Each entry has the filing date, type (e.g. 10-K, 10-Q, 8-K), title, the Yahoo EDGAR URL, and exhibit links. Only issuers registered with the U.S. SEC file there, so a non-US symbol has none, and neither do ETFs, funds or crypto. An empty result says nothing about the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of filings to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds genuinely useful behavior beyond that: the exact shape of each entry (date, type, title, EDGAR URL, exhibit links) and the important negative-result semantics ('An empty result says nothing about the symbol'). It does not state pagination or how many filings are typically returned, but the coverage of empty-result meaning is a real value-add.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the return shape, then the caveats — a sensible ordering with no filler sentences. Slight length is justified by the enumeration of fields and issuer caveats, though the field list overlaps with what the output schema already conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with a full output schema and complete parameter descriptions, this covers the remaining unknowns well: what an empty result means and which instrument classes will never return filings. Return-value detail is technically redundant given the output schema, and pagination behavior is unmentioned, keeping it just short of full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'symbol' (accepts ticker or ISIN, with the 'use search first' hint) and 'limit' (max results, default 25) are fully documented in the schema. The description adds only the notion of 'recent' filings, which loosely frames the limit parameter but supplies no new syntax or format detail — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Get recent SEC filings for a Yahoo symbol') and enumerates the fields each entry contains, so the tool's scope is unambiguous. It does not explicitly name or contrast against any of the 20 sibling get_* tools, though the SEC-filings resource is distinctive enough to separate it in practice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied through the caveats ('Only issuers registered with the U.S. SEC file there, so a non-US symbol has none, and neither do ETFs, funds or crypto'), which tells the agent when to expect empty results. However, it never states when to reach for this tool over get_financials, get_company_info, or get_insider_activity, nor does it name any alternative, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sectorA
Read-only

Browse a market sector by its Yahoo key (not a ticker symbol).

Returns the sector overview (company count, market cap/weight, description), its top companies, ETFs, and mutual funds, and the constituent industries. Each industry's key can be passed to get_industry to drill down. This takes a sector key like technology or healthcare — not a ticker.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesA Yahoo sector key (lowercase, hyphenated). One of: basic-materials, communication-services, consumer-cyclical, consumer-defensive, energy, financial-services, healthcare, industrials, real-estate, technology, utilities.
limitNoMaximum number of top companies to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint and openWorldHint, so the description does not need to restate them. It adds behavioral context by detailing the composition of the returned data (companies, ETFs, funds, industries) and clarifying the key format, which is useful for an agent planning subsequent calls. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences with zero filler. The main action and key distinction (not a ticker) are front-loaded, follow-up detail is organized logically, and every sentence adds value. This is a model of concise technical writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the annotations covering safety/volatility, the description provides complete guidance: it lists the return categories, the drill-down path to get_industry, and the key semantics. An agent has everything needed to call this tool correctly without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, giving a strong baseline. The description adds meaningful nuance by explicitly stating the key is not a ticker and providing examples (technology, healthcare), which helps prevent misuse beyond the schema's enum list. The limit parameter is already well-documented in the schema, so the description does not need to repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Browse') and resource ('market sector'), explicitly distinguishes it from ticker-based tools, and enumerates exactly what is returned (overview, top companies, ETFs, funds, industries). It clearly differentiates from the sibling get_industry, making its role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use it: for sector-level browsing, and explicitly points to get_industry for drilling down into industries. It also warns 'not a ticker,' which implies not for individual securities. However, it does not systematically contrast with all other sibling tools beyond the industry drill-down, so a 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sharesA
Read-only

Get the shares-outstanding history for a Yahoo symbol.

Each point is a date and the reported shares outstanding. Only the most recent limit points are returned. Without start the series covers the last 18 months, so pass one for anything older.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd date 'YYYY-MM-DD' to bound the series (optional), after 'start'.
limitNoMaximum number of (most recent) data points to return.
startNoStart date 'YYYY-MM-DD'. Without it the series covers the last 18 months only.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond them: the default 18-month coverage window, the truncation rule ('only the most recent limit points are returned'), and how to widen the window. It does not mention update cadence, auth, or whether values can be null.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then result shape, then the windowing caveat. Nothing is filler and the most important constraint (18-month default) is placed where it will be read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is unnecessary, and annotations cover the safety profile. The description closes the main gap an agent would hit (date-window defaults and truncation). Minor omissions remain, such as units/currency-agnostic nature of the count and staleness of the series.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters, including the 18-month default and the YYYY-MM-DD format. The description restates the start/limit behavior rather than adding syntax, ordering, or edge-case detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the shares-outstanding history for a Yahoo symbol') and describes the shape of the result (date + reported shares outstanding). No sibling tool covers shares-outstanding history, so an agent can distinguish it from get_holders, get_financials or get_company_info without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (retrieving historical shares-outstanding series) and gives one actionable condition ('pass a start for anything older' than 18 months). It never names an alternative tool or states when a different sibling should be chosen instead, so guidance stays implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upgrades_downgradesA
Read-only

Get recent analyst rating changes (upgrades/downgrades) for a Yahoo symbol.

Each entry is a firm's rating change with the from/to grade and action, most recent first. Equity-only: an ETF, fund or crypto symbol answers with an error that says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rating changes to return.
symbolYesA Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description adds genuine behavioral context on top: entries are firm-level rating changes with from/to grade and action, ordered most recent first, and non-equity symbols return an explicit error. It does not mention rate limits or data staleness, but the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, entry structure second, failure mode last. No filler and nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and the description still sketches the entry shape. With annotations covering the safety profile and a fully documented schema, the definition is nearly complete; only the sibling boundary with get_recommendations is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'symbol' (including ISIN and suffix formats, plus the search fallback) and 'limit' (bounds and default) are fully documented in the schema. The description adds nothing beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'recent analyst rating changes (upgrades/downgrades) for a Yahoo symbol', and clarifies the entry shape and ordering. The equity-only constraint is useful, but it never distinguishes itself from the close sibling get_recommendations, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Equity-only' note implies when the tool fails, but there is no explicit when-to-use guidance or pointer to get_recommendations/search for adjacent cases. Usage is only implied by the phrasing 'recent analyst rating changes'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv0.7.0
    • Changedget_calendar1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_company_info1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_dividends1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_earnings1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_estimates1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_financials1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_fund_data1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_history4 fields changed
      • changedInput schema / properties / end / description
        Previous value: -"End date 'YYYY-MM-DD'. Used only together with 'start'."New value: +"End date 'YYYY-MM-DD', exclusive: for one day pass the day after. Used only together with 'start'."
      • changedInput schema / properties / interval / description
        Previous value: -"Bar size. One of: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo. Intraday intervals only cover recent dates."New value: +"Bar size. One of: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 4h, 1d, 5d, 1wk, 1mo, 3mo. Intraday intervals only cover recent dates."
      • changedInput schema / properties / period / description
        Previous value: -"Look-back window. One of: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max. Ignored when 'start' is given."New value: +"Look-back window: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max, or any count of d, wk, mo or y such as 7mo. Ignored when 'start' is given."
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_holders1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_insider_activity1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_news1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_options1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_quote1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_quotes1 field changed
      • addedInput schema / properties / symbols / items / maxLength
        Added value: +32
    • Changedget_recommendations1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_sec_filings1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_shares2 fields changed
      • changedInput schema / properties / end / description
        Previous value: -"End date 'YYYY-MM-DD' to bound the series (optional)."New value: +"End date 'YYYY-MM-DD' to bound the series (optional), after 'start'."
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
    • Changedget_upgrades_downgrades1 field changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
  2. 2 tool updatesv0.6.0
    • Changedget_news1 field changed
      • changedInput schema / properties / limit / maximum
        Previous value: -30New value: +10
    • Changedget_shares1 field changed
      • changedInput schema / properties / start / description
        Previous value: -"Start date 'YYYY-MM-DD' to bound the series (optional)."New value: +"Start date 'YYYY-MM-DD'. Without it the series covers the last 18 months only."
  3. 19 tool updatesv0.4.0
    • Changedget_calendar1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_company_info1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_dividends1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_earnings1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_estimates1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_financials2 fields changed
      • changedInput schema / properties / freq / description
        Previous value: -"Reporting frequency: 'annual', 'quarterly', or 'ttm' (trailing twelve months; income and cashflow only)."New value: +"Reporting frequency: 'annual', 'quarterly', or 'ttm' (trailing twelve months, income and cashflow only)."
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_fund_data1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_history1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_holders1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_insider_activity1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Addedget_market
    • Changedget_news1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_options1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_quote1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_quotes1 field changed
      • changedInput schema / properties / symbols / description
        Previous value: -"A list of native Yahoo Finance ticker symbols, e.g. ['AAPL', 'MSFT', 'SAP.DE']. Each must be a native ticker, never an ISIN, WKN, or company name; resolve those via 'search' first. Up to 50 symbols; extras are dropped (the result flags this as truncated)."New value: +"Yahoo tickers or ISINs, e.g. ['AAPL', 'MSFT', 'SAP.DE']. Not company names. Up to 50, extras are dropped."
    • Changedget_recommendations1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_sec_filings1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_shares1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
    • Changedget_upgrades_downgrades1 field changed
      • changedInput schema / properties / symbol / description
        Previous value: -"A native Yahoo Finance ticker symbol, e.g. 'AAPL', 'MSFT', 'SAP.DE', or 'BMW.DE'. This is NOT an ISIN, a WKN, or a company name, and must NOT be built by appending an exchange suffix to an ISIN (e.g. 'US0378331005.DE' is invalid). If you only have a name or ISIN, call the 'search' tool first and pass the 'symbol' value it returns."New value: +"A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first."
  4. 21 tool updatesv0.2.2
    • First observedget_calendar
    • First observedget_company_info
    • First observedget_dividends
    • First observedget_earnings
    • First observedget_estimates
    • First observedget_financials
    • First observedget_fund_data
    • First observedget_history
    • First observedget_holders
    • First observedget_industry
    • First observedget_insider_activity
    • First observedget_news
    • First observedget_options
    • First observedget_quote
    • First observedget_quotes
    • First observedget_recommendations
    • First observedget_sec_filings
    • First observedget_sector
    • First observedget_shares
    • First observedget_upgrades_downgrades
    • First observedsearch

TDQS

A3.7/5.0

Scored across 22 tools

Disambiguation4/5

Most tools have clearly distinct scopes: quotes, history, financials, dividends, news, holdings, analyst data, options, and browse endpoints. Minor overlap exists between get_calendar and get_earnings on upcoming earnings dates, and get_quote/get_quotes are intentionally paired singular/batch tools.

Naming Consistency4/5

All tools use snake_case with a consistent get_ prefix (get_quote, get_financials, get_sec_filings), except search, which is a bare verb. This is very predictable with one minor deviation.

Tool Count4/5

22 tools is slightly heavy for a typical MCP server, but Yahoo Finance is a broad data domain and each tool maps to a distinct data category or endpoint. The count is reasonable for the scope, though a few granular analyst/ownership tools could potentially be consolidated.

Completeness4/5

The surface covers quotes, history, fundamentals, dividends, news, calendar, earnings, estimates, recommendations, holders, insider activity, SEC filings, options, fund data, sector/industry browsing, market status, and search. Peripheral gaps like screeners or market movers are minor and do not block core workflows.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

  • Financial data MCP server for Claude, ChatGPT, Cursor and Codex. Real-time stock quotes, financial statements, options flow, SEC filings, insider trades, 13F holdings, macro data and market news from gloom.sh, the open-source Bloomberg Terminal alternative.

  • A Model Context Protocol server exposing real-time and historical Colombo Stock Exchange (CSE) data to AI agents and LLM applications. Provides quotes and OHLCV price history, full financial statements (income, balance sheet, cash flow), pre-computed technicals (moving averages, RS ratings, volume signals), macroeconomic indicators, corporate actions, and rule-based screening across CSE stocks and sector indices, everything needed to build CSE-aware trading assistants, research tools, and market-analysis agents. This is the official MCP server of www.ceyloncharts.com

  • Research US-listed companies and funds with the StockPortfolio.pro MCP server. Tools cover SEC filing-grounded financials, filing timelines, company comparisons, watchlist screens, fund profiles, and cited filing questions. Filed figures include their fiscal period and EDGAR source URL; missing filing data is returned as null. Public tools work without authentication; optional API-key or OAuth access is supported. US-listed, USD-reporting companies only. Keyless access includes 3 free AI questions per rolling 30-day window. To get more now, choose the Dev plan ($19.99/month, 200 credits) at https://www.stockportfolio.pro/register?plan=dev, then follow https://www.stockportfolio.pro/docs/api-mcp to connect with OAuth or an API key. Or wait for the free allowance to renew.

  • Your agent needs markets — prices and fundamentals for listed companies, the filings behind them, crypto, and what the prediction markets put the odds at. **What you can ask for** • "Pull this company's income statement, cash flow and balance sheet for the last 8 quarters." • "What did insiders buy or sell, and when?" • "Snapshot prices for these 50 tickers, then the OHLC history for the three that moved." • "What are the current odds on this event across Kalshi and Polymarket?" • "Screen for companies matching these financial criteria." **How to use it** Point any MCP client at https://mcp.aisa.one/finance/mcp and sign in with OAuth — there is no key to create or paste. 49 tools: prices and snapshots, income statements, balance sheets and cash flows, metrics and ratios, earnings and analyst estimates, filings and line-item search, insider trades, macro interest rates, news, a screener; CoinGecko spot prices, market tables, OHLC, per-venue tickers and trending; Kalshi and Polymarket markets and trades; plus EDINET filings for Japan. **Why this rather than the source** Equities, crypto and event markets behind one account, so a cross-asset question is one conversation. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Read the number here, then ask the same agent what X is saying about the ticker today — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/marketpulse/mcp · /crypto-market-data/mcp · /prediction-market-data/mcp · /stock-pulse/mcp for one slice each.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that provides comprehensive access to Yahoo Finance data through 18 specialized tools for pricing, financials, options, holders, and news.
    18
    36 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server that provides seamless access to Yahoo Finance stock market data, enabling retrieval of real-time quotes, historical data, charts, financial summaries, and market searches.
    38 npm
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    Enables querying stock data, financial information, news, and historical prices from Yahoo Finance through a set of MCP tools.
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server wrapping yfinance to provide stock market data, financials, and analytics via 24 tools.
    -