Skip to main content
Glama
LurigeLars

yfinance-mcp

by LurigeLars

yfinance-mcp

CI CodeQL Python License

A small, read-only Model Context Protocol (MCP) server for Yahoo Finance news and options-market research through the upstream yfinance package.

It gives AI clients a bounded, typed way to inspect option chains, positioning/activity summaries, theoretical greeks, gamma concentration, scenario analysis and Yahoo Finance news without turning the MCP into a generic market-data or brokerage interface.

Not execution infrastructure. Yahoo Finance data can be delayed or incomplete. Quotes, open interest and model outputs are analytical context, not broker-grade or execution-grade data.

Why this project exists

The upstream yfinance package is useful for Python applications, but an AI agent needs a different interface:

  • a small set of explicit tools rather than arbitrary library access.

  • bounded responses so option chains and news cannot grow without control.

  • normalized output with predictable semantics.

  • deterministic summaries that do not depend on free-form model interpretation.

  • clear separation between observed market data and theoretical calculations.

  • no brokerage login, account access or order execution.

This server is intentionally narrow. It exists primarily to fill two research gaps:

  1. Options-market structure — expirations, chains, volume/open-interest structure, IV summaries, theoretical greeks, unsigned gamma concentration and bounded scenarios.

  2. Yahoo Finance news discovery — compact per-symbol and batch discovery with source provenance preserved.

It is not intended to become a general Yahoo Finance MCP for quotes, fundamentals, portfolio management or trading.

Related MCP server: polygon-mcp

What it can do

Area

Capability

News

Discover recent Yahoo Finance news for one symbol or a bounded symbol batch

Expirations

List available option expiration dates

Chains

Read calls, puts or both for one expiration

Positioning

Summarize call/put volume, OI, ratios, IV and notable strikes

Surface

Compare a bounded sequence of expirations

Activity

Rank contracts by volume/OI, volume or open interest

Greeks

Calculate Black-Scholes-Merton theoretical greeks

Risk map

Rank unsigned gamma concentration by strike

Scenarios

Reprice contracts under explicit spot, IV and time changes

Everything is read-only.

What it deliberately does not do

  • brokerage authentication.

  • portfolio or account access.

  • order placement or execution.

  • realtime streaming.

  • generic Yahoo quote/fundamental coverage.

  • claims about trade aggressor side, sweeps or opening/closing flow.

  • inference of dealer long/short gamma from open interest alone.

Those boundaries are deliberate. New tools should solve a concrete research gap rather than merely expose another upstream endpoint.

Architecture

MCP client
   |
   v
yfinance-mcp
   |
   +--> bounded news normalization
   |
   +--> options service / deterministic analytics
   |
   v
upstream yfinance package
   |
   v
Yahoo Finance

For remote deployments, an optional gateway can sit in front of the loopback MCP server:

remote MCP client
   -> Cloudflare Access
   -> yfinance gateway
   -> loopback yfinance-mcp HTTP server
   -> yfinance / Yahoo Finance

The public gateway exposes only the reviewed tool allowlist and does not add credentials or brokerage capability.

Data source and limitations

yfinance is an independent open-source library that retrieves data from Yahoo Finance. This project is not affiliated with Yahoo, Yahoo Finance or the yfinance project.

Important limitations:

  • Yahoo Finance option quotes may be delayed.

  • Open interest is not a tick-by-tick realtime signal.

  • A high volume/OI ratio does not by itself establish unusual institutional flow.

  • Yahoo data does not reveal aggressor side or reliably distinguish opening from closing option trades.

  • Missing values remain unknown; they are not silently converted to zero.

  • Retrieval time is not the same thing as market timestamp.

Use venue or broker data when execution quality matters.

The yfinance project notes that Yahoo Finance data is intended for personal use and that users are responsible for complying with Yahoo's terms. Review the upstream yfinance documentation and Yahoo terms before using downloaded data beyond personal research.

Quick start

Requirements

  • Python 3.12+

  • uv

  • no API key or account credentials

Clone and install the locked environment:

git clone https://github.com/LurigeLars/yfinance-mcp.git
cd yfinance-mcp
uv sync --locked

Run over stdio:

uv run yfinance-mcp

Example MCP configuration:

{
  "mcpServers": {
    "yfinance": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/yfinance-mcp",
        "--locked",
        "yfinance-mcp"
      ]
    }
  }
}

Tool catalog

The server exposes ten bounded read-only tools.

news_get

Returns up to 50 Yahoo Finance news items for one symbol.

Output is normalized to fields such as publisher, publication timestamp, canonical URL, upstream ID, related tickers and content type. Treat this as discovery data: material claims should be verified against primary sources or authoritative wires.

news_batch

Queries up to 100 unique symbols with an explicit per-symbol bound.

Partial upstream failures are returned explicitly in failed_symbols; successful symbols are retained. Syndicated duplicates are intentionally left for downstream canonicalization.

option_expirations

Returns the expiration dates Yahoo Finance currently exposes for an optionable symbol.

option_chain

Returns calls, puts or both for one expiration, including available upstream fields such as:

  • contract symbol.

  • last trade date.

  • strike.

  • last price.

  • bid / ask.

  • volume.

  • open interest.

  • implied volatility.

  • in-the-money flag.

  • contract size.

  • currency.

Optional filters can narrow strike, volume and open-interest ranges. There is no hidden default row limit. limit_per_side is available when the caller explicitly wants a bounded response.

Underlying quote metadata is projected into a small allowlisted schema rather than forwarding Yahoo's full auxiliary payload.

option_positioning_summary

Produces a compact per-expiration summary with:

  • total call and put volume.

  • total call and put open interest.

  • put/call volume and OI ratios.

  • highest-volume strikes.

  • highest-OI strikes.

  • highest volume/OI contracts where OI is positive.

  • IV distribution statistics.

  • underlying quote metadata.

Absolute volume and OI are retained beside ratios so a large ratio cannot hide a tiny denominator.

option_surface_summary

Summarizes a bounded consecutive expiration window (default 8, maximum 12), including:

  • days to expiry.

  • call/put volume and OI totals.

  • put/call ratios.

  • median IV by side.

  • nearest-to-spot strike with call/put IV.

  • highest combined-OI strikes.

start_index pages through the expiration list and the response preserves the explicit selection bound.

option_activity_summary

Ranks contracts across a bounded expiration window using explicit minimum volume and open-interest thresholds.

Ranking can use:

  • volume/OI ratio.

  • absolute volume.

  • absolute open interest.

The output includes contract-level bid/ask, IV, strike distance from spot and last-trade timestamp.

This is activity evidence, not directional order flow.

option_greeks

Calculates Black-Scholes-Merton theoretical:

  • price.

  • delta.

  • gamma.

  • theta per day.

  • vega per IV point.

  • rho per rate point.

The annualized risk-free rate is an explicit input. Continuous dividend yield defaults to zero.

spot_override lets callers supply a fresher underlying price from another source instead of relying on Yahoo's potentially delayed regular-market quote.

option_risk_map

Weights model gamma by open interest and contract multiplier to rank strike-level gamma concentration.

The result is deliberately unsigned. Open interest does not reveal who is long or short, so the server does not label this "dealer gamma" or infer dealer direction.

The tool also returns a simple one-standard-deviation ATM implied move from available contract IVs.

option_scenario

Reprices a bounded single-expiration contract set under explicit changes to:

  • underlying spot.

  • implied volatility, expressed as absolute volatility points.

  • time forward.

Contracts can be ranked by open interest, absolute model-price change or unsigned gamma concentration.

These are theoretical model changes, not executable P&L forecasts.

Model assumptions

The theoretical options analytics use Black-Scholes-Merton with ACT/365 and assume expiry at 16:00 America/New_York.

US equity and ETF options are generally American-style, so this is an approximation. The model does not capture, among other things:

  • early exercise.

  • discrete dividend timing.

  • borrow constraints.

  • full volatility-surface dynamics.

  • market microstructure.

Use spot_override with a fresher underlying price when available, and use venue or broker quotes for execution decisions.

HTTP mode

The same tool surface can run over Streamable HTTP:

uv run yfinance-mcp-http

Default endpoint:

http://127.0.0.1:8772/mcp

Environment variables:

  • YFINANCE_MCP_HOST — bind host.

  • YFINANCE_MCP_PORT — bind port.

  • YFINANCE_MCP_ALLOW_NON_LOOPBACK=1 — explicit opt-in required for a non-loopback bind.

A non-loopback host is rejected unless that opt-in is set.

Windows background task

The included installer creates a per-user, limited-privilege Scheduled Task and keeps the HTTP server on loopback:

.\scripts\windows\install-http-task.ps1

When the local Docker-MCP host-port registry is present, the installer reserves a stable port for yfinance-mcp-http rather than silently moving the service between ports.

A bounded live provider smoke test is available after installation:

.\.venv\Scripts\python.exe .\scripts\smoke_options.py NVDA

Protected remote gateway

Do not expose the unauthenticated Python MCP HTTP endpoint directly to the Internet.

A separate Node gateway is included for deployments protected by Cloudflare Access. It:

  • validates the Access JWT independently.

  • strips client credentials before forwarding.

  • exposes only the ten reviewed read-only tools.

  • applies request/rate limits.

  • compacts MCP schemas/results for model use.

  • keeps the Python MCP endpoint on loopback.

Copy the example environment file:

Copy-Item public\gateway.env.example public\gateway.env

Fill in deployment-specific Access values, keep the real file ignored, then install the gateway:

.\scripts\windows\install-public-gateway.ps1 -AccessAudience <audience>

No real hostname, identity, audience, tunnel ID, token or credential belongs in Git.

Development

Install development dependencies:

uv sync --locked --extra dev

Run lint and tests:

uv run --no-sync ruff check .
uv run --no-sync pytest
node --test tests/gateway/*.test.mjs

The repository runs:

  • CI on Python 3.12 and 3.13.

  • gateway tests.

  • static analysis.

  • CodeQL.

  • Dependabot.

  • a scheduled upstream watch for locked yfinance and FastMCP releases.

Dependency updates should continue through normal review rather than by vendoring upstream yfinance code into this repository.

Security and privacy

This repository is public.

Do not commit:

  • credentials or access tokens.

  • cookies.

  • personal identifiers or email addresses.

  • workstation-specific paths.

  • private domains/endpoints.

  • Cloudflare tunnel identifiers.

  • brokerage or account data.

See SECURITY.md for vulnerability reporting.

License

Apache-2.0 for this MCP wrapper. Market data retrieved from Yahoo Finance remains subject to the applicable upstream data terms.

Available Tools

8 tools
option_activity_summaryOption Activity SummaryC
Read-onlyIdempotent

Rank bounded multi-expiry option activity without inferring trade direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
symbolYes
sort_byNovolume_open_interest_ratio
min_volumeNo
start_indexNo
max_expiriesNo
min_open_interestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds one genuine behavioral fact — it will not infer trade direction (no bullish/bearish classification) — which is useful context. But it says nothing about bounding mechanics, ranking behavior, or result pagination.

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

Conciseness3/5

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

A single sentence with no filler, so it is structurally tight. But brevity here comes at the cost of substance, and 'bounded' is front-loaded jargon that does not orient the reader.

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

Completeness2/5

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

An output schema exists so return values need not be described, which helps. However, for a 7-parameter, 0%-coverage tool, the description leaves the filtering, sorting, and pagination contract entirely undocumented, which is inadequate.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema names parameters without explaining them, and the description does not compensate. Seven parameters (top_n, sort_by enum, min_volume, min_open_interest, max_expiries, start_index) receive no meaning, units, or interaction notes beyond the vague word 'bounded'.

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

Purpose3/5

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

The verb 'rank' and resource 'option activity' are identifiable, and 'multi-expiry' gives scope. However, 'bounded' is undefined and nothing distinguishes it from siblings like option_positioning_summary or option_surface_summary, which also summarize options data.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the seven sibling option tools, nor any prerequisites such as valid symbol format or market-hours assumptions. Usage must be inferred entirely from the name.

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

option_chainOption ChainC
Read-onlyIdempotent

Return a filtered contract-level option chain for one expiration.

ParametersJSON Schema
NameRequiredDescriptionDefault
expiryYes
symbolYes
max_strikeNo
min_strikeNo
min_volumeNo
option_typeNoboth
limit_per_sideNo
min_open_interestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered elsewhere. The description adds only the word 'filtered' and 'contract-level', giving no insight into result size, pagination, live vs delayed data, or what the filters actually gate.

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

Conciseness3/5

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

The single sentence is front-loaded and free of waste, which is good. However, for an 8-parameter, 0%-documented tool it is under-specified rather than truly concise, so it cannot earn a top score.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but the description fails on the input side: eight parameters with no schema descriptions receive zero compensating explanation. For a contract-level chain endpoint this leaves the definition materially incomplete.

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

Parameters1/5

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

Schema description coverage is 0% across 8 parameters, and the description does not mention a single one of them. Core filters like min_strike/max_strike, min_volume, min_open_interest, option_type and limit_per_side are entirely undocumented, so an agent must guess their semantics and units.

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

Purpose4/5

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

States a specific verb ('Return'), resource ('contract-level option chain') and scope ('one expiration'), which distinguishes it from option_expirations (list of expirations) and the summary tools. It stops short of naming an explicit sibling alternative, so it is clear but not fully differentiated.

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

Usage Guidelines2/5

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

No when-to-use guidance is given beyond the implied prerequisite of 'one expiration'. It never states how this differs from option_greeks, option_surface_summary, or the other siblings, leaving the agent to infer selection criteria from names alone.

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

option_expirationsOption ExpirationsC
Read-onlyIdempotent

Return available option expiration dates for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, covering the safety profile. The description adds nothing beyond them — no date range, sorting order, coverage limits, or latency characteristics for what is a market-data lookup.

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

Conciseness4/5

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

A single front-loaded sentence with zero wasted words and no redundancy. It is efficient, though almost to the point of under-specification for a data-returning tool.

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

Completeness3/5

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

With an output schema present, return format need not be explained, and annotations cover safety, so the remaining burden is light. Still, for a market-data tool with three sibling summaries, the description omits any hint of data freshness, exchange coverage, or how results relate to the other option tools.

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

Parameters3/5

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

Schema coverage is 0% and the single 'symbol' property carries no description, so the description is the only signal, and it only says the dates are 'for a symbol'. It confirms the parameter's role but adds no format or expected-value guidance.

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

Purpose4/5

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

States a specific verb (Return) and resource (available option expiration dates) scoped to a symbol. An agent can distinguish it from option_chain or option_greeks, though the description never explicitly names those siblings.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance, and no mention of alternatives among the seven option_* siblings. Usage is only inferable from the tool name and shallow domain knowledge.

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

option_greeksOption GreeksC
Read-onlyIdempotent

Return Black-Scholes-Merton theoretical prices and greeks for one expiry.

ParametersJSON Schema
NameRequiredDescriptionDefault
expiryYes
symbolYes
max_strikeNo
min_strikeNo
option_typeNoboth
spot_overrideNo
dividend_yieldNo
limit_per_sideNo
risk_free_rateYes
min_open_interestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations by specifying the Black-Scholes-Merton model and that prices are theoretical, which is important for interpreting results. It does not cover auth, rate limits, or pagination, but the output schema exists to cover return structure.

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

Conciseness4/5

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

The definition is a single front-loaded sentence with no filler or redundant clauses. It is appropriately concise for a one-line description, though its brevity for a 10-parameter computation tool leaves it structurally thin.

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

Completeness2/5

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

The output schema and annotations cover return values and safety behavior, but the description is not complete enough for an agent to invoke a 10-parameter tool with 0% schema description coverage. It names only the general calculation model and expiry scope, leaving required and optional parameters largely undocumented.

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

Parameters1/5

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

Schema description coverage is 0% across 10 parameters, so the description must compensate and does not. It mentions only 'expiry' obliquely and provides no meaning for required inputs like symbol and risk_free_rate, nor for optional parameters such as spot_override, dividend_yield, option_type, strike filters, open-interest filtering, or limit_per_side.

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

Purpose4/5

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

The description states a specific verb and resource: 'Return Black-Scholes-Merton theoretical prices and greeks for one expiry.' It distinguishes the output type from generic option-chain siblings, though it does not explicitly name an alternative tool. Clear enough for an agent to know it computes per-expiry theoretical values.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no when-not-to-use conditions, and no named alternatives. The phrase 'for one expiry' implies the tool is expiry-scoped, but the agent is left to infer this from context rather than from stated guidelines.

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

option_positioning_summaryOption Positioning SummaryB
Read-onlyIdempotent

Summarize volume, open interest, IV and concentration for one expiration.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
expiryYes
symbolYes
max_strikeNo
min_strikeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds what aggregates are produced (volume, OI, IV, concentration), but says nothing about how concentration is computed, aggregation windows, or data freshness.

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

Conciseness4/5

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

A single tight sentence with the resource and metric list front-loaded and no filler. It is efficient, though extremely terse given the tool's five parameters.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, with 0% parameter coverage across five inputs and ambiguous overlap with sibling summary tools, the definition leaves real gaps an agent would need filled to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is 0% across 5 parameters, so top_n, min_strike, max_strike, symbol, and expiry carry no documented meaning anywhere. The description names output metrics but never explains any input parameter, failing to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb (Summarize) and the exact metrics computed (volume, open interest, IV, concentration) scoped to one expiration. This distinguishes it reasonably well from option_chain and option_greeks, though it does not explicitly differentiate from the similarly-named option_surface_summary and option_activity_summary siblings.

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

Usage Guidelines2/5

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

The phrase 'for one expiration' implies a scope, but there is no statement of when to choose this over option_activity_summary, option_surface_summary, or option_chain. No prerequisites or exclusions are provided.

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

option_risk_mapOption Risk MapB
Read-onlyIdempotent

Map unsigned OI-weighted gamma concentration without inferring dealer direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
expiryYes
symbolYes
max_strikeNo
min_strikeNo
spot_overrideNo
dividend_yieldNo
risk_free_rateYes
min_open_interestNo
contract_multiplierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, covering the safety profile. The description adds one genuinely useful behavioral constraint — the output is unsigned and deliberately makes no dealer-direction claim — but says nothing about data source requirements, latency, or failure modes.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the scope qualifier arrives before any elaboration. Nothing in it is redundant.

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

Completeness2/5

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

Output schema exists, so return values need not be described, but with 10 configuration parameters at 0% schema coverage and 3 required inputs, the description leaves far too much for the agent to guess about symbol/expiry formats and how the optional pricing knobs behave.

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

Parameters2/5

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

Schema description coverage is 0% across 10 parameters, and the description explains none of them. Only a faint hint exists that open interest matters (via 'OI-weighted'), leaving symbol format, expiry format, risk_free_rate, strike bounds, spot_override, dividend_yield and contract_multiplier entirely undocumented in both schema and prose.

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

Purpose4/5

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

States a specific verb ('Map') and resource ('OI-weighted gamma concentration') with a meaningful scope qualifier ('unsigned', 'without inferring dealer direction') that separates it from directional-analysis siblings like option_positioning_summary. It is jargon-dense but an agent can tell what it produces.

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

Usage Guidelines2/5

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

No indication of when to choose this over option_greeks, option_positioning_summary, or option_surface_summary, and no preconditions stated. The 'without inferring dealer direction' clause implies a boundary but never names an alternative or a selecting condition.

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

option_scenarioOption ScenarioC
Read-onlyIdempotent

Stress one option expiry across spot, IV and time using Black-Scholes-Merton.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
expiryYes
symbolYes
sort_byNoopen_interest
max_strikeNo
min_strikeNo
option_typeNoboth
days_forwardNo
spot_overrideNo
dividend_yieldNo
risk_free_rateYes
spot_change_pctYes
iv_change_pointsNo
min_open_interestNo
contract_multiplierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already establish readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds the meaningful context that this is a BSM-model stress computation (a model output, not observed market data), which matters. It does not explain output scope (top_n rows, sort_by behavior) or how spot_override/days_forward interact.

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

Conciseness3/5

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

A single front-loaded sentence with no filler, which is good. However, for a 15-parameter model tool with no other documentation anywhere, one sentence is under-specified rather than genuinely concise.

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

Completeness2/5

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

An output schema exists, so return-format explanation is not owed. But with 15 parameters, 0% schema coverage, and no usage guidance, the description leaves an agent unable to determine which parameters are required, what units spot_change_pct or iv_change_points use, or when to choose this over option_greeks or option_risk_map.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters. The description names the three stress dimensions, which loosely maps to spot_change_pct, iv_change_points, and days_forward, but leaves the remaining twelve parameters (top_n, sort_by, strike bounds, option_type, min_open_interest, contract_multiplier, dividend_yield, spot_override, etc.) undocumented in both schema and description.

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

Purpose4/5

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

States a specific verb ('stress'), resource ('one option expiry'), the dimensions varied (spot, IV, time), and the pricing model (Black-Scholes-Merton). This distinguishes it from chain/greeks/surface siblings, though it never names an alternative explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no pointer to a sibling. An agent must infer that this is for scenario/stress analysis rather than live chain inspection. The description gives no exclusions despite seven related option tools being available.

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

option_surface_summaryOption Surface SummaryC
Read-onlyIdempotent

Summarize option positioning across up to 12 consecutive expirations.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
symbolYes
start_indexNo
max_expiriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so safety and idempotency are covered. The description adds the scope constraint of 12 expirations, which is useful operational context. But it omits what 'positioning' summary actually contains and any data-source or rate-limit behavior.

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

Conciseness4/5

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

One compact sentence with no filler; the scope constraint is front-loaded. It is appropriately sized, though the brevity comes at the cost of leaving parameters undocumented.

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

Completeness2/5

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

An output schema exists, so return values need not be explained. However, with 4 parameters at 0% schema description coverage and no sibling differentiation, the description is too thin for an agent to invoke the tool correctly without guessing at parameter meanings.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for four undocumented parameters (symbol, top_n, start_index, max_expiries). It mentions only the expiry window, leaving top_n, start_index, and max_expiries entirely unexplained. This is a significant gap given zero schema documentation.

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

Purpose3/5

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

States a verb (Summarize) and resource (option positioning) with a scope constraint (up to 12 consecutive expirations). However, it does not distinguish itself from siblings like option_positioning_summary, whose name suggests overlapping purpose. The agent must guess how this differs from the more specific-sounding sibling.

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

Usage Guidelines2/5

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

No guidance on when to use this versus option_positioning_summary, option_chain, or option_expirations. The only contextual clue is the scope, but there is no explicit when-to-use or when-not-to-use statement, leaving selection entirely to inference.

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

Tool Schema Changelog

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

  1. 8 tool updatesv0.5.0
    • First observedoption_activity_summary
    • First observedoption_chain
    • First observedoption_expirations
    • First observedoption_greeks
    • First observedoption_positioning_summary
    • First observedoption_risk_map
    • First observedoption_scenario
    • First observedoption_surface_summary

TDQS

B3.1/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clear distinct purposes, but the three summary tools (option_positioning_summary, option_surface_summary, option_activity_summary) overlap significantly in scope and could be confused despite the descriptions clarifying expiry ranges and ranking intent.

Naming Consistency5/5

All tool names follow a consistent option_ prefix with snake_case, using predictable noun-based naming that is easy to parse and remember.

Tool Count5/5

Eight tools is well-scoped for an options analytics server, with each tool covering a distinct analytical aspect without excessive redundancy.

Completeness3/5

The set covers core options analytics (expirations, chain, greeks, risk, scenario), but as a yfinance-mcp server it lacks any tools for underlying stock quotes, historical prices, or fundamentals, which are notable gaps for the implied broad financial domain.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables advanced options analysis and strategy evaluation through Yahoo Finance data. Supports calculating Greeks, analyzing risk metrics, and evaluating credit spreads, cash secured puts, and covered calls strategies.
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    Enables querying real-time and historical financial market data for stocks, options, forex, and crypto, including quotes, trades, technical indicators, and reference data through a set of MCP tools.
    71
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables querying stock data, financial information, news, and historical prices from Yahoo Finance through a set of MCP tools.
    5
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that exposes Yahoo Finance data through tools for searching instruments, fetching quotes, history, company info, financials, dividends, news, recommendations, and options. Enables AI assistants to answer market-data questions using natural language.
    22
    1
    MIT