Grades are a hygiene check, not a security guarantee.

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.

Graded by PlugVetRubric v2

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 &lt;runtime-token&gt;' -X POST http://127.0.0.1:8081/v1/runtime/deals --data '&lt;full demo.add workload&gt;'"},

    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:

View source

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.

Read how this letter is chosen