MCP, MCP server
Free Search Mcp
Free Search Mcp, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High finding. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 8c1a9313a9d4.
INSTALL_REMOTE_SCRIPT NETWORK_HOST_FROM_INPUT
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).
scripts/install.sh, line 50
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code - NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
src/search_mcp/compare.py, line 18
# Hard limits on URL count: <2 is a single fetch (use `fetch`); >5 is a batch
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.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
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
src/search_mcp/agent.py, line 782
subprocess.run,
src/search_mcp/oauth.py, line 1119
subprocess.Popen(
Install and update
Serious
install fetches a script from the network. The docs document an installer that pipes a download into a shell.
INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER
scripts/install.sh, line 50
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code
scripts/install.sh, line 208
run_shell 'curl -LsSf https://astral.sh/uv/install.sh | sh'
README.md, line 170
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code
Show more
docs/AGENT_USAGE.md, line 84
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client codex
docs/AGENT_USAGE.md, line 90
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code
docs/AGENT_USAGE.md, line 96
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-desktop
docs/AGENT_USAGE.md, line 102
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client all
docs/AGENT_USAGE.md, line 108
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client generic
docs/AGENT_USAGE.md, line 114
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client add-mcp
docs/INSTALL.md, line 118
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code
docs/USAGE.md, line 45
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code
docs/USAGE.md, line 48
curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client codex
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
src/search_mcp/compare.py, line 18
# Hard limits on URL count: <2 is a single fetch (use `fetch`); >5 is a batch
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
scripts/install.sh, line 480
if [ ! -f .env ] && [ -f .env.example ]; then
scripts/install.sh, line 481
run cp .env.example .env
scripts/install.sh, line 482
[ "$DRY_RUN" -eq 1 ] || ok "created .env from .env.example (edit to customize)"
Show more
src/search_mcp/__main__.py, line 108
# Make SEARCH_MCP_* keys in ./.env AND <config_dir>/.env visible to the
src/search_mcp/admin.py, line 932
# Load SEARCH_MCP_* keys from ./.env and <config_dir>/.env so the Test
src/search_mcp/agent.py, line 701
# name out is not enough: the child also loads <config_dir>/.env, and a
src/search_mcp/agent.py, line 719
"""Hand this server's settings to the child through `./.env`.
src/search_mcp/agent.py, line 723
block would be lost. The child's config loader reads `./.env` from its
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB
uv.lock, line 1
version = 1
evals/ranking/fixtures/decoy_and_dupes.json, line 264
"url": "https://news.google.com/rss/articles/CBMipwFBVV95cUxONEZkZWlpUTNwYjNEVG9OWmcwMWl6ZEVJYXhsb19lbnh2MjBDa2wwUkpFdnl5YkNjRHo0SEEtWUk4VHJpTWQ3VWZJUVQ0MEx5bzB0VlI2Zmo0WWdDckRWeXl
evals/ranking/fixtures/decoy_and_dupes.json, line 270
"url": "https://news.google.com/rss/articles/CBMiowFBVV95cUxQVDlHdk9zbjVwTGpxR2JGYXNPVzkyZDByTHY3MHFGaHpITzI3RDVjX0J3ZS11OTNIUFVRZzBZSmt6aEFGelZ5eGgxN3pCbmFkMC1HX1FRWmEyLWFISDJWTjl
Show more
evals/ranking/fixtures/decoy_and_dupes.json, line 276
"url": "https://news.google.com/rss/articles/CBMiygFBVV95cUxOb2YzOUc5UUU5bzk2ZDFJd3M5MUY2YmttTUpDRzVkdnV3MjZ3am9MNkN3SUtoYnNMOExGZHFkLTJtY2xZeWVFcTFPcUpoX3gzS1BMeGMxZkh6QXRnVTkzV2Z
evals/ranking/fixtures/decoy_and_dupes.json, line 282
"url": "https://news.google.com/rss/articles/CBMilwFBVV95cUxNb2hsaXJ6VGRtOVdDOHdFQkU3T25HaHQ2clF4NW1DOThPQW9iRGgzYlh2OWYxYjBEWEpaRG5TeWlPcW82dF8tVmJGYjN0SkJRdUI5a3B6Vko1ekpHTGMwaVp
evals/ranking/fixtures/decoy_and_dupes.json, line 288
"url": "https://news.google.com/rss/articles/CBMiyAFBVV95cUxPNHUtRTNabWhBR1JLSmtMODdkN3lVcDVJQ19wdm9TRmVCS1BjQ0JUUDdPeHhtU0Foa1E2S1BRTkJaN1lDQnQ4TVhtbkd3NWJtWE5UUlJPQTU3MHcyR0hmNnJ
evals/ranking/fixtures/decoy_and_dupes.json, line 294
"url": "https://news.google.com/rss/articles/CBMiogFBVV95cUxPeERIOWpnRktKU0xSclRPeFV6ZTdQMFc1eGJYZnRlYzlOVWlpS09UODc1WWxfUVJIVFAzQVRVNHdNM2RFclBUcEZBQUNYT0VYdVBKc3owd1liY3VqdE5JTTN
evals/ranking/fixtures/decoy_and_dupes.json, line 300
"url": "https://news.google.com/rss/articles/CBMihwFBVV95cUxQcjFMdzlMUDZTT3RWeXljV3lTVVlKMUJ0QmFFRjU0aVlYcjBFaG1tMjNVVjYwUnR3SnBvX1pQSWNoQThvOUtSTnlORFY5QjF2T0prbGR3NkhzaF9zUFE0dk1
evals/ranking/fixtures/decoy_and_dupes.json, line 312
"url": "https://news.google.com/rss/articles/CBMiiAFBVV95cUxNOGdhZDItN1dsV1J1eTBqb1hLdTFDOVRDVXNORS1JX3Q4RkRBNFdTVG5Jbm5GVTV2WC1aWjlDX05Hd2psZkRERFBoVkNHbG9QSjc2aFJjalpMczMwemFlSDZ
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 8c1a9313a9d4. requests shell access. The manifest names this permission. install fetches a script from the network. accepts a host from input, with no fixed list in this file. reads a credential or environment file. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: 8c1a9313a9d48d243b5b2dfcab5b4ee8506db830
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.