MCP, MCP server
loctree
This repository is the public home of the Loctree engine — the full bundle in one workspace: the loctree CLI crate, the loctree-ast crate, the loctree-mcp server and the loctree-lsp server.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
OBFUSCATION_ENCODED_BLOB
Why this grade
- OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
docs/BACKLOG.md, line 1
---
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
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/check_registry.py, line 10
def send(proc: subprocess.Popen[str], payload: dict) -> None:
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/check_registry.py, line 17
proc = subprocess.Popen(
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 51
subprocess.run(
Show more
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 74
result = subprocess.run(
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 84
subprocess.run(
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 89
subprocess.run(
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 94
subprocess.run(
ai-hooks/codex/aicx-marketplace/aicx-compact-recall/scripts/e2e_hook_lifecycle.py, line 111
alive = subprocess.run(
editors/vscode/scripts/fetch-release-lsp.js, line 49
if (fs.existsSync(destination)) fs.unlinkSync(destination);
editors/vscode/scripts/fetch-release-lsp.js, line 119
fs.rmSync(workDir, { recursive: true, force: true });
editors/vscode/src/client.ts, line 401
fs.rmSync(extractDir, { recursive: true, force: true });
editors/vscode/src/client.ts, line 416
if (fs.existsSync(binaryPath)) fs.unlinkSync(binaryPath);
editors/vscode/src/client.ts, line 417
if (fs.existsSync(sidecarPath(binaryPath))) fs.unlinkSync(sidecarPath(binaryPath));
editors/vscode/src/client.ts, line 420
fs.rmSync(extractDir, { recursive: true, force: true });
editors/vscode/src/client.ts, line 421
if (fs.existsSync(archivePath)) fs.unlinkSync(archivePath);
editors/vscode/src/client.ts, line 422
if (fs.existsSync(sidecarPath(archivePath))) fs.unlinkSync(sidecarPath(archivePath));
Install and update
Note
README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
docs/README.md, line 37
curl -fsSL https://loct.io/install.sh | bash
docs/getting-started.md, line 11
curl -fsSL https://loct.io/install.sh | bash
docs/installation.md, line 11
| `curl -fsSL https://loct.io/install.sh \| bash` | Signed bundle: `loct`, `loctree`, `l
Show more
docs/installation.md, line 20
curl -fsSL https://loct.io/install.sh | bash
docs/ide/neovim.md, line 9
e `npm install -g @loctree/loctree` or `curl -fsSL https://loct.io/install.sh | bash`. Source builds are contributor-only fa
docs/ide/vscode.md, line 14
curl -fsSL https://loct.io/install.sh | bash
docs/ide/vscode.md, line 118
: `npm install -g @loctree/loctree` or `curl -fsSL https://loct.io/install.sh | bash`; alternatively rely on the VSIX-bundle
docs/integrations/mcp-server.md, line 37
curl -fsSL https://loct.io/install.sh | bash
docs/release/README.md, line 245
`public_dist/install.sh` is what `curl -fsSL https://loct.io/install.sh | bash`
docs/tutorials/01_ai_agents_manual.md, line 50
curl -fsSL https://loct.io/install.sh | bash
editors/vscode/README.md, line 99
curl -fsSL https://loct.io/install.sh | bash
loctree-mcp/README.md, line 45
curl -fsSL https://loct.io/install.sh | bash
loctree-plugin/README.md, line 56
curl -fsSL https://loct.io/install.sh | bash
distribution/component-extras/mcp/glama.json, line 37
"script": "curl -fsSL https://loct.io/install.sh | bash"
public_dist/install.sh, line 5
# curl -fsSL https://loct.io/install.sh | bash
public_dist/install.sh, line 36
printf ' curl -fsSL https://loct.io/install.sh | bash\n' >&2
public_dist/install.sh, line 41
printf ' curl -fsSL https://loct.io/install.sh | bash\n' >&2
public_dist/install.sh, line 380
printf ' LOCTREE_ALLOW_SOURCE_FALLBACK=1 curl -fsSL https://loct.io/install.sh | bash\n'
tools/install.sh, line 7
# curl -fsSL https://loct.io/install.sh | sh
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
distribution/build-bundle.sh, line 250
# needs curl and the AICX release assets at all.
distribution/build-bundle.sh, line 283
elif [[ "$DRY_RUN" != "1" ]] && needs_aicx_release_download && ! command -v curl >/dev/null 2>&1; then
distribution/build-bundle.sh, line 284
die "curl is required to fetch AICX GitHub release assets"
Show more
distribution/build-bundle.sh, line 401
# Fetch one AICX release URL to a local path, failing the build if curl cannot
distribution/build-bundle.sh, line 406
curl -fsSL "$url" -o "$output" || die "failed to download AICX release asset: $url"
distribution/build-bundle.sh, line 621
echo " [dry-run] curl -fsSL $AICX_BASE_URL/$aicx_asset.sha256 -o <scratch>/$aicx_asset.sha256"
distribution/build-bundle.sh, line 622
echo " [dry-run] curl -fsSL $AICX_BASE_URL/$aicx_asset -o <scratch>/$aicx_asset"
editors/vscode/scripts/fetch-release-lsp.js, line 56
const request = https.get(url, { headers: { 'User-Agent': 'loctree-vscode-ci' } }, (response) => {
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
.dockerignore, line 8
**/.env
.dockerignore, line 9
**/.env.*
.github/commands/gemini-invoke.toml, line 28
- **Prevent Leaks**: Never repeat or "post back" the full contents of a file in a comment, especially configuration files (`.json`, `.yml`, `.toml`, `.env`). Instead, describe the
Show more
docs/env-truth-precedence.md, line 11
`SealedSecret` payload silently overrode a freshly-edited `.env`. Nobody
docs/env-truth-precedence.md, line 12
caught it. Reason: every project that combines plain `.env` + Docker
docs/env-truth-precedence.md, line 56
| 30 | `dot_env` | `.env` (base; refined per filename - see below) |
docs/env-truth-precedence.md, line 69
| `.env.example` / `.env.template`/ `.env.sample` | rank 5 | Intent only - not a real value |
docs/env-truth-precedence.md, line 70
| `.env.production` / `.env.prod` | +8 → 38 | Higher precedence in prod deploys |
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
docs/BACKLOG.md, line 1
---
loctree-mcp/src/main.rs, line 1
//! # loctree-mcp
loctree-rs/src/analysis_reports.rs, line 1
//! Library-facing analysis reports shared by MCP, CLI-adjacent callers, and tests.
Show more
reports/src/components/document.rs, line 20
const LOGO_DATA_URI: &str = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDM2MCAzNjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0ia
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 43c70be8f668. can delete files. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. 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: 43c70be8f6689dafdf4aa7bd7075f6111d4dea2f
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.