iran-bourse-mcp@0.5.0
CAUTION· not startedPublisher claims: "MCP server giving AI agents complete, clean, analysis-ready Tehran Stock Exchange (TSETMC) and Codal data: quotes, order book, tick trades, real/legal flow, shareholders, filings and more." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the codeAlso tsetmc.com, codal.ir, tse.ir, ime.co.ir, iee.ir, claude.com, cursor.com, visualstudio.com, windsurf.com, cline.bot, roocode.com, kiro.dev, jetbrains.com, zed.dev, opencode.ai, ampcode.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it under the guard. Not started: dependency install failed; the server itself was not observed. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-11 and scored it 78/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Hidden zero-width characters detected; Hidden zero-width characters detected; Hidden zero-width characters detected. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
return str(text or "").replace("ي", "ی").replace("ك", "ک").replace(" ", "").replace("", "")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.…market-wide", "question_fa": "در آخرین جلسه بازار، بین نمادهایی که بورس آنها را «سهام عادی» طبقهبندی کرده (بورس و فرابورس)، ۵ نماد با بیشترین ارزش صف خری…Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.<text x="64" y="238" font-family="{SANS}" font-size="22" fill="{MUTED}" unicode-bidi="plaintext">بورس تهران، برای ایجنتهای هوش مصنوعی</text>Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."market_status": "وضعیت بازار", "market_overview": "نمای کلی بازار", "indices": "شاخصها و شاخص صنایع",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.<text x="80" y="396" font-family="{SANS}" font-size="32" fill="{MUTED}" unicode-bidi="plaintext">بورس تهران، برای ایجنتهای هوش مصنوعی</text>Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."question_fa": "برای نماد «فولاد» در روز دوشنبه ۱۱ آبان ۱۴۰۵ (2026-11-02): میانگین وزنی قیمت (VWAP) از روی تکتک معاملات، تعداد معاملات، حجم بزرگترین معامله و ساعت آن (HH:MM:SS).",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."""All indices: total, equal-weight, free-float and every industry index with change % (شاخصها و شاخص صنایع)."""Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.subprocess.run([ffmpeg, "-y", "-loglevel", "error", "-framerate", str(args.fps), "-i", str(frames_dir / "f%04d.png"),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Preset("strong_close", "Up more than 3% and closing at the day's high", "بستهشدن در سقف روز",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.return subprocess.run(cmd, capture_output=True, check=True).stdout.decode("utf-8", "replace")Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."""Investment-fund universe and ranking (صندوقهای سرمایهگذاری) from the exchange's own fund registry.Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.text = ascii_digits(text).replace("", "").replace(" ", "")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.collected = subprocess.run([sys.executable, "-m", "pytest", "--collect-only", "-q"], cwd=ROOT, capture_output=True, text=True).stdoutFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.13: {"key": "project", "fa": "پروژهای", "official": "پروژهای", "en": ("project",)},Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.# «کاورد کالهای برج ۱۰»: every expiry in that Jalali month, not the nearest oneFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent._d("professional_investors", "stocks", T, "ProInvest:1", "بازار سرمایهگذاری حرفهای", "Professional investors' market", COLS_MOVERS, aliases=("pro_invest",)),Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."""The exchange's own «برترینها» (best-of) lists, shaped for agents.Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."codal report list": "https://www.codal.ir/ReportList.aspx?search&Symbol=%D9%81%D9%88%D9%84%D8%A7%D8%AF",Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.subprocess.run([ffmpeg, "-y", "-loglevel", "error", "-framerate", str(args.fps), "-i", str(frames_dir / "f%04d.png"), "-i", str(palette),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.s = unescape(str(s)).translate(_LETTERS).translate(_DIGITS).replace("", "")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."شاخص هموزن": {"en": "equal-weight index", "meaning": "Index where every stock has the same weight; reflects the typical stock better than the total index."},Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.60: "بازار برق آزاد", 64: "بازار مصرفکنندگان بزرگ برق", 67: "آتی انرژی", 68: "گواهی سپرده حاملهای انرژی", 69: "بازار برق سبز",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.subprocess.run(cmd, check=True, capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run([ffmpeg, "-y", "-loglevel", "error", "-framerate", str(args.fps), "-i", str(frames_dir / "f%04d.png"),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out._ZW = dict.fromkeys(map(ord, "ـًٌٍَُِّْٰٔ"), None)Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."industry_summary": "خلاصه گروههای صنعتی و ورود پول حقیقی هر صنعت", "index_contributors": "بیشترین تأثیر بر شاخص", "market_snapshot": "جدول پایان روز کل بازار",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.- For the exchange's own rankings (برترینها: block trades, rights, ETFs, options, queues, industries) use top_lists; for who isFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."""Per-industry breakdown: traded value, average and cap-weighted change, index effect, queue counts (گروههای صنعتی)."""Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.row = by_reg(fd.shape_fund_ranking({25: sample[25]}))[12352] # published as '>صندوق سرمایهگذاری بازنشستگی تکمیلی ...'Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.dt.date(2026, 4, 2): "روز طبیعت (سیزدهبهدر)",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."""Live/last quote with correct change %, volume, value, VWAP, price limits, ranges, P/E and market cap (قیمت لحظهای)."""Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.(1, 13): "روز طبیعت (سیزدهبهدر)",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."market_watch": "دیدهبان کل بازار (سهام، صندوق، اوراق، اختیار، آتی)", "top_movers": "بیشترین رشد/ریزش، صف خرید و فروش، ورود پول حقیقی",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent._f("open_interest", "num", "contracts", "موقعیتهای باز", "Open interest of options and futures.", aliases=("buyop",)),Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.subprocess.run(cmd, check=True, capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."index_history": "تاریخچه و روند لحظهای هر شاخص", "index_constituents": "اعضای شاخص و تأثیر هر نماد", "fund_ranking": "رتبهبندی و مقایسهٔ صندوقهای سرمایهگذاری",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent."market_holder_moves": "جابهجایی سهامداران عمده", "supervisor_messages": "پیام ناظر", "search_symbol": "جستجوی نماد",Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.always 0), and ``name`` is null: the display name is ``mfName`` without the words 'صندوق سرمایهگذاری'.Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.…PS, base volume, NAV)")] = "compact", ) -> dict: """Whole-market table (دیدهبان بازار) of the exchange's own feed: about 3,700 instruments (shares, base mar…Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.assert melli["name"].replace("", "") == "ملی صنایع مس ایران" and melli["ins_code"] == "35425587644337450" # letters normalisedFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.assert match_key("مینا") == match_key("مینا")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.assert (first["symbol"], first["name"], first["date"], first["jdate"], first["time"]) == ("ثنوسا", "نوسازیوساختمانتهران", "2026-11-04", "1405/08/13", "18:45:44")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for iran-bourse-mcp@0.5.0 as of 3d ago. This is the package itself, not its dependencies.
What would make this Verified
2 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim msmahdinejad: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
- New publisher≈ +3 on the totalTime clears this on its own after 14 and 30 days. Claiming the handle (+50) is the fastest way past it.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Dense URL-encoded content≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.