MCP, MCP server
Lore Context
Lore Context, 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 3dafa7bbfdd3, unchanged since the check below.
SECRETS_PATH_CREDENTIAL OBFUSCATION_MINIFIED_PAYLOAD
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
apps/cli/src/index.ts, line 1335
return join(loreStateDir(runtime), "credentials.json"); - OBFUSCATION_MINIFIED_PAYLOAD Medium
Contains a very long line with almost no spaces in a script or style file.
apps/website/src/site.mjs, line 2336
*{box-sizing:border-box}html{scroll-behavior:smooth;overflow-x:clip}body{margin:0;max-width:100%;overflow-x:clip;background:var(--paper);color:var(--ink);font-family:Inter,ui-sans-
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
packages/code-indexer-python/src/lore_code_indexer/cli.py, line 31
result = subprocess.run(cmd, capture_output=True, text=True, check=False)
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
apps/api/src/embedding.ts, line 177
const response = await fetch(`${this.config.baseUrl}/v1/embeddings`, {
apps/cli/src/doctor-v13.ts, line 293
const r = await globalThis.fetch(input, init);
apps/dashboard/app/api/lore/[...path]/route.ts, line 53
response = await fetch(targetUrl, {
Show more
apps/dashboard/app/developer/page.tsx, line 92
<code>curl -H "Authorization: Bearer $LORE_API_TOKEN" /api/lore/v1/me</code>
apps/web/src/index.ts, line 209
const response = await fetch(path, { ...options, headers });
apps/website/scripts/smoke.mjs, line 67
const headers = await fetch(`${baseUrl}/_headers`);
apps/website/scripts/smoke.mjs, line 72
const robots = await fetch(`${baseUrl}/robots.txt`);
apps/website/scripts/smoke.mjs, line 77
const sitemap = await fetch(`${baseUrl}/sitemap.xml`);
apps/dashboard/Dockerfile, line 37
CMD node -e "const auth=Buffer.from((process.env.DASHBOARD_BASIC_AUTH_USER||'')+':'+(process.env.DASHBOARD_BASIC_AUTH_PASS||'')).toString('base64'); fetch('http://127.0.0.1:'+(proc
docs/deployment/compose.private-demo.yml, line 54
"fetch('http://127.0.0.1:3000/health').then((response)=>process.exit(response.ok?0:1)).catch(()=>process.exit(1))"
docs/deployment/compose.private-demo.yml, line 83
"const auth=Buffer.from((process.env.DASHBOARD_BASIC_AUTH_USER||'')+':'+(process.env.DASHBOARD_BASIC_AUTH_PASS||'')).toString('base64'); fetch('http://127.0.0.1:3001',{headers:{aut
scripts/smoke-postgres.mjs, line 112
const response = await fetch(`http://127.0.0.1:${port}/health`);
scripts/smoke-postgres.mjs, line 125
const response = await fetch(`http://127.0.0.1:${port}${path}`, {
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
apps/api/src/index.ts, line 63
const perKey = Number(process.env.LORE_RATE_LIMIT_PER_KEY ?? 600);
apps/api/src/index.ts, line 2095
const configured = [...(deps.apiKeys ?? []), ...parseApiKeyRules(process.env.LORE_API_KEYS)];
apps/cli/src/index.ts, line 1335
return join(loreStateDir(runtime), "credentials.json");
Show more
apps/api/src/index.ts, line 2096
const legacyKey = deps.apiKey ?? process.env.LORE_API_KEY;
apps/api/src/rerankers/cohere-client.ts, line 29
const token = process.env.COHERE_API_KEY;
apps/dashboard/app/api/lore/[...path]/route.ts, line 46
process.env.LORE_API_KEY
apps/dashboard/app/api/lore/[...path]/route.ts, line 48
headers.set("authorization", `Bearer ${process.env.LORE_API_KEY}`);
apps/mcp-server/src/index.ts, line 1394
const apiKey = options.apiKey ?? process.env.LORE_API_KEY;
apps/mcp-server/src/index.ts, line 1722
return options.apiKey ?? process.env.LORE_HOSTED_MCP_TOKEN ?? process.env.LORE_SERVICE_TOKEN ?? process.env.LORE_API_KEY;
.dockerignore, line 1
.DS_Store
.dockerignore, line 2
.env
.dockerignore, line 3
.env.local
.gitignore, line 1
.DS_Store
.gitignore, line 2
.env
.gitignore, line 4
!.env.example
.gitignore, line 5
!.env.*.template
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains a minified payload.
OBFUSCATION_MINIFIED_PAYLOAD
apps/website/src/site.mjs, line 2336
*{box-sizing:border-box}html{scroll-behavior:smooth;overflow-x:clip}body{margin:0;max-width:100%;overflow-x:clip;background:var(--paper);color:var(--ink);font-family:Inter,ui-sans-
apps/website/src/site.mjs, line 2337
.hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line);background:linear-gradient(rgba(37,47,56,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(37,47,56,
apps/website/src/site.mjs, line 2338
.surface{border:1px solid var(--line);border-radius:8px;background:rgba(255,253,248,.9);box-shadow:var(--shadow);overflow:hidden;backdrop-filter:blur(16px)}.surface-head,.surface-f
Show more
apps/website/src/site.mjs, line 2339
.section{border-bottom:1px solid var(--line);padding:90px 0}.section-head{display:grid;grid-template-columns:190px 1fr;gap:34px;margin-bottom:42px}.section-head>div:first-child{dis
apps/website/src/site.mjs, line 2343
.problem-visual{height:74px;margin-top:18px;border:1px solid var(--line);border-radius:6px;background:rgba(240,239,234,.46);padding:8px}.problem-visual svg{width:100%;height:100%;d
apps/website/src/site.mjs, line 2344
.system-board{border:1px solid var(--line);border-radius:8px;background:var(--paper-2);overflow:hidden}.board-head{min-height:42px;padding:0 16px;border-bottom:1px solid var(--line
apps/website/src/site.mjs, line 2346
.manifest-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:14px}.manifest-head h3{margin:0}.manifest-head span{font:850 11px ui-monospace
apps/website/src/site.mjs, line 2351
@media(max-width:1120px){.nav-links{display:none}.hero-grid{grid-template-columns:1fr}.surface{max-width:760px}.use-case-strip{grid-template-columns:1fr}.problem-grid,.features-gri
apps/website/src/v10-home.html, line 1
<!doctype html>
docs/sdk/code-graph-integration-cursor.md, line 1
# Code Knowledge Graph - Cursor Integration
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 3dafa7bbfdd3. requests shell access. The manifest names this permission. can reach a host that is not written as a fixed address. reads a credential or environment file. contains a minified payload.
Date and source
Date checked:
github.com
Commit graded: 3dafa7bbfdd388271e72a0d47a43beae89a99d28
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.