mseep-mcp-agent-mail@0.1.0
CAUTION· install onlyPublisher claims: "Coordinated multi-agent messaging and coordination MCP server." Observed in sandbox: calls astral.sh only, touches nothing outside the project, writes no memory.
Coverage
Install scripts ran; no agent task scenario for this bundle.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
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
HTTP_BEARER_TOKENINTEGRATION_BEARER_TOKENINTEGRATION_TOKENMASKED_TOKENREGENERATE_TOKENSHOW_TOKENor--regenerate-token/--show-tokenConfiguration, not credentials: AGENT_MAIL_GUARD_MODE, AGENT_NAME, HOME_SETTINGS_PATH, LOCAL_SETTINGS_PATH, PROJECT_KEY, REPO_PATH, SETTINGS_PATH- Where it talks to
- no vendor host named in the codeAlso githubusercontent.com, astral.sh, visualstudio.com, opencode.ai, nodejs.org, web.dev — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · reached only astral.sh
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names githubusercontent.com, astral.sh, visualstudio.com, opencode.ai, nodejs.org, web.dev as well as its own vendor. The guard injects HTTP_BEARER_TOKEN, INTEGRATION_BEARER_TOKEN, INTEGRATION_TOKEN, MASKED_TOKEN, REGENERATE_TOKEN, SHOW_TOKEN only into requests to the host you bind (and its subdomains) and refuses the rest.
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; install scripts ran; no agent task scenario for this bundle) on 2026-11-12 and scored it 70/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: Pipe-to-shell pattern; Pipe-to-shell pattern; Pipe-to-shell pattern. Summary: calls astral.sh only, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenariosStatic findings
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.curl -LsSf https://astral.sh/uv/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --port 9000 --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.trap "rm -f \"${tmp}\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if ! curl -fsSL "${BEADS_INSTALL_URL}" | bash; thenFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.trap "rm -f \"$tmp\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.grep -E '^(HTTP_|DATABASE_URL|STORAGE_ROOT|LLM_|OPENAI_API_KEY|ANTHROPIC_API_KEY|GOOGLE_API_KEY|GROK_API_KEY|XAI_API_KEY)=' .env | sed -E 's/=(.*)$/=***REDACTED***/'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…PYTHON_BEST_PRACTICES.md`. We load all configuration details from the existing .env file (even if you can't see this file, it DOES exist, and must NEVER be overwri…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.err "Failed to update HTTP_PORT in .env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- Set `WORKTREES_ENABLED=1` or `GIT_IDENTITY_ENABLED=1` in `.env` (do not commit secrets; config is loaded via `python-decouple`).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.echo "==> No .env found; copying from deploy/env/example.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.local env_file="${REPO_DIR}/.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = Path('.env')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = Path('.env')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.grep -E '^(HTTP_|DATABASE_URL|STORAGE_ROOT|LLM_|OPENAI_API_KEY|ANTHROPIC_API_KEY|GOOGLE_API_KEY|GROK_API_KEY|XAI_API_KEY)=' .env | sed -E 's/=(.*)$/=***REDACTED***/'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Set secure umask for .env file operations, save original to restore laterFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.**Install:** `curl -sSL https://raw.githubusercontent.com/Dicklesworthstone/ultimate_bug_scanner/main/install.sh | bash`Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.trap "rm -f \"${tmp}\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.echo "==> No .env found; copying from deploy/env/production.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.**Install:** `curl -sSL https://raw.githubusercontent.com/Dicklesworthstone/ultimate_bug_scanner/main/install.sh | bash`Fix: Pin versions and sources; vendor anything fetched at install time.EXISTING=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.info "Configuring HTTP_PORT=${HTTP_PORT_OVERRIDE} in .env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [ ! -f .env ]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.trap "rm -f \"$tmp\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.--port PORT HTTP server port (default: 8765); sets HTTP_PORT in .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.cp deploy/env/example.env .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [ ! -f .env ]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Persist token to .env for consistency across tools (non-destructive)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.cp deploy/env/production.env .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.decouple_config = DecoupleConfig(RepositoryEnv(".env"))Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Pin versions and sources; vendor anything fetched at install time._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Reuse existing token if possible (INTEGRATION_BEARER_TOKEN > .env > run helper)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Pin versions and sources; vendor anything fetched at install time.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --port 9000 --yesFix: Pin versions and sources; vendor anything fetched at install time.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.BEADS_INSTALL_URL="https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh"Fix: Pin versions and sources; vendor anything fetched at install time.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.BV_INSTALL_URL="https://raw.githubusercontent.com/Dicklesworthstone/beads_viewer/main/install.sh"Fix: Pin versions and sources; vendor anything fetched at install time.if [[ -z "${_TOKEN}" && -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ "${DRY_RUN}" == "1" ]]; then _print "[dry-run] set ${key} in .env"; return 0; fiFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.local key="$1"; local value="$2"; local env_file=".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print(" curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print(" sudo apt update")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.**Install:** `curl -sSL https://raw.githubusercontent.com/Dicklesworthstone/ultimate_bug_scanner/main/install.sh | bash`Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Gracefully handle missing .env (e.g., in CI/tests) by falling back to an empty repositoryFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [[ -f .env ]]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Fall back to an empty repository (reads only os.environ; all .env lookups use defaults)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Also kill any other processes on port 8765 (cross-platform: uses lsof on macOS, fuser on Linux)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.RUN curl -LsSf https://astral.sh/uv/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.trap "rm -f \"$tmp\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Set HTTP_PORT in .env file."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print(" sudo dnf install 'dnf-command(config-manager)'")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."""Populate os.environ with provider API keys from .env via decouple if missing.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.RUN curl -LsSf https://astral.sh/uv/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Gracefully handle missing .env file (e.g., in CI/tests)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --port 9000 --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out._DOTENV_PATH: Final[Path] = Path(".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file: Annotated[Optional[Path], typer.Option("--env-file", help="Path to .env file")] = None,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.cfg = DecoupleConfig(RepositoryEnv(".env"))Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/mcp_agent_mail/main/scripts/install.sh | bash -s -- --yesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Exact restart behavior requested: kill 8765/tcp and start server in foreground with full outputFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Bridge provider keys from .env to environment for LiteLLMFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.mkdir -p /data/mailbox && chown -R appuser:appuser /data /appFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.DEFAULT_ENV_PATH = Path(".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- ./.env:/app/.env:roFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…s/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null') console.print(…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.console.print(" sudo apt install gh -y")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.trap "rm -f \"$tmp\" 2>/dev/null" EXIT INT TERMFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.chmod 600 "${env_file}" 2>/dev/null || warn "Could not set .env permissions to 600"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.curl -LsSf https://astral.sh/uv/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.chmod +x "${stub_path}" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if ! curl -fsSL "${BEADS_INSTALL_URL}" | bash; thenFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Update or append env var in .env atomically (backup first)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'.mcpServers = (.mcpServers // {}) | .mcpServers["mcp-agent-mail"] = {"type":"http","url":$url,"headers":{"Authorization": ("Bearer " + $token)}}' \Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.# Prefer an existing env var; otherwise read from .env; otherwise generate ephemeral for this processFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.HTTP_BEARER_TOKEN=$(grep -E '^HTTP_BEARER_TOKEN=' .env | sed -E 's/^HTTP_BEARER_TOKEN=//') || trueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.chown -R appuser:appuser /opt/mcp-agent-mailFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Optional: mount a local .env file (read-only) for configFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.dir=env_path.parent, prefix=".env.tmp.", text=TrueFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.result = subprocess.run(command, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Message Header (Always Visible)Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.result = subprocess.run(cmd, capture_output=True, text=True, input=input_text)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Gracefully kill a list of PIDs owned by current user; escalate to KILL after timeoutFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.chmod +x scripts/test_rich_output.pyFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."""Detect AGENTS.md/CLAUDE.md files and append the latest Agent Mail + Beads blurbs."""Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.if ! chmod 600 "$file" 2>/dev/null; thenFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if [[ "${DRY_RUN}" == "1" ]]; then _print "[dry-run] kill -TERM ${to_kill[*]}"; return 0; fiFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.subprocess.run(["gh", "--version"], capture_output=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out." co = subprocess.run([\"git\",\"diff\",\"--cached\",\"--name-only\",\"-z\",\"--diff-filter=ACMRDTU\"],",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.… have the mail tool available. See below for a ready-made chunk of text you can add to the end of your existing AGENTS.md or CLAUDE.md files to help your agents better utilize the new tools. # Change port after in…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct." cs = subprocess.run([\"git\",\"diff\",\"--cached\",\"--name-status\",\"-M\",\"-z\"],",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(cmd, capture_output=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out." return subprocess.run([str(path)], input=stdin_bytes, check=False).returncode",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out._print "[dry-run] chmod 600 ${file}"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.cp = subprocess.run(["git", "-C", str(cwd), *args], check=True, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out." cp = subprocess.run([\"git\",\"rev-list\",\"--topo-order\",local_sha,\"--not\",f\"--remotes={remote}\"],",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.if kill -0 "$pid" 2>/dev/null; then alive+=("$pid"); fiFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.subprocess.run(["brew", "install", "gh"], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.kill -KILL "${alive[@]}" 2>/dev/null || trueFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out._print "[dry-run] chmod 700 ${file}"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.## Ready-Made Blurb to Add to Your AGENTS.md or CLAUDE.md Files:Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.result = subprocess.run([sys.executable, str(wizard_script)], check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.if ! chmod 700 "$file" 2>/dev/null; thenFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process.wait() # Wait for kill to completeFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell." return subprocess.run(['python', str(path)], input=stdin_bytes, check=False).returncode",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = 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.log_warn "Failed to chmod 600 ${file} (permissions/readonly filesystem?)"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.<!-- Message Header (Always Visible) --> <div @click="expanded = !expanded" class="p-5 cursor-pointer hover:bg-slate-50 dark:hover:bg-slate-900/50 transition-coFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.subprocess.run(["git", "-C", str(root), "add", str(marker_path)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.rc = subprocess.run(list(cmd), env=env, check=False).returncodeFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.kill -TERM "${to_kill[@]}" 2>/dev/null || trueFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for mseep-mcp-agent-mail@0.1.0 as of 2d ago. This is the package itself, not its dependencies.
What would make this Verified
10 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Destructive command against a filesystem root or device≈ +9 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Unclaimed publisher≈ +8 on the totalClaim mseep-support: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- 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.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Direct script execution from GitHub raw URL≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.