MCP, MCP server
Company Docs Mcp
Turn any documentation into an AI-searchable knowledge base.
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.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
scripts/ingest/url-fetcher.ts, line 30
const response = await fetch(url, {
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
scripts/ingest/crawl-website.ts, line 204
fs.unlinkSync(progressFile);
scripts/ingest/ingest-markdown.ts, line 198
await fs.unlink(path.join(entriesDir, jsonFile));
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
scripts/ingest/url-fetcher.ts, line 30
const response = await fetch(url, {
scripts/ingest/url-fetcher.ts, line 84
const response = await fetch(url, {
scripts/ingest/website-crawler.ts, line 328
const response = await fetch(robotsUrl);
Show more
src/chat-ui.ts, line 357
const response = await fetch('/health', {
src/chat-ui.ts, line 432
const response = await fetch('/ai-chat', {
src/index.ts, line 93
async fetch(request: Request, env: Env, ctx: WorkerExecutionContext) {
src/slack-webhook.ts, line 419
const errRes = await fetch(command.response_url, {
src/slack-webhook.ts, line 453
const response = await fetch('https://api.openai.com/v1/chat/completions', {
src/slack-webhook.ts, line 629
const slackRes = await fetch(responseUrl, {
src/lib/embedding-provider.ts, line 180
const response = await fetch(
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
scripts/setup-database.ts, line 14
// Check if .env exists
scripts/setup-database.ts, line 16
await fs.access('.env');
scripts/setup-database.ts, line 18
console.error('❌ .env file not found!');
Show more
scripts/setup-database.ts, line 24
if (!process.env.SUPABASE_URL || !process.env.SUPABASE_SERVICE_KEY) {
scripts/setup-database.ts, line 25
console.error('❌ Supabase credentials not found in .env file!');
scripts/setup.js, line 13
const ENV_PATH = path.join(process.cwd(), '.env');
scripts/setup.js, line 14
const ENV_EXAMPLE_PATH = path.join(process.cwd(), '.env.example');
scripts/setup.js, line 30
// Check if .env already exists
scripts/setup.js, line 32
const overwrite = await question('\n⚠️ .env file already exists. Overwrite? (y/N): ');
scripts/ingest/ingest-supabase.ts, line 147
process.env.SUPABASE_SERVICE_KEY || requireEnv("SUPABASE_ANON_KEY");
scripts/ingest/ingest-supabase.ts, line 155
openaiApiKey = process.env.OPENAI_API_KEY!;
src/lib/embedding-provider.ts, line 68
const envToken = process.env.CLOUDFLARE_API_TOKEN;
src/slack-bot/index.ts, line 34
token: process.env.SLACK_BOT_TOKEN,
src/slack-bot/index.ts, line 35
signingSecret: process.env.SLACK_SIGNING_SECRET,
src/slack-bot/index.ts, line 36
appToken: process.env.SLACK_APP_TOKEN,
src/slack-bot/index.ts, line 46
this.openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
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.
OBFUSCATION_FILE_OVER_READ_CAP
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 0905365114e8. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: 0905365114e8c3f5f4fdbb4533c77eb61416fef3
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.