Agent Economy Report

Skill code audit

CAUTION version 1.0.12 · audited 2026-09-17

mx-finance-data @financial-ai-analyst

This skill is a wrapper around Eastmoney's Miaoxiang financial data service. It reads the EM_API_KEY environment variable, sends the user's natural-language query to Eastmoney for entity recognition and data lookup, parses returned tables, and writes Excel and Markdown result files under the current working directory. The documented behavior matches the declared purpose, and no hidden downloads, shell execution, wallet access, or prompt-injection payloads were found. The main caution is that the Python function accepts custom API base URLs and will send the API key to a supplied URL; the skill card itself discloses this risk. Users should also review the instruction to persist EM_API_KEY in a shell profile.

Declared purposeNatural-language querying of Eastmoney financial data across A-shares, Hong Kong and US stocks, ETFs, funds, bonds, indices, and related entities, then exporting results as Excel and Markdown files for investment research and market analysis.
Observed behaviorThe script requires EM_API_KEY, builds HTTP POST requests to Eastmoney's entity recognition and searchData endpoints, sends the API key in a request header, parses dataTableDTOList JSON into table rows, and writes .xlsx and .md files under `./miaoxiang/mx_finance_data`. It chooses direct query for up to 5 recognized entities and batch query for more, with a maximum of 500 entities. It does not contain download-and-execute, base64 payloads, wallet handling, or automatic execution of shell commands.
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
networkneededSends HTTPS POST requests to Eastmoney endpoints `ai-saas.eastmoney.com/proxy/...` to recognize entities and fetch financial data.
credentialsneededReads EM_API_KEY from the environment and transmits it in the `em_api_key` header to authenticate to Eastmoney.
filesystem_writeneededWrites .xlsx and .md files under `cwd()/miaoxiang/mx_finance_data`; this is the documented output.
install_packagesneededInstalls Python packages `httpx pandas openpyxl` via pip3 for HTTP requests, parsing, and Excel output.
shellneededSKILL.md provides manual shell commands for configuring the key, installing dependencies, and running the script.
persistenceexceeds purposeSKILL.md tells users to add `export EM_API_KEY=...` to ~/.zshrc or ~/.bashrc, which persists the secret across shell sessions; the package does not perform this automatically.

Findings

severityfinding
infoReads API key from environment
The script requires this secret and refuses to run when it is missing (lines 48-49). The key is later used as the `em_api_key` header for API authentication.
scripts/get_data.py:47 EM_API_KEY = os.environ.get("EM_API_KEY", "")
infoDefault Eastmoney data endpoint
This is the default searchData URL. The entity recognition endpoint is defined two lines later at line 76 as `https://ai-saas.eastmoney.com/proxy/entity/saas`.
scripts/get_data.py:73 "https://ai-saas.eastmoney.com/proxy/b/mcp/tool/searchData"
mediumCustom API base URL can receive the API key
The main query function accepts `api_base` and `entity_api_base` (lines 675-676). If called with an untrusted URL, the subsequent request still includes the `em_api_key` header (line 727). The CLI does not expose the override, but this Python function does. `skill-card.md` line 25 discloses the same risk.
scripts/get_data.py:688 url = api_base or DEFAULT_SEARCH_API_URL
lowAPI key is sent as a request header
The key is included in POST requests to the selected data or entity API base URL. This is necessary for legitimate Eastmoney calls, but becomes sensitive if combined with the custom base URL override.
scripts/get_data.py:727 "em_api_key": api_key,
infoWrites Markdown result file locally
The script also writes an Excel workbook at lines 642-648. Files are placed under `Path.cwd()/miaoxiang/mx_finance_data` per line 90, matching the documented output.
scripts/get_data.py:650 md_path.write_text(_tables_to_markdown(tables), encoding="utf-8")
lowInstructs persisting API key in shell profile
SKILL.md lines 91-104 tell macOS and Linux users to add the key to `~/.zshrc` or `~/.bashrc` and then source the file. This is a manual step that stores the secret on disk across sessions.
SKILL.md:92 export EM_API_KEY="your_api_key_here"
infoInstalls Python dependencies
These packages are used for HTTP requests, data handling, and Excel generation. The metadata `install` block at lines 10-16 declares the same dependencies.
SKILL.md:111 pip3 install httpx pandas openpyxl --user
infoPublisher discloses endpoint-override risk
This matches the optional `api_base`/`entity_api_base` parameters in scripts/get_data.py. The card's mitigation is to use the documented CLI path and avoid custom endpoints.
skill-card.md:25 Risk: An undocumented API endpoint override can expose EM_API_KEY if invoked with an untrusted URL.

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:73
ai.eastmoney.comnot in the service indexSKILL.md:27
clawhub.ainot in the service indexskill-card.md:9

Other facts

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

Files audited

filelinessha256
SKILL.md18717fbaa5eb5539680…
_meta.json6ba332d0cadf19680…
scripts/get_data.py877465e331ce8c1961b…
skill-card.md542903366bde27f85e…

For agents

JSON: https://agenteconomy.report/k/mx-finance-data.audit.json · badge: https://agenteconomy.report/k/mx-finance-data.audited.svg · skill rating: /k/mx-finance-data · 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).