Yahoo Finance MCP Server
An MCP server that provides read-only access to Yahoo Finance data and runs over stdio or HTTP.
Resolve company names, tickers, or ISINs to Yahoo symbols with
search.Get current quotes for one or many symbols (
get_quote,get_quotes).Retrieve historical OHLCV data by period or date range (
get_history).Fetch company profiles, key stats, financial statements (income, balance, cashflow), dividends/splits, share history, and fund/ETF details.
Read news, analyst recommendations, price targets, forward estimates, upgrades/downgrades, earnings, and corporate calendar events.
Inspect ownership: institutional/mutual-fund holders, insider transactions and roster, and SEC filings.
Access options expiration dates and chains, sector/industry breakdowns, and market status/index summaries.
Run locally via stdio (e.g. Claude Desktop) or as a network HTTP/SSE service, with optional bearer-token auth and persistent result caching.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Yahoo Finance MCP ServerWhat's the current stock price of Apple?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unofficial Yahoo Finance MCP Server
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 |
| Find instruments by name, ticker, or ISIN, returning Yahoo symbols. |
| Current price and key intraday figures for a symbol. |
| Compact current quotes for several symbols at once (per-symbol not-found list). |
| Historical OHLCV data (period/interval or explicit date range). |
| Company profile and key statistics (sector, market cap, P/E, …). |
| Income statement, balance sheet, or cash flow (annual/quarterly/ttm). |
| Dividend and stock-split history. |
| Recent news headlines (title, summary, publisher, URL), up to the 10 Yahoo serves. |
| Analyst recommendation trend and price targets. |
| Option expiration dates and the calls/puts chain for a date, centred on the money. |
| Upcoming and historical earnings (EPS estimate/actual, surprise). |
| Forward analyst estimates (earnings, revenue, EPS trend/revisions, growth). |
| Recent analyst rating changes (upgrades/downgrades). |
| Ownership breakdown (insider/institutional %, top institutional and mutual-fund holders). |
| Insider transactions, 6-month purchases/sales summary, and current roster. |
| Recent SEC filings (type, date, title, EDGAR/exhibit links). |
| Upcoming earnings and dividend / ex-dividend dates with estimate ranges. |
| Shares-outstanding history (date → shares), the last 18 months unless a start date is given. |
| Fund/ETF profile: overview, asset-class & sector weightings, top holdings. |
| Browse a market sector by key: overview, top companies/ETFs/funds, industries. |
| Browse an industry by key: overview, parent sector, top/top-performing/top-growth companies. |
| 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
Hostallow-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.gitis 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).
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.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 anenvblock, e.g."env": { "YF_MCP_CACHE": "1" }(see Caching).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
mainbranch withuvx --from "git+https://github.com/benethos-hub/yahoo-finance-mcp.git" benethos-yahoo-finance-mcp. That path needsgiton thePATHof the process the client spawns — some GUI clients don't pass a fullPATH, so prefer the PyPI install above.
uvxmust be on thePATHthe client uses. After installing uv, fully restart the app — or use the absolute path touvxascommand. 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-mcpPoint 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 stdioPoint 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 |
| — | — | Print the version and exit. Same value the server reports in the MCP handshake. |
|
|
|
|
|
|
| Bind host for HTTP transports ( |
|
|
| Port for HTTP transports (1 to 65535). |
|
|
| URL path for HTTP transports. |
(none) |
| unset | Require this bearer token on every HTTP request. Environment only, deliberately: an argument is visible in the process list. |
|
| see below, or derived from origins | Comma-separated |
|
| derived from hosts | Comma-separated |
|
|
|
|
|
| off | Enable/disable the persistent result cache. |
|
| OS cache dir | Directory for the cache file. |
|
|
| Most entries the cache keeps, the oldest go first. |
|
| 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_TOKENand every HTTP request must carryAuthorization: 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.
Hostheader / DNS-rebinding guard. The MCP HTTP transport validates theHostheader. A localhost bind keeps a protective allow-list (localhost/127.0.0.1). An exposed bind (0.0.0.0) accepts anyHostby 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 whoseHostis not on the list then get HTTP 421.--allowed-originsworks on its own as well, and either list is derived from the other when only one is given.compose.yamlsets 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/mcpPin 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-mcpThe 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 removeThis 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 /yfWith the venv interpreter directly (Windows: .venv\Scripts\python.exe):
.venv/bin/python -m benethos_yahoo_finance_mcp --transport streamable-httpExample 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 |
|
| 30 s |
|
| 30 s |
|
| 10 min |
|
| 10 min |
|
| 10 min |
|
| 1 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 6 h |
|
| 24 h |
|
| 24 h |
|
| 24 h |
|
| 24 h |
|
| 24 h |
|
| 24 h |
|
| 60 s |
Off by default. Enable with
--cacheorYF_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 theYF_MCP_CACHE_TTL_<NAME>env var (e.g.YF_MCP_CACHE_TTL_QUOTE=15). Set a TTL to0to 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 # coverageWith 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 # coverageThe 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 toolsget_calendarARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_infoBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_dividendsARead-only
Get the dividend and stock-split history for a Yahoo symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_earningsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of earnings rows to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_estimatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_financialsBRead-only
Get a financial statement for a Yahoo symbol.
Each row is a line item and each column a reporting period, most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| freq | No | Reporting frequency: 'annual', 'quarterly', or 'ttm' (trailing twelve months, income and cashflow only). | annual |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. | |
| statement | No | Which statement: 'income' (income statement), 'balance' (balance sheet), or 'cashflow' (cash flow). | income |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_dataARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of top holdings to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_historyARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End date 'YYYY-MM-DD', exclusive: for one day pass the day after. Used only together with 'start'. | |
| start | No | Start date 'YYYY-MM-DD'. Overrides 'period' when set. | |
| period | No | 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. | 1mo |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. | |
| interval | No | Bar 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_holdersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of institutional/mutual-fund holders to return per list. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_industryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | A Yahoo industry key (lowercase, hyphenated), e.g. 'semiconductors' or 'software-infrastructure'. Discover valid keys from the 'industries' list returned by get_sector. | |
| limit | No | Maximum number of top companies to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_activityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of insider transactions/roster rows to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_marketARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | A 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_newsBRead-only
Get recent news headlines for a Yahoo symbol (up to limit, 1-10).
Each article includes title, summary, publisher, publish time, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of headlines to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_optionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. | |
| expiration | No | Expiration date 'YYYY-MM-DD' from the list returned when called without it. Omit to list available expiration dates. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_quoteBRead-only
Get the current price and key intraday figures for a Yahoo symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_quotesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | Yahoo tickers or ISINs, e.g. ['AAPL', 'MSFT', 'SAP.DE']. Not company names. Up to 50, extras are dropped. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_recommendationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_filingsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of filings to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_sectorARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | A Yahoo sector key (lowercase, hyphenated). One of: basic-materials, communication-services, consumer-cyclical, consumer-defensive, energy, financial-services, healthcare, industrials, real-estate, technology, utilities. | |
| limit | No | Maximum number of top companies to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_upgrades_downgradesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of rating changes to return. | |
| symbol | Yes | A Yahoo ticker or an ISIN, e.g. 'AAPL', 'SAP.DE' or 'US0378331005'. For a company name, use 'search' first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
searchARead-only
Search Yahoo Finance by company name, ticker symbol, or ISIN.
Use this first to resolve a name or ISIN into a Yahoo symbol that the
other tools accept. Returns up to limit matches (1-25), each with its
symbol, name, exchange, and instrument type.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. | |
| query | Yes | Company name, ticker symbol, or ISIN to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 known. The description adds that it returns up to limit matches and describes the result fields, which goes beyond the annotations and clarifies the expected output. It doesn't mention edge cases or rate limits, but for a simple read-only search this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose, and includes the critical usage instruction in the second sentence. Every sentence earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with fully documented parameters, an output schema (implied by 'has output schema: true'), and read-only annotations, the description covers everything an agent needs: what it does, when to use it, and what it returns. There are no missing details that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents query and limit thoroughly. The description reiterates that query accepts company name, ticker, or ISIN and that limit caps matches, which adds little new semantic value beyond what the schema provides. The baseline of 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and a clear resource ('Yahoo Finance by company name, ticker symbol, or ISIN'), and explains what it returns (matches with symbol, name, exchange, instrument type). This clearly distinguishes it from the sibling get_* tools, which retrieve specific data types rather than resolving entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use this tool first to resolve a name or ISIN into a Yahoo symbol that other tools accept, establishing a clear workflow and entry-point role. It gives an explicit 'when to use' without ambiguity, and the instruction 'Use this first' makes it obvious.
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.
18 tool updates
v0.7.0- Changed
get_calendar1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_company_info1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_dividends1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_earnings1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_estimates1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_financials1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_fund_data1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_history4 fields changed- changed
Input schema / properties / end / descriptionPrevious 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'." - changed
Input schema / properties / interval / descriptionPrevious 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." - changed
Input schema / properties / period / descriptionPrevious 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." - added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_holders1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_insider_activity1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_news1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_options1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_quote1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_quotes1 field changed- added
Input schema / properties / symbols / items / maxLengthAdded value: +32
- Changed
get_recommendations1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_sec_filings1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_shares2 fields changed- changed
Input schema / properties / end / descriptionPrevious 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'." - added
Input schema / properties / symbol / maxLengthAdded value: +32
- Changed
get_upgrades_downgrades1 field changed- added
Input schema / properties / symbol / maxLengthAdded value: +32
2 tool updates
v0.6.0- Changed
get_news1 field changed- changed
Input schema / properties / limit / maximumPrevious value: -30New value: +10
- Changed
get_shares1 field changed- changed
Input schema / properties / start / descriptionPrevious 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."
19 tool updates
v0.4.0- Changed
get_calendar1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_company_info1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_dividends1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_earnings1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_estimates1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_financials2 fields changed- changed
Input schema / properties / freq / descriptionPrevious 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)." - changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_fund_data1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_history1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_holders1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_insider_activity1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Added
get_market - Changed
get_news1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_options1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_quote1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_quotes1 field changed- changed
Input schema / properties / symbols / descriptionPrevious 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."
- Changed
get_recommendations1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_sec_filings1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_shares1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
- Changed
get_upgrades_downgrades1 field changed- changed
Input schema / properties / symbol / descriptionPrevious 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."
21 tool updates
v0.2.2- First observed
get_calendar - First observed
get_company_info - First observed
get_dividends - First observed
get_earnings - First observed
get_estimates - First observed
get_financials - First observed
get_fund_data - First observed
get_history - First observed
get_holders - First observed
get_industry - First observed
get_insider_activity - First observed
get_news - First observed
get_options - First observed
get_quote - First observed
get_quotes - First observed
get_recommendations - First observed
get_sec_filings - First observed
get_sector - First observed
get_shares - First observed
get_upgrades_downgrades - First observed
search
TDQS
Scored across 22 tools
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.
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.
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.
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
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
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server that provides comprehensive access to Yahoo Finance data through 18 specialized tools for pricing, financials, options, holders, and news.1836 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceA 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 npmISC
- AlicenseAqualityDmaintenanceEnables querying stock data, financial information, news, and historical prices from Yahoo Finance through a set of MCP tools.5MIT
- FlicenseNot gradedqualityCmaintenanceMCP server wrapping yfinance to provide stock market data, financials, and analytics via 24 tools.-