MCP, MCP server
Nyx5
Mail and ledger for AI agents, in a single piece. An agent gets three things it has no other way of getting: an address of its own (agent@domain), a mailbox that holds while it is switched off, and a ledger where an agreement carries weight — payment is held un
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High finding. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 557689d5c465, unchanged since the check below.
SECRETS_PATH_CREDENTIAL OBFUSCATION_ENCODED_BLOB OBFUSCATION_MINIFIED_PAYLOAD
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
CLAUDE.md, line 262
- Nicholas ya tiene su llave `~/.ssh/id_ed25519_personal.pub` registrada en GitHub **como Signing - OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
src/plataformas/iconos.js, line 3
180: 'iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAIAAACyr5FlAAABpklEQVR42u3bwQ2AMBADwashtdMCdYYG+AKWGbQVRPOyjlnnId02nkBwCA7BITgEh+AQHIJDcAgOCQ7BITgEh+AQHIJDcAgOwSHBITgEh+AQHIJDcAgOwSE4JDgEh+ - OBFUSCATION_MINIFIED_PAYLOAD Medium
Contains a very long line with almost no spaces in a script or style file.
src/plataformas/iconos.js, line 3
180: 'iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAIAAACyr5FlAAABpklEQVR42u3bwQ2AMBADwashtdMCdYYG+AKWGbQVRPOyjlnnId02nkBwCA7BITgEh+AQHIJDcAgOCQ7BITgEh+AQHIJDcAgOwSHBITgEh+AQHIJDcAgOwSE4JDgEh+
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
scripts/build-mcpb.mjs, line 30
fs.rmSync(trabajo, { recursive: true, force: true });
scripts/revision-adversarial.mjs, line 250
return { casa, url, adminToken: 'revision', cerrar: async () => { await casa.stop(); fs.rmSync(tmp, { recursive: true, force: true }); } };
src/nucleo/almacen.js, line 105
removeJob(id) { const p = path.join(this.dir, 'queue', `${id}.json`); if (fs.existsSync(p)) fs.unlinkSync(p); }
Show more
src/nucleo/almacen.js, line 143
fs.unlinkSync(p);
src/nucleo/almacen.js, line 153
kvDelete(ns, key) { const p = this._kvPath(ns, key); if (fs.existsSync(p)) fs.unlinkSync(p); }
src/nucleo/almacen.js, line 178
if (r?.expires != null && r.expires <= nowMs) fs.unlinkSync(p);
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 www.nyx5.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
e2e-produccion.mjs, line 14
(base, token, welcome) => (await (await fetch(`${base}/invitations`, { method: 'POST',
e2e-produccion.mjs, line 41
const topup = await fetch(`https://${CASA}/libro/topup`, { method:
e2e-produccion.mjs, line 66
const r = await fetch(`https://${CASA}/index/houses`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ domain: d }) });
Show more
bin/nyx5.js, line 103
const jw = await (await fetch(`${dcw._estafeta}/tareas`)).json();
bin/nyx5.js, line 155
const res = await fetch(`${dc._estafeta}/tareas`);
bin/nyx5.js, line 167
const j = await (await fetch(`${dc._estafeta}/tareas`)).json();
bin/nyx5.js, line 202
const res = await fetch(`${dc._estafeta}/agents/${encodeURIComponent(local)}/historial`);
bin/nyx5.js, line 243
const res = await fetch(`${need('estafeta')}/invitations`, { met
demo/spam.js, line 18
const res = await fetch('http://127.0.0.1:4002/inbound', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(env) });
scripts/auditar-produccion.sh, line 13
p "HEAD /" "$(curl -s -o /dev/null -w '%{http_code}' -I https://nyx5.com/)" 200
scripts/auditar-produccion.sh, line 15
p "http -> https (301)" "$(curl -s -o /dev/null -w '%{http_code}' http://nyx5.com/)" 301
scripts/auditar-produccion.sh, line 23
red=$(curl -s --max-time 12 https://nyx5.com/x402/supported | grep -o '"network":"[^"]*"' | head -1 | cut -d'"' -f4)
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
e2e-produccion.mjs, line 3
// Uso: node --env-file=.env e2e-produccion.mjs
e2e-produccion.mjs, line 8
const T1 = (process.env.NYX5_ADMIN_TOKEN || process.env.CHASQUI_ADMIN_TOKEN);
CLAUDE.md, line 262
- Nicholas ya tiene su llave `~/.ssh/id_ed25519_personal.pub` registrada en GitHub **como Signing
Show more
e2e-produccion.mjs, line 9
const T2 = (process.env.NYX5_BETA_ADMIN_TOKEN || process.env.CHASQUI_BETA_ADMIN_TOKEN);
e2e-produccion.mjs, line 10
if (!T1 || !T2) throw new Error('faltan tokens en .env');
bin/nyx5.js, line 213
adminToken: o['admin-token'] || (process.env.NYX5_ADMIN_TOKEN || process.env.CHASQUI_ADMIN_TOKEN) || need('admin-token'),
bin/nyx5.js, line 239
ster({ adminToken: o['admin-token'] || (process.env.NYX5_ADMIN_TOKEN || process.env.CHASQUI_ADMIN_TOKEN), in
bin/nyx5.js, line 243
ization: `Bearer ${o['admin-token'] || (process.env.NYX5_ADMIN_TOKEN || process.env.CHASQUI_ADMIN_TOKEN)}` }
bin/nyx5.js, line 297
ization: `Bearer ${o['admin-token'] || (process.env.NYX5_ADMIN_TOKEN || process.env.CHASQUI_ADMIN_TOKEN)}` }
demo/edge-local.mjs, line 24
NYX5_ADMIN_TOKEN: process.env.NYX5_ADMIN_TOKEN || 'local',
demo/edge-local.mjs, line 28
NYX5_VAULT_KEY: process.env.NYX5_VAULT_KEY || crypto.randomBytes(32).toString('base64'),
scripts/revision-ideas/a2-from-falso.mjs, line 13
const env2 = { ...env, signature: { ...env.signature, kid: (await store.getAgent('nicholas')).sig } };
.gitignore, line 1
.env
CLAUDE.md, line 266
`git config user.signingkey ~/.ssh/id_ed25519_personal.pub`, y commitear con `-S`.
CLAUDE.md, line 273
`gpg.format=ssh`, `user.signingkey=~/.ssh/id_ed25519_personal.pub`, `commit.gpgsign=true`,
CLAUDE.md, line 372
secret `NYX5_VAULT_KEY` (copia en `.env` para poder recuperarla; perderla obliga a re-autorizar
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. contains a minified payload.
OBFUSCATION_ENCODED_BLOB OBFUSCATION_MINIFIED_PAYLOAD
src/plataformas/iconos.js, line 3
180: 'iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAIAAACyr5FlAAABpklEQVR42u3bwQ2AMBADwashtdMCdYYG+AKWGbQVRPOyjlnnId02nkBwCA7BITgEh+AQHIJDcAgOCQ7BITgEh+AQHIJDcAgOwSHBITgEh+AQHIJDcAgOwSE4JDgEh+
src/plataformas/iconos.js, line 3
180: 'iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAIAAACyr5FlAAABpklEQVR42u3bwQ2AMBADwashtdMCdYYG+AKWGbQVRPOyjlnnId02nkBwCA7BITgEh+AQHIJDcAgOCQ7BITgEh+AQHIJDcAgOwSHBITgEh+AQHIJDcAgOwSE4JDgEh+
src/plataformas/iconos.js, line 4
192: 'iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAIAAADdvvtQAAAByUlEQVR42u3byw0AEBBAQTWoXQvq5O4ikfiPvAqY02aFmJM0XHAFAkgACSABJAEkgASQAJIAEkACSABJAAkgASSAJIAEkAASQAJIAkgACSABJAEkgASQAJIAEkACSA
Show more
src/plataformas/iconos.js, line 4
192: 'iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAIAAADdvvtQAAAByUlEQVR42u3byw0AEBBAQTWoXQvq5O4ikfiPvAqY02aFmJM0XHAFAkgACSABJAEkgASQAJIAEkACSABJAAkgASSAJIAEkAASQAJIAkgACSABJAEkgASQAJIAEkACSA
src/plataformas/iconos.js, line 5
512: 'iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAI2ElEQVR42u3VURFFIQhAQTOY3QrmxAr+OKLsnS3wgOdpfQ4ACmpGACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAA
src/plataformas/iconos.js, line 5
512: 'iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAI2ElEQVR42u3VURFFIQhAQTOY3QrmxAr+OKLsnS3wgOdpfQ4ACmpGACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAA
src/plataformas/og-png.js, line 2
export const OG_PNG_B64 = "iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAYuUlEQVR42u3dMU4dSxCGURZA4IVfiQWQeIGIiBxyZFmDPd1df9WRTvpsZqampz4Hj6fn518AAAAM9OQWAAAACEIAAAAEIQAAAIIQAAAAQ
src/plataformas/og-png.js, line 2
export const OG_PNG_B64 = "iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAYuUlEQVR42u3dMU4dSxCGURZA4IVfiQWQeIGIiBxyZFmDPd1df9WRTvpsZqampz4Hj6fn518AAAAM9OQWAAAACEIAAAAEIQAAAIIQAAAAQ
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 557689d5c465. can delete files. can reach a host that is not written as a fixed address. can reach www.nyx5.com. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable. contains a minified payload.
Date and source
Date checked:
github.com
Commit graded: 557689d5c4652746e7a93e68b996b1a59d0b296b
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.