MCP, MCP server
Froglet
Froglet, 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.
OBFUSCATION_ENCODED_BLOB
Why this grade
- OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
docs/openapi.yaml, line 1
openapi: 3.1.0
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
examples/a2a_compute_demo.py, line 171
result = subprocess.run([str(self.binary), "print-identity"], cwd=REPO,
examples/a2a_compute_demo.py, line 182
self.process = subprocess.Popen([str(self.binary)], cwd=REPO, env=self.env,
examples/a2a_compute_demo.py, line 218
process = subprocess.Popen(command or [str(alice.binary), "mcp"], cwd=REPO, env=environment,
Show more
examples/a2a_compute_demo.py, line 607
shutil.rmtree(root)
examples/a2a_compute_demo.py, line 635
installed = subprocess.run(["rustup", "target", "list", "--installed"],
examples/a2a_compute_demo.py, line 646
subprocess.run(command, cwd=REPO, env=clean_environment(), check=True)
examples/a2a_counterparty_demo.py, line 44
result = subprocess.run(command, env=node.env, capture_output=True, timeout=10, check=True)
examples/a2a_counterparty_demo.py, line 74
subprocess.run([openssl, *command], cwd=self.root, capture_output=True, check=True, timeout=30)
examples/a2a_counterparty_demo.py, line 290
shutil.rmtree(root)
examples/a2a_counterparty_demo.py, line 303
subprocess.run(["cargo", "build", "--locked", "--bin", "froglet-node"], cwd=REPO, check=True)
examples/generated_program_replay.py, line 525
shutil.rmtree(private)
examples/qualify_ontology_capacity.py, line 572
shutil.rmtree(root)
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. can reach registry.modelcontextprotocol.io. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
docs-site/public/service-share.js, line 46
const response = await fetch(url, {method:'GET', credentials:'omit', redirect:'error', cache:'no-store', referrerPolicy:'no-referrer',
docs-site/src/maintenance-worker.ts, line 43
fetch(request: Request): Response {
docs-site/src/worker.ts, line 11
fetch(request: Request): Promise<Response>;
Show more
docs-site/src/worker.ts, line 25
async fetch(request: Request, env: WorkerEnv): Promise<Response> {
docs-site/src/worker.ts, line 132
return env.ASSETS.fetch(request);
docs-site/src/data/live-snapshot.ts, line 90
return await fetch(url, {
docs-site/src/data/public-demo-proxy.ts, line 116
const upstream = await fetch(new Request(target, { method: 'GET', headers: { accept: 'application/json' }, redirect: 'manual', signal: control.signal }));
docs-site/src/data/public-demo-proxy.ts, line 408
const upstream = await fetch(new Request(providerOrigin + path, { met
docs-site/src/scripts/self-host-configurator.ts, line 68
lines.push('curl -fsSL --proto \'=https\' --proto-redir \'=https\' --tlsv1.2 "https://github.com/$repo/releases/download/$tag/agent-bootstrap.sh" -o "$bootstrap"');
docs-site/src/scripts/demo/steps.ts, line 103
{p:"~",c:"curl http://127.0.0.1:8080/v1/node/identity"},
docs-site/src/scripts/demo/steps.ts, line 126
{p:"~",c:"curl http://127.0.0.1:8080/v1/node/identity"},
docs-site/src/scripts/demo/steps.ts, line 193
{p:"~",c:"curl http://127.0.0.1:8080/v1/provider/services"},
docs-site/src/scripts/demo/steps.ts, line 221
{p:"~",c:"curl -H 'Authorization: Bearer <runtime-token>' -X POST http://127.0.0.1:8081/v1/runtime/deals --data '<full demo.add workload>'"},
docs-site/src/scripts/demo/steps.ts, line 305
{p:"~",c:"curl http://127.0.0.1:8080/v1/node/capabilities"},
docs-site/src/content/docs/learn/plugin-distribution.mdx, line 68
node -e 'fetch("https://froglet.dev/learn/plugin-distribution/").then(r=>console.log(r.status, r.headers.get("content-type")))'
docs/PLUGIN_DISTRIBUTION.md, line 96
node -e 'fetch("https://froglet.dev/learn/plugin-distribution/").then(r=>console.log(r.status, r.headers.get("content-type")))'
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
docs-site/scripts/wasm-tools.mjs, line 21
return { ...env, CARGO_ENCODED_RUSTFLAGS: [...flags, `--remap-path-prefix=${repo}=/froglet`].join('\x1f') };
.gitignore, line 44
# Local environment files
.gitignore, line 45
.env
Show more
.gitignore, line 47
!.env.example
.gitignore, line 48
!.env.sample
docs-site/.gitignore, line 16
# environment variables
docs-site/.gitignore, line 17
.env
froglet-publish-engine/src/python_bundle.rs, line 579
.env("LANG", "C.UTF-8")
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB
docs/openapi.yaml, line 1
openapi: 3.1.0
docs-site/package-lock.json, line 1
{
froglet-publish-engine/src/daemon_client.rs, line 1
//! HTTP client for the local `froglet-node` daemon.
Show more
conformance/kernel_v1.json, line 574
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c226465616c222c2234363664376663616535363365356362303961306431383730626235383033343438303436313738373961313439343963663232
conformance/kernel_v1.json, line 626
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c2264657363726970746f72222c2234663335356264636237636330616637323865663363636562393631356439303638346262356232636135663835
conformance/kernel_v1.json, line 650
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c226465616c222c2234363664376663616535363365356362303961306431383730626235383033343438303436313738373961313439343963663232
conformance/kernel_v1.json, line 685
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c226f66666572222c22346633353562646362376363306166373238656633636365623936313564393036383462623562326361356638353961623066
conformance/kernel_v1.json, line 724
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c2271756f7465222c22346633353562646362376363306166373238656633636365623936313564393036383462623562326361356638353961623066
conformance/kernel_v1.json, line 780
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c2272656365697074222c2234663335356264636237636330616637323865663363636562393631356439303638346262356232636135663835396162
conformance/kernel_v1.json, line 817
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c22696e766f6963655f62756e646c65222c22346633353562646362376363306166373238656633636365623936313564393036383462623562326361
conformance/kernel_v1.json, line 852
"canonical_signing_bytes_hex": "5b2266726f676c65742f7631222c226f66666572222c22346633353562646362376363306166373238656633636365623936313564393036383462623562326361356638353961623066
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 c6c5dc53f38a. can delete files. can reach a host that is not written as a fixed address. can reach registry.modelcontextprotocol.io. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: c6c5dc53f38a2c485f95cd6776f32f4e7b33785b
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.