Agent Economy Report

Skill code audit

CAUTION version 1.0.15 · audited 2026-09-17

mx-stocks-screener @financial-ai-analyst

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 purposeNatural-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 behaviorAt 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 onlyCAUTION · reads credential-like environment variables: EM_API_KEY; touches persistence (cron, shell profile, autostart)
Verdict, AICAUTION
Final verdictCAUTION (never better than either pass)

Capabilities

capabilityvs purposedetail
networkneededThe 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.
credentialsneededReads EM_API_KEY from the environment and sends it as the em_api_key HTTP header to Eastmoney for API authentication.
filesystem_writeneededCreates an output directory and writes CSV and text description files to a local path.
shellneededThe 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_packagesneededRequires installing the Python dependency httpx, documented as pip3 install httpx --user and listed in skill metadata.
persistenceexceeds purposeInstructs 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.

Findings

severityfinding
infoDeclared 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.
infoAPI key requirement declared
Skill metadata declares EM_API_KEY as a required environment variable.
SKILL.md:8 "env":["EM_API_KEY"]
infoReads 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", "")
infoFails 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:
infoSole 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"
mediumAPI 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,
infoWrites 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:
infoWrites 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")
mediumRemote 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)
mediumSpreadsheet 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.
lowShell 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"
lowUnpinned 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
infoDocumented 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.

Network destinations in the code

domainservice ratingwhere
ai-saas.eastmoney.comnot in the service indexscripts/get_data.py:74
ai.eastmoney.comnot in the service indexSKILL.md:31
clawhub.ainot in the service indexskill-card.md:9

Other facts

Binaries invokedbash, pip3, python, python3
Environment variables readEM_API_KEY, MX_STOCKS_SCREENER_OUTPUT_DIR
Hard-coded walletsnone
Pipes a download to a shell0
eval / exec / subprocess0
base64 blobs0
File writes2
Persistence3

Files audited

filelinessha256
SKILL.md169e138343f46be0d25…
_meta.json625056cdfedbad228…
scripts/get_data.py433e46df6fdd014eb46…
skill-card.md59624ac3650fb7f8b1…

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.

How this is computed

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).