Skills/PyPI/pse-edge-mcp

pse-edge-mcp@0.20.0

CAUTION· not started

Publisher claims: "MCP server exposing Philippine Stock Exchange (PSE Edge) data — quotes, price history, disclosures, and more" Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry PyPI (MCP server)Publisher phdwight · publishing for 99 daysInstalls 189Last detonated 35 min ago

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
DATABASE_URLPSE_TOKEN_CACHE_TTLZEPTOMAIL_API_KEYConfiguration, not credentials: BSP_BASE_URL, PSE_ACCESS_TTL_MIN, PSE_ADMIN_EMAILS, PSE_DB_MAX_OVERFLOW, PSE_DB_POOL_SIZE, PSE_EDGE_BASE_URL, PSE_EMAIL_FROM, PSE_LOG_LEVEL, PSE_OPERATOR_EMAIL, PSE_PUBLIC_URL, PSE_QUOTA_PER_DAY, PSE_QUOTA_PER_MIN, PSE_REFRESH_TTL_HOURS, PSE_REFRESH_UNUSED_TTL_HOURS, PSE_RETRY_ATTEMPTS, PSE_SSE, PSE_STATEFUL, PSE_THROTTLE_BURST, PSE_THROTTLE_RPS, PSE_TIMEOUT_SEC, PSE_USAGE_RETENTION_DAYS
Where it talks to
no vendor host named in the codeAlso bsp.gov.ph, pse.com.ph, zeptomail.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 with a scoped credential, under the guard, and read the third-party hosts first. The code names bsp.gov.ph, pse.com.ph, zeptomail.com as well as its own vendor. The guard injects DATABASE_URL, PSE_TOKEN_CACHE_TTL, ZEPTOMAIL_API_KEY only into requests to the host you bind (and its subdomains) and refuses the rest.

$vet-skills run --net declared -- uvx pse-edge-mcp

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-15 and scored it 75/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: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.

Behavior trace

Honeypot run · 0 s · 2 scenarios · 0 deviations
t+CategoryObserved action
0.0sprocessno install scripts in bundle
0.1sprocessdependency install exit 1 ·
0.1sclaimednot started: dependency install failed (exit 1); the server itself was not observed
0.2sprocessscript backend runs setup only
0.2sprocessno install scripts to re-run

Static findings

MEDIUM
File permission modification commandcompose.nas.yaml:109 · File permission modification command — agent changes file ownership/permissionschown -R 999:999 /pgdata 2>&1 | head -3Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
Process kill commandsrc/pse_edge_mcp/auth_app.py:787 · Process kill command — agent can terminate processesform — attacker-suppliable like any form field — can only ever kill the caller'sFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
HIGH
Access to sensitive file pathscompose.nas.yaml:11 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files# PSE_LAN_BIND=127.0.0.1 in .env at the same time — that last one is what stops theFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathscompose.nas.yaml:160 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesDATABASE_URL: postgresql+asyncpg://pse:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}@db:5432/pse_edgeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Process kill commandsrc/pse_edge_mcp/health.py:12 · Process kill command — agent can terminate processesreplica out of rotation, not kill it.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
HIGH
Access to sensitive file pathscompose.nas.yaml:18 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files# Required in .env next to this file:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathscompose.nas.yaml:53 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesPOSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Destructive file system command detectedDockerfile:41 · Destructive file system command detectedRUN rm -rf /usr/local/lib/python3.*/site-packages/pip* /usr/local/bin/pip* \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
Process kill commandsrc/pse_edge_mcp/accounts.py:144 · Process kill command — agent can terminate processesScoped to the caller's own user_id, so a forged family_id can only ever kill theFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
File permission modification commandcompose.nas.yaml:128 · File permission modification command — agent changes file ownership/permissions# always means failure. The long start_period covers a first-boot chown -R over aFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
Access to sensitive file pathscompose.yaml:24 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- path: .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedscripts/check_image.py:45 · Python subprocess execution detectedresult = subprocess.run(cmd, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathscompose.nas.yaml:9 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files# (or set COMPOSE_PROFILES=tunnel in .env and keep the stage 1 command). SetFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
File permission modification commandcompose.nas.yaml:110 · File permission modification command — agent changes file ownership/permissionschmod -R u+rwX /pgdata 2>&1 | head -3Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
File permission modification commandcompose.nas.yaml:86 · File permission modification command — agent changes file ownership/permissions# "mkdir: ... Permission denied". The usual advice is to chown from a shell, which is noFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
HIGH
Destructive file system command detectedcompose.nas.yaml:111 · Destructive file system command detectedif gosu postgres sh -c "touch /pgdata/.pse-write-probe && rm -f /pgdata/.pse-write-probe"; thenFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05

Cost to the agent

Instructions loaded
≈832 tok
2 files · 81 in bundle
Tool list per prompt
≈0 tok
0 tools · 0 per tool
Handshake
no reply
launch to tools/list, stdio
Undocumented tools
0
description under 20 chars · avg 0

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 pse-edge-mcp@0.20.0 as of 12 min ago. This is the package itself, not its dependencies.

What would make this Verified

5 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%
  1. Unclaimed publisher≈ +8 on the totalClaim phdwight: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  2. Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
  3. File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
  4. Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
  5. Destructive file system command detected≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
  6. Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
Publish a new version to PyPI, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim phdwightPropose a patch to the maintainer