MCP, MCP server
Open Code Review
The first open-source CI/CD quality gate built specifically for AI-generated code. Detects hallucinated imports, stale APIs, over-engineering, and security anti-patterns — powered by local LLMs and any OpenAI-compatible provider.
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 9e572b5de038, 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.
packages/core/src/ai/anthropic-provider.ts, line 5
* Uses native fetch (no SDK dependency). - SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
docs/RESEARCH-AGENT-SAFEHOUSE.md, line 22
~/.ssh/denied ← SSH 私钥拒绝
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
packages/core/src/ai/v4/patterns/defect-patterns.ts, line 142
'os.popen("command")',
packages/core/src/detectors/v4/language-specific.ts, line 537
message: 'os.system() used instead of subprocess. Use subprocess.run() for better control and security.',
packages/core/src/detectors/v4/security-pattern.ts, line 396
s calls with unsanitized variables. Use subprocess.run() with a list of arguments instead.',
Show more
packages/core/src/detectors/v4/security-pattern.ts, line 404
message: 'Shell command with .format() string interpolation detected. Use subprocess.run() with a list of arguments to prevent command injection.',
packages/core/src/registry/cache.ts, line 130
fs.unlinkSync(this.cacheFile);
packages/core/src/data/deprecated-apis-python.json, line 5
"replacement": "subprocess.run()",
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. accepts a host from input, with no fixed list in this file. can reach api.telegram.org. The description does not name that host.
NETWORK_HOST_FROM_INPUT NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
packages/core/src/ai/anthropic-provider.ts, line 5
* Uses native fetch (no SDK dependency).
packages/core/src/ai/anthropic-provider.ts, line 60
const res = await fetch(`${this.endpoint}/v1/messages`, {
packages/core/src/ai/ollama-provider.ts, line 40
const res = await fetch(`${this.endpoint}/api/tags`, {
Show more
packages/core/src/ai/ollama-provider.ts, line 66
const res = await fetch(`${this.endpoint}/api/generate`, {
packages/core/src/ai/openai-provider.ts, line 5
* Uses native fetch (no SDK dependency).
packages/core/src/ai/openai-provider.ts, line 64
const res = await fetch(`${this.endpoint}/chat/completions`, {
packages/core/src/ai/v4/embedding/ollama.ts, line 84
const response = await fetch(url, {
packages/core/src/ai/v4/embedding/openai.ts, line 62
const response = await fetch(url, {
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
demo-scan/demo-example-keys.js, line 71
console.log('User login attempt:', { username, password, apiKey: process.env.API_KEY });
packages/core/src/ai/anthropic-provider.ts, line 32
this.apiKey = options?.apiKey || process.env.ANTHROPIC_API_KEY || '';
docs/RESEARCH-AGENT-SAFEHOUSE.md, line 22
~/.ssh/denied ← SSH 私钥拒绝
Show more
packages/core/src/ai/openai-provider.ts, line 34
this.apiKey = options?.apiKey || process.env.OPENAI_API_KEY || '';
packages/core/src/ai/v4/llm/anthropic.ts, line 19
* const provider = new AnthropicProvider(process.env.ANTHROPIC_API_KEY, 'claude-3-5-haiku-20241022');
packages/core/src/ai/v4/llm/openai.ts, line 19
* const provider = new OpenAIProvider(process.env.OPENAI_API_KEY, 'gpt-4o-mini');
packages/core/src/ai-healer/auto-fix-engine.ts, line 178
apiKey: options.openaiKey || process.env.OCR_API_KEY || '',
packages/core/src/ai-healer/auto-fix-engine.ts, line 270
const apiKey = options.openaiKey || process.env.OCR_API_KEY || process.env.OPENAI_API_KEY || '';
packages/core/src/detectors/v4/security-pattern.ts, line 480
pattern: /process\.env\.(?:\w*(?:SECRET|KEY|TOKEN|PASSWORD|PASSWD|PWD|CREDENTIALS?|AUTH)\w*)\s*\|\|\s*['"][^'"]{4,}['"]/i,
packages/core/src/detectors/v4/security-pattern.ts, line 483
ck secret detected. AI often generates `process.env.SECRET || "default"` which silently ships the
packages/core/src/detectors/v4/security-pattern.ts, line 489
pattern: /process\.env\.(?:\w*(?:SECRET|KEY|TOKEN|PASSWORD|PASSWD|PWD|CREDENTIALS?|AUTH)\w*)\s*\?\?\s*['"][^'"]{4,}['"]/i,
packages/core/src/detectors/v4/security-pattern.ts, line 643
pattern: /process\.env\.(?:\w*(?:SECRET|KEY|TOKEN|PASSWORD|PASSWD|PWD|CREDENTIALS?|AUTH)\w*)\s*\?\?\s*['"][^'"]{4,}['"]/i,
packages/worker/src/index.ts, line 69
/\bprocess\.env\.NODE_ENV\s*===\s*['"]test['"]\s*\?\s*require/,
.gitignore, line 6
out/
.gitignore, line 7
.env
docs/RESEARCH-AGENT-SAFEHOUSE.md, line 35
safehouse cat ~/.ssh/id_ed25519
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
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 9e572b5de038. can delete files. can reach a host that is not written as a fixed address. accepts a host from input, with no fixed list in this file. can reach api.telegram.org. The description does not name that host. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: 9e572b5de038eaa1abff0c4af3c28c9008c21dab
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.