Self-hosted MCP control plane that keeps API keys off your clients — Docker, Kubernetes, or npm.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport http counts 2 tools · 0 res
· 0 prompts
permission surface via README inference
tools
-
binary
<package> <args>
-
python
uvx <package>
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 33b5ec8 · analyzer v33 · 1w ago
danger signals1
- credential in logs credential in log spranab-mcpier-33b5ec8/packages/cli/src/commands/status.ts :16
console.log(kleur.bold("secrets: "), secretKeys.keys.length);
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 51
filesystem 14
- fs spranab-mcpier-33b5ec8/packages/cli/src/activation.ts :1
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/cli/src/commands/backup.ts :1
import { writeFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/cli/src/commands/profile.ts :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/cli/src/commands/restore.ts :1
import { readFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/cli/src/config.ts :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/cli/src/writers.ts :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs (weak) spranab-mcpier-33b5ec8/packages/cli/test/activation.test.mjs :3
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/server/src/backup.ts :1
import { mkdtempSync, readFileSync, rmSync, existsSync, writeFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/server/src/config.ts :1
import { readFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/server/src/db.ts :2
import { mkdirSync, renameSync, writeFileSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/server/src/index.ts :4
import { existsSync } from "node:fs"; - fs spranab-mcpier-33b5ec8/packages/server/src/manifest.ts :1
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
show 2 more
- fs spranab-mcpier-33b5ec8/packages/server/src/spawn.ts :3
import { existsSync } from "node:fs"; - fs (weak) spranab-mcpier-33b5ec8/packages/server/test/config.test.mjs :3
import { writeFileSync, mkdtempSync, rmSync } from "node:fs";
shell / exec 1
- shell spranab-mcpier-33b5ec8/packages/server/src/spawn.ts :1
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
network 8
- net spranab-mcpier-33b5ec8/packages/cli/src/client.ts :28
const res = await fetch(`${this.cfg.server}${path}`, { - net spranab-mcpier-33b5ec8/packages/server/src/catalog.ts :127
const res = await fetch(url); - net spranab-mcpier-33b5ec8/packages/server/src/proxy.ts :173
upstream = await fetch(upstreamUrl, { - net spranab-mcpier-33b5ec8/packages/server/src/registry.ts :205
const res = await fetch(url.toString()); - net (weak) spranab-mcpier-33b5ec8/packages/server/test/smoke-brainstorm.mjs :16
const res = await fetch(`${BASE}/mcp/brainstorm`, { - net (weak) spranab-mcpier-33b5ec8/packages/server/test/smoke-spawn.mjs :15
const res = await fetch(`${BASE}/mcp/mock`, { - net spranab-mcpier-33b5ec8/packages/ui/src/LoginGate.tsx :10
const res = await fetch("/api/secrets", { - net spranab-mcpier-33b5ec8/packages/ui/src/api.ts :43
const res = await fetch(path, {
secrets 3
- secrets (weak) spranab-mcpier-33b5ec8/packages/server/test/mock-mcp.mjs :14
process.stderr.write(`[mock-mcp] started pid=${process.pid} env.MOCK_TOKEN=${process.env.MOCK_TOKEN ?? "<unset>"}\n`); - secrets (weak) spranab-mcpier-33b5ec8/packages/server/test/smoke-brainstorm.mjs :6
const TOKEN = process.env.PIER_TOKEN ?? "test-token-abc"; - secrets (weak) spranab-mcpier-33b5ec8/packages/server/test/smoke-spawn.mjs :6
const TOKEN = process.env.PIER_TOKEN ?? "test-token-abc";
database 2
- db spranab-mcpier-33b5ec8/packages/server/src/backup.ts :4
import Database from "better-sqlite3"; - db spranab-mcpier-33b5ec8/packages/server/src/db.ts :1
import Database from "better-sqlite3";
install hooks 1
- prepublishOnly spranab-mcpier-33b5ec8/packages/cli/package.json :51
npm run build
declared dependencies 3
- @types/node@^20.14.0
- tsx@^4.19.0
- typescript@^5.6.0