mcpField
B
benethos-yahoo-finance-mcp

benethos-yahoo-finance-mcp

ローカル
github.com/benethos-hub金融データ1今日更新

benethos-yahoo-finance-mcp について

benethos-yahoo-finance-mcpは、yfinance経由でYahoo Financeのデータを提供する読み取り専用MCPサーバーです。チャットクライアントでの市場調査向けで、stdioとHTTPに対応し、非公式エンドポイント由来の遅延・不完全なデータを扱います。

主な機能

  1. 01株価と過去のOHLCVデータの取得
  2. 02企業財務と配当履歴の参照
  3. 03アナリスト、保有者、インサイダー取引の確認
  4. 04ファンド、オプション、ニュース、市場の照会
  5. 05条件による株式スクリーニング

活用シーン

  1. 01チャットで株価と値動きを確認
  2. 02複数銘柄やETFの保有銘柄を比較
  3. 03決算日程とアナリスト予想を確認
  4. 04配当利回りやP/Eで株式を絞り込み

MCP 対応

MCPクライアント向けにYahoo Financeの読み取りツールを提供し、ローカルのstdioまたは単独のHTTP接続で利用できます。すべてのツールは読み取り専用で、データはyfinanceを介した非公式のYahooエンドポイントから取得します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
pypibenethos-yahoo-finance-mcp0.10.0
ocighcr.io/benethos-hub/benethos-yahoo-finance-mcp:0.10.0
mcpbbenethos-yahoo-finance-mcp-0.10.0.mcpb

ツール

23

掲載時のツール一覧 · 今日に更新

パラメーター型必須説明
limitintegerいいえ返す一致箇所の最大数。
querystringはい検索する会社名、ティッカーシンボル、または ISIN。

詳細

README の画像 非公式 Yahoo Finance MCP サーバー

CI Coverage License Python

PyPI benethos-yahoo-finance-mcp Container benethos-yahoo-finance-mcp

Sponsor PayPal

Yahoo Finance のデータを MCP クライアント(Claude Desktop など)に提供する MCP サーバーです。stdio(デフォルト。ローカルクライアント向け)または HTTP トランスポート(スタンドアロン/コンテナー環境でのホスティング向け)で動作します。市場データは、Yahoo の非公式エンドポイントを利用する yfinance ライブラリを通じて取得します。

免責事項

  • このプロジェクトはYahoo と提携、承認、または支援を受けていません。「Yahoo」および「Yahoo Finance」は、それぞれの所有者の商標です。
  • yfinance を介して、Yahoo Finance の非公式エンドポイントに依存しています。これらのエンドポイントは予告なく変更されたり、利用できなくなったりする可能性があり、Yahoo がリクエストを制限またはブロックする場合があります。使用前に Yahoo の利用規約をご確認ください。
  • データは遅延、不完全、または不正確な場合があります。**ここで提供される情報は金融アドバイスではありません。**取引や投資の判断には使用しないでください。
  • 本ソフトウェアは保証なしの「現状有姿」で提供されます。個人および教育目的での使用を想定しています。使用は自己責任で行ってください。LICENSEをご覧ください。
  • 商用利用の場合は、Yahoo の利用規約をご確認のうえ、非公式エンドポイントではなく、適切なライセンスを取得した市場データプロバイダーの利用をご検討ください。

目次

用途

このサーバーを使うと、Claude Desktop などの MCP クライアントが、Yahoo Finance のライブデータをもとに市場に関する質問に回答できます。株価とその値動き、企業の収益、アナリストの予想、株主、ETF の保有銘柄、セクターや市場の動向などを確認できます。自然な言葉で質問すると、クライアントがツールを選び、モデルの記憶ではなく Yahoo から返された情報をもとに回答します。

質問への回答の流れ:Claude などの MCP クライアントに質問すると、このサーバーのツールが呼び出され、サーバーが yfinance を介して Yahoo Finance からデータを取得し、同じ経路で回答が返されます

主な用途:

  • チャットでの簡単な確認。 ブラウザーを開かずに、株価、52 週間の値幅、次回の決算日、配当履歴を確認できます。
  • 特定企業の調査。 企業概要、財務諸表、予想、評価の変更、株主、インサイダー取引を一度の会話で確認し、モデルが要約できます。
  • 比較。 複数のティッカーを並べて比較したり、セクターや業界の上位企業、ETF の保有銘柄や構成比を確認したりできます。
  • 生データを使った計算。 6 か月分の日次終値から RSI、MACD、ドローダウンを計算し、モデルが時系列データを使って算出します。
  • 共有サービス。 HTTP 経由や Docker で実行して、チームのウェブフロントエンドや n8n などの自動化で利用できます。Yahoo の手前に結果キャッシュを任意で配置することもできます。

すべて読み取り専用です。このサーバーは注文を出さず、ポートフォリオを保有せず、どこにもサインインしません。データは非公式のエンドポイントから取得されるため、遅延している可能性があります。取引判断の根拠にはなりません。上記の免責事項を参照してください。

プロンプトの例

サーバーに接続したら、クライアントに自然な言葉で尋ねると、適切なツールが選ばれます。角括弧で囲まれたプレースホルダーは、具体的な値に置き換えてください。

価格と株価

  • 「[Ticker] の現在の価格はいくらですか? 52週高値からどれくらい離れていますか?」
  • 「[Ticker] は50日および200日の移動平均を上回っていますか、それとも下回っていますか?」
  • 「過去6か月分の [Ticker] の日次終値を取得し、RSIとMACDを計算してください。」
  • 「過去12か月における [Ticker] の最大ドローダウンはいくらですか?」
  • 「過去3か月の [Ticker A] と [Ticker B] を比較し、どちらがより堅調だったかを示してください。」
  • 「[Ticker A]、[Ticker B]、[Ticker C] の現在の株価を取得し、表で比較してください。」

企業とバリュエーション

  • 「[Ticker] のP/E、ベータ、時価総額、配当利回りを教えてください。」
  • 「[Company name] は具体的に何をしている企業ですか? また、どのセクターと業界に属していますか?」
  • 「[Ticker] の直近3年分の年次損益計算書と、売上高の推移を示してください。」
  • 「[Ticker] の発行済み株式数は過去数年間でどのように変化しましたか? それは自社株買い、または希薄化を意味しますか?」

アナリストとニュース

  • 「[Ticker] に対するアナリストのコンセンサスを教えてください。平均目標株価は現在の株価からどれくらい離れていますか?」
  • 「ここ数週間に [Ticker] の格上げや格下げはありましたか?」
  • 「[Ticker] の売上高とEPSの予想はどうなっていますか? 最近どのように修正されましたか?」
  • 「[Ticker] の最近のニュースを要約してください。」

決算とカレンダー

  • 「[Ticker] の次の決算発表はいつですか? 予想EPSはいくらですか?」
  • 「直近数四半期の [Ticker] の業績は、予想と比べてどうでしたか?」
  • 「[Ticker] の次回の決算発表日と権利落ち日はいつですか?」

配当

  • 「[Ticker] の過去10年間の配当と現在の利回りを示してください。」
  • 「過去20年間に [Ticker] は減配しましたか? また、株式分割をしましたか?」

保有状況とインサイダー

  • 「[Ticker] の最大の機関投資家保有者は誰ですか?」
  • 「[Ticker] の株式のうち、インサイダーと機関投資家がそれぞれ保有する割合を教えてください。」
  • 「最近、[Ticker] で注目すべきインサイダーによる買いや売りはありましたか?」

ファンドとETF

  • 「ETF [Ticker] の上位保有銘柄とセクター別の構成比を教えてください。」
  • 「[ETF Ticker] の資産クラス別の構成比と、運用するファンド会社を教えてください。」

提出書類

  • 「[US Ticker] の最新のSEC提出書類をリンク付きで示してください。」

オプション

  • 「[US Ticker] で利用できるオプションの満期日を教えてください。」
  • 「[Date] に満期を迎える [US Ticker] のコールとプットを示してください。」

セクターと市場

  • 「テクノロジーセクターの主要企業と業界を教えてください。」
  • 「半導体業界で最も好調な企業を示してください。」
  • 「現在、米国市場は開いていますか? 次に開くのはいつですか?」
  • 「欧州とアジアの主要指数はどのように取引を終えましたか?」

スクリーニング

  • 「配当利回りが4 %を超え、P/Eが15未満の米国株を探してください。」
  • 「少なくとも25年連続で増配している企業はどこですか?」
  • 「ドイツ上場のテクノロジー株のうち、P/Eが正で20未満の大型銘柄を列挙してください。」

シンボルの検索

  • 「[Exchange] における [Company name] のYahooティッカーはどれですか?」
  • 「ISIN [ISIN] をYahooティッカーに変換してください。」

毎日のまとめ

  • 「[Ticker A]、[Ticker B]、[Ticker C] について、株価、過去6か月分の履歴、企業情報、アナリストの推奨を取得し、それぞれの概要を簡潔に教えてください。」

サーバー自体は何も計算しません。 Yahooから返されるデータをそのまま渡します。そこには移動平均、P/E、ベータ、配当利回りなど、すでに算出された数値が含まれています。Yahooが提供していないRSI、MACD、ドローダウン、センチメント、トータルリターンは、モデルが生データの系列から算出します。

ツール

すべてのツールは読み取り専用であり、MCPアノテーションの readOnlyHint と openWorldHint によってそのことをクライアントに伝えます。これらのアノテーションに対応するクライアントでは、毎回確認を求めずにツールを実行できる場合があります。また、各ツールには「Stock screener」のような短いタイトルが付いており、クライアントはツール名の代わりにそのタイトルを表示できます。

ツール説明
search名前、ティッカー、または ISIN で銘柄を検索し、Yahoo のシンボルを返します。
get_quoteシンボルの現在価格と主要な日中データを取得します。
get_quotes複数のシンボルの現在の価格をまとめて簡潔に取得します(見つからなかったシンボルの一覧も返します)。
get_history過去の OHLCV データを取得します(期間/間隔、または明示的な日付範囲を指定)。
get_company_info企業プロフィールと主要統計情報を取得します(セクター、時価総額、P/E など)。
get_financials損益計算書、貸借対照表、またはキャッシュフロー計算書を取得します(年次/四半期/TTM)。
get_dividends配当と株式分割の履歴を取得します。
get_news最近のニュース見出し(タイトル、要約、発行元、URL)を取得します。Yahoo が提供する最大 10 件を返し、シンボル固有のニュースがない場合は Yahoo の検索結果を使用します。
get_recommendationsアナリストの推奨動向と目標株価を取得します。
get_optionsオプションの満期日と、指定日のコール/プットのオプションチェーンを取得します。権利行使価格は現在の株価付近に絞られます。
get_earnings今後および過去の決算情報(EPS の予想/実績、サプライズ)を取得します。
get_estimatesアナリストによる将来予測(業績、売上高、EPS の推移/修正、成長率)を取得します。
get_upgrades_downgrades最近のアナリスト評価変更(格上げ/格下げ)を取得します。
get_holders株式保有状況(インサイダー/機関投資家の保有率、主要な機関投資家およびミューチュアルファンドの保有者)を取得します。
get_insider_activityインサイダー取引、過去 6 か月間の売買概要、および現在の名簿を取得します。
get_sec_filings最近の SEC 提出書類(種類、日付、タイトル、EDGAR/添付資料へのリンク)を取得します。
get_calendar今後の決算日と配当日/権利落ち日を、予想範囲とともに取得します。
get_shares発行済み株式数の履歴(日付 → 株式数)を取得します。開始日を指定しない場合は、直近 18 か月分を返します。
get_fund_dataファンド/ETF のプロフィールを取得します。概要、資産クラス別・セクター別の構成比、主要保有銘柄が含まれます。
get_sectorキーを指定して市場セクターを閲覧します。概要、主要企業/ETF/ファンド、業種が含まれます。
get_industryキーを指定して業種を閲覧します。概要、親セクター、主要企業/業績上位企業/成長率上位企業が含まれます。
get_market市場(US、EUROPE、ASIA、…)の取引状況と主要指数の概要を取得します。
screen条件(配当利回り、P/E、時価総額、地域、セクター、…)で株式を検索し、順位付けして一致件数の合計を返します。

ほとんどの get_* ツールでは、Yahoo Finance の シンボルを指定します。シンボルにはティッカー(AAPL、 SAP.DE)または ISIN をそのまま使用できます。企業名からシンボルを検索するには search を使います。例外となるツールは 4 つあります。get_sector と get_industry はセクターまたは業種の キー(例:technology、semiconductors)を受け取り、get_market は市場の キー(例:US)を受け取ります。また、screen は {"field": "dividend_yield", "op": "gt", "value": 3} のような フィルターを受け取り、シンボルを自動で検索します。

📊 セクターと業種のキー — クリックして展開(11 セクター、145 業種、自動生成)

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

シンボルの解決

すべてのget_*ツールでは、Yahoo Financeのシンボルが必要です。ティッカー(AAPL、SAP.DE)と通常のISIN(US0378331005)のどちらも使用できます。ISINはyfinance自体によって解決されます。ISINの形式に一致する文字列は、ティッカーオブジェクトの作成時にYahooの検索を通じて照会され、以降は見つかったティッカーがその文字列の代わりに使われます。サーバーは、前後の空白の削除と大文字への変換を除き、シンボルを変更せずに渡し、受け取った値をそのまま返します。シンボルは最大32文字で、^GSPC、EURUSD=X、BRK-BのようにYahooで使われる形式(英字、数字、. - ^ = &)である必要があります。それ以外の文字列、およびYahooで解決できないISIN形式の文字列は、不明なシンボルとして応答されます。

企業名をシンボルに変換するには、まずsearchを呼び出してください。同じYahooの検索エンドポイントで、フリーテキスト、ティッカー、ISINを検索できます。どの場合も、ISINよりティッカーを使うことをおすすめします。そうすれば、返されるsymbolがツール間で一貫します。

注意点が2つあります。ISINが機能するのは、非公式エンドポイントで確認されている動作であり、保証されているわけではありません。以前のバージョンでは機能せず、今後再び使えなくなる可能性もあります。また、ドイツのWKNはどこでも解決できません。ツール経由でもsearch経由でも使えません。YahooにはWKNを検索する機能がないため、代わりにティッカー、ISIN、または企業名を指定してください。

互換性のあるクライアント

MCP はオープンなプロトコルなので、このサーバーは特定のアプリケーションに限定されません。すべての MCP クライアントで使用できます。異なるのはクライアントが使用するトランスポートだけで、 それによってサーバーの起動方法が決まります。

ローカルで stdio を使用する場合。 クライアントがサーバーをサブプロセスとして起動し、 stdin と stdout を介して通信します。これはデフォルトのトランスポートで、ネットワークは必要ありません。Claude Desktop、Claude Code、Cursor、VS Code(Copilot エージェントモード)、Zed、 Windsurf、JetBrains AI アシスタント、Cline、Roo Code、Continue、Goose はすべて この方法で動作します。Claude Desktop では、サーバーを拡張機能として追加することもできます。開くファイルは 1 つだけです。詳しくはクイックスタートを参照してください。 設定ファイルはクライアントごとに異なりますが、コマンドはuv を使用した Claude Desktopに記載されているものと 常に同じです。

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

ネットワーク経由で streamable-HTTP を使用する場合。 サーバーを 1 回起動し、クライアントは http://<host>:8000/mcp に接続します。本番用 compose ファイルの Caddy プロファイルの背後でベアラートークンを使用する場合は、https://<domain>/mcp に接続します。--transport streamable-http を付けて起動するか、 このトランスポートをデフォルトで提供する Docker イメージを使用してください。 ブラウザーベースのフロントエンドや複数ユーザー向けフロントエンドにはこの方式が必要です。Open WebUI は streamable-HTTP でのみ MCP をネイティブにサポートしています。共有ウェブフロントエンドではユーザーごとに stdio プロセスを起動できないため、ほかのトランスポートには対応していません。LibreChat と Windsurf は stdio に加えて、この方式にも対応しています。

ネットワーク経由で SSE を使用する場合。 一部のクライアントでは現在も必要とされる、従来の HTTP トランスポートです。--transport sse を付けて起動し、クライアントから http://<host>:8000/sse に接続してください。n8n の MCP Client Tool ノードはこの方式で接続します。

どちらの HTTP トランスポートも、デフォルトでは公開されており、Host の許可リストと 任意のベアラートークンによって保護されています。いずれかを公開する前に、 スタンドアロンサーバーとして実行するの説明をお読みください。

一覧にありませんか? クライアントの対応状況は急速に変化します。お使いのクライアントが対応する トランスポートを確認し、上記の該当するコマンドを使用してください。名前の一覧は変わっても、 トランスポートは安定しています。

要件

  • uv(推奨)— Python、仮想 環境、依存関係を 1 つのツールで管理します。
  • または、uv を使用しない場合:pip / venv を備えた Python 3.11 以降。
  • git が必要なのは、任意のソースからインストールする方法を選ぶ場合のみです。

インストール

クイックスタート:Claude Desktop 拡張機能

Claude Desktop で最も簡単に使う方法です。事前にインストールするものはありません。uv も Python も設定ファイルも不要です。Claude Desktop が拡張機能に必要なものを用意します。

  1. 最新リリースの拡張機能である benethos-yahoo-finance-mcp.mcpbを ダウンロードします。各リリースには、バージョン別のファイルもリリースページに掲載されています。
  2. ダブルクリックして開くか、Claude Desktop → Settings → Extensions にドラッグします。Claude Desktop にツールが表示され、インストールするか確認されます。
  3. 新しいチャットで、市場データが必要な質問をします。初回起動時に依存関係がインストールされるため、数秒かかります。2 回目以降の起動はすぐに完了します。

サーバーが claude_desktop_config.json にも登録されている場合は、その設定を削除してください。削除しないと、すべてのツールが 2 回ずつ表示されます。この拡張機能は Claude Desktop 専用です。 ほかのクライアントでは、以下のコマンドを使用してください。

uv を使った Claude Desktop(手動設定)

クローンも、手動での仮想環境の作成も、git も不要です。uvx が PyPI( benethos-yahoo-finance-mcp として公開)からオンデマンドで取得して実行します。

  1. uv をインストールします。まだインストールしていない場合は、 uv のインストールページ ですべてのプラットフォーム向けの手順を確認できます。uvx も含まれており、ここで必要なのはこれだけです。

  2. サーバーを claude_desktop_config.json に追加します(Claude Desktop → 設定 → 開発者 → 設定を編集):

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

    安定性のために、benethos-yahoo-finance-mcp==0.8.8 のようにバージョンを固定してください。オプションの結果キャッシュを有効にするには、たとえば "env": { "YF_MCP_CACHE": "1" } のように env ブロックを追加します(キャッシュを参照)。

  3. Claude Desktop を再起動します(ウィンドウを閉じるだけでなく、トレイから終了してください)。 すると、ツールがクライアントに表示されます。

ソースからインストールしますか? uvx --from "git+https://github.com/benethos-hub/yahoo-finance-mcp.git" benethos-yahoo-finance-mcp を使って、未リリースの main ブランチを実行できます。 この方法では、クライアントが起動するプロセスの PATH に git が必要です。一部の GUI クライアントは完全な PATH を渡さないため、上記の PyPI インストールをおすすめします。

クライアントが使用する PATH に uvx が必要です。uv のインストール後、アプリを完全に再起動するか、 command に uvx の絶対パスを指定してください。初回起動時はパッケージとその依存関係を ダウンロードするため、少し時間がかかります。2 回目以降の起動ではキャッシュが使われます。

その他のインストール方法

MCP Registry から。 0.8.2 以降のすべてのリリースは、公式の MCP Registry に io.github.benethos-hub/benethos-yahoo-finance-mcp として掲載されています。PyPI パッケージと コンテナイメージに加え、0.8.4 以降は Claude Desktop バンドルも掲載されています (エントリー)。 Registry からインストールするクライアントは、uvx、または docker run -i --rm と --transport stdio を使って起動するため、設定は不要です。 0.8.3 以降、コンテナのエントリーも、Dockerの強化された docker run の例と同様に、 読み取り専用で、ケイパビリティなし、HTTP ヘルスチェックなしで実行されます。VS Code の拡張機能ビューにある MCP 一覧(@mcp)は GitHub 独自の選定リストであり、Registry に掲載されてもそこにサーバーが追加されるわけではありません。

pip を使って PyPI から(uv もクローンも不要)。 公開済みのパッケージを仮想環境にインストールし、 モジュールとして実行します。プラットフォームによる違いは venv インタープリターのパスだけです。Windows では .venv\Scripts\python.exe、Linux/macOS では .venv/bin/python を使います。

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

venv インタープリターの絶対パスを指定して Claude Desktop からモジュールを実行します(生成されたコンソールスクリプトは使いません):

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

(Windows では command に C:\\abs\\path\\to\\.venv\\Scripts\\python.exe を指定してください。)

uv を使ってソースから(開発またはローカルでの変更向け):

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

チェックアウトしたディレクトリを Claude Desktop に指定します:

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

venv と pip を使ってソースから(uv 不要)。 プラットフォームによる違いは venv インタープリターのパスだけです。Windows では .venv\Scripts\python.exe、Linux/macOS では .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 の設定では、venv インタープリターの絶対パスを使用します:

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

(Windows では command に C:\\abs\\path\\to\\.venv\\Scripts\\python.exe を指定してください。)

スタンドアロンサーバーとして実行する

Claude Desktop 以外で使用する場合(ネットワークからアクセス可能な HTTP サービス)には、HTTP トランスポート(streamable-http または sse)を実行します。最も簡単なのは Docker です。

すべてのオプションには CLI フラグと環境変数の両方があり(コンテナで便利です)、以下で説明する例外が 1 つあります。優先順位は CLI > 環境変数 > デフォルトです(フラグの一覧は --help を参照してください):

フラグ環境変数デフォルト説明
--version——バージョンを出力して終了します。MCP ハンドシェイクでサーバーが報告する値と同じです。
--transportYF_MCP_TRANSPORTstdiostdio、streamable-http、または sse です。
--hostYF_MCP_HOST127.0.0.1HTTP トランスポートのバインド先ホストです(リモートの場合は 0.0.0.0)。
--portYF_MCP_PORT8000HTTP トランスポートのポートです(1~65535)。
--pathYF_MCP_PATH/mcp (/sse for sse)HTTP トランスポートの URL パスです。
(none)YF_MCP_BEARER_TOKENunsetすべての HTTP リクエストでこのベアラートークンを必須にします。意図的に環境変数のみで設定します。引数にするとプロセス一覧から見えてしまうためです。
--allowed-hostsYF_MCP_ALLOWED_HOSTS以下を参照、またはオリジンから導出DNS リバインディング対策のための、カンマ区切りの Host ヘッダー許可リストです。
--allowed-originsYF_MCP_ALLOWED_ORIGINSホストから導出カンマ区切りの Origin ヘッダー許可リストです。
--log-levelYF_MCP_LOG_LEVELINFODEBUG/INFO/WARNING/ERROR/CRITICAL です。
--cache / --no-cacheYF_MCP_CACHEoff永続的な結果キャッシュを有効/無効にします。
--cache-dirYF_MCP_CACHE_DIROS キャッシュディレクトリキャッシュファイルのディレクトリです。
--cache-max-entries <N>YF_MCP_CACHE_MAX_ENTRIES10000キャッシュに保持する最大エントリー数です。古いものから削除されます。
--cache-ttl <NAME>=<SECONDS>YF_MCP_CACHE_TTL_<NAME>ツールごとのデフォルト値1 つのツールの TTL を上書きします。

ログは常に stderr に出力されるため、stdio では stdout が JSON-RPC プロトコル専用に保たれます。INFO では、各ツール呼び出しについて、シンボル、回答のサイズ、所要時間、結果キャッシュが応答したかどうかを示す行が 1 つ記録されます。例:get_history SAP.DE 250 rows, truncated, 412 ms。呼び出しが失敗すると、エラーのクラス名を含む WARNING が記録されます。Yahoo のレート制限も同様です。HTTP では、拒否されたリクエスト(ステータス 400 以上。401 と 421 を含む)について、試行元のアドレスとともに記録されます。DEBUG では、応答したすべてのリクエストが追加で記録されます。ログにベアラートークン、検索クエリ、URL のクエリ文字列、Yahoo から返されたデータ、エラーメッセージの本文が含まれることはありません。

各行には、ログの発生元を短い名前で記します。server、tools、yahoo、cache、uvicorn のサーバーログには uvicorn、リクエストには http を使います。時刻はオフセット付きのミリ秒精度の ISO 8601 形式です。例:2026-09-30T13:19:02.840+02:00 INFO tools: get_quote AAPL 312 ms。時刻はマシンのローカル時刻です。コンテナでは、TZ を設定しない限り UTC(+00:00)になります(例:TZ=Europe/Berlin)。ターミナルでは色付きで表示されます。色を無効にするには NO_COLOR を設定してください。それ以外の場所(たとえばコンテナのログ)では、各行はプレーンテキストです。

ベアラートークン(任意)。 YF_MCP_BEARER_TOKEN を設定すると、すべての HTTP リクエストに Authorization: Bearer <token> を含める必要があります。それ以外の場合は HTTP 401 が返されます。 デフォルトでは無効です。通常は、このサーバーを利用するマシンのループバック アドレスでサーバーを実行するため、トークンを設定しても何も保護できないからです。これは定数時間で比較される単一の共有シークレットであり、OAuth フローではありません。確認するのは呼び出し元が想定された相手かどうかだけです。stdio では無視されます。そのプロセスを所有するのはクライアントであり、ほかからアクセスできないためです。

トークンを設定しても、ポートを安全に公開できるわけではありません。ここで扱うデータは公開されており、読み取り専用です。そのため、現実的な被害はプライベートな情報を読まれることではなく、Yahoo のレート制限を消費されることです。信頼できるネットワークの外で利用する場合は、実際の認証機能を備えたリバースプロキシを前段に配置してください。 Host ヘッダー/DNS リバインディング対策。 MCP HTTP トランスポートは Host ヘッダーを検証します。localhost にバインドすると、保護用の許可リスト (localhost/127.0.0.1)が維持されます。公開バインド(0.0.0.0)では、 デフォルトで任意の Host を受け入れるため、コンテナーやほかのホストからすぐに接続できます。再び制限するには、 --allowed-hosts を設定します(例:benethos-yahoo-finance-mcp:8000)。リストにない Host を使用するクライアントは、HTTP 421 を受け取ります。--allowed-origins も 単独で使用でき、どちらか一方だけを指定した場合は、もう一方のリストもそこから生成されます。 containers/ 内の両方の compose ファイルでは、リストがあらかじめ設定されています: localhost:*,127.0.0.1:*,[::1]:*,benethos-yahoo-finance-mcp:*。この設定がないと、 攻撃者がドメインを 127.0.0.1 に向けた Web ページから、ホスト上のブラウザーを使って すべてのツールを呼び出せる可能性があります。前段のプロキシが使用する名前も追加してください。

Docker

公開済みイメージを使えば、サーバーを実行するまでの最短ルートです。Pythonも、クローンも、ビルドも必要ありません。すべてのリリースは、linux/amd64 と linux/arm64 向けに GitHub Container Registry へプッシュされます。

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

依存するものにはバージョンを固定してください。特定のリリースには :0.8.8、そのパッチリリースを追跡するには :0.8 を使います。:latest はリリースのたびに更新され、:edge は必要に応じて main からビルドされるため、リリースではありません。

イメージ名には PyPI ディストリビューションの名前が使われており、0.4.0 以降のすべてのリリースがその名前で利用できます。0.7.1 までは ghcr.io/benethos-hub/yahoo-finance-mcp として公開され、同じダイジェストでそれらのリリースがコピーされました。0.7 系も旧名でプッシュされましたが、こちらも同じイメージです。0.8.0 以降のリリースは新しい名前でのみ公開されます。

イメージは、ストリーム可能な HTTP トランスポートでサーバーをホストします。stdio トランスポートはローカルのサブプロセスで使うものであり、コンテナ化するものではありません。依存関係は uv を使って uv.lock から再現可能な形でインストールされ、ベースイメージはダイジェストで固定されているため、同じコミットを再ビルドすれば同じバイト列になります。

イメージの設定はすべて環境変数で行います(上のオプション表を参照)。デフォルトのコマンド引数は含まれていないため、-e で単一の設定を上書きしても、ほかの設定には影響しません。

# 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-mcp

イメージは非 root ユーザーとして実行され、設定された HTTP ポートでヘルスチェックを行います。ヘルスチェックは YF_MCP_PORT からポートを読み取るため、--port 9000 を追加するのではなく、-e YF_MCP_PORT=9000 で変更してください。そうしないと、コンテナは正常な状態になりません。キャッシュはデフォルトで無効です。-e YF_MCP_CACHE=1 で有効にすると、(ボリュームとして宣言されている)/cache に書き込まれます。コンテナの再起動後も保持するには、そこに名前付きボリュームをマウントしてください。すべてのリクエストにベアラートークンを要求するには、.env に YF_MCP_BEARER_TOKEN=... を設定し(containers/production/.env.example を参照)、--env-file .env を渡します。-e YF_MCP_BEARER_TOKEN=... も使えますが、シークレットがシェルの履歴に残ります。信頼できるネットワークの外で使う場合は、認証を行うリバースプロキシの背後に配置してください。Docker は、別途指定しない限りコンテナのログを無制限に保持します。そのため、稼働させ続ける docker run には --log-opt max-size=10m --log-opt max-file=5 を追加するか、すべてのコンテナに適用されるよう、デーモンの log-opts に一度設定してください。

コンテナは、書き込み可能な /tmp と、ホームディレクトリ内に yfinance 用の書き込み可能なキャッシュがあれば、compose ファイルと同様にルートファイルシステムを読み取り専用にして実行できます。後者がないと、yfinance は Cookie とタイムゾーンのキャッシュを黙って使わず、毎回 Yahoo に再問い合わせします。

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:latest

サーバーには解決可能なホームディレクトリが必要です。yfinance はそこに小さな独自キャッシュを保持し、インポートされるとすぐにその場所を調べるためです。イメージのユーザーにはホームディレクトリがあり、Docker と Kubernetes はそれ以外の UID に HOME=/ を設定するため、通常のセットアップでは特別な対応は必要ありません。passwd エントリのない UID で実行し、さらに HOME を削除した場合(強化された Pod 仕様や systemd ユニットでそうなることがあります)、サーバーは起動時に could not determine the home directory で停止します。HOME または絶対パスの XDG_CACHE_HOME を設定すれば起動します。

Docker Compose

それぞれ専用フォルダーにある2つの Compose ファイルは、containers/ の下にあります。

フォルダー用途イメージポート
containers/production/リリース済みサーバーの実行。クローンは不要です.env で指定されたバージョンの ghcr.io/benethos-hub/benethos-yahoo-finance-mcp127.0.0.1:8000。プロファイル https を使用すると、Caddy が 80 と 443 で動作します
containers/development/変更の試行。リリース前の main を実行する唯一の方法ですこのチェックアウトからビルド127.0.0.1:8001

サーバーを起動するには、production フォルダーにある3つのファイルを空のフォルダーに取得し、そのフォルダーで起動します。

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 remove

サーバーには http://localhost:8000/mcp でアクセスできます。 .env の YAHOO_FINANCE_MCP_VERSION がイメージのバージョンを指定し、デフォルト値はありません。そのため、pull してもバージョンが勝手に変わることはありません。更新するには、そこで新しいバージョンを設定してから、docker compose pull && docker compose up -d を実行します。チェックアウトからは、containers/development/ で docker compose up -d --build を実行すると、サーバーをビルドしてポート8001で起動します。プロジェクト名が異なるため、両方を同時に実行でき、それぞれ独自のキャッシュボリュームを使用します。Docker Compose 2.24 以降が必要です。

ポートは 127.0.0.1 のみに公開されるため、ホストからはサービスにアクセスできますが、ネットワーク上の他の端末からはアクセスできません。これは、YF_MCP_BEARER_TOKEN が設定されていない限り、サーバーに認証がないため意図的なものです。外部に公開するには、ports: エントリーから 127.0.0.1: のプレフィックスを削除し、少なくともトークンを設定したうえで、認証機能を備えたリバースプロキシを手前に配置してください。ホスト側のポートが使用中の場合は、.env で YAHOO_FINANCE_MCP_PORT を設定します。

別のマシン上のクライアント向けに、production フォルダーにはそのようなプロキシが含まれています。.env で COMPOSE_PROFILES=https、YAHOO_FINANCE_MCP_DOMAIN、YF_MCP_BEARER_TOKEN を設定すると、Caddy がポート80と443でサーバーの手前に起動します。ドメインの証明書を Let's Encrypt、自身の CA、または指定したファイル(YAHOO_FINANCE_MCP_TLS)から取得し、Authorization ヘッダーのないリクエストをサーバーに届く前に拒否します。サーバーのポートは引き続き 127.0.0.1 にバインドされます。詳細はcontainers READMEを参照してください。

どちらのファイルも、コンテナーを読み取り専用のルートファイルシステム、Linux ケイパビリティなし、no-new-privileges で実行し、/tmp と yfinance のキャッシュには tmpfs を使用します。Docker が保持するコンテナーのログは、10 MBのファイル5個までに制限され、最も古いものから削除されます(x-logging)。より多く保持するには、max-size または max-file を大きくしてください。ログを別の場所に保持するには、たとえば journald にドライバーを置き換え、journalctl CONTAINER_NAME=benethos-yahoo-finance-mcp で読み取ります。

シークレットは Compose ファイルと同じ場所にある .env に記述します。Compose は env_file を通じてこれを読み込み、git と Docker のビルドコンテキストはいずれもこのファイルを無視します。YF_MCP_BEARER_TOKEN は compose.yaml ではなく、ここで設定してください。Compose は YAHOO_FINANCE_MCP_VERSION、YAHOO_FINANCE_MCP_PORT、COMPOSE_PROFILES を自身で使用し、YAHOO_FINANCE_MCP_DOMAIN と YAHOO_FINANCE_MCP_TLS を Caddy に渡し、それ以外はすべてサーバーに渡します。compose.yaml の environment: で設定した名前は、.env の同名の設定より優先されます。このファイルを読み取るのは Compose だけです。サーバー自体はこのファイルを読み込まないため、通常の docker run では --env-file .env を指定し、ローカル環境または Claude Desktop のセットアップでは引き続き環境変数を使用してください。

以前リポジトリーのルートにあった Compose ファイルを使うセットアップは、containers/production/ に移動しました。プロジェクト名は同じなので、キャッシュボリュームはそのまま維持されます。

手動(uv または venv)

uv を使う場合(すべての OS):

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

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

venv のインタープリターを直接使う場合(Windows:.venv\Scripts\python.exe):

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

キャッシュ

オプトインの永続キャッシュです。有効にすると、成功したツールの結果がツールごとの有効期間(TTL)を設定した小さな SQLite ファイルにキャッシュされ、Yahoo のエンドポイントへの負荷を軽減し、再起動後もキャッシュが保持されます。変化の速いデータには短い TTL を、安定したデータには長い TTL を設定します。

呼び出しのたびに Yahoo から新たにデータを取得し、キャッシュによって再度の呼び出しを低コストにします。キャッシュは再起動後も保持され、レート制限対策にもなります。標準的な使い方は stdio 経由の対話型セッションで、同じ呼び出しを繰り返すことはまれであり、最新のデータのほうが重要です。また、ディスク上にファイルを置くかどうかは運用者の判断であるため、デフォルトでは無効です。

キャッシュ名(--cache-ttl <NAME>=<SECONDS> および YF_MCP_CACHE_TTL_<NAME> で使用)とデフォルトの TTL:

名前ツールデフォルトの TTL
quoteget_quote30 s
quotesget_quotes30 s
historyget_history10 min
newsget_news10 min
optionsget_options10 min
screenscreen10 min
searchsearch1 h
company_infoget_company_info6 h
dividendsget_dividends6 h
recommendationsget_recommendations6 h
earningsget_earnings6 h
estimatesget_estimates6 h
upgrades_downgradesget_upgrades_downgrades6 h
insider_activityget_insider_activity6 h
sec_filingsget_sec_filings6 h
calendarget_calendar6 h
financialsget_financials24 h
holdersget_holders24 h
sharesget_shares24 h
fund_dataget_fund_data24 h
sectorget_sector24 h
industryget_industry24 h
marketget_market60 s
  • デフォルトでは無効です。--cache または YF_MCP_CACHE=1 で有効にします。
  • 保存場所:OS のユーザーキャッシュディレクトリ、または --cache-dir / YF_MCP_CACHE_DIR で指定した場所です。ファイルは格納するデータに応じて大きくなり、期限切れのエントリが整理されると再び小さくなります。以前のバージョンで作成されたファイルは、起動時に一度書き換えられます。
  • サイズ:最大 10 000 件のエントリを保持し、直近に書き込まれたものを残します。--cache-max-entries / YF_MCP_CACHE_MAX_ENTRIES で設定します。
  • TTL の上書き:--cache-ttl quote=15(複数回指定可能)、または環境変数 YF_MCP_CACHE_TTL_<NAME>(例:YF_MCP_CACHE_TTL_QUOTE=15)を指定します。TTL を 0 にすると、そのツールではキャッシュを使用しません。

優先順位は CLI > 環境変数 > デフォルトです。エラーはキャッシュされません。また、キャッシュの障害によって呼び出しが失敗することはありません。キャッシュファイルがロックされているか破損している場合はログに記録され、キャッシュが無効であるかのようにデータが取得されます。

有効にする場合

次の場合はキャッシュ(--cache / YF_MCP_CACHE=1)を有効にしてください。

  • 定期的に再起動する長時間稼働のサーバー、またはコンテナ化された HTTP サービスとしてサーバーを実行する場合(キャッシュは再起動後も保持されるため、同じ結果をすぐに取得できます)。
  • Yahoo のレート制限に達する場合や、同一のリクエストを長期にわたって何度も繰り返す場合。
  • 主に変化の遅いデータ(検索、企業情報、財務情報)を照会し、データの古さが問題にならない場合。

次の場合は無効のままにしてください(デフォルト)。

  • 対話型セッションでローカル環境から stdio 経由で実行する場合。同じ質問を数分以内に繰り返すことはまれであり、最新のデータのほうが重要です。
  • 可能な限り最新のデータが必要な場合。
  • たまにしか使用しない場合。

開発

コードの構成をモジュールごとにまとめた内容は、 SPECS.mdを参照してください。

開発用の追加パッケージをインストールしてから、テスト、リンター、型チェックを実行します(いずれも CI で実行されるものと同じです)。

uv を使う場合(すべての OS):

uv sync --extra dev

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

venv のインタープリターを直接使う場合(Windows では .venv/bin/python を .venv\Scripts\python.exe に置き換えてください):

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

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

ユニットテストでは yfinance をモックし、完全にオフラインで実行します。tests/smoke.py は Yahoo Finance に対してライブでアドホックな確認を行いますが、ユニットテストスイートには含まれません。 CI は Python 3.11~3.15 でも実行され、カバレッジの下限を 80% に設定しています。 カバレッジは 3.15 で測定され、上のカバレッジバッジには main での測定結果が表示されます。さらに、 ロックファイルを使わずにインストールするジョブが 2 つあります。fresh-install は pyproject.toml で許可されている最新バージョンを、lowest-versions は最古のバージョンを使います。 uv.lock 内のすべてのバージョンと、すべての最古バージョンについて、PyPI および OSV を使って既知の脆弱性をチェックします。

商標

「Yahoo」および「Yahoo Finance」は Yahoo Inc. の商標です。このプロジェクトは Yahoo と提携しておらず、Yahoo の承認や支援を受けておらず、Yahoo の公式製品でもありません。

これらの名称は、ソフトウェアの機能、すなわち yfinance ライブラリを通じて Yahoo Finance から市場データを読み取ることを説明する目的でのみ使用しています。これが唯一、 正確な表現方法です。すべての商標は、それぞれの所有者に帰属します。

このプロジェクト自体は benethos-yahoo-finance-mcp として公開され、 MIT licenceの下で独立して保守されています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。