Skills/PyPI/mdymcp

mdymcp@0.5.3

CAUTION· not started

Publisher claims: "Unified MCP server for Mingdao — v1 collaboration API + HAP gateway (worksheets, records, apps)" Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry PyPI (MCP server)Publisher andyleimc-source · publishing for 207 daysInstalls 23Last detonated 3d 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
MD_APP_SECRETMD_HAP_PATMD_V1_TOKEN_MODEMD_V1_TOKEN_REMOTE_PATHMD_V1_TOKEN_SSH_HOSTMD_V1_TOKEN_SSH_KEYMD_V1_TOKEN_SSH_USERConfiguration, not credentials: MD_ACCOUNT_ID, MD_APP_KEY, MD_CALLBACK_PORT, MD_HOOK_URL, MD_KEY, MDYMCP_INSTALL_DEBUG, MDYMCP_SKIP_PAT_PROMPT
Where it talks to
no vendor host named in the codeAlso mingdao.com, githubusercontent.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 mingdao.com, githubusercontent.com as well as its own vendor. The guard injects MD_APP_SECRET, MD_HAP_PAT, MD_V1_TOKEN_MODE, MD_V1_TOKEN_REMOTE_PATH, MD_V1_TOKEN_SSH_HOST, MD_V1_TOKEN_SSH_KEY, MD_V1_TOKEN_SSH_USER only into requests to the host you bind (and its subdomains) and refuses the rest.

$vet-skills run --net declared -- uvx mdymcp

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-11 and scored it 68/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.1sprocessscript backend runs setup only
0.1sprocessno install scripts to re-run

Static findings

HIGH
Access to sensitive file pathssrc/mdymcp/auth.py:66 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"""Lazy load .env,**合并** cwd → ~/.mdymcp → ~/.mdmcp (legacy) → package parent。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 pathssrc/mdymcp/auth.py:71 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files(旧实现读到第一个 .env 就 return,导致带自有 .env 的项目里 mdymcp 完全拿不到凭据。)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 pathssrc/mdymcp/cli_auth.py:44 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesprint("→ 跳过。之后可在 ~/.mdymcp/.env 加 MD_HAP_PAT=pat_xxx 并重启 MCP 客户端启用 HAP 工具。")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 pathssrc/mdymcp/auth.py:69 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env(如某项目根放了 META_* / PORT 等配置)**不会屏蔽** ~/.mdymcp/.env 里的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 pathssrc/mdymcp/cli_auth.py:18 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files0.2.x → 0.4.x 跳级用户的 .env 里只有已废弃的 MD_HAP_TOKEN/REFRESH/KEY,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 pathssrc/mdymcp/cli_auth.py:77 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files_check_hap_pat(target / ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
CRITICAL
Pipe-to-shell patternsrc/mdymcp/cli_uninstall.py:202 · Pipe-to-shell pattern — downloads and immediately executes remote codeprint(" curl -LsSf https://raw.githubusercontent.com/andyleimc-source/mdymcp/main/install.sh | sh")Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST06
MEDIUM
Python subprocess execution detectedsrc/mdymcp/auth.py:278 · Python subprocess execution detectedproc = subprocess.run(cmd, capture_output=True, text=True, timeout=30)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/gateway.py:88 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"并更新 .env 的 MD_HAP_PAT(或重跑 mdymcp-install)。"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 pathssrc/mdymcp/data/SKILL.md:46 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- `server 模式缺配置` / `SSH key 不存在` → `~/.mdymcp/.env` 缺 `MD_V1_TOKEN_*`,跑 **`mdymcp-server-setup`** 重配。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 pathssrc/mdymcp/data/SKILL.md:66 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files源码 `~/code/mdymcp`(clone),改完 bump version → 发 PyPI → 三台 mac `uv tool upgrade mdymcp`(不动 `~/.mdymcp/.env`)。skill 走 dotfiles 同步(见 skill `mac-sync`)。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 pathssrc/mdymcp/cli_install.py:256 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesok(f".env 已存在 HAP PAT(…{existing_pat[-6:]})")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 pathssrc/mdymcp/gateway.py:127 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"重新生成,并更新 .env 的 MD_HAP_PAT(或重跑 mdymcp-install)。"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 pathssrc/mdymcp/cli_server_setup.py:68 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesprint(" 之后把 ~/.mdymcp/server_token_key 和 .env 里 4 个 MD_V1_TOKEN_* 拷到本机即可。")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Privileged sudo commandsrc/mdymcp/cli_server_setup.py:71 · Privileged sudo command — agent may execute with elevated privilegesprint(f"\n→ 运行 {script} …(过程中可能要你输服务器登录密码 / sudo 密码)\n")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/cli_install.py:288 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filescurrent = read_env(root / ".env").get("MD_V1_TOKEN_MODE", "local").strip().lower()Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/cli_server_setup.py:73 · Python subprocess execution detectedsubprocess.run(["bash", str(script), host, ssh_user], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/cli_install.py:276 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesok("已写入 .env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/cli_uninstall.py:95 · Python subprocess execution detectedsubprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/data/SKILL.md:26 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- 服务器:`[email protected]`(腾讯云内地)。SSH host/user/key/远程路径配在 `~/.mdymcp/.env`(`MD_V1_TOKEN_SSH_HOST/SSH_USER/SSH_KEY/REMOTE_PATH`)。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 pathssrc/mdymcp/server.py:88 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"生成 PAT 写入 ~/.mdymcp/.env(MD_HAP_PAT=pat_xxx)后重启。", hint)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/cli_install.py:173 · Python subprocess execution detectedreturn subprocess.run(cmd, check=check, **kw)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/auth.py:519 · Python subprocess execution detectedp = subprocess.Popen(cmd, stdin=subprocess.PIPE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/cli_install.py:350 · Python subprocess execution detectedr = subprocess.run([str(py), "-c", code], env=env, capture_output=True,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Remote installer piped to shellsrc/mdymcp/cli_uninstall.py:202 · Remote installer piped to shellprint(" curl -LsSf https://raw.githubusercontent.com/andyleimc-source/mdymcp/main/install.sh | sh")Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST07
HIGH
Direct script execution from GitHub raw URLsrc/mdymcp/cli_uninstall.py:202 · Direct script execution from GitHub raw URL — unverified code sourceprint(" curl -LsSf https://raw.githubusercontent.com/andyleimc-source/mdymcp/main/install.sh | sh")Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Access to sensitive file pathssrc/mdymcp/data/SKILL.md:23 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesAndy 三台 mac 现在都跑 **server 模式**(`.env` 里 `MD_V1_TOKEN_MODE=server`):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 pathssrc/mdymcp/cli_uninstall.py:158 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesprint(" 2) 删除 ~/.mdymcp(含 .env / 所有凭据)")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/cli_uninstall.py:118 · Python subprocess execution detecteduv_bin = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/auth.py:449 · Python subprocess execution detectedsubprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/data/SKILL.md:41 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- 把新 `pat_xxx` 更新到 `.env` 的 `MD_HAP_PAT`,或重跑 `mdymcp-install`。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 pathssrc/mdymcp/cli_install.py:234 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesenv_file = root / ".env"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 pathssrc/mdymcp/cli_install.py:310 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesif _purge_env_vars(root / ".env", SERVER_ENV_KEYS):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/mdymcp/auth.py:469 · Python subprocess execution detectedr = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/mdymcp/gateway.py:5 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files两种响应格式。Token 使用 `auth.ensure_hap_token()`,即用户在 .env 配置的 HAP PAT(pat_xxx);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05

Cost to the agent

Instructions loaded
≈830 tok
1 file · 30 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 mdymcp@0.5.3 as of 3d ago. This is the package itself, not its dependencies.

What would make this Verified

12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%
  1. Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
  2. Unclaimed publisher≈ +8 on the totalClaim andyleimc-source: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  3. 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.
  4. Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
  5. Direct script execution from GitHub raw URL≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
  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 andyleimc-sourcePropose a patch to the maintainer