Skip to main content
Glama
twolven

StockScreen MCP Server

by twolven

StockScreen MCP サーバー

Yahoo!ファイナンスを通じて包括的な株式スクリーニング機能を提供するモデルコンテキストプロトコル(MCP)サーバー。LLMがテクニカル、ファンダメンタル、オプションの基準に基づいて株式をスクリーニングできるようにし、ウォッチリストの管理と結果の保存をサポートします。

特徴

株式スクリーニング

  • テクニカル分析スクリーニング

    • 価格と数量フィルター

    • 移動平均線(20、50、200 SMA)

    • RSI指標

    • 平均真の範囲(ATR)

    • トレンド分析(1日、5日、20日の変化)

    • MA距離計算

  • 基礎スクリーニング

    • 時価総額フィルター

    • P/E比率分析

    • 配当利回り基準

    • 収益成長指標

    • ETF固有の指標(運用資産残高、経費率)

  • オプションスクリーニング

    • インプライドボラティリティ(IV)フィルター

    • オプション取引量と建玉

    • プット/コール比率分析

    • ビッド・アスク・スプレッド評価

    • 決算日の近接性チェック

データ管理

  • ウォッチリストの作成と管理

  • スクリーニング結果の保存

  • デフォルトのシンボルカテゴリ

    • メガキャップ(2,000億ドル以上)

    • 大型株(100億ドル~2,000億ドル)

    • ミッドキャップ(20億ドル~100億ドル)

    • 小型株(3億ドル~20億ドル)

    • マイクロキャップ(3億ドル未満)

    • ETF

Related MCP server: Yahoo Finance MCP Server

インストール

# Install dependencies
pip install -r requirements.txt

# Clone the repository
git clone https://github.com/twolven/mcp-stockscreen.git
cd mcp-stockscreen

使用法

  1. Claude 構成に追加します。claude claude-desktop-config.jsonで、 mcpServersセクションに以下を追加します。

{
    "mcpServers": {
        "stockscreen": {
            "command": "python",
            "args": ["path/to/stockscreen.py"]
        }
    }
}

「path/to/stockscreen.py」を、stockscreen.py ファイルを保存した場所へのフルパスに置き換えます。

利用可能なツール

利用可能なツール

  1. run_stock_screen

技術審査基準

{
    "screen_type": "technical",
    "criteria": {
        "min_price": float,              # Minimum stock price
        "max_price": float,              # Maximum stock price
        "min_volume": int,               # Minimum average volume
        "above_sma_200": bool,           # Price above 200-day SMA
        "above_sma_50": bool,            # Price above 50-day SMA
        "min_rsi": float,                # Minimum RSI value
        "max_rsi": float,                # Maximum RSI value
        "max_atr_pct": float,            # Maximum ATR as percentage of price
        "category": str                  # Optional: market cap category filter
    },
    "watchlist": str,                    # Optional: name of watchlist to screen
    "save_result": str                   # Optional: name to save results
}

基本的なスクリーニング基準

{
    "screen_type": "fundamental",
    "criteria": {
        "min_market_cap": float,         # Minimum market capitalization
        "min_pe": float,                 # Minimum P/E ratio
        "max_pe": float,                 # Maximum P/E ratio
        "min_dividend": float,           # Minimum dividend yield (%)
        "min_revenue_growth": float,     # Minimum revenue growth rate
        "category": str,                 # Optional: market cap category filter
        
        # ETF-specific criteria
        "min_aum": float,                # Minimum assets under management
        "max_expense_ratio": float,      # Maximum expense ratio
        "min_volume": float              # Minimum trading volume
    },
    "watchlist": str,                    # Optional: name of watchlist to screen
    "save_result": str                   # Optional: name to save results
}

オプション画面の基準

{
    "screen_type": "options",
    "criteria": {
        "min_iv": float,                 # Minimum implied volatility (%)
        "max_iv": float,                 # Maximum implied volatility (%)
        "min_option_volume": int,        # Minimum options volume
        "min_put_call_ratio": float,     # Minimum put/call ratio
        "max_spread": float,             # Maximum bid-ask spread (%)
        "min_days_to_earnings": int,     # Minimum days until earnings
        "max_days_to_earnings": int,     # Maximum days until earnings
        "category": str                  # Optional: market cap category filter
    },
    "watchlist": str,                    # Optional: name of watchlist to screen
    "save_result": str                   # Optional: name to save results
}

ニューススクリーン基準

{
    "screen_type": "news",
    "criteria": {
        "keywords": List[str],           # Keywords to search for in news
        "exclude_keywords": List[str],    # Keywords to exclude from results
        "min_days": int,                 # Minimum days back to search
        "max_days": int,                 # Maximum days back to search
        "management_changes": bool,       # Filter for management changes
        "require_all_keywords": bool,     # Require all keywords to match
        "category": str                  # Optional: market cap category filter
    },
    "watchlist": str,                    # Optional: name of watchlist to screen
    "save_result": str                   # Optional: name to save results
}

カスタムスクリーン基準

{
    "screen_type": "custom",
    "criteria": {
        "category": str,                 # Optional: market cap category filter
        "technical": {
            # Any technical criteria from above
        },
        "fundamental": {
            # Any fundamental criteria from above
        },
        "options": {
            # Any options criteria from above
        },
        "news": {
            # Any news criteria from above
        }
    },
    "watchlist": str,                    # Optional: name of watchlist to screen
    "save_result": str                   # Optional: name to save results
}

カテゴリ値

フィルタリングに利用可能な時価総額のカテゴリー:

  • "mega_cap": >2000億ドル

  • 「大型株」: 100億ドル~2,000億ドル

  • 「ミッドキャップ」: 20億ドル~100億ドル

  • 「small_cap」: 3億ドル~20億ドル

  • 「マイクロキャップ」: <3億ドル

  • 「etf」: ETF商品

  1. manage_watchlist

{
    "action": str,                       # Required: "create", "update", "delete", "get"
    "name": str,                         # Required: watchlist name (1-50 chars, alphanumeric with _ -)
    "symbols": List[str]                 # Required for create/update: list of stock symbols
}
  1. get_screening_result

{
    "name": str                          # Required: name of saved screening result
}

応答形式

テクニカルスクリーンレスポンス

{
    "screen_type": "technical",
    "criteria": dict,                    # Original criteria used
    "matches": int,                      # Number of matching stocks
    "results": [                         # List of matching stocks
        {
            "symbol": str,
            "price": float,
            "volume": float,
            "rsi": float,
            "sma_20": float,
            "sma_50": float,
            "sma_200": float,
            "atr": float,
            "atr_pct": float,
            "price_changes": {
                "1d": float,             # 1-day price change %
                "5d": float,             # 5-day price change %
                "20d": float             # 20-day price change %
            },
            "ma_distances": {
                "pct_from_20sma": float,
                "pct_from_50sma": float,
                "pct_from_200sma": float
            }
        }
    ],
    "rejected": [                        # List of stocks that didn't match
        {
            "symbol": str,
            "rejection_reasons": List[str]
        }
    ],
    "timestamp": str
}

クロードの使用プロンプト

株式スクリーニング機能を提供するストックスクリーンツールを有効にしました。主に3つの機能をご利用いただけます。

  1. さまざまな基準タイプで株式をスクリーニングします。

    • テクニカル指標: 価格、出来高、RSI、移動平均、ATR

    • ファンダメンタルズ:時価総額、PER、配当、成長

    • オプション: IV、出来高、決算日

    • カスタム: 複数の条件タイプを組み合わせる

  2. ウォッチリストを管理する:

    • シンボルリストの作成と更新

    • 既存のウォッチリストを削除する

    • ウォッチリストの内容を取得する

  3. 保存されたスクリーニング結果にアクセスします。

    • 前の画面の結果を読み込む

    • 一致したシンボルと基準を確認する

すべての機能には、エラー処理、詳細な市場データ、包括的な対応が含まれます。

要件

  • Python 3.12以上

  • MCPサーバー

  • yファイナンス

  • パンダ

  • ナンピー

  • 非同期

制限事項

  • データはYahoo Financeから取得しており、遅延の可能性があります

  • Yahoo Finance API 制限に基づくレート制限

  • オプションデータの利用可能時間は市場時間によって異なります

  • 一部の財務指標は遅延または利用できない場合があります

貢献

貢献を歓迎します!お気軽にプルリクエストを送信してください。

ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。

著者

トッド・ウルブン - ( https://github.com/twolven )

謝辞

  • Anthropicのモデルコンテキストプロトコル(MCP)を使用して構築

  • データはYahoo Financeより提供

  • アントロピックのクロードとの使用のために開発されました

Available Tools

4 tools
get_screening_resultC

Retrieve a saved screening result.

NameRequiredDescriptionDefault
nameYesSafe persistence name

Output Schema

NameRequiredDescription
dataYes
successYes
providerYes
warningsYes
timestampYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Retrieve' implies a read-only operation, but there is no statement about side effects, failure behavior (e.g., missing name), permissions, or whether results can only be read. This is minimal coverage for an unannotated tool.

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

Conciseness4/5

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

The description is a short single sentence with no filler and the verb is front-loaded. However, it is so minimal that it leans toward under-specification rather than purposeful conciseness; it could have added a short usage note without losing brevity.

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?

For a one-parameter retrieval tool with an output schema, the description is adequate but not thorough. It doesn't confirm read-only semantics or clarify the relationship between the input name and previously run screens, but the output schema does resolve some return-value ambiguity.

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

Parameters3/5

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

Schema description coverage is 100%, and the name property already carries its own description ('Safe persistence name'), so the tool description adds no parameter meaning. Per the rubric, a baseline of 3 is appropriate when the schema does the heavy lifting.

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 uses a specific verb ('Retrieve') and a clear resource ('saved screening result'), which distinguishes it from sibling tools like run_stock_screen that would create or run a new screen. It doesn't describe what the result contains, but the core action is unambiguous.

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 guidance on when to use this tool versus siblings such as run_stock_screen. The word 'saved' implies it is for previously stored results, but the description never states a direct comparison, when not to use it, or what makes it preferable over running a new screen.

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

get_stock_newsB

Get normalized recent Yahoo Finance news.

NameRequiredDescriptionDefault
symbolYesYahoo Finance ticker symbol
days_backNoMaximum news age in days

Output Schema

NameRequiredDescription
dataYes
successYes
providerYes
warningsYes
timestampYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations are absent, so the description must carry the full burden of disclosing behavior. It only states that the output is normalized news and recent, which gives a minimal idea of the data nature but does not mention what exactly happens (e.g., returns a list, sorting, pagination, rate limits, or whether it is strictly read-only). This is adequate only at the most basic level.

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

Conciseness5/5

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

The description is a single, concise sentence with no redundant words or promotional fluff. It directly achieves its purpose and is perfectly sized for the tool's simplicity. Nothing extra needs to be removed or rewritten.

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

Completeness4/5

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

The tool is simple, has only two parameters fully described in the schema, and has an output schema, so the description need not explain return values. The overall context is clear enough to call the tool correctly, though adding 'from a given Yahoo Finance symbol' would make it even more self-contained. Still, given the combined context, it is largely complete.

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

Parameters3/5

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

The description does not add meaning beyond the input schema, but the schema itself has 100% description coverage for both parameters ('Yahoo Finance ticker symbol' and 'Maximum news age in days'), so the baseline of 3 is appropriate. The description word 'recent' does loosely reflect days_back, but no extra detail is provided.

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 action ('Get') and resource ('normalized recent Yahoo Finance news'), clearly indicating a news retrieval operation. It does not explicitly differentiate itself from sibling tools like run_stock_screen or get_screening_result, but the nature of these sibling tools is clearly distinct, so the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the sibling tools. The description does not mention typical use cases, alternatives, or any conditions that would steer the agent toward or away from this tool. The only contextual clue is the name and the schema, which is insufficient.

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

manage_watchlistA

Create, update, delete, or retrieve a safely persisted watchlist.

NameRequiredDescriptionDefault
nameYesSafe persistence name
actionYesWatchlist action
symbolsNo

Output Schema

NameRequiredDescription
dataYes
successYes
providerYes
warningsYes
timestampYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the disclosure burden. It does state that the watchlist is safely persisted and includes destructive delete operations, which is helpful. However, it does not explain what 'safely persisted' actually means, whether operations are reversible, or whether any authentication or permissions are required.

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

Conciseness5/5

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

The description is a single front-loaded sentence that directly communicates the tool's scope with no wasted words. Every part of the sentence contributes to understanding the tool, despite some slight vagueness in 'safely persisted.'

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?

The description and output schema cover basic invocation but leave important semantics unstated. In particular, it is unclear how 'update' behaves relative to 'create' and 'delete' (replace, overwrite, or mutate), what the preconditions are for each action, and what 'safely persisted' implies for cleanup or consistency.

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?

The input schema already describes two of three parameters with meaningful details (action enum and name pattern), though symbols is more generic. The description does not add further parameter-level meaning, which is acceptable at 67% schema description coverage but does not exceed the baseline.

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

Purpose5/5

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

The description clearly names the tool's purpose with specific actions (create, update, delete, retrieve) and the resource being acted on (a persisted watchlist). It also distinguishes itself from sibling tools like run_stock_screen and get_stock_news, which are not watchlist management operations.

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

Usage Guidelines3/5

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

The description implies when to use the tool (whenever the agent needs to manage a watchlist) but does not explicitly articulate when not to use it or how it relates to the sibling tools. It provides no direct comparison or exclusion guidance, leaving the agent to infer context from the tool name and sibling set.

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

run_stock_screenB

Run a legacy technical, fundamental, options, news, or custom screen.

NameRequiredDescriptionDefault
criteriaYesCriteria for the selected legacy screen category
watchlistNo
save_resultNo
screen_typeYesLegacy stock-screen category

Output Schema

NameRequiredDescription
dataYes
successYes
providerYes
warningsYes
timestampYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing side effects. The parameters watchlist and save_result suggest possible persistence or retrieval, but their purpose is not explained in the description. The tool might write results or consult a watchlist, yet the description only says 'run a screen', which is ambiguous regarding side effects and state changes.

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

Conciseness5/5

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

The description is a single, concise sentence with no redundant wording. It efficiently communicates the core purpose and enumerates the screen types without unnecessary detail, making it easy to parse and understand.

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?

Given the tool has 4 parameters including a nested object and an output schema, the description is far too brief. It does not explain the structure of the criteria object, the meaning of watchlist and save_result, the expected behavior for each screen_type, or what the returned data will look like. The agent cannot confidently invoke the tool correctly based on this description alone.

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 only 50% (criteria and screen_type have meaningful descriptions; watchlist and save_result only have the generic 'Safe persistence name'). The tool description does not add any clarification for these parameters, nor does it explain what 'criteria' should contain or how watchlist and save_result are used. The description fails to compensate for the missing schema detail.

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

Purpose5/5

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

The description clearly states the action ('Run') and the resource ('stock screen'), and enumerates the specific screen categories (technical, fundamental, options, news, custom). It distinguishes the tool from siblings such as manage_watchlist, get_screening_result, and get_stock_news, which handle different aspects of screening work.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus the sibling tools. It does not mention that it is for executing a screen to get results, nor does it contrast with retrieve_screening_result or manage_watchlist. The phrase 'legacy' hints at a deprecated nature but is not elaborated, leaving the agent without clear selection criteria.

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. 4 tool updatesv2.0.0
    • First observedget_screening_result
    • First observedget_stock_news
    • First observedmanage_watchlist
    • First observedrun_stock_screen

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct purpose: screening, watchlist management, result retrieval, and news. However, get_screening_result could be confused with run_stock_screen if users expect immediate output from the latter, though descriptions help clarify.

Naming Consistency4/5

Tool names are consistent in verb_noun format (run_, manage_, get_, get_). The only minor deviation is manage_watchlist using 'manage' instead of a more specific action verb, but the pattern is largely uniform.

Tool Count4/5

Four tools is reasonable for a stock screening and watchlist server, though the scope could justify a few more (e.g., get_watchlist separate from manage). It is slightly thin but not inadequate for core functionality.

Completeness3/5

The server covers screening, saving results, retrieving saved results, and watchlist management. However, it lacks tools for updating or deleting screening results, or performing actions beyond retrieval on these results, leaving notable lifecycle gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to retrieve real-time stock data, manage watchlists, and perform comprehensive technical analysis using Yahoo Finance API. Provides 18+ tools for stock price tracking, trend analysis, volatility assessment, and financial indicators through MCP integration.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to retrieve stock market data and financial information from Yahoo Finance using the yfinance Python library. Supports querying stock prices, historical data, and other financial metrics through natural language.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive financial data from Yahoo Finance, enabling retrieval of stock prices, company information, financial statements, options data, analyst recommendations, and market news through natural language queries.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides real-time stock quotes, historical data, and stock search via Yahoo Finance, enabling AI assistants to access and analyze financial market data.
    96 npm
    19
    MIT