Atlas / MCP servers / smartyjohnway / tw-market-live-data-intelligence

tw-market-live-data-intelligenceBLOCK

mcp/smartyjohnway/tw-market-live-data-intelligence

Local-first Taiwan market evidence workbench for AI agents — TWSE/TPEx, persistent Watchlists, governed MCP, auditable evidence, explicit execute-once.

Verdict
BLOCK
Grade
F
Trust score
57 /100
Exposed tools
1 1r · 0w · 0d
Transport
stdio
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

English | 繁體中文

Local-first, governed Taiwan-market evidence for an operator and an AI assistant — validate first, preview bounded work, then explicitly authorize one execution where the capability permits it.

ProductVersion = 1.0.0. The current stable release is v1.0.0 (GitHub Release). The published prerelease history is v1.0.0-rc.1 (GitHub Release), and the earlier stable GitHub Release was v0.1.0. The current development line now uses Unified Request/Result/Audit V3 as the preferred authority while retaining V1/V2 compatibility. Phase G G1/G2 runtime capabilities have passed bounded controlled-live acceptance; Phase H has one active TPEx attention route; broader Roadmap Phase G/H scope remains explicitly incomplete. This is a local-first evidence workbench, not a realtime trading product.

Why TW-Market

AI discussion needs evidence with identity, source, timestamp, caveat, and execution provenance — not an unqualified price claim. This workbench gives a human operator a governed local path from request validation to an AI-ready handoff, while retaining a separate audit package.

Quick start

git clone https://github.com/SmartyJohnway/tw-market-live-data-intelligence.git
cd tw-market-live-data-intelligence
python -m venv .venv
# Activate .venv using your shell, then:
python -m pip install -r requirements-lock.txt
python scripts/verify_environment.py
python scripts/manage_security_master.py status

NOT_INITIALIZED is the normal fresh-install state. A Security Master update is an explicit operator action and may use official external acquisition:

python scripts/manage_security_master.py update -
Read from source at commit 89f3435f019aOBSERVED · 2026-10-12
02

Exposed tools (1)

1 read · 0 write · 0 destructive.

ToolRiskDescription
check_bounded_market_refresh_readinessreadCheck M5 bounded refresh readiness without network calls, writes, or authorization consumption.
03

Trust audit

BLOCKgrade F · trust 57/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (6 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
scripts/validate_github_actions_execution_policy.py:63
data = yaml.load(path.read_text(encoding="utf-8"), Loader=yaml.BaseLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
scripts/run_m6g_browser_operator_e2e.py:71
os.environ.copy() ... urllib.request
Why it matters. reads secrets in the same file that sends data out
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
scripts/verify_environment.py:37
importlib.import_module(package)
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/simulate_authorization_decision.py:6
ap=argparse.ArgumentParser(); ap.add_argument('--token'); ap.add_argument('--action',required=True); a=ap.parse_args(argv); token=json.loads(Path(a.token).read_text()) if a.token else {'allowed_action
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/unit/test_phase_h_h3_i1b_tpex_edis_transport.py:23
PASSWORD = "TEST_PASSWORD_DO_NOT_USE"
LOWInventory / provenance · inv.binary · CWE-1104
docs/governance/phase_i/acceptance_runs/20260930T015637Z-1bf1dea1/phase_i_i1_bounded_live_acceptance_evidence.zip
phase_i_i1_bounded_live_acceptance_evidence.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
docs/governance/phase_i/acceptance_runs/i2-a3-20261001T034543Z-66b378b9/phase_i_i2_a3_bounded_live_acceptance_evidence.zip
phase_i_i2_a3_bounded_live_acceptance_evidence.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/unit/test_m7f_ai_handoff_search_filters.py:110
for token in ['innerHTML', 'insertAdjacentHTML', 'document.write', 'eval(', 'new Function']:
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/unit/test_m7f_field_badges_currentness_calendar.py:93
for token in ["innerHTML", "insertAdjacentHTML", "document.write", "eval(", "new Function"]:
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/unit/test_m7f_frontend_rich_fact_browser_base_ui.py:47
forbidden = ["innerHTML", "insertAdjacentHTML", "document.write", "eval(", "new Function"]
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/unit/test_m7f_frontend_security_semantic_regression.py:52
"eval(",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
scripts/probe_utils.py:43
schema_hash = hashlib.md5("".join(keys).encode()).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
scripts/probe_utils.py:47
schema_hash = hashlib.md5("".join(keys).encode()).hexdigest()
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/readonly-preview/m5e-market-context-adapter.js:2
export const DEFAULT_PACKAGE_BASE_URL = '../../research/staging/m5f/m5f_canonical_market_context_01/';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
skills/tw-market-evidence-agent/scripts/validate_skill.py:123
== "../../docs/data_capabilities/unified_market_evidence_capability_catalog.v1.json"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/test_m8r_03e_r5a_filesystem_materialization.py:22
safe_destination(root, "subdir/../../outside.json")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/test_m8r_03e_r5b_cross_platform_filesystem_safety.py:39
("a/../../x", "path_traversal_forbidden"),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/test_m8r_filesystem_containment.py:26
('a/../../x.json','path_traversal_forbidden'),
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
tests/unit/test_phase_j_b04_a6_sm_b1_r3_tpex_contract.py:114
for secret in ("password", "key=secret", "beacon-secret", "unrelated-body"):
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
tests/helpers/phase_j_closure_r1.py:19
os.environ.copy() ... httpx.
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
tests/unit/test_phase_j_b04_a5_l1_runner.py:362
dict(os.environ) ... socket.create_connection
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
tests/unit/test_phase_j_closure_r1_transport_encoding.py:43
os.environ.copy() ... urllib.request
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:49
Open the loopback Workbench at [`/workbench/`](http://127.0.0.1:8000/workbench/).
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.zh-TW.md:30
在瀏覽器開啟本機回送 Workbench:[`/workbench/`](http://127.0.0.1:8000/workbench/)。MCP host 請另行啟動 stdio launcher:
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/governance/phase_j/PHASE_J_REAL_AGENT_ATTEMPT_3_R1_MCP_ATTACHMENT_CONTRACT_2026-10-12.md:21
- Local Service: `http://127.0.0.1:18264`. Prompt SHA-256: `8ee5459c7217ff34d091385f588d8b53794a1053ace2a44e5b262e4f6757621c`. Codex JSON events, stderr, and final output paths are bound in the struct

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 89f3435f019afull audit observations/trust-audit/mcp-server/smartyjohnway__tw-market-live-data-intelligence.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1289f3435f019aBLOCKF57first audit
05

Questions

What is the tw-market-live-data-intelligence MCP server?

Local-first Taiwan market evidence workbench for AI agents — TWSE/TPEx, persistent Watchlists, governed MCP, auditable evidence, explicit execute-once.

What tools does tw-market-live-data-intelligence expose?

1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is tw-market-live-data-intelligence safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (57/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does tw-market-live-data-intelligence need?

It reads FINMIND_TOKEN, H_ACC_7L_OWNER_AUTHORIZED, H_ACT_H1_OWNER_AUTHORIZED, H_ACT_H3_OWNER_AUTHORIZED, H_SB1_H2_OWNER_AUTHORIZED and PHASE_I_I1_OWNER_AUTHORIZED from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does tw-market-live-data-intelligence run?

It speaks stdio, so it runs as a local process your client starts.

How current is this page?

The grade is for one exact copy of the source (89f3435f019a), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement