get_stock_quote
Latest price snapshot for an NSE stock — last close, prev close, change %, day H/L, volume.
symbolrequired
io.github.alokbarnwalPublished by GitHub account alokbarnwalv1.0.1Updated Oct 24, 2026
Analyze any Nifty 500 stock with AI — price action, demand zones, technicals & screener.
Remote MCP server for Indian NSE stock analysis: quotes, OHLCV, technical indicators, price-action levels and a Nifty 500 screener.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.alokbarnwal%2Fnse-public-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"indian-nse-stock-insights": {
"type": "http",
"url": "https://stockmcp.alokbarnwal.com/mcp"
}
}
}Public MCP server for Indian stock market analysis — Nifty 500 universe, 12 tools, 3 timeframes.
Built with FastMCP · Data from yfinance · Hosted at stockmcp.alokbarnwal.com
Educational only. Not investment advice. See DISCLAIMER.md.
Claude.ai → Settings → Connectors → Add custom MCP connector:
That's it. Start asking questions about Indian stocks.
timeframe defaults to daily. Options: daily, 15min, 5min.
Try these in Claude.ai after connecting:
Market hours: 09:15–15:30 IST, Monday–Friday (excluding NSE holidays).
Runs on
/home/ubuntu/nse-public-mcp/— completely isolated from/home/ubuntu/swingtrader/.
The repo ships with the top ~100 stocks hardcoded. To expand to all 500:
Expected runtime:
daily 5y × 500: ~30 min15min 2y × 500: ~2 h5min 6mo × 500: ~1 hIf anything fails, the failure list is written to backfill_failures_<timeframe>.json. Re-run:
After the candle backfill completes, populate the indicators table for all 500 stocks across all 3 timeframes:
Expected runtime: ~30–45 min. Idempotent — safe to re-run if interrupted.
After indicators are populated, compute price-action features (zones, S/R, patterns, breakouts, fibs, gaps, volume profile) for all 500 stocks across all 3 timeframes:
Expected runtime: ~60–90 min total. Idempotent — safe to re-run if interrupted.
Add:
Cron times are server-local. Verify the server is on IST (
timedatectl) — if not, shift the hour ranges. The 5-min indicator cron is offset to2-57/5so it runs ~2 minutes aftercron_5minand never reads stale candles. The price-action 5-min cron is offset to9-54/15(minutes 9, 24, 39, 54) so it runs ~2 minutes after eachcron_indicators_5minslot.
DB size on disk:
See PROJECT.md for architecture and data-flow diagram.
INSERT … ON DUPLICATE KEY UPDATE. Replaying a cron tick or rerunning backfill is safe.config/holidays.py. Update it once a year when NSE publishes the next year's list.jobs/cron_daily.py. Daily candles older than 5 y, 15min older than 2 y, 5min older than 6 mo are purged.MIT — free to use, modify, and distribute.
This project is for educational and informational purposes only. Not investment advice. See DISCLAIMER.md.
Source: README.md at commit aaefc5c
Latest price snapshot for an NSE stock — last close, prev close, change %, day H/L, volume.
symbolrequiredRecent OHLCV candles. timeframe in {daily, 15min, 5min}; limit capped at 500; newest first.
limitsymbolrequiredtimeframeLatest technical indicators (EMAs, SMAs, RSI, MACD, BB, ADX, Stoch, ATR, OBV, VWAP).
symbolrequiredtimeframePivot points + historical support/resistance levels, ordered by price desc.
symbolrequiredtimeframeDemand/supply zones (DBR/RBR/RBD/DBD) split into demand_zones and supply_zones.
statussymbolrequiredtimeframeRecent single-bar candlestick patterns (HAMMER, DOJI, ENGULFING, ...) newest first.
limitsymbolrequiredtimeframeMulti-bar chart patterns (DOUBLE_TOP, HEAD_AND_SHOULDERS, ...). 'ACTIVE' = PENDING/CONFIRMED.
statussymbolrequiredtimeframeLatest fibonacci retracement swings (UP/DOWN) with 236/382/500/618/786 levels.
symbolrequiredtimeframeVolume diagnostic: top 5min hotspots + peak slot + OBV 20-day trend + today/20-day volume ratio.
symbolrequiredMarket-wide snapshot: indices, top_gainers, top_losers, most_active, breadth.
Takes no parameters.
Side-by-side comparison of 2-5 symbols: quote, RSI/MACD/ADX, trend, 30d return, latest pattern.
symbolsrequiredtimeframeFilter the active universe. Keys: rsi_min, rsi_max, adx_min, trend, near_demand_zone, pattern, min_volume_ratio, sector. At least one required.
filtersrequired100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Name: Indian NSE Stock InsightsURL: https://stockmcp.alokbarnwal.com/mcpgraph 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| NGcd /home/ubuntugit clone https://github.com/alokbarnwal/nse-public-mcp.gitcd nse-public-mcpsudo 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;SQLmysql -u nse_writer -p nse_public < db/schema.sqlmysql -u nse_writer -p nse_public < db/schema_indicators.sqlmysql -u nse_writer -p nse_public < db/schema_price_action.sqlpython3 -m venv .venvsource .venv/bin/activatepip install -r requirements.txtcp .env.example .envchmod 600 .envnano .env # set DB_PASSWORD to match step 2python -m config.stocks --refresh # fetches NSE archives, rewrites config/stocks.pypython -m config.stocks --load-to-dbscreen -S backfillsource .venv/bin/activatepython -m data.backfill --all# Ctrl-A D to detach. Reattach: screen -r backfillpython -m data.backfill --timeframe 15min --resumescreen -S indicatorscd /home/ubuntu/nse-public-mcppython3 -m indicators.runner --all# Ctrl-A D to detachscreen -S price_actioncd /home/ubuntu/nse-public-mcppython3 -m price_action.runner --timeframe daily --all-featurespython3 -m price_action.runner --timeframe 15min --all-featurespython3 -m price_action.runner --timeframe 5min --all-features# Ctrl-A D to detachcrontab -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>&10 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>&120,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>&15 16 * * 1-5 cd /home/ubuntu/nse-public-mcp && /usr/bin/python3 -m jobs.cron_indicators_15min >> logs/indicators_15min.log 2>&12-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>&125,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>&19-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>&1mysql -u nse_writer -p nse_public <<'SQL'SELECT 'daily' AS tf, COUNT(*) AS n FROM candles_dailyUNION ALL SELECT '15min', COUNT(*) FROM candles_15minUNION ALL SELECT '5min', COUNT(*) FROM candles_5min;
-- Per-stock coverage on daily — flag any with < 1000 rows (~4 trading years)SELECT symbol, COUNT(*) AS nFROM candles_dailyGROUP BY symbolHAVING n < 1000ORDER BY n;
-- Latest data freshnessSELECT MIN(candle_date) AS earliest, MAX(candle_date) AS latestFROM candles_daily;
-- Recent cron healthSELECT job_type, timeframe, symbols_success, symbols_failed, started_at, duration_secondsFROM fetch_logORDER BY started_at DESCLIMIT 20;SQLsudo du -sh /var/lib/mysql/nse_public/# Server statussudo systemctl status nse-public-mcp
# Restartsudo systemctl restart nse-public-mcp
# Logssudo journalctl -u nse-public-mcp -n 100 -f
# nginxsudo nginx -t && sudo systemctl reload nginx
# fail2bansudo fail2ban-client status nginx-mcp-ratelimitconfig/ # settings, stock universe, holiday calendardata/ # yfinance fetcher, backfill CLI, shared upsert helpersdb/ # schema and pooled connectionindicators/ # technical indicator compute, persist, runnerprice_action/ # zones, patterns, levels, trendsmcp_server/ # FastMCP server + 12 tool modulesjobs/ # cron entrypoints (candles + indicators + price action)deploy/ # systemd service, nginx config, fail2ban rulestests/ # mocked unit tests (82 tests)