modal-mcp@0.1.0
CAUTION· not startedPublisher claims: "Local, read-only Modal MCP server" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · 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
MODAL_MCP_SIGNING_KEYSMODAL_TOKEN_IDMODAL_TOKEN_ID_FILEMODAL_TOKEN_SECRETMODAL_TOKEN_SECRET_FILEConfiguration, not credentials: MODAL_CONFIG_PATH- Where it talks to
- no vendor host named in the codeAlso githubusercontent.com, astral.sh — 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 githubusercontent.com, astral.sh as well as its own vendor. The guard injects MODAL_MCP_SIGNING_KEYS, MODAL_TOKEN_ID, MODAL_TOKEN_ID_FILE, MODAL_TOKEN_SECRET, MODAL_TOKEN_SECRET_FILE 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 (3 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-11 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: Direct script execution from GitHub raw URL; 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 · 3 scenarios · 0 deviationsStatic findings
# Usage: curl -fsSL https://raw.githubusercontent.com/php-workx/modal-mcp/refs/heads/main/install.sh | shFix: Pin versions and sources; vendor anything fetched at install time.echo " modal-mcp setup --yes # Create .env and signing key"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._ENV_FILE_PLACEHOLDER: Final[str] = "/path/to/project/.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._ENV_FILE_PLACEHOLDER: Final[str] = "/absolute/path/to/.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.modal-mcp run --env-file /absolute/path/to/.envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.#: ``{env_file}`` must be replaced with the *absolute* path to the ``.env``Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.help="Path to a .env file to load before starting the server.",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file: *Absolute* path to the ``.env`` file.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Absolute path to the .env file to write (with --yes) or embed in "Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file: Absolute path to the ``.env`` file. Required only forFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load a .env file from the process CWD if present. pydantic-settingsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file=".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.args = ["run", "--env-file", "/absolute/path/to/.env"]Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.is set to the project directory; the server process finds ``.env`` via cwd.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.echo " modal-mcp doctor --env-file .env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.find the ``.env`` file regardless of the working directory at launch.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Replace existing .env and signing key with fresh values. "Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file: Absolute path to the ``.env`` file. If ``None``, theFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.#: *absolute* path to the ``.env`` file before the snippet is shown or stored.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Non-interactive: generate .env and a signing key without prompts. "Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# silently ignores a missing file, so no .env is not an error. RealFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file: *Absolute* path to the ``.env`` file. Embedded in theFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.(environment variables, a ``.env`` file, file-backed token paths, andFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Defaults to '.env' in the current directory."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.``Settings`` can be validated. Its job is to explain missing ``.env`` files,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Usage: curl -fsSL https://raw.githubusercontent.com/php-workx/modal-mcp/refs/heads/main/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.modal-mcp run --env-file /absolute/path/to/.envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.echo " modal-mcp run --env-file .env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Values discovered in the selected ``.env`` file or file-backed token filesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.file-backed secrets (never in env vars or ``.env`` files).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Parse a ``.env`` file into a ``{key: value}`` dict.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.sudo apt-get install -y just shellcheckFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.- No Modal credential material is ever written to a ``.env`` fileFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.f"setup-generated .env must not contain {forbidden_key!r}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.DEFAULT_ENV_FILE: Path = Path(".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.These helpers are used by the local-setup flow to write `.env` files,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.run: sudo apt-get update && sudo apt-get install -y justFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# .env content: no forbidden tokens, correct entriesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- ``.env``Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return tmp_path / ".env", tmp_path / ".secrets"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.``.env`` file.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.completed = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.env = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Usage: curl -fsSL https://raw.githubusercontent.com/php-workx/modal-mcp/refs/heads/main/install.sh | shFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.sudo apt-get updateFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.pytest.fail("MODAL_MCP_SIGNING_KEY_FILE not found in .env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.pytest.fail("MODAL_MCP_SIGNING_KEY_FILE not found in .env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- ``.env.*``Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._DEFAULT_GITIGNORE_ENTRIES: tuple[str, ...] = (".env", ".env.*", ".secrets/")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- A local ``.env`` file that references the key and supplies minimalFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = tmp_path / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Settings reads values from a .env file when passed via _env_file."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env = tmp_path / ".env"Fix: 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.#: Default .env filename (resolved relative to CWD at call time).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Explicitly override any .env file values so the test is hermetic.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Explicit chmod so that a restrictive umask cannot widen the mode later,Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.Cost to the agent
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 modal-mcp@0.1.0 as of 3d 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.
- Unclaimed publisher≈ +8 on the totalClaim php-workx: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Direct script execution from GitHub raw URL≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- 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.
- Privileged sudo command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.