Yahoo Finance MCP Server
Summary: This MCP server gives an MCP client read-only access to live Yahoo Finance market data, so it can answer market questions in plain language.
Find instruments — resolve a company name, ticker, or ISIN into a Yahoo symbol (
search).Quotes — current price and intraday figures for one symbol, or compact quotes for many at once (
get_quote,get_quotes).Price history — OHLCV data by look-back period or explicit date range and interval (
get_history).Company fundamentals — profile, sector/industry, market cap, P/E, beta, 52-week range, dividend yield (
get_company_info); income statement, balance sheet, cash flow, annual/quarterly/TTM (get_financials); shares-outstanding history (get_shares).Dividends & splits — full dividend and split history (
get_dividends).News — recent headlines with summary, publisher, and URL (
get_news).Analyst data — recommendation trends and price targets (
get_recommendations), forward estimates and revisions (get_estimates), upgrades/downgrades (get_upgrades_downgrades).Earnings & calendar — upcoming/past earnings with EPS and surprises (
get_earnings), next earnings and ex-dividend dates (get_calendar).Ownership & insiders — institutional/mutual-fund holders and insider vs. institutional percentages (
get_holders), insider transactions and roster (get_insider_activity).Filings — recent SEC filings with EDGAR and exhibit links (
get_sec_filings).Options — expiration dates and calls/puts chains centred on the money (
get_options).Funds & ETFs — overview, asset-class and sector weightings, top holdings (
get_fund_data).Sectors, industries & markets — browse sectors and industries with top/top-performing companies (
get_sector,get_industry), plus market open/closed status and index summaries (get_market).Deployment — runs over stdio for local clients or streamable-HTTP/SSE (including Docker) as a shared service, with an optional SQLite result cache; all tools are read-only and compute nothing beyond what Yahoo returns.
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.
Contents
What it is for
The server lets an MCP client such as Claude Desktop answer questions about markets from live Yahoo Finance data: the price of a share and how it moved, what a company earns, what analysts expect, who owns it, what an ETF holds, and how a sector or a market is doing. You ask in plain language, the client picks the tools, and the answer rests on what Yahoo returns rather than on what the model remembers.
Typical uses:
Quick lookups in a chat. A quote, the 52-week range, the next earnings date or the dividend history, without opening a browser.
Research on one company. Profile, financial statements, estimates, rating changes, holders and insider trades in one conversation, summarised by the model.
Comparisons. Several tickers side by side, the top companies of a sector or an industry, the holdings and weightings of an ETF.
Calculations on raw data. Six months of daily closes for an RSI, a MACD or a drawdown, which the model works out from the series.
A shared service. Run over HTTP, in Docker, for a team's web front end or an automation such as n8n, with an optional result cache in front of Yahoo.
Everything is read-only. The server places no orders, holds no portfolio and signs in nowhere. The data comes from unofficial endpoints, may be delayed and is no basis for a trading decision, see the disclaimer above.
Example prompts
Once the server is connected, ask the client in plain language and it will pick the tools. Replace the bracketed placeholders with concrete values.
Price & quote
"What's the current price of [Ticker], and how far is it from its 52-week high?"
"Is [Ticker] trading above or below its 50- and 200-day moving averages?"
"Get the daily closes of [Ticker] for the last 6 months and compute RSI and MACD."
"What was the deepest drawdown of [Ticker] in the last 12 months?"
"Compare [Ticker A] and [Ticker B] over the last 3 months and show which held up better."
"Get current quotes for [Ticker A], [Ticker B] and [Ticker C] and compare them in a table."
Company & valuation
"Give me P/E, beta, market cap and dividend yield for [Ticker]."
"What does [Company name] actually do, and which sector and industry is it in?"
"Show the last three annual income statements for [Ticker] and how revenue developed."
"How has [Ticker]'s share count changed over the past years, and does that mean buybacks or dilution?"
Analysts & news
"What's the analyst consensus for [Ticker], and how far is the average price target from the current price?"
"Any upgrades or downgrades for [Ticker] in the last few weeks?"
"What are the forward revenue and EPS estimates for [Ticker], and how were they revised recently?"
"Summarize the recent news on [Ticker]."
Earnings & calendar
"When does [Ticker] report next, and what EPS is expected?"
"How did [Ticker] do against estimates in the last few quarters?"
"When are [Ticker]'s next earnings and ex-dividend dates?"
Dividends
"Show [Ticker]'s dividends over the last ten years and the current yield."
"Has [Ticker] cut its dividend in the last 20 years, and did it split the stock?"
Ownership & insiders
"Who are the largest institutional holders of [Ticker]?"
"What share of [Ticker] is held by insiders versus institutions?"
"Has there been notable insider buying or selling in [Ticker] recently?"
Funds & ETFs
"What are the top holdings and sector weightings of the ETF [Ticker]?"
"What's the asset-class split of [ETF Ticker], and which fund family runs it?"
Filings
"Show the most recent SEC filings for [US Ticker] with links."
Options
"Which option expiration dates are available for [US Ticker]?"
"Show the calls and puts for [US Ticker] expiring [Date]."
Sectors & markets
"What are the top companies and industries in the technology sector?"
"Show the top-performing companies in the semiconductors industry."
"Is the US market open right now, and when does it open next?"
"How did the major indices in Europe and Asia close?"
Screening
"Find US stocks with a dividend yield above 4 % and a P/E below 15."
"Which companies have raised their dividend for at least 25 years in a row?"
"List the largest German-listed technology stocks with a positive P/E under 20."
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.
Related MCP server: YFinance MCP Server
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. Each tool also has a
short title, such as "Stock screener", that a client may show in place of its
name.
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, …). |
| Find stocks by criteria (dividend yield, P/E, market cap, region, sector, …), ranked, with the total number of matches. |
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. Four
tools are exceptions: get_sector and get_industry take a sector or industry
key (e.g. technology, semiconductors), get_market takes a market
key (e.g. US), and screen takes filters such as
{"field": "dividend_yield", "op": "gt", "value": 3} and finds the symbols
itself.
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
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.
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. Claude Desktop also takes the server as an extension, a single file to open, see Quick start. The configuration file differs per client, but the command is always the one shown under Claude Desktop with uv:
{ "command": "uvx", "args": ["benethos-yahoo-finance-mcp"] }Over the network, streamable-HTTP. The server runs once and clients connect
to http://<host>:8000/mcp, or to https://<domain>/mcp with a bearer token
behind the Caddy profile of the production compose file. 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: Claude Desktop extension
The simplest way for Claude Desktop. Nothing needs to be installed first, no uv, no Python and no configuration file: Claude Desktop brings what the extension needs.
Download
benethos-yahoo-finance-mcp.mcpb, the extension of the newest release. Every release also carries it under its version, on the releases page.Open it with a double click, or drag it onto Claude Desktop → Settings → Extensions. Claude Desktop shows the tools and asks to install.
Ask something that needs market data, in a new chat. The first start installs the dependencies and takes a few seconds, later starts are quick.
If the server is also listed in claude_desktop_config.json, remove that
entry, or every tool shows up twice. The extension is for Claude Desktop only.
Other clients use the command below.
Claude Desktop with uv (manual config)
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.8.7. 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 the MCP Registry. Every release from 0.8.2 on is listed in the
official MCP Registry as
io.github.benethos-hub/benethos-yahoo-finance-mcp, with the PyPI package and
the container image, and since 0.8.4 with the Claude Desktop bundle too
(entry).
A client that installs from the registry starts it with uvx, or with
docker run -i --rm and --transport stdio, and needs no settings. Since
0.8.3 the container entry also runs read-only, without capabilities and
without the HTTP health check, as in the hardened docker run example under
Docker. The MCP
list in VS Code's extension view (@mcp) is GitHub's own selection, and a
listing in the registry does not put a server there.
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. Both compose files incontainers/set 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/benethos-yahoo-finance-mcp:latest
# Server is now reachable at http://localhost:8000/mcpPin a version for anything you depend on — :0.8.7 for an exact release, :0.8
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 carries the name of the PyPI distribution, and every release from
0.4.0 on is available under it. Up to 0.7.1 it was published as
ghcr.io/benethos-hub/yahoo-finance-mcp, and those releases were copied over
with the same digest. The 0.7 line was pushed under the old name as well, the
same image again. Since 0.8.0 only the new name gets releases.
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),
# from the repository root
docker build -f containers/images/yahoo-finance-mcp/Dockerfile -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
containers/production/.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 container runs with a read-only root file system, as the compose files do,
when it gets a writable /tmp and a writable cache for yfinance in the home
directory. Without the second, yfinance silently does without its cookie and
time zone cache and asks Yahoo again each time:
docker run --rm -p 8000:8000 --read-only --tmpfs /tmp \
--tmpfs /home/appuser/.cache:uid=10001,gid=10001,mode=0700 \
--cap-drop ALL --security-opt no-new-privileges:true \
ghcr.io/benethos-hub/benethos-yahoo-finance-mcp:latestThe 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
Two compose files, each in a folder of its own under
containers/:
Folder | For | Image | Port |
| running the released server, no clone needed |
|
|
| trying a change, the only way to run an unreleased | built from this checkout |
|
To operate the server, fetch the production folder's three files into an empty folder and start it there:
mkdir yahoo-finance-mcp && cd yahoo-finance-mcp
for file in compose.yaml Caddyfile .env.example; do
curl -fsSL -o "$file" "https://raw.githubusercontent.com/benethos-hub/yahoo-finance-mcp/main/containers/production/$file"
done
cp .env.example .env # names the version, set the token here too
docker compose up -d # pull (if needed) and start in the background
docker compose logs -f # follow logs
docker compose down # stop and removeThe server is then reachable at http://localhost:8000/mcp.
YAHOO_FINANCE_MCP_VERSION in .env names the image version and has no
default, so nothing changes under you on a pull. To update, set the new
version there, then docker compose pull && docker compose up -d. From a
checkout, docker compose up -d --build in containers/development/ builds
and starts the server on port 8001. Their project names differ, so both can
run side by side, each with a cache volume of its own. This requires Docker
Compose 2.24 or newer.
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, set the token at the
very least, and put a reverse proxy with authentication in front of it. Set
YAHOO_FINANCE_MCP_PORT in .env if the host port is taken.
For clients on other machines, the production folder brings such a proxy
along. With COMPOSE_PROFILES=https, YAHOO_FINANCE_MCP_DOMAIN and
YF_MCP_BEARER_TOKEN in .env, Caddy starts in front of the server on
ports 80 and 443, gets a certificate for the domain from Let's Encrypt, from
its own CA or from files you provide (YAHOO_FINANCE_MCP_TLS), and turns
away a request without an Authorization header before it reaches the
server. The server's port stays on 127.0.0.1. The
containers README
has the details.
Both files run the container with a read-only root file system, no Linux
capabilities and no-new-privileges, with a tmpfs for /tmp and for
yfinance's cache. They cap the log Docker keeps of the container at 5 files
of 10 MB, the oldest dropped first (x-logging). 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 the .env beside the compose file, which Compose reads through
env_file and git and the Docker build context both ignore. Set
YF_MCP_BEARER_TOKEN there, not in compose.yaml. Compose takes
YAHOO_FINANCE_MCP_VERSION, YAHOO_FINANCE_MCP_PORT and COMPOSE_PROFILES
for itself, hands YAHOO_FINANCE_MCP_DOMAIN and YAHOO_FINANCE_MCP_TLS to
Caddy, and everything else to the server. A name set under environment: in
compose.yaml wins over the same name in .env. 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.
A setup from the compose file that used to sit at the repository root moves to
containers/production/. Its project name is the same, so the cache volume
stays.
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-httpCaching
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 |
|
| 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
How the code is laid out, module by module, is in SPECS.md.
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.15 and enforces an 80% coverage floor,
measured on 3.15, and the coverage badge above shows what that run measured
on main. Two
more jobs install without the lockfile: fresh-install with the newest
versions pyproject.toml allows, lowest-versions with the oldest. Every
version in uv.lock and every lowest version is checked for known
vulnerabilities against PyPI and OSV.
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
23 toolsget_calendarCorporate 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 already declare readOnlyHint and openWorldHint, so safety is covered; the description adds substantive context beyond them, namely the equity-only restriction, the explicit error behavior for non-equity symbols, and a concrete inventory of what is returned. It stops short of noting rate limits or how many future events are covered.
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 verb and resource, followed by return contents and then the constraint. Every sentence earns its place with no repetition of the schema or annotations.
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-value structure need not be explained, and the description still sketches the payload. The equity-only behavior and the symbol requirement are both covered. The remaining gap is routing guidance relative to the overlapping get_earnings/get_dividends siblings.
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 there is only one parameter, so the schema already documents the symbol format, ISIN support and the 'use search first' fallback. The description's only parameter-adjacent content is the equity-only constraint, which is behavioral rather than semantic; baseline 3 is correct.
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 for a Yahoo symbol') and enumerates the payload (next earnings date(s) with analyst estimate ranges, next dividend/ex-dividend dates). It is clearly distinguishable from most siblings, though it never contrasts itself with the closely overlapping get_earnings and get_dividends tools.
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 scope: this is the combined calendar view (earnings + dividends). The 'Equity-only' sentence functions as a real exclusion — an ETF/fund/crypto symbol will error — which is useful when-not guidance. However, it names no alternative for those cases (e.g. get_fund_data) and never tells the agent when to prefer this over get_earnings or get_dividends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_infoCompany profileARead-only
Get a company profile and key statistics for a Yahoo symbol.
Returns name, sector/industry, location, employee count, and valuation
metrics (market cap, trailing and forward P/E, P/B, beta, 52-week range,
dividend yield) plus a business summary. For an ISIN, resolved_symbol
names the ticker it stands for.
| 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 genuinely useful behavior beyond that: the ISIN-to-ticker resolution via 'resolved_symbol'. It says nothing about auth, rate limits, or failure modes 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?
Front-loaded with purpose in the first sentence, then a dense but useful field enumeration, ending with the ISIN caveat. No filler, though the parenthetical metric list is long enough to border on a return-value dump.
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, full parameter coverage, and readOnly/openWorld annotations, the description only needs to frame scope and it does so, including the ISIN edge case. It could be slightly stronger by naming which sibling to use for pure price data.
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 parameter, so the schema already documents the accepted ticker/ISIN formats and the 'search' fallback. The description's ISIN note is largely redundant with the schema, so 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 a company profile and key statistics') and enumerates the returned data (sector/industry, employees, valuation metrics, business summary), which separates it from get_quote and get_financials. It does not explicitly name a sibling it replaces, 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 enumeration of static profile fields signals this is the tool for company-level facts rather than price history or statements. There is no explicit when-to-use/when-not, and the 'use search first for a company name' routing lives in the 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_dividendsDividends and splitsARead-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 and external-data profile is covered. The description adds that the data is historical (dividend and split history) and scoped to a Yahoo symbol, which is useful but not rich behavioral detail. It does not describe output shape or ordering, though an output schema exists to carry that. A 3 is fair given annotations do the heavy lifting.
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, front-loaded with the verb and resource, containing zero filler. Every word earns its place, and there is no redundancy with the schema or annotations. Ideal economy of expression.
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 historical data tool with a 100% covered schema and a present output schema, the description is nearly complete. The task of return-value explanation is delegated to the output schema, which is acceptable. The only minor gap is the absence of usage routing relative to siblings like get_history, but nothing an agent needs to call the 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%, so the single parameter 'symbol' is fully documented in the schema (including maxLength, ISIN support, and the fallback to 'search' for company names). The description adds no syntax, format, or constraint detail beyond what the schema already provides. Baseline 3 is correct when schema coverage is high.
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?
Clear verb+resource: 'Get the dividend and stock-split history for a Yahoo symbol.' The scope (dividends and splits, historical) is specific enough for an agent to distinguish from siblings like get_quote or get_history, though it does not name those alternatives explicitly. This is a solid, specific purpose statement that needs no further decoding.
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 implies usage (fetch dividend/split history for a given symbol) but offers no explicit when-to-use vs when-not-to-use guidance. It does not tell the agent to prefer get_dividends over get_history when only dividend/split data is needed, nor does it state the conditions that make this the right call. Adequate but thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earningsEarningsARead-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 readOnly and openWorld, so the bar is lower; the description adds real value by disclosing the equity-only restriction and the resulting error, plus the returned fields (EPS estimate, reported EPS, surprise %). It stops short of describing pagination or limit interaction.
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, front-loaded sentences: purpose first, return content second, constraint third. No filler, and all content earns its place, though the return-detail sentence partly overlaps the output schema.
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 annotation coverage, the description is essentially complete; the equity-only caveat is a helpful addition. Since return values are already captured by the output schema, the description need not do more.
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 'symbol' and 'limit' are fully documented in the schema. The description reinforces that a Yahoo symbol is expected but adds no syntax or format detail beyond what the schema already provides, 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 resource ('upcoming and historical earnings') for a Yahoo symbol, making the tool's function immediately clear. It does not explicitly distinguish itself from overlapping siblings like 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 implied by the resource name rather than stated. It notes the equity-only constraint (ETF/fund/crypto returns an error), which is useful, but gives no explicit when-to-use guidance or named alternatives vs get_estimates/get_calendar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estimatesAnalyst 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=true and openWorldHint=true, so the safety profile is covered. The description adds value beyond that by disclosing a failure mode not present in any structured field: non-equity symbols (ETF, fund, crypto) return an error saying so, and results are 'small tables keyed by period'. It stops short of describing rate limits or auth, but the error behavior is a useful behavioral disclosure.
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, front-loaded with the core purpose before the return contents and the equity-only caveat. The middle sentence restating return values is mildly redundant given an output schema exists, but it is brief and earns most of 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 single-param read tool, the definition covers purpose, output shape, and the key failure mode, and annotations plus an output schema carry the safety and return-value burden. The only real gap is the absence of sibling routing, which is minor given how self-descriptive the tool is.
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 single 'symbol' parameter is already fully documented in the schema (Yahoo ticker or ISIN, with the search fallback for company names). The description adds no format or syntax detail beyond that, 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?
The description opens with a specific verb+resource ('Get forward analyst estimates for a Yahoo symbol') and enumerates the returned content (earnings/revenue estimates, EPS trend/revisions, growth estimates), which lets an agent distinguish it from broader siblings like get_financials. However, it never explicitly contrasts itself with the closest sibling, get_earnings, leaving some differentiation 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?
Usage is implied rather than stated: the agent infers it should call this when it wants forward-looking analyst estimates. The 'Equity-only' note functions as a genuine exclusion (ETF/fund/crypto will fail), but there are no explicit alternatives or when-to-use routing against siblings such as get_earnings or get_recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsFinancial statementsBRead-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 adds genuine value by disclosing the return layout (rows are line items, columns are reporting periods, most recent first), but says nothing about frequency/statement interactions or limits.
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 with the purpose front-loaded and no filler. The second sentence earns its place by describing the data orientation, which is not obvious from the schema.
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, and annotations plus full schema coverage handle safety and parameters. The layout note rounds it out; only minor usage-routing context 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%, so freq, symbol, and statement are all fully documented in the schema, including the 'ttm' restriction to income and cashflow. The description adds no parameter meaning 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 a financial statement'), which is clearly distinct from siblings like get_earnings, get_quote, and get_company_info. However, it never names an alternative, so differentiation is inferred from the resource noun rather than explicit.
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 gives no when-to-use or when-not-to-use guidance and names no alternative tool. The useful routing hint ('For a company name, use search first') lives only in the symbol parameter's schema description, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fund_dataFund profileARead-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 is covered. The description adds genuinely useful behavior the annotations don't: it will raise/error on stocks and crypto, telling the agent how failure manifests. It does not discuss rate limits or pagination of holdings beyond the limit param.
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 purpose, then the return payload, then the key restriction. No filler or restated title content.
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 need not be detailed, yet the description still summarizes the payload; identifiers, scope, error behavior, and safety are all covered. Nothing an agent needs to invoke this 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%, with both 'symbol' (ticker/ISIN format, search-first hint) and 'limit' (1-100 max holdings) fully documented in the schema. The description only echoes 'Yahoo symbol' and adds no format or default detail beyond what the schema provides, 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?
Specific verb ('Get') plus resource ('fund/ETF profile data') and an explicit enumeration of what comes back (overview, asset-class and sector weightings, top holdings). The asset-class scope ('Fund/ETF-only') cleanly separates it from the company/equity siblings like get_company_info.
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?
States a clear when-not condition: it 'raises for stocks and crypto, which have no fund data,' which steers the agent away from using it on regular equities. It stops short of naming the sibling to use instead (e.g. get_company_info or get_sector).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historyPrice 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 already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real behavioral context beyond the annotations: the 250-row cap and the fact that a `truncated` flag is set when results are cut.
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 with the core purpose front-loaded, then query modes, then the truncation caveat. No filler, though the middle sentence partly duplicates schema content.
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 full schema coverage and an output schema present, the description need not explain return values, and it covers the key non-obvious behavior (row cap, truncated flag). Complete enough for an agent to call it 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%, so the baseline is 3. The description's note that period and start/end are alternatives largely restates what the schema already states ('Overrides period when set', 'Ignored when start is given'), adding little new 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?
The description states a specific verb and resource ('Get historical OHLCV data for a symbol'), which clearly separates it from siblings like get_quote/get_quotes that return current pricing. It stops short of naming the alternative explicitly, so the differentiation is implicit rather than stated.
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 how to query (period vs. start/end range) but does not say when to choose this tool over siblings such as get_quote or screen. Usage is implied by the resource rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_holdersHoldersARead-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 declare readOnlyHint and openWorldHint, so safety is covered; the description adds real value beyond them by disclosing the equity-only failure mode and the exact composition of the response. It omits any note on data freshness/delay, which is the main remaining behavioral gap for a market-data read.
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 purpose, then return contents, then the constraint. No filler and nothing redundant with the schema.
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, return values need no explanation, and the description still covers the one gotcha an agent would hit (non-equity symbols erroring). It is nearly complete, lacking only peripheral context such as data recency.
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' (ticker/ISIN format plus the 'use search first' hint) and 'limit' (per-list cap) are fully documented in the schema. The description adds no syntax or format 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+resource ('Get the ownership breakdown for a Yahoo symbol') and enumerates exactly what comes back: insider/institutional percentages plus top institutional and mutual-fund holders. The equity-only clause implicitly separates it from get_fund_data and get_insider_activity, so an agent can distinguish it from siblings 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?
Gives a clear when-not rule: ETF, fund or crypto symbols return an error saying so, which prevents wasted calls on non-equity tickers. It does not name alternatives (e.g. get_fund_data for funds, get_insider_activity for transaction-level detail), so routing guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_industryIndustryARead-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 establish readOnlyHint and openWorldHint, so safety is covered. The description adds real context beyond that: the data source convention for the key and the fact that the response mixes several curated company lists. It does not discuss failure modes for invalid keys, which is the main 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?
Front-loaded with the action and the single most common mistake. The 'not a ticker symbol' warning appears twice (opening line and closing line), which is redundant but defensible as emphasis on a high-frequency misuse.
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 detailed further. Key acquisition, format caveat, and limiting behavior are all covered; nothing an agent needs to invoke this 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 coverage is 100%, so the `key` format and `limit` bound (1-100, default 25) are already documented. The description's key-vs-ticker note largely repeats the schema's own wording rather than adding new 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?
Specific verb+resource: 'Browse an industry by its Yahoo key' and it enumerates the payload (overview, parent sector, top companies, top-performing/growth). It also quietly distinguishes itself from the nearby get_sector, so an agent can tell the two apart without opening schemas.
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 concrete discovery path (valid keys come from the `industries` list returned by `get_sector`) and an explicit exclusion ('not a ticker symbol'). It lacks a stated when-not/conditional alternative, but the routing guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_activityInsider 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 already declare readOnlyHint and openWorldHint, and the description adds real context on top: the three-part return shape and, importantly, the equity-only constraint with a defined failure mode for ETF/fund/crypto symbols. It does not discuss pagination or how the 6-month window is computed, which keeps 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?
Three short sentences, front-loaded with the action, then returns, then the constraint. No filler, no restatement of the title.
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 tool with full schema coverage, annotations covering the safety profile, and an output schema covering the response, the description supplies everything else an agent needs: what comes back and the one input class that fails.
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 both parameters (symbol formats, limit bounds) are fully documented in the schema, so the baseline of 3 applies. The description adds no format or default information beyond what the schema already states.
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?
"Get insider trading activity for a Yahoo symbol" pairs a specific verb with a specific dataset, then itemizes the three payloads (individual transactions, 6-month purchases/sales summary, insider roster). That distinguishes it from the nearest sibling, get_holders, without the agent needing to open 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?
Usage is only implied: call it with a symbol when insider data is wanted. There is no explicit when-to-use or when-not-to-use versus siblings such as get_holders or get_company_info, and the 'use search first for a company name' routing lives in the 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_marketMarket statusARead-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 cover only read-only/open-world safety, and the description adds a genuinely valuable behavioral disclosure: `status` is populated only for `US` and is null elsewhere, explicitly framed as an upstream limitation rather than an error. That pre-empts an agent misreading a null as a failure — exactly the kind of context annotations cannot carry.
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-loads the purpose in one sentence, then qualifies input semantics and the US-only status caveat. Every sentence earns its place, though the prose runs slightly longer than a single-parameter tool strictly needs.
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, return-shape detail is not required, yet the description still sketches what the index summary contains (price, previous close, change) and covers the one edge case an agent would otherwise trip on. Nothing needed to call it 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 coverage is 100% and the key enum is documented there, but the description still adds meaning: it reinforces that `key` is a market key rather than a ticker, gives concrete examples (`US`, `EUROPE`), and ties the parameter to the null-status behavior. Marginal but real value above the schema.
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 trading status and headline index summary for a market') and immediately scopes it apart from ticker-oriented siblings by noting it takes a market key 'such as `US` or `EUROPE` — not a ticker symbol'. An agent can distinguish this from get_quote/get_quotes without opening any 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?
Enumerates the questions it answers — market open, next open/close, index performance — which gives clear context for when to reach for it. It does not name an explicit alternative tool to prefer when the agent wants per-symbol data, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsNewsBRead-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 and external-source profile is covered. The description adds no behavioral context beyond that — no rate limits, freshness window, or coverage caveats — and its return-field list is redundant with the existing output 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?
Two short sentences, front-loaded with the core action and free of filler. The second sentence duplicates the output schema's content, which is a small waste but not enough to hurt readability.
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 read-only lookup with an output schema present, the description covers purpose and scope adequately; return values need not be re-explained. The only real gap is the absence of any routing hint toward or away from 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 both parameters are fully documented in the schema itself. The description restates the 1-10 limit range but adds no new semantic detail (e.g., defaulting or behavior when the symbol has no news), making this 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') scoped to a Yahoo symbol, which an agent can distinguish from sibling tools like get_quote or get_sec_filings. It is clear but never explicitly contrasts itself with those siblings.
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 guidance on when to prefer this tool over siblings, nor on prerequisites beyond the schema's own note about using 'search' for company names. Usage must be inferred entirely from the name and the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_optionsOption chainARead-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?
Beyond the readOnlyHint/openWorldHint annotations, it discloses real behavioral traits: a 60-strike cap centred on current price, a `truncated` flag when a wider chain is cut, and the US-listing-only coverage rule with an explicit warning against misreading an empty result. This is exactly the context annotations cannot carry.
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 two tight sentences covering the two invocation modes and the coverage caveat. No filler; every sentence carries information an agent needs to call correctly.
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 structure need not be spelled out, yet the description still flags the `truncated` field an agent should check. Combined with the mode switching and the non-US caveat, nothing needed to invoke or interpret this tool 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 the baseline is 3, but the description adds meaning the schema does not: `expiration` must be a value drawn from the list returned by the parameterless call, and it changes the response shape from an expiration list to calls/puts. The two-mode semantics are explained rather than restated.
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 option chain') for a named source (Yahoo symbol), which is clearly distinct from siblings like get_quote, get_history or get_financials. An agent can identify this as the derivatives-data tool without opening the 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 description explicitly branches usage: call without `expiration` to enumerate available expiration dates, call with one to retrieve calls/puts for that date. It also flags the case where a non-US symbol yields nothing and warns that this says nothing about the symbol itself, preventing a wrong inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteQuoteBRead-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 what data is returned ('current price and key intraday figures'), which is mild value, but says nothing about staleness, delays, rate limits, or errors.
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 tight sentence with the payload description front-loaded and zero filler. Nothing is wasted or buried.
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-value documentation is not required, and the one-param schema plus annotations cover the rest. The only real gap is that it never clarifies its relationship to the sibling 'get_quotes', which an agent selecting between them would want.
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?
With a single parameter and 100% schema description coverage, the schema already documents the symbol format (ticker/ISIN) and the search fallback. The description adds no syntax or format detail beyond that, so the baseline 3 for fully-covered schemas 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') for a Yahoo symbol, which is clear and concrete. However, it does not distinguish itself from the near-identical sibling 'get_quotes' (plural), leaving the agent to guess which one to call.
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 gives no when-to-use or when-not-to-use guidance and never names an alternative. The only routing hint ('For a company name, use search first') lives in the parameter schema, not the description, so the description itself contributes nothing here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotesQuotes for several symbolsARead-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, and truncated
is set when more than 50 were passed.
| 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 cover the read-only/open-world safety profile, and the description adds genuinely new behavior: per-symbol independent lookup, partial failure routed to `not_found` instead of aborting, and `truncated` being set past 50 symbols. The field list adds little because an output schema already exists, but the failure and truncation semantics are real added value.
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, front-loaded with the core capability, then usage, then return/failure semantics. No filler and no repetition of the schema.
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 batch quote tool with an output schema, the description covers everything the agent needs: what is fetched, the cap, partial-failure handling, and the truncation flag. Return value details are correctly left to the output schema.
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 `symbols` parameter, so the schema already documents tickers/ISINs, the 50-item cap, and the no-company-names rule. The description restates the cap and ties it to the `truncated` output flag, which is a marginal addition rather than new parameter meaning.
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 quotes) plus a clear scope qualifier ("several Yahoo symbols in one call"), which implicitly but unambiguously separates it from the singular get_quote sibling. An agent can pick the batch tool 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?
"Use this to compare or fetch prices for multiple tickers at once" gives a concrete when-to-use condition. It never names the single-symbol alternative (get_quote) or states an exclusion, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsAnalyst 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 and openWorldHint, so safety is covered. The description adds genuine context beyond them: it enumerates the returned data (buy/hold/sell trend, current/high/low/mean/median price targets) and flags the 'when available' caveat that these fields may be absent.
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, front-loaded with the core purpose and followed by the return contents. No filler or redundant phrasing.
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 spelled out, yet the description helpfully summarizes them. The single well-documented parameter and covered safety profile leave little missing, though a note on empty/absent data handling or sibling differentiation would make it 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?
Only one parameter and schema description coverage is 100%, with the schema itself clarifying ticker/ISIN format and the search-first fallback. The description adds no further parameter meaning, 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?
States a specific verb+resource ('Get analyst recommendation trends and price targets') plus the data shape it returns, so the agent knows exactly what it fetches. It does not explicitly distinguish itself from related siblings like get_upgrades_downgrades or get_estimates, 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?
Usage is only implied by the purpose; there is no explicit when-to-use, when-not, or named alternative. A hint to use 'search' for a company name lives in the schema, not the description, so the description itself adds no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sec_filingsSEC 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 declare readOnly and openWorld, so the safety profile is covered; the description adds real substance on top by listing the returned fields and warning that an empty result is uninformative. It does not mention rate limits or ordering guarantees, but that is minor given the read-only 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?
Front-loads purpose in the first sentence, then elaborates on entry contents and coverage limits without padding. The closing 'empty result says nothing about the symbol' slightly restates the prior coverage caveat but sharpens the interpretation, so it still 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?
An output schema exists, yet the description still summarizes the return shape and, more importantly, sets expectations for empty results - the main failure mode for this tool. Combined with a fully documented 2-parameter schema and read-only annotations, an agent has everything needed to call and interpret it.
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% - the schema already documents 'symbol' format (ticker/ISIN, with search-first guidance) and 'limit' bounds. The description adds no syntax or interpretation beyond that, 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?
States a specific verb ('Get') and resource ('recent SEC filings') scoped to a 'Yahoo symbol', and enumerates what each entry contains (date, type, title, EDGAR URL, exhibit links). No sibling tool covers SEC filings, so the domain is unambiguous against get_news, get_company_info, or get_financials.
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 clear applicability context: only U.S. SEC-registered issuers file there, so non-US symbols, ETFs, funds and crypto return nothing, and an empty result is not evidence about the symbol. It does not name a fallback sibling for non-US coverage, so it stops short of explicit alternative-routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectorSectorARead-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,
or to screen as its industry filter.
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 declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral constraint by repeating that the key is a sector key and not a ticker, preventing a common misuse. It does not mention limits or error behavior, but with annotations the bar is lower.
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-loads the core action and follows with return contents and routing guidance, all of which earn their place. The 'not a ticker' warning is stated twice (once parenthetically, once as a closing line), which is mild redundancy.
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 explained, and the description still usefully previews them. It covers the drill-down path to get_industry and screen. Nothing essential is missing for a two-parameter, read-only browse tool.
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 schema already enumerates every valid sector key plus the limit bounds, so baseline is 3. The description's examples ('technology', 'healthcare') and the key-vs-ticker clarification add only marginal value beyond the schema.
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 ('Browse a market sector') and disambiguates it from its siblings by explaining the key is a Yahoo sector key, not a ticker symbol. An agent can tell it apart from get_industry, get_market, and search 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?
Explicitly routes the agent onward: industry keys feed get_industry for drill-down or screen as an industry filter. This gives clear context and named alternatives. It does not state exclusions (e.g. when to prefer get_market instead), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upgrades_downgradesRating changesARead-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 cover the safety profile (readOnlyHint, openWorldHint), and the description adds useful behavior: entries are the from/to grade and action, ordered most-recent-first, and non-equity symbols fail with an explicit error. It does not mention rate limits or the size/shape of the underlying response beyond the entry description.
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, front-loaded sentences: purpose, return content, and the equity-only constraint. No filler, and the most decision-relevant information comes first.
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, annotations covering safety, and full parameter docs, the description only needs to add what structured fields cannot; it does that via the equity-only error behavior and ordering. The lone gap is that 'recent' is never quantified, leaving the agent unsure of the time window.
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' and 'limit' are already fully documented (including the ISIN/ticker examples and the 'use search first' tip). The description adds no parameter-level syntax or constraints beyond what the schema provides, 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?
States a specific verb and resource ('Get recent analyst rating changes (upgrades/downgrades)') scoped to a Yahoo symbol, which an agent can distinguish from sibling tools like get_recommendations or get_estimates. It also declares the shape of each entry (firm, from/to grade, action), so the agent knows what it will get.
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 when-not condition: 'Equity-only: an ETF, fund or crypto symbol answers with an error that says so,' which steers the agent away from misuse. It does not name an alternative when the symbol is not an equity or when analyst-recommendation summaries are wanted, so routing to siblings 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.
screenStock screenerARead-only
Find stocks by criteria, e.g. dividend payers in a region or cheap large caps.
Fields are these aliases, or a raw Yahoo screener field name:
market: market_cap, price, change_percent, change_52w_percent, volume, avg_volume_3m, beta
valuation: pe_ratio, peg_ratio, price_to_book, price_to_sales, ev_to_ebitda
dividend: dividend_yield, forward_dividend_yield, dividend_growth_years
profitability and growth: return_on_equity, return_on_assets, net_margin, revenue, revenue_growth, eps_growth
balance sheet: debt_to_equity, current_ratio
ownership: insider_percent, institutional_percent, short_percent_of_float
esg_score
categories, eq or is-in only: region (country code, 'us', 'de'), exchange (Yahoo code, 'NMS', 'GER'), sector ('Technology'), industry (a key or name from get_sector)
Percentages are in percent, 3 means 3 %. A loss makes pe_ratio negative, so pair lt with gt 0. region is where a stock is listed, not where the company sits, so 'de' includes foreign companies traded in Germany, and a company appears once per listing. Preferred shares are listings too (on US exchanges symbols like JPM-PD), carrying the common stock's eps and market cap, so their pe_ratio means nothing. Returns total (all matches) and one row per match with price, valuation and dividend figures. A row's dividend_yield can be missing or differ markedly from the filter, which holds for Yahoo's screener data, not for that column. The other filters' figures are not in the rows: get_company_info adds beta and forward P/E, get_holders the ownership shares, get_financials the statements behind margins, growth and debt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. | |
| offset | No | Matches to skip, for the next page. | |
| filters | Yes | Conditions that must all hold, e.g. [{"field": "dividend_yield", "op": "gt", "value": 3}]. | |
| sort_by | No | A numeric field or alias to sort by. | market_cap |
| sort_desc | No | Largest 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 safety is covered. The description adds real behavioral nuance beyond that: results are the total match set with one row per listing, a row's dividend_yield can be missing or diverge from the filter, and preferred shares carry meaningless pe_ratio values. It does not discuss rate limits or latency, but the disclosure is rich.
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-loads purpose, then organizes aliases by category, then records caveats. The alias enumeration is long but each entry is load-bearing reference material. Slightly dense, but no filler sentences.
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 detail return values, yet it still clarifies row contents and the one caveat that matters (dividend_yield mismatch). Combined with alias coverage, op restrictions, and sibling pointers, nothing an agent needs to invoke this 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?
Although schema coverage is 100%, the schema only says field is 'an alias or a raw Yahoo screener field'. The description goes well beyond it by enumerating every valid alias grouped by category, and by documenting the op semantics (categories/region/exchange/sector/industry accept eq or is-in only), the percent convention, and the btwn value shape.
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 ('Find stocks by criteria') and immediately scopes it with concrete examples ('dividend payers in a region or cheap large caps'). An agent can distinguish this from the many sibling getters (get_quote, get_financials) because it is the only filter-driven discovery tool.
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 clear context via examples and explicitly routes the agent to companions for data the rows lack ('get_company_info adds beta and forward P/E, get_holders the ownership shares'). It does not, however, state when to prefer the sibling 'search' tool over screening, so the alternative-selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch instrumentsARead-only
Search Yahoo Finance by company name, ticker symbol, or ISIN.
Use this to turn a company name into a Yahoo symbol that the other
tools accept. They take an ISIN directly. Returns up to limit matches
(1-25), each with its symbol, name, exchange, instrument type, sector and
industry.
| 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 cover safety (readOnlyHint, openWorldHint), so the bar is lower; the description adds the bounded result window (1-25), the default-capped count, and the exact fields returned, which the annotations do not convey.
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-loads the purpose, then the routing advice, then the return shape, in four short sentences with little waste, though the field list slightly overlaps the output schema.
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?
Covers purpose, routing, input types, result bounds, and returned fields; since an output schema exists, no further return-value detail is required for an agent to call it 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 coverage is 100% and both params are described, including the limit's 1-25 range; the description restates rather than extends this, 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 (Search) and resource (Yahoo Finance) plus accepted input types, and distinguishes itself from all sibling get_* tools by framing itself as the symbol-resolution entry point.
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 states when to use it (turn a company name into a Yahoo symbol) and names an alternative path (other tools take an ISIN directly), giving the agent clear routing guidance.
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.
23 tool updates
v0.8.6- Changed
get_calendar3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_calendarArguments" - removed
Output schema / titleRemoved value: -"get_calendarDictOutput"
- Changed
get_company_info3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_company_infoArguments" - removed
Output schema / titleRemoved value: -"get_company_infoDictOutput"
- Changed
get_dividends3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_dividendsArguments" - removed
Output schema / titleRemoved value: -"get_dividendsDictOutput"
- Changed
get_earnings4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_earningsArguments" - removed
Output schema / titleRemoved value: -"get_earningsDictOutput"
- Changed
get_estimates3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_estimatesArguments" - removed
Output schema / titleRemoved value: -"get_estimatesDictOutput"
- Changed
get_financials5 fields changed- removed
Input schema / properties / freq / titleRemoved value: -"Freq" - removed
Input schema / properties / statement / titleRemoved value: -"Statement" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_financialsArguments" - removed
Output schema / titleRemoved value: -"get_financialsDictOutput"
- Changed
get_fund_data4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_fund_dataArguments" - removed
Output schema / titleRemoved value: -"get_fund_dataDictOutput"
- Changed
get_history7 fields changed- removed
Input schema / properties / end / titleRemoved value: -"End" - removed
Input schema / properties / interval / titleRemoved value: -"Interval" - removed
Input schema / properties / period / titleRemoved value: -"Period" - removed
Input schema / properties / start / titleRemoved value: -"Start" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_historyArguments" - removed
Output schema / titleRemoved value: -"get_historyDictOutput"
- Changed
get_holders4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_holdersArguments" - removed
Output schema / titleRemoved value: -"get_holdersDictOutput"
- Changed
get_industry4 fields changed- removed
Input schema / properties / key / titleRemoved value: -"Key" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / titleRemoved value: -"get_industryArguments" - removed
Output schema / titleRemoved value: -"get_industryDictOutput"
- Changed
get_insider_activity4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_insider_activityArguments" - removed
Output schema / titleRemoved value: -"get_insider_activityDictOutput"
- Changed
get_market3 fields changed- removed
Input schema / properties / key / titleRemoved value: -"Key" - removed
Input schema / titleRemoved value: -"get_marketArguments" - removed
Output schema / titleRemoved value: -"get_marketDictOutput"
- Changed
get_news4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_newsArguments" - removed
Output schema / titleRemoved value: -"get_newsDictOutput"
- Changed
get_options4 fields changed- removed
Input schema / properties / expiration / titleRemoved value: -"Expiration" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_optionsArguments" - removed
Output schema / titleRemoved value: -"get_optionsDictOutput"
- Changed
get_quote3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_quoteArguments" - removed
Output schema / titleRemoved value: -"get_quoteDictOutput"
- Changed
get_quotes3 fields changed- removed
Input schema / properties / symbols / titleRemoved value: -"Symbols" - removed
Input schema / titleRemoved value: -"get_quotesArguments" - removed
Output schema / titleRemoved value: -"get_quotesDictOutput"
- Changed
get_recommendations3 fields changed- removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_recommendationsArguments" - removed
Output schema / titleRemoved value: -"get_recommendationsDictOutput"
- Changed
get_sec_filings4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_sec_filingsArguments" - removed
Output schema / titleRemoved value: -"get_sec_filingsDictOutput"
- Changed
get_sector4 fields changed- removed
Input schema / properties / key / titleRemoved value: -"Key" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / titleRemoved value: -"get_sectorArguments" - removed
Output schema / titleRemoved value: -"get_sectorDictOutput"
- Changed
get_shares6 fields changed- removed
Input schema / properties / end / titleRemoved value: -"End" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / start / titleRemoved value: -"Start" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_sharesArguments" - removed
Output schema / titleRemoved value: -"get_sharesDictOutput"
- Changed
get_upgrades_downgrades4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / symbol / titleRemoved value: -"Symbol" - removed
Input schema / titleRemoved value: -"get_upgrades_downgradesArguments" - removed
Output schema / titleRemoved value: -"get_upgrades_downgradesDictOutput"
- Added
screen - Changed
search5 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"searchArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"searchOutput"
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 23 tools
Each tool targets a clearly distinct data type or action (quotes, history, financials, dividends, news, options, etc.). The single-vs-batch quote pair and the minor overlap between get_calendar/get_earnings are well explained in descriptions, so an agent can reliably select the right tool.
All tool names use snake_case, with a strong and predictable get_<resource> pattern for retrieval and search/screen for discovery. The two verb-only names are natural exceptions and do not break consistency.
23 tools is on the heavy side for an MCP server; while each tool maps to a distinct Yahoo Finance endpoint, the surface is large enough to feel overwhelming and could benefit from consolidation or grouping.
The set covers the broad Yahoo Finance domain very well: lookup, quotes, historical prices, profiles, financial statements, dividends, news, calendar, shares, analyst data, ownership, insider activity, SEC filings, options, fund data, sector/industry browsing, market status, and screening. No significant gaps in the core lifecycle are apparent.
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
MCP server for Financial Modeling Prep API with 250+ financial data tools
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.
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.1845 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.21 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.-