MCP, MCP server
Extract Llms Docs
Extract Llms Docs, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 6f8b1c568e48, unchanged since the check below.
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.
mcp-server/src/extractor.ts, line 37
const response = await fetch(tryUrl, {
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.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
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
Pass
No shell or command execution found, and no extra permission was declared.
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
mcp-server/src/extractor.ts, line 37
const response = await fetch(tryUrl, {
mcp-server/src/extractor.ts, line 118
const response = await fetch(tryUrl, {
mcp-server/src/extractor.ts, line 233
const response = await fetch(checkUrl, {
Show more
mcp-server/src/extractor.ts, line 320
const response = await fetch(checkUrl, {
src/app/api/batch/route.ts, line 66
const response = await fetch(tryUrl, {
src/app/api/download/route.ts, line 105
const response = await fetch(tryUrl, {
src/app/api/download/route.ts, line 207
const response = await fetch(tryUrl, {
src/app/api/extract/route.ts, line 113
const response = await fetch(file.url, {
src/app/api/extract/route.ts, line 259
const response = await fetch(tryUrl, {
src/app/api/extract/route.ts, line 280
const response = await fetch(tryUrl, {
src/app/api/sites/verify/route.ts, line 35
const response = await fetch(url, {
src/app/api/sites/verify/route.ts, line 106
const response = await fetch(url, {
src/app/api/validate-install/route.ts, line 25
const response = await fetch(url, {
src/app/api/validate-install/route.ts, line 128
const response = await fetch(installUrl, {
src/app/api/validate-install/route.ts, line 137
const contentResponse = await fetch(installUrl, {
src/app/extract/page.tsx, line 52
const response = await fetch(apiUrl);
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
src/app/api/cache/route.ts, line 26
const expectedKey = process.env.ADMIN_KEY
src/app/api/cache/route.ts, line 73
const expectedKey = process.env.ADMIN_KEY || 'llms-forge-admin'
src/app/api/generate-install/route.ts, line 85
const anthropicKey = process.env.ANTHROPIC_API_KEY
Show more
.env.example, line 1
# Copy to .env.local and fill in the values you need. Every variable is optional.
.gitignore, line 26
# Local env files
.gitignore, line 27
.env
.gitignore, line 29
!.env.example
README.md, line 319
All environment variables are optional - the app runs without them. Copy `.env.example` to
README.md, line 320
`.env.local` and fill in only what you need:
README.md, line 323
cp .env.example .env.local
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains a minified payload.
OBFUSCATION_MINIFIED_PAYLOAD
package-lock.json, line 1
{
pnpm-lock.yaml, line 1
lockfileVersion: '9.0'
public/docs/assets/javascripts/bundle.79ae519e.min.js, line 1
"use strict";(()=>{var Zi=Object.create;var _r=Object.defineProperty;var ea=Object.getOwnPropertyDescriptor;var ta=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,ra=Obj
Show more
public/docs/assets/javascripts/bundle.79ae519e.min.js.map, line 1
{
public/docs/assets/javascripts/lunr/tinyseg.js, line 58
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,
public/docs/assets/javascripts/lunr/tinyseg.js, line 59
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-
public/docs/assets/javascripts/lunr/tinyseg.js, line 60
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。"
public/docs/assets/javascripts/lunr/tinyseg.js, line 86
this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,
public/docs/assets/javascripts/lunr/tinyseg.js, line 87
this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,
public/docs/assets/javascripts/lunr/tinyseg.js, line 88
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821
public/docs/assets/javascripts/lunr/tinyseg.js, line 89
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-98
public/docs/assets/javascripts/lunr/wordcut.js, line 1
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!
public/docs/assets/javascripts/workers/search.2c215733.min.js.map, 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 6f8b1c568e48. accepts a host from input, with no fixed list in this file. reads a credential or environment file. contains a minified payload.
Date and source
Date checked:
github.com
Commit graded: 6f8b1c568e483766cb062036c86bfc90825d05fe
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.