Indian NSE Stock Insights について
Indian NSE Stock Insightsは、Nifty 500を対象にインド株を分析する公開MCPサーバーです。株価、テクニカル指標、値動き分析、スクリーニングを3つの時間足で提供し、教育・情報用途に限られます。投資助言ではありません。
主な機能
- 01株価とOHLCVデータ
- 02テクニカル指標とサポート・レジスタンス
- 03需給ゾーンとローソク足パターン
- 04チャートパターンとフィボナッチ水準
- 05出来高分析とマーケット概要
- 06銘柄比較とスクリーニング
活用シーン
- 01Nifty 500銘柄のテクニカル指標の確認
- 02複数銘柄のトレンドとリターンの比較
- 03RSI・トレンド・パターンによる銘柄抽出
- 04指数や値上がり・値下がり銘柄、需給ゾーンの確認
MCP 対応
MCPサーバーは12個のツールを通じて、Nifty 500の株式データと分析をMCPクライアントに提供します。時間足はdaily、15min、5minです。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://stockmcp.alokbarnwal.com/mcpclaude mcp add --transport http alokbarnwal-nse-public https://stockmcp.alokbarnwal.com/mcp{"mcpServers":{"alokbarnwal-nse-public":{"type":"http","url":"https://stockmcp.alokbarnwal.com/mcp"}}}Cursor で開く{"servers":{"alokbarnwal-nse-public":{"type":"http","url":"https://stockmcp.alokbarnwal.com/mcp"}}}VS Code で開く{"mcpServers":{"alokbarnwal-nse-public":{"type":"http","url":"https://stockmcp.alokbarnwal.com/mcp"}}}{"mcpServers":{"alokbarnwal-nse-public":{"serverUrl":"https://stockmcp.alokbarnwal.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
12| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| symbol | string | はい |
詳細
インド NSE 株価インサイト 🇮🇳📈
インド株式市場分析のための公開 MCP サーバー — Nifty 500 の銘柄群、12 個のツール、3 つの時間足。
FastMCP で構築 · データ提供元は yfinance · ホスト先は stockmcp.alokbarnwal.com
教育目的のみです。投資助言ではありません。 DISCLAIMER.md をご覧ください。
クイック接続 — 30 秒
Claude.ai → 設定 → コネクタ → カスタム MCP コネクタを追加:
Name: Indian NSE Stock Insights
URL: https://stockmcp.alokbarnwal.com/mcp
これで完了です。インド株について質問してみましょう。
12 個のツール
| # | ツール | パラメーター | 返される内容 |
|---|---|---|---|
| 1 | get_stock_quote | symbol | 最終終値、前日終値、変動率、当日の高値/安値、出来高 |
| 2 | get_ohlc_data | symbol、timeframe?、limit? | OHLCV ローソク足(最大 500 件、新しい順) |
| 3 | get_technical_indicators | symbol、timeframe? | EMA、SMA、RSI、MACD、ボリンジャー、ADX、ストキャスティクス、ATR、OBV、VWAP |
| 4 | get_support_resistance | symbol、timeframe? | ピボットポイント+過去のサポート/レジスタンス水準 |
| 5 | get_demand_supply_zones | symbol、timeframe?、status? | 需要/供給ゾーン(DBR/RBR/RBD/DBD) |
| 6 | get_candlestick_patterns | symbol、timeframe?、limit? | HAMMER、DOJI、ENGULFING など |
| 7 | get_chart_patterns | symbol、timeframe?、status? | DOUBLE_TOP、HEAD_AND_SHOULDERS など |
| 8 | get_fibonacci_levels | symbol、timeframe? | フィボナッチ水準付きのリトレースメントのスイング(UP/DOWN) |
| 9 | get_volume_analysis | symbol | 5 分足の注目ポイント、OBV のトレンド、出来高比率 |
| 10 | get_market_overview | (なし) | 指数、上昇率上位/下位、取引活発銘柄、騰落状況 |
| 11 | compare_stocks | symbols(2~5 銘柄)、timeframe? | 横並び比較:株価、RSI/MACD/ADX、トレンド、30 日リターン |
| 12 | screen_stocks | filters | RSI、ADX、トレンド、パターン、セクターなどで絞り込み |
timeframe のデフォルトは daily です。選択肢:daily、15min、5min。
プロンプトの例
接続後、Claude.ai で次のように試してみましょう:
- 「RELIANCE のテクニカル分析をして — RSI、MACD、サポート/レジスタンス水準を教えて」
- 「RSI が 30 未満で ADX が 25 を超える Nifty 500 の銘柄を表示して」
- 「TCS、INFY、WIPRO を比較して — 現時点で最も有望な銘柄はどれ?」
- 「今日の市場全体の状況は?上昇率上位と下位の銘柄を表示して」
- 「15 分足チャートで HDFC Bank の需要ゾーンと供給ゾーンを表示して」
アーキテクチャ
graph TB
subgraph Internet
C[Claude.ai / MCP Client]
end
subgraph Server["Production Server"]
subgraph Protection
F2B[fail2ban<br/>auto-ban repeat abusers]
NG[nginx<br/>rate limit 20r/s · conn limit · TLS]
end
subgraph Application
MCP["FastMCP Server<br/>port 8089 · 12 tools"]
TOOLS["Tool Modules<br/>quote · ohlc · indicators<br/>levels · zones · patterns<br/>fibonacci · volume · market<br/>compare · screener"]
end
subgraph Data
DB[(MySQL: nse_public<br/>500 stocks × 3 timeframes)]
CRON[Cron Jobs<br/>5min · 15min · daily]
end
end
subgraph External
YF[Yahoo Finance<br/>yfinance API]
end
C -->|HTTPS POST /mcp| NG
NG -->|proxy_pass| MCP
MCP --> TOOLS
TOOLS -->|read-only queries| DB
YF -->|OHLCV data| CRON
CRON -->|upsert| DB
F2B -.->|monitors| NG
データのカバレッジ
| 時間足 | 保持期間 | 更新頻度 | 銘柄数 |
|---|---|---|---|
| 日足 | 5 年 | EOD(18:00 IST) | 500 |
| 15 分足 | 2 年 | 15 分ごと(取引時間中) | 500 |
| 5 分足 | 6 か月 | 5 分ごと(取引時間中) | 500 |
取引時間:月曜日~金曜日の 09:15~15:30 IST(NSE の休場日を除く)。
レート制限
| レイヤー | 制限 | 対応 |
|---|---|---|
| nginx | IP あたり毎秒 20 リクエスト(バースト 40) | HTTP 429 |
| nginx | IP あたり同時接続 10 件 | HTTP 429 |
| fail2ban | 2 分間にレート制限違反 5 回 | IP を 1 時間ブロック |
セルフホスト
クリックして展開 — デプロイ手順の全容
/home/ubuntu/nse-public-mcp/で実行します。/home/ubuntu/swingtrader/から完全に分離されています。
1. クローン
cd /home/ubuntu
git clone https://github.com/alokbarnwal/nse-public-mcp.git
cd nse-public-mcp
2. データベースとユーザーを作成
sudo mysql <<'SQL'
CREATE DATABASE IF NOT EXISTS nse_public CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'nse_writer'@'localhost' IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON nse_public.* TO 'nse_writer'@'localhost';
FLUSH PRIVILEGES;
SQL
3. スキーマを適用
mysql -u nse_writer -p nse_public < db/schema.sql
mysql -u nse_writer -p nse_public < db/schema_indicators.sql
mysql -u nse_writer -p nse_public < db/schema_price_action.sql
4. 依存関係をインストール
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
5. 環境を設定
cp .env.example .env
chmod 600 .env
nano .env # set DB_PASSWORD to match step 2
6. (任意)Nifty 500 の全銘柄リストを更新
リポジトリには上位約 100 銘柄がハードコードされています。500 銘柄すべてに拡張するには:
python -m config.stocks --refresh # fetches NSE archives, rewrites config/stocks.py
7. 銘柄群を DB に読み込む
python -m config.stocks --load-to-db
8. 過去データをバックフィルする(長時間かかるため、screen/tmux を使用)
screen -S backfill
source .venv/bin/activate
python -m data.backfill --all
# Ctrl-A D to detach. Reattach: screen -r backfill
予想実行時間:
daily 5y × 500:約 30 分15min 2y × 500:約 2 時間5min 6mo × 500:約 1 時間
失敗した場合、失敗リストは backfill_failures_<timeframe>.json に書き込まれます。再実行するには:
python -m data.backfill --timeframe 15min --resume
ローソク足のバックフィルが完了したら、全 3 つの時間軸における全 500 銘柄の indicators テーブルを作成します。
screen -S indicators
cd /home/ubuntu/nse-public-mcp
python3 -m indicators.runner --all
# Ctrl-A D to detach
想定実行時間:約 30~45 分です。冪等性があるため、中断した場合も安全に再実行できます。
8c. プライスアクションの一括計算(長時間実行、screen/tmux を使用)
インジケーターの作成が完了したら、全 3 つの時間軸における全 500 銘柄のプライスアクション機能(ゾーン、S/R、パターン、ブレイクアウト、フィボナッチ、ギャップ、出来高プロファイル)を計算します。
screen -S price_action
cd /home/ubuntu/nse-public-mcp
python3 -m price_action.runner --timeframe daily --all-features
python3 -m price_action.runner --timeframe 15min --all-features
python3 -m price_action.runner --timeframe 5min --all-features
# Ctrl-A D to detach
想定総実行時間:約 60~90 分です。冪等性があるため、中断した場合も安全に再実行できます。
9. crontab のインストール
crontab -e
以下を追加します。
# nse-public-mcp candle updaters
*/5 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /home/ubuntu/nse-public-mcp/.venv/bin/python -m jobs.cron_5min >> logs/cron_5min.log 2>&1
*/15 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /home/ubuntu/nse-public-mcp/.venv/bin/python -m jobs.cron_15min >> logs/cron_15min.log 2>&1
0 18 * * 1-5 cd /home/ubuntu/nse-public-mcp && /home/ubuntu/nse-public-mcp/.venv/bin/python -m jobs.cron_daily >> logs/cron_daily.log 2>&1
# nse-public-mcp indicator updaters (each runs after the matching candle fetch)
30 18 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_indicators_daily >> logs/indicators_daily.log 2>&1
20,35,50 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_indicators_15min >> logs/indicators_15min.log 2>&1
5 16 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_indicators_15min >> logs/indicators_15min.log 2>&1
2-57/5 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_indicators_5min >> logs/indicators_5min.log 2>&1
# nse-public-mcp price-action updaters (each runs after the matching indicator cron)
35 18 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_price_action_daily >> logs/price_action_daily.log 2>&1
25,55 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_price_action_15min >> logs/price_action_15min.log 2>&1
9-54/15 9-15 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_price_action_5min >> logs/price_action_5min.log 2>&1
cron の時刻はサーバーのローカル時刻です。サーバーが IST に設定されていることを確認してください(
timedatectl)。設定されていない場合は、時間帯を調整してください。 5 分ごとのインジケーター cron は2-57/5にずらしているため、cron_5minの約 2 分後に実行され、古いローソク足を読み込むことはありません。 5 分ごとのプライスアクション cron は9-54/15(9、24、39、54 分)にずらしているため、各cron_indicators_5minの実行枠の約 2 分後に実行されます。
10. 検証
mysql -u nse_writer -p nse_public <<'SQL'
SELECT 'daily' AS tf, COUNT(*) AS n FROM candles_daily
UNION ALL SELECT '15min', COUNT(*) FROM candles_15min
UNION ALL SELECT '5min', COUNT(*) FROM candles_5min;
-- Per-stock coverage on daily — flag any with < 1000 rows (~4 trading years)
SELECT symbol, COUNT(*) AS n
FROM candles_daily
GROUP BY symbol
HAVING n < 1000
ORDER BY n;
-- Latest data freshness
SELECT MIN(candle_date) AS earliest, MAX(candle_date) AS latest
FROM candles_daily;
-- Recent cron health
SELECT job_type, timeframe, symbols_success, symbols_failed, started_at, duration_seconds
FROM fetch_log
ORDER BY started_at DESC
LIMIT 20;
SQL
ディスク上の DB サイズ:
sudo du -sh /var/lib/mysql/nse_public/
サービス管理
# Server status
sudo systemctl status nse-public-mcp
# Restart
sudo systemctl restart nse-public-mcp
# Logs
sudo journalctl -u nse-public-mcp -n 100 -f
# nginx
sudo nginx -t && sudo systemctl reload nginx
# fail2ban
sudo fail2ban-client status nginx-mcp-ratelimit
ディレクトリ構成
アーキテクチャとデータフロー図については、PROJECT.md を参照してください。
config/ # settings, stock universe, holiday calendar
data/ # yfinance fetcher, backfill CLI, shared upsert helpers
db/ # schema and pooled connection
indicators/ # technical indicator compute, persist, runner
price_action/ # zones, patterns, levels, trends
mcp_server/ # FastMCP server + 12 tool modules
jobs/ # cron entrypoints (candles + indicators + price action)
deploy/ # systemd service, nginx config, fail2ban rules
tests/ # mocked unit tests (82 tests)
運用上の注意
- Yahoo Finance に配慮してください。 フェッチャーはリクエスト間に 1~3 秒待機し、バックオフを伴う再試行を行います。これらの設定を短縮しないでください。
- 冪等性があります。 すべての挿入処理は
INSERT … ON DUPLICATE KEY UPDATEです。cron の実行を再生したり、バックフィルを再実行したりしても安全です。 - 休場日カレンダーは
config/holidays.pyにあります。NSE が翌年の一覧を公開したら、年に一度更新してください。 - 保持データのクリーンアップは
jobs/cron_daily.pyの最後に実行されます。5 年を超える日足、2 年を超える 15 分足、6 か月を超える 5 分足は削除されます。
ライセンス
MIT — 無料で使用、変更、配布できます。
免責事項
このプロジェクトは教育および情報提供のみを目的としています。投資助言ではありません。DISCLAIMER.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。