CAUTION version 1.0.15 · audited 2026-09-17
This skill sends natural-language stock, fund, ETF, bond, and sector screening questions to an Eastmoney service and saves the returned rows as a Chinese-header CSV plus a text description. It requires an EM_API_KEY environment variable and sends that key to ai-saas.eastmoney.com in an HTTP header for authentication. The code does not hide network destinations, download and run programs, or touch wallets or payments; the operations match the declared screening feature. The main cautions are that generated CSV files may preserve spreadsheet formulas from remote financial data, the instructions tell users to store the API key in shell startup files, and httpx is installed without a pinned version. No malicious exfiltration or command execution beyond documented use was found.
Instructions try to steer the agent beyond the declared purpose. No prompt-injection or agent-override text was found. The package has spreadsheet formula injection risk: skill-card.md line 25 warns that generated CSV may preserve untrusted spreadsheet formulas, and scripts/get_data.py line 194 writes remote string values to CSV without formula neutralization.
| Declared purpose | Natural-language investment screener for A-shares, HK/US stocks, funds, ETFs, convertible bonds, and sectors; returns CSV and text description files using Eastmoney data. |
| Observed behavior | At import, the Python script reads EM_API_KEY and refuses to run if it is absent. It sends queries to https://ai-saas.eastmoney.com/proxy/b/mcp/tool/selectSecurity with the key in the em_api_key HTTP header. It parses returned JSON results or partial Markdown tables, translates columns to Chinese, and writes a CSV file and a description text file to a local output directory. The documentation instructs users to persist EM_API_KEY in shell startup files, source those files, install httpx via pip, and run the script with --query and --select-type. |
| Verdict, rules only | CAUTION · reads credential-like environment variables: EM_API_KEY; touches persistence (cron, shell profile, autostart) |
| Verdict, AI | CAUTION |
| Final verdict | CAUTION (never better than either pass) |
| capability | vs purpose | detail |
|---|---|---|
| network | needed | The code posts JSON to https://ai-saas.eastmoney.com/proxy/b/mcp/tool/selectSecurity; this is the only remote endpoint in code and matches the declared Eastmoney service. |
| credentials | needed | Reads EM_API_KEY from the environment and sends it as the em_api_key HTTP header to Eastmoney for API authentication. |
| filesystem_write | needed | Creates an output directory and writes CSV and text description files to a local path. |
| shell | needed | The documentation instructs shell commands for exporting/sourcing EM_API_KEY, installing httpx, and running the Python script; the Python code itself does not invoke a shell. |
| install_packages | needed | Requires installing the Python dependency httpx, documented as pip3 install httpx --user and listed in skill metadata. |
| persistence | exceeds purpose | Instructs the user to add EM_API_KEY to ~/.zshrc or ~/.bashrc and source those files, which persists the credential on disk; this is not required for one-shot use. |
| severity | finding |
|---|---|
| info | Declared purpose The skill declares itself as a natural-language investment asset screener with CSV and data-description outputs. SKILL.md:3 Natural language screener for investment assets across global markets, including A-shares, ETFs, bonds, HK and US stocks, and funds. |
| info | API key requirement declared Skill metadata declares EM_API_KEY as a required environment variable. SKILL.md:8 "env":["EM_API_KEY"] |
| info | Reads API key from environment The script reads EM_API_KEY when imported; line 46 refuses to continue if it is missing. scripts/get_data.py:44 EM_API_KEY = os.environ.get("EM_API_KEY", "") |
| info | Fails closed when key is missing The script raises a RuntimeError if EM_API_KEY is not set, rather than continuing without credentials. scripts/get_data.py:46 if not EM_API_KEY: |
| info | Sole network endpoint This is the only external API endpoint used by the Python code and matches the documented Eastmoney service. scripts/get_data.py:74 MCP_URL = "https://ai-saas.eastmoney.com/proxy/b/mcp/tool/selectSecurity" |
| medium | API key sent as HTTP header The credential is sent to the Eastmoney endpoint in a request header for authentication. This is required for the declared service, but the user must trust that service with the API key. scripts/get_data.py:402 "em_api_key": EM_API_KEY, |
| info | Writes CSV results The script writes query results to a CSV file in the chosen output directory. scripts/get_data.py:319 with open(csv_path, "w", newline="", encoding="utf-8") as f: |
| info | Writes description file The script writes a text description file next to the CSV output. scripts/get_data.py:335 desc_path.write_text("\n".join(description_lines), encoding="utf-8") |
| medium | Remote values written to CSV without formula sanitization Values from remote financial data are converted to strings and later written to CSV without neutralizing spreadsheet formula prefixes such as =, +, -, or @. scripts/get_data.py:194 cn_row[cn_name] = str(val) |
| medium | Spreadsheet formula injection risk acknowledged The package acknowledges that generated CSV files can contain untrusted spreadsheet formulas; users should open them with formula execution disabled or inspect them first. skill-card.md:25 Risk: CSV exports may preserve untrusted spreadsheet formulas from remote financial data. |
| low | Shell startup persistence instruction The documentation instructs adding the API key to ~/.zshrc or ~/.bashrc, which stores the credential persistently on disk; lines 85 and 90 then instruct sourcing those files. SKILL.md:77 export EM_API_KEY="your_api_key_here" |
| low | Unpinned dependency installation The skill installs httpx without a version pin, so future versions may change behavior; skill-card.md line 33 notes this supply-chain risk. SKILL.md:97 pip3 install httpx --user |
| info | Documented CLI usage The documentation shows how to run the screener script with a natural-language query and asset type. SKILL.md:105 python3 {baseDir}/scripts/get_data.py --query 股价大于100元,主力流入,成交额排名前50 --select-type A股 |
0 AI finding(s) were dropped because their file, line or quote did not match the package.
| domain | service rating | where |
|---|---|---|
| ai-saas.eastmoney.com | not in the service index | scripts/get_data.py:74 |
| ai.eastmoney.com | not in the service index | SKILL.md:31 |
| clawhub.ai | not in the service index | skill-card.md:9 |
| Binaries invoked | bash, pip3, python, python3 |
| Environment variables read | EM_API_KEY, MX_STOCKS_SCREENER_OUTPUT_DIR |
| Hard-coded wallets | none |
| Pipes a download to a shell | 0 |
| eval / exec / subprocess | 0 |
| base64 blobs | 0 |
| File writes | 2 |
| Persistence | 3 |
| file | lines | sha256 |
|---|---|---|
SKILL.md | 169 | e138343f46be0d25… |
_meta.json | 6 | 25056cdfedbad228… |
scripts/get_data.py | 433 | e46df6fdd014eb46… |
skill-card.md | 59 | 624ac3650fb7f8b1… |
For agents
JSON: https://agenteconomy.report/k/mx-stocks-screener.audit.json · badge: https://agenteconomy.report/k/mx-stocks-screener.audited.svg ·
skill rating: /k/mx-stocks-screener · commission an audit of any skill: US$ 29 per version.
The complete published package of this exact version was downloaded from the registry and read statically; nothing was executed. A deterministic pass extracts network destinations, binaries, environment variables, writes, install commands, obfuscation markers, subprocesses and wallets, each with file and line. An AI then reads the whole package with those facts and writes the summary, the capabilities and the findings under a strict schema; every finding it produces must cite a file, a line and the exact text, or it is dropped. The final verdict is the worst of the two passes. The audit does not change the skill's trust tier (policy); the author may respond through the dispute channel and the response is published here. Commissioned by: the Agent Economy Report (free program: the 150 most downloaded skills, September 2026).