Not in the top 1,000 by GitHub stars

Adityaraj0421/dalal-street-skills

Claude skills for NSE & BSE: scan, plan, replay 10,000x and size every Indian trade, with STT, circuit bands, the 3:15 closing auction and your broker's square-off built in. Paper by default.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

nse-alerts/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-analyst/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-bigmoney/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-broker/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-budget/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-entry/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-exit/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-news/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-risk/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-scanner/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

nse-timemachine/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

6b33250b06b6 → 6fcc8d46032d

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 6b33250b06b6

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 6fcc8d46032dd551ad89c51745fd95a32db5edfa

git clone --filter=blob:none --no-checkout https://github.com/Adityaraj0421/dalal-street-skills.git .hotskills/adityaraj0421-dalal-street-skills && git -C .hotskills/adityaraj0421-dalal-street-skills checkout --detach 6fcc8d46032dd551ad89c51745fd95a32db5edfa # Copy each selected skill directory from .hotskills/adityaraj0421-dalal-street-skills into .claude/skills/<skill-name>/
9GitHub stars
0stars in 7 days
11skills in this repository
9commits in 30 days

Heat

1.5
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 28, 2026Oct 30, 20269

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

nse-alerts

When your agent uses it

Price Alerts and the NSE clock. Rings when a price, a stop, a circuit limit or the opening bell hits. Turns the trade plan into alerts in one go (the stop, the target, upper/lower circuit proximity and "flat by" at your MIS flat-by time, default 15:10 IST), plus above / below / stop / target levels, percent moves from the previous close, any time of day, and the 09:15 opening bell, each ringing once so you are not spammed. Knows NSE hours with the 2026 holidays (Diwali, Dussehra, Holi...), weekends and special sessions such as Diwali Muhurat trading, answers "is the market open", works out India time itself, fetches free delayed quotes from Yahoo (RELIANCE.NS, TCS.NS, RELIANCE.BO, Nifty) one ticker at a time, reads each stock's price band from NSE's sec_list.csv, and writes nse/prices.json for sizing and the risk check. Use when the user says "alert me when", "tell me if RELIANCE hits", "watch my stop", "watch my trade", "remind me to square off by 3:10", "is the market open", "is NSE open today", "when does the market open", "is it a holiday", "is there Muhurat trading", "is it near the upper circuit", "get me a price", or right after /nse-exit writes a plan.

What it loads into context

Frontmatter

359 tokens

Always available to the agent

SKILL.md

3,665 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. What it reads and writes
  2. Rule types
  3. Circuit limits
  4. Quotes
  5. The NSE clock
  6. Steps
  7. Example
  8. Rules
  9. What it never does
  10. Safety

Scripts executed separately

  • alerts.py

Files

  • ../.claude-plugin/marketplace.jsonasset556 bytes
  • ../.claude-plugin/plugin.jsonasset822 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • SKILL.mdcore12,842 bytes
  • alerts.example.jsonasset717 bytes
  • alerts.pyruns70,905 bytes
Read SKILL.md

# nse-alerts

On Windows, use `py` in place of `python3`.

Price Alerts watches the numbers so the user does not have to stare at a
chart. An alert is information, never an order: when a stop alert rings,
nothing is sold by this skill. In a live MIS trade the stop order sits at the
broker and does the work; the alerts tell the user what happened and when it
is time to be flat.

`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).

```bash
python3 "${CLAUDE_SKILL_DIR}/alerts.py" clock                          # NSE open or closed, next open
View the complete source on GitHub

Skills included

  • nse-alerts
  • nse-analyst
  • nse-bigmoney
  • nse-broker
  • nse-budget
  • nse-entry
  • nse-exit
  • nse-news
  • nse-risk
  • nse-scanner
  • nse-timemachine

Repository facts

License
MIT
Created
Oct 26, 2026
Last pushed
Oct 29, 2026
Forks
4
Open issues
6
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 7, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 77 notes
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-alerts/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-analyst/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-analyst/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-analyst/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-bigmoney/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-bigmoney/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-bigmoney/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • nse-bigmoney/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 293 signals by file

.claude-plugin/marketplace.json

  • Network accessline 1
    {   "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  • Network accessline 2
    "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  • Network accessline 3
    "name": "dalal-street-skills",   "description": "Claude skills for Indian stock markets (NSE/BSE)",   "owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"},
  • Network accessline 4
    "description": "Claude skills for Indian stock markets (NSE/BSE)",   "owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"},   "plugins": [
  • Network accessline 5
    "owner": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"},
  • Network accessline 10
    "source": "./",       "category": "productivity",       "homepage": "https://github.com/Adityaraj0421/dalal-street-skills"
  • Network accessline 11
    "category": "productivity",       "homepage": "https://github.com/Adityaraj0421/dalal-street-skills"     }
  • Network accessline 12
    "homepage": "https://github.com/Adityaraj0421/dalal-street-skills"

.claude-plugin/plugin.json

  • Network accessline 3
    "description": "11 Claude skills for trading and investing on NSE and BSE: scanner, news, entry timer, exit planner, 10,000-replay time machine, budget, risk manager, broker tickets for the top 10 Indian brokers (paper by default), alerts, 
  • Network accessline 4
    "version": "1.1.0",   "author": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"},   "homepage": "https://github.com/Adityaraj0421/dalal-street-skills",
  • Network accessline 5
    "author": {"name": "Aditya Raj", "url": "https://github.com/Adityaraj0421"},
  • Network accessline 6
    "homepage": "https://github.com/Adityaraj0421/dalal-street-skills",
  • Network accessline 7
    "repository": "https://github.com/Adityaraj0421/dalal-street-skills",

nse-alerts/SKILL.md

  • Network accessline 98
    NSE's price band for each stock is in `sec_list.csv` (`https://archives.nseindia.com/content/equities/sec_list.csv`, plain CSV,
  • Network accessline 99
    (`https://archives.nseindia.com/content/equities/sec_list.csv`, plain CSV,

nse-alerts/alerts.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 42
    Quotes (free, delayed, unofficial; for alerts only, never for timing an order):   Yahoo  https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 43
    Yahoo  https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 47
    Stooq has no Indian tickers, so Yahoo is the only source.   --offline DIR reads DIR/yahoo-<KEY>.json (or .json.gz) and DIR/sec_list.csv.   Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV,
  • Network accessline 48
    --offline DIR reads DIR/yahoo-<KEY>.json (or .json.gz) and DIR/sec_list.csv.   Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV,          cached once a day in nse/state/sec_list.json).
  • Network accessline 49
    Band: https://archives.nseindia.com/content/equities/sec_list.csv (plain CSV,
  • Network accessline 274
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 276
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 280
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 281
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 282
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 366
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 367
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 368
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 376
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 377
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 378
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 509
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 510
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 511
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 517
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 518
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 519
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 540
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 541
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 542
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 547
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 548
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 549
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 555
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 556
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 557
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 798
    PAUSE = 0.5            # seconds between requests: be polite to free endpoints SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv"
  • Network accessline 799
    SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv"
  • Possible obfuscationline 974
    rows = csv.reader(io.StringIO(text.lstrip("<U+FEFF>")))

nse-analyst/facts.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 15
    Source (open, no key): Yahoo   https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/<SYM>.NS?type=...
  • Network accessline 16
    https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/<SYM>.NS?type=...
  • Network accessline 182
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 183
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 184
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 192
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 193
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 194
    url = "https://%s.finance.yahoo.com%s" % (host, path)

nse-bigmoney/SKILL.md

  • Network accessline 36
    - Reads `https://archives.nseindia.com/content/equities/bulk.csv` and

nse-bigmoney/deals.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 14
    Where the data comes from (open archive files, no key):   https://archives.nseindia.com/content/equities/bulk.csv
  • Network accessline 15
    https://archives.nseindia.com/content/equities/bulk.csv
  • Network accessline 16
    https://archives.nseindia.com/content/equities/block.csv
  • Network accessline 185
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 186
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 187
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 195
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 196
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 197
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 283
    BULK_URL = "https://archives.nseindia.com/content/equities/bulk.csv"
  • Network accessline 284
    BLOCK_URL = "https://archives.nseindia.com/content/equities/block.csv"
  • Network accessline 299
    def download(url, timeout=30):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "text/csv,*/*"})
  • Network accessline 300
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "text/csv,*/*"})
  • Network accessline 301
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             return resp.read().decode("utf-8", "replace")
  • Network accessline 302
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Possible obfuscationline 347
    rows = list(csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))))

nse-broker/SKILL.md

  • Network accessline 104
    - **Groww.** Connect the official MCP server: Customize > Connectors > Add custom connector, URL   `https://mcp.groww.in/mcp`, log in with OAuth in the browser. It describes order tools: read the connected server's
  • Network accessline 105
    `https://mcp.groww.in/mcp`, log in with OAuth in the browser. It describes order tools: read the connected server's
  • Network accessline 106
    tool list, map the ticket's fields onto the order tool, set that tool to Needs approval. Selling needs DDPI on the account. - **Zerodha.** Add `https://mcp.kite.trade/mcp` the same way (Claude Code: `claude mcp add --transport http kite   h
  • Network accessline 107
    - **Zerodha.** Add `https://mcp.kite.trade/mcp` the same way (Claude Code: `claude mcp add --transport http kite
  • Network accessline 108
    https://mcp.kite.trade/mcp`) and log in on Zerodha's Kite page. The hosted server is read-only plus GTT: use it for
  • Network accessline 112
    - **Upstox, Kotak Neo.** Their official MCP servers are read-only: use them to read positions and orders, not to place.   Place the ticket through the broker's official API (the user sets it up and holds the keys) or by hand in the app. - *
  • Network accessline 113
    Place the ticket through the broker's official API (the user sets it up and holds the keys) or by hand in the app. - **HDFC Sky.** `https://api.hdfcsky.com/mcp` exists; whether it places orders is not confirmed. Read its tool list; if it ha
  • Network accessline 114
    - **HDFC Sky.** `https://api.hdfcsky.com/mcp` exists; whether it places orders is not confirmed. Read its tool list; if it has

nse-broker/ticket.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 272
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 274
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 278
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 279
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 280
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 364
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 365
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 366
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 374
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 375
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 376
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 507
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 508
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 509
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 515
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 516
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 517
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 538
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 539
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 540
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 547
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 548
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 549
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 555
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 556
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 557
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 1078
    MCP_ORDERS = {     "groww": ("places", "Groww's official MCP server (https://mcp.groww.in/mcp, OAuth in the browser) places orders: "
  • Network accessline 1079
    "groww": ("places", "Groww's official MCP server (https://mcp.groww.in/mcp, OAuth in the browser) places orders: "
  • Network accessline 1080
    "read its tool list for the order tool and map the ticket's fields onto it."),     "zerodha": ("gtt_only", "Zerodha's hosted MCP (https://mcp.kite.trade/mcp) is read-only plus GTT. Regular orders "                             "need a self-h
  • Network accessline 1081
    "zerodha": ("gtt_only", "Zerodha's hosted MCP (https://mcp.kite.trade/mcp) is read-only plus GTT. Regular orders "
  • Network accessline 1086
    "kotak": ("read_only", "Kotak Neo's official MCP server cannot place orders. Use the Neo Trade API (you set it "                            "up) or place this ticket by hand in the app."),     "hdfcsky": ("unknown", "HDFC Sky has an officia
  • Network accessline 1087
    "up) or place this ticket by hand in the app."),     "hdfcsky": ("unknown", "HDFC Sky has an official MCP server (https://api.hdfcsky.com/mcp) but order placement is "                            "not confirmed: read its tool list. Otherwise
  • Network accessline 1088
    "hdfcsky": ("unknown", "HDFC Sky has an official MCP server (https://api.hdfcsky.com/mcp) but order placement is "

nse-budget/size.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 272
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 274
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 278
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 279
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 280
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 364
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 365
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 366
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 374
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 375
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 376
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 507
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 508
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 509
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 515
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 516
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 517
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 538
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 539
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 540
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 547
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 548
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 549
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 555
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 556
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 557
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",

nse-entry/entry.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 47
    Data: Yahoo's free chart JSON (unofficial, can lag, bars not single trades)   https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 48
    https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 270
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 272
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 276
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 277
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 278
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 362
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 363
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 364
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 372
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 373
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 374
    url = "https://%s.finance.yahoo.com%s" % (host, path)

nse-exit/exit.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 263
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 265
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 269
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 270
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 271
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 355
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 356
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 357
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 365
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 366
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 367
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 498
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 499
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 500
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 506
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 507
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 508
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 529
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 530
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 531
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 536
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 537
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 538
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 544
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 545
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 546
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",

nse-news/SKILL.md

  • Network accessline 49
    | `nse/plan.json` | the trade you are planning (nse-exit) | | `nse/portfolio.json` | what you hold (`positions` and `holdings`) | | Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Ind
  • Network accessline 50
    | `nse/portfolio.json` | what you hold (`positions` and `holdings`) | | Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN
  • Network accessline 51
    | Google News RSS, India edition | one request per ticker: `https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en` |

nse-news/news.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 18
    - Google News RSS (English, India edition), searching the company's name     (from NSE's EQUITY_L.csv, cached in nse/state/) and the ticker:     https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-I
  • Network accessline 19
    (from NSE's EQUITY_L.csv, cached in nse/state/) and the ticker:     https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en     Yahoo's RSS feed is empty for Indian stocks, so it is 
  • Network accessline 20
    https://news.google.com/rss/search?q="Reliance Industries" OR "RELIANCE share" when:48h&hl=en-IN&gl=IN&ceid=IN:en
  • Network accessline 22
    - The move: Yahoo Finance's chart endpoint (unofficial, can lag), the last     price against the previous close:     https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 24
    https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=1d&interval=5m
  • Network accessline 259
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 261
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 265
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 266
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 267
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 351
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 352
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 353
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 361
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 362
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 363
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 449
    GNEWS = "https://news.google.com/rss/search?q=%s&hl=en-IN&gl=IN&ceid=IN:en"
  • Network accessline 450
    EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv"
  • Network accessline 557
    return self._file(name)         self._wait()         req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip",
  • Network accessline 558
    self._wait()         req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip",                                                    "Accept": "*/*"})
  • Network accessline 559
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "gzip",
  • Network accessline 560
    "Accept": "*/*"})         try:             with urllib.request.urlopen(req, timeout=30) as resp:
  • Network accessline 561
    try:             with urllib.request.urlopen(req, timeout=30) as resp:                 data = resp.read()
  • Network accessline 562
    with urllib.request.urlopen(req, timeout=30) as resp:
  • Possible obfuscationline 595
    for r in csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))):

nse-risk/check.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 297
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 299
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 303
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 304
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 305
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 389
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 390
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 391
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 399
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 400
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 401
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 532
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 533
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 534
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 540
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 541
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 542
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 563
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 564
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 565
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 572
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 573
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 574
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 580
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 581
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 582
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 800
    PAISE = 0.005 FRESH_MINUTES = 15 SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv"
  • Network accessline 801
    FRESH_MINUTES = 15 SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv" REF_WORDS = {"plan": "the plan's entry", "price": "the latest price", "limit": "the limit price",
  • Network accessline 802
    SEC_LIST_URL = "https://archives.nseindia.com/content/equities/sec_list.csv"
  • Possible obfuscationline 1018
    rd = csv.reader(io.StringIO(text.lstrip("<U+FEFF>")))

nse-scanner/scan.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 290
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 292
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 296
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 297
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 298
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 382
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 383
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 384
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 392
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 393
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 394
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 593
    "smallcap250": "ind_niftysmallcap250list", "bank": "ind_niftybanklist", } LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv"
  • Network accessline 594
    } LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv" EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv"
  • Network accessline 595
    LIST_URL = "https://www.niftyindices.com/IndexConstituent/%s.csv"
  • Network accessline 596
    EQUITY_L_URL = "https://archives.nseindia.com/content/equities/EQUITY_L.csv"
  • Network accessline 597
    BHAV_URL = "https://archives.nseindia.com/products/content/sec_bhavdata_full_%s.csv"
  • Possible obfuscationline 804
    for r in csv.reader(io.StringIO(text.lstrip("<U+FEFF>"))):

nse-timemachine/timemachine.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 72
    Data: https://query2.finance.yahoo.com/v8/finance/chart/RELIANCE.NS?range=60d&interval=5m
  • Network accessline 292
    # intraday position before continuous trading ends. # Which stocks are CAS stocks: the F&O underlyings in NSE's open file # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 294
    # https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv (cache it daily).
  • Network accessline 298
    ("2026-08-03", "2026-12-06", datetime.time(15, 15)), ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 299
    ) FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv" FO_INDEXES = {"NIFTY", "BANKNIFTY", "FINNIFTY", "MIDCPNIFTY", "NIFTYNXT50"}
  • Network accessline 300
    FO_LOTS_URL = "https://nsearchives.nseindia.com/content/fo/fo_mktlots.csv"
  • Network accessline 384
    def _open_url(url, timeout=20, accept="application/json"):     req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 385
    req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": accept})
  • Network accessline 386
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 394
    last = "no answer"     for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 395
    for host in HOSTS:         url = "https://%s.finance.yahoo.com%s" % (host, path)         for attempt in (0, 1):
  • Network accessline 396
    url = "https://%s.finance.yahoo.com%s" % (host, path)
  • Network accessline 527
    "squareoff": {"cas": "15:05", "other": "15:20"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, 
  • Network accessline 528
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",         "paper": False,
  • Network accessline 529
    "api": "Groww Trade API (paid monthly plan)", "mcp": "https://mcp.groww.in/mcp (official, OAuth; places orders)",
  • Network accessline 535
    "squareoff": {"cas": "15:12", "other": "15:25"}, "verified": ["brokerage", "dp_charge", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted =
  • Network accessline 536
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "                                        "regular orders need a self-hosted server with y
  • Network accessline 537
    "api": "Kite Connect", "mcp": "https://mcp.kite.trade/mcp (official; hosted = read-only plus GTT; "
  • Network accessline 558
    "squareoff": {"cas": "15:10", "other": "15:25"}, "verified": ["brokerage", "dp_charge"],         "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": F
  • Network accessline 559
    "stop_mis": "sl_leg", "stop_cnc": "gtt_oco",         "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,     },
  • Network accessline 560
    "api": "Upstox API", "mcp": "https://mcp.upstox.com/mcp (official, read-only)", "paper": False,
  • Network accessline 565
    "squareoff": {"cas": "15:05", "other": "15:05"}, "verified": ["brokerage", "squareoff"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (officia
  • Network accessline 566
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",         "paper": False,
  • Network accessline 567
    "api": "Neo Trade API (free)", "mcp": "https://neo.kotaksecurities.com/mcp-server/mcp (official, cannot place orders)",
  • Network accessline 573
    "squareoff": dict(UNVERIFIED_SQUAREOFF), "verified": ["brokerage"],         "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",
  • Network accessline 574
    "stop_mis": "sl_leg", "stop_cnc": "gtt",         "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",         "paper": False,
  • Network accessline 575
    "api": "HDFC Sky Open API", "mcp": "https://api.hdfcsky.com/mcp (official; order placement not confirmed)",

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 12 facts
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-alerts/alerts.py:542High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-alerts/alerts.py:549High confidence
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-broker/ticket.py:540High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-broker/ticket.py:549High confidence
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-budget/size.py:540High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-budget/size.py:549High confidence
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-exit/exit.py:531High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-exit/exit.py:538High confidence
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-risk/check.py:565High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-risk/check.py:574High confidence
  • Contacts mcp.upstox.com, which SKILL.md, the README and the plugin manifest do not mentionnse-timemachine/timemachine.py:560High confidence
  • Contacts neo.kotaksecurities.com, which SKILL.md, the README and the plugin manifest do not mentionnse-timemachine/timemachine.py:567High confidence
Signal confidence: 280 facts

and 230 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md nse-alerts/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md nse-alerts/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md nse-alerts/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md nse-alerts/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md nse-alerts/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.