MCP, MCP server
Frugal
The open routing layer for AI tools.
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
INSTALL_REMOTE_SCRIPT
Why this grade
- INSTALL_REMOTE_SCRIPT Medium
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
.github/workflows/install-smoke.yml, line 57
curl -fsSL https://frugal.sh/install | bash -s uninstall
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Note
requests shell access. The manifest names this permission.
PERMISSION_SHELL_DECLARED
internal/install/install.go, line 209
return exec.Command("claude", args...).CombinedOutput()
pipeline/run_pipeline.py, line 27
result = subprocess.run(cmd, env=env)
Install and update
Serious
install fetches a script from the network. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.
INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER
README.md, line 24
curl -fsSL https://frugal.sh/install | bash
content/blog/posts/frugal-open-routing-layer.md, line 112
curl -fsSL https://frugal.sh/install | bash
.github/workflows/install-smoke.yml, line 57
curl -fsSL https://frugal.sh/install | bash -s uninstall
Show more
docs/install.sh, line 5
# curl -fsSL https://frugal.sh/install | bash
docs/install.sh, line 6
# curl -fsSL https://frugal.sh/install | bash -s uninstall
docs/install.sh, line 456
printf ' \033[2muninstall: curl -fsSL https://frugal.sh/install | bash -s uninstall\033[0m\n'
.github/workflows/install-smoke.yml, line 98
curl -fsSL https://frugal.sh/install | bash
docs/.well-known/agent-skills/frugal/SKILL.md, line 68
curl -fsSL https://frugal.sh/install | bash
docs/.well-known/mcp/server-card.json, line 21
"shell": "curl -fsSL https://frugal.sh/install | bash",
docs/_redirects, line 3
# /install.sh so `curl -fsSL https://frugal.sh/install | bash` gets the script
docs/blog/frugal-open-routing-layer/index.html, line 146
<pre><code>curl -fsSL https://frugal.sh/install | bash
docs/index.html, line 126
<pre><code>curl -fsSL https://frugal.sh/install | bash
docs/index.html, line 127
frugal mcp install</code><button class="copy" type="button" data-copy="curl -fsSL https://frugal.sh/install | bash
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
config/embed.go, line 6
// This is the same file the curl installer drops at
docs/install.sh, line 79
if command -v curl >/dev/null 2>&1; then
docs/install.sh, line 80
curl -fsSL "$url" || fail "failed to fetch $url" "$EXIT_NETWORK"
Show more
docs/install.sh, line 81
elif command -v wget >/dev/null 2>&1; then
docs/install.sh, line 82
wget -qO- "$url" || fail "failed to fetch $url" "$EXIT_NETWORK"
docs/install.sh, line 84
fail "curl or wget is required" "$EXIT_NETWORK"
docs/install.sh, line 90
if command -v curl >/dev/null 2>&1; then
docs/install.sh, line 91
curl -fsSL "$url" -o "$dest" || fail "failed to download $url" "$EXIT_NETWORK"
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
cmd/frugal/mcp.go, line 216
AuthToken: os.Getenv("FRUGAL_AUTH_TOKEN"),
pipeline/llm.py, line 29
self.api_key = api_key or os.environ.get("FRUGAL_GEN_API_KEY", "")
content/blog/posts/byok-agent-tooling.md, line 49
BYOK hands you jobs a platform would have done. You sign up with each provider yourself. You store keys properly - environment variables or a secrets manager, not a committed `.env
Show more
docs/blog/byok-agent-tooling/index.html, line 88
<p>BYOK hands you jobs a platform would have done. You sign up with each provider yourself. You store keys properly - environment variables or a secrets manager, not a committed <c
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read.
OBFUSCATION_FILE_OVER_READ_CAP
bloggen, line 1
ELF >