🚀 china-stock-mcp
このプロジェクトは、akshare-one をベースに構築された MCP (Model Context Protocol) サーバーで、中国株式市場のデータに対するインターフェースを提供します。歴史的な株価データ、リアルタイムデータ、ニュースデータ、財務諸表などの財務情報を取得するための一連のツールを備えています。

✨ 主な機能
- 双モード運用:stdio ローカルモードと HTTP ネットワークモードの両方をサポートします。
- 豊富な財務データ:A/B/H 株のデータを網羅した包括的な取得が可能です。
- リアルタイムデータ:リアルタイムの株価や取引情報などをサポートします。
- 財務諸表:貸借対照表、損益計算書、キャッシュフロー計算書などを提供します。
- 技術指標:30 種類以上の技術指標を自動計算して追加します。
- ニュースデータ:株式関連のニュースや公告情報を提供します。
- 使いやすさ:簡単な設定で AI アシスタント (Claude、Cursor など) に統合できます。
- データキャッシュ:メモリとディスクのキャッシュメカニズムが組み込まれており、データ取得の効率と応答速度を向上させます。
- コンテナ化:Docker デプロイをサポートします。
🛠️ アーキテクチャの概要
主要コンポーネント
server.py:MCP サーバーの核心部分で、すべてのツールとデータインターフェースを定義します。
__main__.py:コマンドラインのエントリーポイントで、複数の実行モードをサポートします。
- FastMCP フレームワーク:MCP プロトコルの通信を処理します。
- akshare-one ライブラリ:中国株式市場のデータを取得するための基盤機能を提供します。
cache_utils.py:キャッシュツールで、メモリとディスクのキャッシュ機能を提供します。
サポートするデータソース
- データソースの障害切り替え:
_fetch_data_with_fallback メカニズムが組み込まれており、優先順位に基づいて自動的にデータソースを切り替えます。主要なデータソースが失敗したり空のデータを返したりした場合、システムは自動的に予備のデータソースを試み、データ取得の安定性と信頼性を向上させます。
- 東方財富 (eastmoney, eastmoney_direct)
- 新浪財経 (sina)
- 雪球 (xueqiu)
📋 利用可能なツール
1. 株式の歴史的な相場データを取得し、複数のデータソースと技術指標をサポートする (get_hist_data)
株式の歴史的な相場データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
interval (Literal): 時間間隔: minute, hour, day, week, month, year。デフォルト: day
interval_multiplier (int): 時間間隔の乗数
start_date (string): 開始日付 (YYYY-MM-DD 形式)
end_date (string): 終了日付 (YYYY-MM-DD 形式)
adjust (Literal): 除權タイプ: none, qfq(前除權), hfq(後除權)。デフォルト: none
indicators_list (string|list): 追加する技術指標。カンマ区切りの文字列 (例: 'SMA,EMA') または文字列のリスト (例: ['SMA', 'EMA']) で指定できます。サポートされる指標には、SMA, EMA, RSI, MACD, BOLL, STOCH, ATR, CCI, ADX, WILLR, AD, ADOSC, OBV, MOM, SAR, TSF, APO, AROON, AROONOSC, BOP, CMO, DX, MFI, MINUS_DI, MINUS_DM, PLUS_DI, PLUS_DM, PPO, ROC, ROCP, ROCR, ROCR100, TRIX, ULTOSC が含まれます。一般的な指標は SMA, EMA, RSI, MACD, BOLL, STOCH, OBV, MFI で、10 個以内を推奨します。
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
2. 株式のリアルタイム相場データを取得し、複数のデータソースをサポートする (get_realtime_data)
株式のリアルタイム相場データを取得します。サポートするデータソースには、eastmoney, eastmoney_direct, xueqiu が含まれます。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
3. 株式関連のニュースデータを取得する (get_news_data)
株式関連のニュースデータを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
4. 会社の貸借対照表データを取得する (get_balance_sheet)
会社の貸借対照表データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
5. 指定された株式コードの会社の損益計算書データを取得する (get_income_statement)
会社の損益計算書データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
6. 指定された株式コードの会社のキャッシュフロー計算書データを取得する (get_cash_flow)
会社のキャッシュフロー計算書データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
7. 株式の過去 100 営業日の資金フローデータを取得する (get_fund_flow)
株式の過去 100 営業日の資金フローデータを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
8. 会社の内部株主取引データを取得する (get_inner_trade_data)
会社の内部株主取引データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
9. 三大財務諸表の主要な財務指標を取得する (get_financial_metrics)
三大財務諸表の主要な財務指標を取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
10. 現在の時間 (ISO 形式、タイムスタンプ) と直近の営業日を取得する (get_time_info)
現在の時間 (ISO 形式、タイムスタンプ) と直近の営業日を取得します。
パラメータ: なし
11. 指定された株式の基本的な概要情報を取得する (get_stock_basic_info)
株式の基本的な概要情報を取得します。A股と港股をサポートします。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
12. 単一のマクロ経済指標データを取得する (get_macro_data)
単一のマクロ経済指標データを取得します。
パラメータ:
indicator (Literal): 取得するマクロ経済指標。サポートする指標には、money_supply, gdp, cpi, pmi, stock_summary が含まれます。デフォルト: 'gdp'
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
13. 個人投資家と機関投資家の投資感情を分析する (get_investor_sentiment)
個人投資家と機関投資家の投資感情を分析します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
14. 指定された株式の株主状況を取得する (get_shareholder_info)
株主状況を取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
15. 指定された株式会社の主要な製品または事業構成を取得する (get_product_info)
製品状況を取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
16. 株式の業績予測データを取得し、予測年次利益と一株当たり利益を含む (get_profit_forecast)
株式の業績予測データを取得します。
パラメータ:
symbol (string): 株式コード (例: '600519')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
17. 配当と株式分割の詳細を取得する (get_stock_fhps_detail)
指定された株式の配当と株式分割の詳細データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
18. 株式のチップ分布データを取得する (get_stock_cyq)
指定された株式のチップ分布データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
date (string): 照会日付 (YYYY-MM-DD 形式)
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
19. 株式の研究報告を取得する (get_stock_research_report)
指定された株式の研究報告データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
20. 流通株主データを取得する (get_stock_circulate_stock_holder)
指定された株式の流通株主データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
21. 役員の異動データを取得する (get_stock_management_change)
指定された株式の役員の異動データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
22. 制限株解禁データを取得する (get_stock_restricted_release_queue)
指定された株式の制限株解禁データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
23. A股のコードと名称を取得する (get_stock_a_code_name)
すべてのA股の株式コードと名称を取得します。
パラメータ:
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
24. 株式の評価データを取得する (get_stock_value)
指定された株式の評価データを取得します。
パラメータ:
symbol (string): 株式コード (例: '000001')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
25. 指定された個別株式のボラティリティ指標を計算する (get_stock_volatility)
分単位の歴史的な相場データを使用して、指定された個別株式のボラティリティ指標を計算します。
パラメータ:
symbol (string): 株式コード (例: '000001')
start_date (string): 開始日付
end_date (string): 終了日付
period (int): 時間間隔 (分単位) (例: '1', '5', '15', '30', '60')
adjust (string): 除權タイプ: none, qfq(前除權), hfq(後除權)。デフォルト: none
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
26. すべての指数のコードと基本情報を取得する (get_all_cni_indices)
すべての指数のコードと基本情報を取得します。リアルタイムで変動するデータを除外し、キャッシュをサポートします。
パラメータ:
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
27. 指定された指数の日次の歴史的な相場データを取得する (get_cni_index_hist)
指定された指数の日次の歴史的な相場データを取得します。
パラメータ:
symbol (string): 指数コード (例: '399005')
start_date (string): 開始日付 (YYYYMMDD 形式) (例: '20230114')
end_date (string): 終了日付 (YYYYMMDD 形式) (例: '20240114')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
28. 指定された指数の構成銘柄の詳細を取得する (get_cni_index_detail)
指定された指数の構成銘柄の詳細を取得します。
パラメータ:
symbol (string): 指数コード (例: '399001')
date (string): 日付 (YYYYMM 形式) (例: '202404')
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
29. 技術的な株式選択指標データを取得し、新高値、新安値、連続上昇、連続下落、持続的な出来高増加、持続的な出来高減少、上昇突破、下落突破、量価同時上昇、量価同時下落、保険資金の買収を含む (get_stock_technical_rank)
パラメータ:
indicator_name (string): 取得する技術指標の名前 (例: 新高値-月間新高値, 新高値-半年新高値, 新高値-一年新高値, 新高値-歴史新高値, 新安値-月間新安値, 新安値-半年新安値, 新安値-一年新安値, 新安値-歴史新安値, 連続上昇, 連続下落, 持続的な出来高増加, 持続的な出来高減少, 上昇突破-5日移動平均線, 上昇突破-10日移動平均線, 上昇突破-20日移動平均線, 上昇突破-30日移動平均線, 上昇突破-60日移動平均線, 上昇突破-90日移動平均線, 上昇突破-250日移動平均線, 上昇突破-500日移動平均線, 下落突破-5日移動平均線, 下落突破-10日移動平均線, 下落突破-20日移動平均線, 下落突破-30日移動平均線, 下落突破-60日移動平均線, 下落突破-90日移動平均線, 下落突破-250日移動平均線, 下落突破-500日移動平均線, 量価同時上昇, 量価同時下落, 保険資金の買収)
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
30. すべての業界セクターのリアルタイム相場データを取得する (get_stock_board_industry_summary)
パラメータ:
output_format (Literal): 出力データ形式: json, csv, xml, excel, markdown, html。デフォルト: markdown
🚀 インストールと実行
方法一: Smithery を使用する
Smithery を通じて自動的に Claude Desktop にインストールします。
npx -y @smithery/cli install @xinkuang/china-stock-mcp
方法二: Docker を使用する
1. イメージを取得する
docker pull ghcr.io/xinkuang/china-stock-mcp:latest
2. コンテナを実行する
docker run -p 8081:8081 ghcr.io/xinkuang/china-stock-mcp:latest
方法三: ローカルのソースコードをインストールする
1. 環境要件
- Python 3.12 以上
- Git
- uv (推奨の Python パッケージマネージャー)
2. リポジトリをクローンする
git clone https://github.com/xinkuang/china-stock-mcp
cd china-stock-mcp
3. 依存関係をインストールする
uv sync
pip install -r requirements.txt
4. サーバーを実行する
stdio モード (デフォルト、ローカルの MCP クライアントに適しています):
uv run -m china_stock_mcp
HTTP モード (リモートアクセスに適しています):
uv run -m china_stock_mcp --streamable-http --host 0.0.0.0 --port 8081
サーバーは http://localhost:8081/mcp でサービスを提供します。
⚙️ MCP 設定例
Claude Desktop の設定
claude_desktop_config.json を編集します。
方法一: ローカルのソースコード
{
"mcpServers": {
"china-stock-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/china_stock_mcp",
"run",
"china-stock-mcp"
]
}
}
}
方法二: uvx を通じて
{
"mcpServers": {
"china-stock-mcp": {
"command": "uvx",
"args": [
"china-stock-mcp"
]
}
}
}
方法三: HTTP モード
{
"mcpServers": {
"china-stock-mcp": {
"command": "uvx",
"args": ["china-stock-mcp", "--streamable-http", "--host", "0.0.0.0", "--port", "8081"],
"env": {
"MCP_BASE_URL": "http://localhost:8081/mcp"
}
}
}
}
その他の AI クライアントの設定
Cursor:
{
"mcpServers": {
"china-stock-mcp": {
"command": "uvx",
"args": [ "china-stock-mcp"]
}
}
}
Clion with MCP:
{
"mcpServers": {
"china-stock-mcp": {
"command": "uvx",
"args": [ "china-stock-mcp"]
}
}
}
🏃♂️ コマンドライン引数
--streamable-http: HTTP ストリーミングモードを有効にする (デフォルト: stdio モード)
--host: HTTP モードでのバインドホスト (デフォルト: 0.0.0.0)
--port: HTTP モードでのリスニングポート (デフォルト: 8081)
📊 データサポート範囲
株式市場
- A株 (上海証券取引所、深セン証券取引所)
- B株
- H株 (香港株式市場)
- 中小企業板、創業板、新三版
データタイプ
- 歴史的な相場データ (分単位、時間単位、日単位、週単位、月単位、年単位)
- リアルタイム相場データ
- 技術指標の計算
- ニュース情報
- 財務諸表 (貸借対照表、損益計算書、キャッシュフロー計算書)
- 財務指標
- 内部取引データ
🔧 開発と貢献
開発環境の設定
- リポジトリをクローンする
git clone https://github.com/xinkuang/china-stock-mcp
cd china-stock-mcp
- 開発用の依存関係をインストールする
uv sync --dev
- 開発モードに入る
uv run -m china_stock_mcp
コード構造
src/china_stock_mcp/
├── __init__.py
├── __main__.py # コマンドラインのエントリーポイントで、起動パラメータを処理します
├── server.py # MCP サーバーの核心部分で、すべてのツールを定義します
├── mcp.json # MCP 設定規範 (オプション)
└── py.typed # 型アノテーションファイル
新しいツールを追加する
server.py で @mcp.tool デコレータを使用して新しいツールを追加します。
@mcp.tool(name="ツールの日本語名", description="ツールの日本語説明")
def your_tool_name(param1: Annotated[str, Field(description="パラメータの説明")]) -> str:
"""ツールの詳細説明"""
pass
📝 ライセンス
MIT ライセンス - 詳細は LICENSE ファイルを参照してください。
🤝 貢献
Issue と Pull Request の投稿を歓迎します!
🙋♂️ よくある質問
Q: データを取得できないのはなぜですか?
A: ネットワーク接続とデータソースの可用性を確認してください。一部のデータソースにはアクセス制限がある場合があります。
Q: HTTP モードで接続できません。
A: ポート 8081 が他のサービスによって使用されていないこと、およびファイアウォールが該当ポートのアクセスを許可していることを確認してください。
Q: 最新バージョンに更新するにはどうすればいいですか?
A: Smithery でインストールした場合は自動的に更新されます。手動でインストールした場合は、リポジトリのコードを再度取得してください。
🐞 デバッグ
@modelcontextprotocol/inspector を使用してこのサーバーをデバッグする方法の詳細については、DEBUG.md を参照してください。