MCP, MCP server
free4chat
Temporary rooms for Humans and AI Agents — run, supervise and steer Agent Tasks without a permanent workspace.
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 4be161c5b1bf.
SECRETS_PATH_CREDENTIAL
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
agent/internal/cli/speech.go, line 21
// alias. It now writes to the native credential store, never credentials.json.
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
agent/experimental/cups-printer-status-adapter/adapter.py, line 33
completed = subprocess.run(
agent/experimental/local-capability-adapter/validate.py, line 22
return subprocess.Popen(
agent/experimental/local-capability-adapter/validate.py, line 55
process = subprocess.Popen(
Show more
agent/experimental/local-capability-adapter/validate.py, line 99
process = subprocess.Popen(
agent/internal/capability/process.go, line 112
cmd := exec.Command(registration.Command, registration.Args...)
agent/internal/cli/cli_test.go, line 40
build := exec.Command("go", "build", "-o", bin, "../../cmd/free4chat-agent")
agent/internal/cli/cli_test.go, line 66
out, err := exec.Command("pgrep", "-f", regexp.QuoteMeta(binaryPath)).Output()
agent/internal/cli/cli_test.go, line 75
command, procErr := exec.Command("ps", "-p", pid, "-o", "command=").Output()
app/e2e/room/room.spec.ts, line 115
fs.rmSync(stateDir, { recursive: true, force: true })
app/e2e/room/run-local-worker.mjs, line 266
fs.rmSync(fakePortFile, { force: true })
app/e2e/room/run-local-worker.mjs, line 267
fs.rmSync(harnessPidFile, { force: true })
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.
NETWORK_NO_FIXED_HOST
agent/experimental/local-capability-adapter/adapter.py, line 55
with urllib.request.urlopen(request, timeout=1.0) as result:
app/worker.ts, line 11
async fetch(request, env, ctx) {
app/worker.ts, line 22
return handler.fetch(request, env, ctx)
Show more
app/e2e/room/control-plane-stub.ts, line 18
async fetch(request: Request): Promise<Response> {
app/e2e/room/room.spec.ts, line 18
* WebSocket (/api/sfu/ws), participant registration, roster broadcasts, text
app/e2e/room/run-local-worker.mjs, line 168
const upstream = net.connect(targetPort, "127.0.0.1", () => {
app/public/install-agent.sh, line 45
if ! command -v curl >/dev/null 2>&1; then
app/public/install-agent.sh, line 46
die "curl is required to download the official release."
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL
agent/internal/capability/process_test.go, line 84
secretPresent := os.Getenv("F4C_TEST_ADAPTER_SECRET") != ""
agent/internal/credentials/store.go, line 35
if os.Getenv("FREE4CHAT_TEST_DISABLE_NATIVE_CREDENTIAL_STORE") == "1" {
agent/internal/cli/speech.go, line 21
// alias. It now writes to the native credential store, never credentials.json.
Show more
agent/internal/media/encode_roundtrip_probe_test.go, line 20
session, err := doubao.NewTtsSession(os.Getenv("DOUBAO_API_KEY"), "", "free4chat-agent")
agent/internal/media/pipeline_wav_probe_test.go, line 118
session, err := doubao.NewTtsSession(os.Getenv("DOUBAO_API_KEY"), "", "free4chat-agent")
agent/internal/media/pipeline_wav_probe_test.go, line 124
Provider: &doubao.TtsProvider{APIKey: os.Getenv("DOUBAO_API_KEY")},
agent/internal/media/reactivate_loopback_probe_test.go, line 94
Provider: &doubao.TtsProvider{APIKey: os.Getenv("DOUBAO_API_KEY")},
agent/internal/media/voice_chain_probe_test.go, line 49
Provider: &doubao.TtsProvider{APIKey: os.Getenv("DOUBAO_API_KEY")},
agent/internal/speech/doubao/probe_test.go, line 24
apiKey := os.Getenv("DOUBAO_API_KEY")
agent/internal/cli/speech_test.go, line 92
if err := os.WriteFile(filepath.Join(dir, "credentials.json"), []byte(legacy), 0o600); err != nil {
agent/internal/cli/speech_test.go, line 141
if _, statErr := os.Stat(filepath.Join(dir, "credentials.json")); !os.IsNotExist(statErr) {
agent/internal/cli/speech_test.go, line 142
t.Fatal("credentials.json was written despite empty key")
agent/internal/cli/speech_test.go, line 149
credentialsPath := filepath.Join(dir, "credentials.json")
agent/internal/cli/speech_test.go, line 178
t.Fatal("legacy credentials.json was unexpectedly rewritten")
agent/internal/cli/speech_test.go, line 206
credentialsPath := filepath.Join(dir, "credentials.json")
agent/internal/cli/speech_test.go, line 218
t.Fatal("malformed credentials.json was modified")
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. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
app/cloudflare-env.d.ts, line 1
/* eslint-disable */
app/yarn.lock, line 1
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
app/src/components/RoomContent.test.tsx, line 1
import {
Show more
app/src/do/RoomSession.ts, line 1
import { DurableObject } from "cloudflare:workers"
app/src/do/mediaGrantTransitions.ts, line 1
import {
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 4be161c5b1bf. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: 4be161c5b1bfd06a06998abf7151cc6beefbbab3
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.