MCP, MCP server
keryx
The fullstack TypeScript framework for MCP and APIs.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit d119595bec71.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST SECRETS_PATH_DOTENV INSTALL_DOCUMENTED_INSTALLER OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
packages/keryx/util/upgrade.ts, line 62
fs.unlinkSync(tmpFile); - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
example/frontend/src/pages/ChatPage.tsx, line 32
const ws = new WebSocket(API_URL + "/api", "keryx-frontend"); - NETWORK_UNNAMED_HOST Low
Calls a fixed host that the description does not name.
example/frontend/src/pages/ChatPage.tsx, line 32
const ws = new WebSocket(API_URL + "/api", "keryx-frontend"); - SECRETS_PATH_DOTENV Low
Mentions a .env file.
CLAUDE.md, line 58
cp example/backend/.env.example example/backend/.env - INSTALL_DOCUMENTED_INSTALLER Note
Documentation shows an installer that pipes a download into a shell.
docs/guide/index.md, line 25
curl -fsSL https://bun.sh/install | bash - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
bun.lock, line 1
{ - OBFUSCATION_FILE_CAP_REACHED Note
The 400 file cap was reached before every file was read.
bun.lock, line 1
{
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
packages/keryx/util/upgrade.ts, line 62
fs.unlinkSync(tmpFile);
Install and update
Note
The docs document an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
docs/guide/index.md, line 25
curl -fsSL https://bun.sh/install | bash
Network
Concern
can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
example/frontend/src/pages/ChatPage.tsx, line 32
const ws = new WebSocket(API_URL + "/api", "keryx-frontend");
example/frontend/src/pages/SwaggerPage.tsx, line 26
fetch(input, { ...init, credentials: "
example/frontend/src/utils/client.ts, line 10
const response = await fetch(url, {
Show more
packages/keryx/classes/StreamingResponse.ts, line 4
* WebSocket (incremental messages), or MCP (logging messages + accumulated result).
packages/keryx/testing/http.ts, line 25
return fetch(url + "/api/user", {
packages/keryx/testing/http.ts, line 40
return fetch(url + "/api/session", {
packages/keryx/testing/index.ts, line 74
* bound its port. Call the getter at each fetch site: `fetch(getUrl() + "/api/...")`.
packages/keryx/testing/index.ts, line 80
* const res = await fetch(getUrl() + "/api/user", { method: "PUT", ... });
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
CLAUDE.md, line 58
cp example/backend/.env.example example/backend/.env
CLAUDE.md, line 66
cp example/frontend/.env.example example/frontend/.env
packages/keryx/util/cli.ts, line 79
const steps = [` cd ${projectName}`, ` cp .env.example .env`];
Show more
packages/keryx/util/scaffold.ts, line 401
await writeTemplate(".env.example", "env.example.mustache");
packages/plugins/admin/dev.ts, line 3
// Dev-mode overrides — the .env file is tuned for tests (port 0, silent logs).
.claude/agents/docs-sync.md, line 13
Ignore changes to test files, `.env` files, and the `docs/` directory itself.
.conductor/cloud-init.sh, line 10
# (starting the services, creating databases, writing .env files) lives in
.conductor/settings.toml, line 10
# sourcing a file. DATABASE_URL* stay in each workspace's .env (written by
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
bun.lock, line 1
{
packages/plugins/admin/demo/plugin.ts, line 1
import type { KeryxPlugin } from "keryx";
Licence
Pass
A licence file is present (licence.txt).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit d119595bec71. can delete files. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. 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: d119595bec716ae99b4eca740964343e47f57eee
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.