MCP, MCP server
Code Context Engine
Save 94% on AI coding tokens.
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 75071156e08a, unchanged since the check below.
NETWORK_HOST_FROM_INPUT SECRETS_PATH_CREDENTIAL
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
docs/guide/_astro/page.B1D-nYk3.js, line 1
nst[r,i]of Object.entries(v))n.set(r,i);fetch(e,{priority:"low",headers:n})}}function - SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
src/context_engine/config.py, line 89
# (.env*, *.pem, secrets.yml, credentials.json, …) and redacts
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
benchmarks/run_benchmark.py, line 86
subprocess.run(
benchmarks/run_benchmark.py, line 604
shutil.rmtree(cleanup_dir, ignore_errors=True)
benchmarks/run_benchmark.py, line 606
shutil.rmtree(storage_dir, ignore_errors=True)
Show more
src/context_engine/cli.py, line 2291
shutil.rmtree(storage_dir)
src/context_engine/cli.py, line 2570
shutil.rmtree(cce_dir)
src/context_engine/cli.py, line 2659
shutil.rmtree(index_dir)
src/context_engine/cli.py, line 2761
result = subprocess.run(upgrade_cmd, capture_output=True, text=True)
src/context_engine/cli.py, line 2779
ver_result = subprocess.run(
src/context_engine/project_commands.py, line 185
custom = commands.get("custom", {})
src/context_engine/project_commands.py, line 193
hook_list = commands.get(hook, [])
src/context_engine/project_commands.py, line 208
rules = commands.get("rules", [])
src/context_engine/project_commands.py, line 221
prefs = commands.get("preferences", {})
src/context_engine/project_commands.py, line 268
rules = commands.get("rules", [])
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
accepts a host from input, with no fixed list in this file. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. can reach pypistats.org. The description does not name that host.
NETWORK_HOST_FROM_INPUT NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
docs/guide/_astro/page.B1D-nYk3.js, line 1
nst[r,i]of Object.entries(v))n.set(r,i);fetch(e,{priority:"low",headers:n})}}function
docs/guide/pagefind/pagefind-worker.js, line 1
or_path instanceof URL)){module_or_path=fetch(module_or_path);}const{instance,module}=
docs/guide/pagefind/pagefind.js, line 1
or_path instanceof URL)){module_or_path=fetch(module_or_path);}const{instance,module}=
Show more
src/context_engine/cli.py, line 119
resp = httpx.get(
src/context_engine/cli.py, line 368
Hooks fail closed (`curl ... || true`), so a missing daemon means capture
src/context_engine/cli.py, line 404
with socket.create_connection(("127.0.0.1", port), timeout=1.0):
src/context_engine/cli.py, line 520
resp = httpx.get("http://localhost:11434/api/tags", timeout=1.0)
src/context_engine/cli.py, line 726
resp = httpx.get("http://localhost:11434/api/tags", timeout=2.0)
src/context_engine/cli.py, line 1188
resp = httpx.get("http://localhost:11434/api/tags", timeout=2.0)
src/context_engine/pricing.py, line 129
resp = httpx.get(_DOCS_URL, follow_redirects=True, timeout=5.0)
src/context_engine/pricing.py, line 213
When *fetch_live* is False, skip network fetch (use static + cache only).
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
src/context_engine/config.py, line 20
".venv", "venv", "env", ".env",
src/context_engine/config.py, line 89
# (.env*, *.pem, secrets.yml, credentials.json, …) and redacts
src/context_engine/serve_http.py, line 279
api_token = os.environ.get("CCE_API_TOKEN") or None
Show more
src/context_engine/indexer/pipeline.py, line 196
credential patterns (.env*, *.pem, secrets.yml, etc.) are skipped at
src/context_engine/indexer/pipeline.py, line 393
# walk (_iter_project_files), or saving `.env.production` in a
src/context_engine/indexer/secrets.py, line 6
credential patterns (.env*, *.pem, secrets.yml, …) are never read,
src/context_engine/indexer/secrets.py, line 35
# Dotenv family (covers .env, .env.local, .env.production, etc. - see _SECRET_PREFIXES)
src/context_engine/indexer/secrets.py, line 36
".npmrc", ".pypirc", ".netrc",
src/context_engine/indexer/secrets.py, line 38
"credentials.json", "credentials.yaml", "credentials.yml",
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains a minified payload. contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB OBFUSCATION_MINIFIED_PAYLOAD
uv.lock, line 1
version = 1
docs/guide/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js, line 1
import{S as r}from"./TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js";class c extends r{set current(e){super.current=e;const t=this.querySelector(".display-current
docs/guide/_astro/Search.astro_astro_type_script_index_0_lang.Cc1riBdC.js, line 1
const y="modulepreload",w=function(f){return"/code-context-engine/guide/"+f},p={},S=function(m,c,l){let h=Promise.resolve();if(c&&c.length>0){let o=function(n){return Promise.all(n
Show more
docs/guide/_astro/ec.0vx5m.js, line 1
try{(()=>{function a(e){if(!e)return;let t=e.getAttribute("tabindex")!==null,r=e.scrollWidth>e.clientWidth;r&&!t?(e.setAttribute("tabindex","0"),e.setAttribute("role","region")):!r
docs/guide/_astro/ec.0vx5m.js, line 2
try{(()=>{function l(o){let e=document.createElement("pre");Object.assign(e.style,{opacity:"0",pointerEvents:"none",position:"absolute",overflow:"hidden",left:"0",top:"0",width:"20
docs/guide/_astro/ec.0vx5m.js, line 3
`);try{await navigator.clipboard.writeText(r),n=!0}catch{n=l(r)}if(!n||e.parentNode?.querySelector(".feedback"))return;let c=e.parentNode?.querySelector("[aria-live]"),t=document.c
docs/guide/pagefind/pagefind-component-ui.js, line 4
`:E==="t"?" ":E==="r"?"\r":E,e++;continue}g+=s[e++]}e<s.length?e++:g="",d={t:"L",val:g}}else if(/[-0-9.]/.test(_)){let p="",g=0;for(s[e]==="-"&&(p+=s[e++]),s[e]==="."&&(p+=s[e++],g
docs/guide/pagefind/pagefind-component-ui.js, line 7
`,this.appendChild(t),this.dispatchEvent(new CustomEvent("pagefind-error",{detail:e,bubbles:!0,composed:!0}))}escapeHtml(e){let t=document.createElement("div");return t.textContent
docs/guide/pagefind/pagefind-component-ui.js, line 39
</li>`,Ca=R(ba),ya=R(Ta),rs=(n,s)=>{for(let e of n)if(e instanceof Element){e.setAttribute("data-pf-result-index",String(s));break}},zt=n=>{if(!(n instanceof HTMLElement))return nu
docs-src/package-lock.json, line 1
{
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 75071156e08a. can delete files. accepts a host from input, with no fixed list in this file. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. can reach pypistats.org. The description does not name that host. reads a credential or environment file. contains a minified payload. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: 75071156e08a145fab17c8ce30bb5f418286f434
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.