MCP, MCP server
io.github.bekirdag/docdex
Turn your repository into fast, private context that humans and AI can trust.
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).
npm/lib/postinstall_setup.js, line 2305
return runInstallCommand("sh", ["-c", "curl -fsSL https://ollama.com/install.sh | sh"], {
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
Concern
can delete files.
PERMISSION_DELETE_FILES
npm/lib/postinstall_setup.js, line 445
fs.unlinkSync(plistPath);
npm/lib/postinstall_setup.js, line 454
fs.unlinkSync(systemPlistPath);
npm/lib/postinstall_setup.js, line 469
fs.unlinkSync(unitPath);
Show more
npm/lib/postinstall_setup.js, line 485
fs.unlinkSync(runnerPath);
npm/lib/postinstall_setup.js, line 561
fs.unlinkSync(lockPath);
npm/lib/postinstall_setup.js, line 854
fs.unlinkSync(pathname);
npm/lib/postinstall_setup.js, line 2890
if (fs.existsSync(markerPath)) fs.unlinkSync(markerPath);
npm/lib/uninstall.js, line 522
fs.unlinkSync(lockPath);
scripts/release_feature_matrix_contract.py, line 184
def _terminate_process(process: subprocess.Popen[bytes]) -> None:
scripts/release_feature_matrix_contract.py, line 232
process = subprocess.Popen(
scripts/test_release_feature_matrix_contract.py, line 525
help_result = subprocess.run(
scripts/test_release_feature_matrix_contract.py, line 538
unknown_result = subprocess.run(
Install and update
Serious
install fetches a script from the network.
INSTALL_REMOTE_SCRIPT
npm/lib/postinstall_setup.js, line 2305
return runInstallCommand("sh", ["-c", "curl -fsSL https://ollama.com/install.sh | sh"], {
npm/lib/postinstall_setup.js, line 2311
return runInstallCommand("sh", ["-c", "wget -qO- https://ollama.com/install.sh | sh"], {
src/cli/commands/llm.rs, line 390
&["-c", "curl -fsSL https://ollama.com/install.sh | sh"],
Show more
src/cli/commands/llm.rs, line 397
&["-c", "wget -qO- https://ollama.com/install.sh | sh"],
src/setup/ollama.rs, line 509
"curl -fsSL https://ollama.com/install.sh | sh".to_string(),
src/setup/ollama.rs, line 518
"wget -qO- https://ollama.com/install.sh | sh".to_string(),
Network
Concern
can reach a host that is not written as a fixed address. can reach ollama.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
npm/lib/postinstall_setup.js, line 119
const req = http.request(
npm/lib/postinstall_setup.js, line 168
const req = http.request(
npm/lib/postinstall_setup.js, line 289
const req = http.request(
Show more
npm/lib/postinstall_setup.js, line 2316
logger?.warn?.("[docdex] curl or wget not found; install Ollama from https://ollama.com/download");
scripts/ci_local.sh, line 127
if curl -fsS "${DOCDEX_HTTP_BASE_URL}/healthz" >/dev/null 2>&1; then
scripts/load_test_http.sh, line 108
if ! response=$(curl -fsS "${CURL_AUTH_ARGS[@]}" \
scripts/load_test_http.sh, line 134
if curl -fsS "${CURL_AUTH_ARGS[@]}" "${BASE_URL}/v1/index/status" >/dev/null 2>&1; then
scripts/load_test_http.sh, line 197
if ! response=$(curl -fsS "${CURL_AUTH_ARGS[@]}" "${BASE_URL}${status_url}" 2>/dev/null); then
scripts/test_mcp_web_search.sh, line 50
if curl -sS "http://127.0.0.1:${PORT}/healthz" >/dev/null 2>&1; then
scripts/test_mcp_web_search.sh, line 57
curl -sS --max-time 10 "http://127.0.0.1:${PORT}/v1/mcp" \
scripts/test_mcp_web_search.sh, line 61
curl -sS --max-time 10 "http://127.0.0.1:${PORT}/v1/mcp" \
scripts/test_mcp_web_search.sh, line 70
response="$(curl -sS --max-time 55 "http://127.0.0.1:${PORT}/v1/mcp" \
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
npm/lib/install.js, line 230
const token = process.env.DOCDEX_GITHUB_TOKEN || process.env.GITHUB_TOKEN;
npm/lib/release_signing.js, line 40
const envKey = process.env.DOCDEX_RELEASE_SIGNING_PUBLIC_KEY;
scripts/generate_release_manifest.cjs, line 270
const signingKeyPem = String(process.env.DOCDEX_RELEASE_SIGNING_PRIVATE_KEY || "").trim() || null;
Show more
scripts/test_release_feature_matrix_contract.py, line 138
print("adapter token=" + os.environ.get("ALLOWED_TOKEN", ""))
scripts/test_release_feature_matrix_contract.py, line 142
"allowed": os.environ.get("ALLOWED_TOKEN"),
scripts/test_release_feature_matrix_contract.py, line 143
"forbidden": os.environ.get("FORBIDDEN_SECRET"),
scripts/verify_release_assets.cjs, line 43
const token = process.env.DOCDEX_GITHUB_TOKEN || process.env.GITHUB_TOKEN;
scripts/verify_release_assets_immutable.py, line 126
token = os.environ.get("GH_TOKEN") or os.environ.get("GITHUB_TOKEN")
.gitignore, line 22
# Env/config
.gitignore, line 23
.env
npm/lib/platform.js, line 151
const env = options?.env ?? process.env;
server/searxng/README.md, line 9
Create a private `.env` beside `docker-compose.yml` and generate a unique
server/searxng/README.md, line 13
install -m 0600 searxng.env.example .env
server/searxng/README.md, line 14
sed -i "s|^SEARXNG_SECRET=.*|SEARXNG_SECRET=$(openssl rand -hex 32)|" .env
server/searxng/README.md, line 38
subsequent restart. Keep `.env` private and never commit its secret.
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. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
src/mcp_server.rs, line 1
use crate::capabilities::{self, BATCH_SEARCH_MAX_QUERIES, RERANK_MAX_CANDIDATES};
src/llm/local_library.rs, line 1
use crate::config::{AppConfig, DelegationConfig, LlmConfig};
src/mcp_server/repo_memory.rs, line 1
use super::*;
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 35a532894044. can delete files. install fetches a script from the network. can reach a host that is not written as a fixed address. can reach ollama.com. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: 35a5328940443c75df66597e75126cf6f2939611
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.