Atlas / MCP servers / rafaelperoco / secretgenerator

secretgeneratorCAUTION

mcp/rafaelperoco/secretgenerator

Auditable CSPRNG-backed credential generator for AI agents and machine-readable pipelines. Stable JSON schema, NIST entropy floors, SLSA 3 + cosign signed releases. CLI, Go/Python/Rust libs, MCP server.

Verdict
CAUTION
Grade
C
Trust score
79 /100
Exposed tools
8 7r · 1w · 0d
Transport
stdio
License
MIT
Stars
9
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Auditable random credential generator for AI agents and machine-readable pipelines. Replaces ad-hoc password generation with a verifiable contract backed by the OS CSPRNG.

[](https://github.com/rafaelperoco/secretgenerator/releases) [](https://github.com/rafaelperoco/secretgenerator/actions/workflows/ci.yml) [](https://slsa.dev) [](https://docs.sigstore.dev/cosign/overview/) [](https://www.npmjs.com/package/@secretgenerator/cli) [](https://www.npmjs.com/package/@secretgenerator/mcp)

TL;DR

# zero-install (no clone, no compile)
npx -y @secretgenerator/cli password --json --show-crack-time

# permanent install
brew install rafaelperoco/tap/secretgenerator

# Model Context Protocol server (Claude / Cursor / Cline)
npx -y @secretgenerator/mcp

Output is stable JSON (schema v1):

{
"schema_version": 1,
"password": "VoJgEDVnCoTVMx8cLnMwmHnz",
"entropy_bits": 142.9,
"charset_id": "alphanum-v1",
"algorithm": "crypto/rand+rejection-sampling",
"subcommand": "password",
"version": "2.0.0",
"request_id": "f4c54f9c-0f57-4d58-83be-7937cbe077f7",
"timestamp_utc": "2026-04-29T22:35:11.077695Z",
"crack_time_estimates": [
{
"profile_id": "nation-state-v1",
"human_readable": "1.2e+10 times the age of the universe"
}
]
}

Pin the schema with --require-schema-version=1.

Why not let an LLM generate the password directly? Recent research ([Irregular Security, 2025](https://www.csoonline.com/article/4155166/l
Read from source at commit 4da421a67d58OBSERVED · 2026-10-14
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add secretgenerator-web --env GITHUB_TOKEN=${GITHUB_TOKEN} --env SECRETGENERATOR_SKIP_DOWNLOAD=${SECRETGENERATOR_SKIP_DOWNLOAD} --env SECRETGENERATOR_VERSION=${SECRETGENERATOR_VERSION} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "secretgenerator-web": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}",
        "SECRETGENERATOR_SKIP_DOWNLOAD": "${SECRETGENERATOR_SKIP_DOWNLOAD}",
        "SECRETGENERATOR_VERSION": "${SECRETGENERATOR_VERSION}"
      }
    }
  }
}
03

Exposed tools (8)

7 read · 1 write · 0 destructive.

ToolRiskDescription
assess_entropyreadEstimate the entropy of an EXISTING password. Returns the Shannon entropy in bits
estimate_crack_timereadCompute time-to-break estimates for a given entropy in bits across all attacker
generate_api_keyreadGenerate a token in the
generate_passphrasereadGenerate a diceware-style passphrase using the EFF Large Wordlist (7776 words,
generate_passwordwriteGenerate a high-entropy random password from a named character set.
generate_pinreadGenerate a numeric PIN with weak-pattern rejection. PINs are intrinsically low
generate_secretreadGenerate a high-entropy machine-readable secret from raw CSPRNG bytes.
list_attacker_profilesreadReturn the named attacker profiles used to estimate time-to-break for a given
04

Trust audit

CAUTIONgrade C · trust 79/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (3 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (14)

HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
internal/words/eff_large_wordlist.txt:3448
34654	jailbreak
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
web/src/data/subcommands.ts:47
console.log(out.password, "—", out.entropy_bits, "bits");`;
LOWInventory / provenance · inv.hidden_file · CWE-1104
.golangci.yml
.golangci.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yaml
.goreleaser.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.release-please-manifest.json
.release-please-manifest.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/node/generate.mjs:32
console.log(`password: ${result.password}`);
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/python/generate.py:41
print(f"password: {result['password']}")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/test/archive.test.mjs:14
"v2.0.0/../../evil",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/test/archive.test.mjs:81
["docs/../../etc/passwd", "unsafe path"],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/test/archive.test.mjs:82
["secretgenerator/../../../tmp/x", "unsafe path"],
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
cli/package.json
@types/node, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
mcp/package.json
@modelcontextprotocol/sdk, @types/node, typescript
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
web/package.json
@astrojs/react, @astrojs/sitemap, @resvg/resvg-js, @tailwindcss/vite, @types/react, @types/react-dom, astro, react
Why it matters. 11 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/SUBCOMMANDS.md:203
Read the password from one of:
Why it matters. asks the agent to read credentials

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha 4da421a67d58full audit observations/trust-audit/mcp-server/rafaelperoco__secretgenerator.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-144da421a67d58CAUTIONC79first audit
06

Questions

What is the secretgenerator MCP server?

Auditable CSPRNG-backed credential generator for AI agents and machine-readable pipelines. Stable JSON schema, NIST entropy floors, SLSA 3 + cosign signed releases. CLI, Go/Python/Rust libs, MCP server.

What tools does secretgenerator expose?

8 in total: 7 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is secretgenerator safe to connect to an agent?

With care. The audit graded it C (79/100) and found 14 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does secretgenerator need?

It reads GITHUB_TOKEN, SECRETGENERATOR_SKIP_DOWNLOAD and SECRETGENERATOR_VERSION from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does secretgenerator run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as secretgenerator-web at 0.0.1.

How current is this page?

The grade is for one exact copy of the source (4da421a67d58), read on 2026-10-14. The repository is watched and re-audited when it changes.

Advertisement