MCP server · Org-owned · Audited from source

Reactive Resume MCP server

by reactive-resume/appMIT licenceAudited 19 Sep 2026 · source 4d474828a092

npm @reactive-resume/toolingstreamable-http★ 43,181
✕BLOCKGrade F · 41/100 · 19 Sep 2026 · 4d47482

Is it safe? No — BLOCK, grade F (41/100). It exposes 2 tools: 2 read, 0 write and 0 destructive. The audit recorded 47 findings (0 critical, 3 high, 7 medium, 36 low). Maintainer's description: A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “Reactive Resume MCP server (reactive-resume/app)”. Retrieved 19 Sep 2026. https://modelsatlas.com/mcp/reactive-resume/reactive-resume-1

Why this is BLOCK. The audit found 0 critical and 3 high findings; the most severe is Hard-coded secrets at .env.example:19. Each finding is listed below with its file and line.

Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.

Copy of mcp/amruthpillai/reactive-resume: identical text; the original is the page to read and cite.

Trust audit

Audit 0.4.1 · full source read 19 Sep 2026

Trust score41/100✕BLOCK F
0 critical3 high7 medium36 low1 info

47 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.

What the source does

  • FilesystemDeclared3 observations
  • NetworkDeclared4 observations
  • ShellNone observedNothing seen in the source
  • DependenciesNot pinnedSome ranges float
  • SecretsFoundSee the findings

Findings (47)

Sorted by severity · the 25 most severe of 47 are listed

HIGHHard-coded secretssecret.db_uri · .env.example:19
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
HIGHHard-coded secretssecret.db_uri · compose.dev.yml:16
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
HIGHPrompt injectionprompt.zero_width · plans/14-rtl-export-layout.md:45
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
| fa-IR | `توسعهدهنده نرمافزار — ۲۰۲۶` | Persian letters/digits and the literal ZWNJ between words |
Why
invisible characters in instruction text
Fix
strip non-printing characters
MEDIUMNetwork egressnet.raw_ip · Dockerfile:75
F-04 Network egressCWE-200 · CWE-319Layer L1
CMD ["node", "-e", "fetch(`http://127.0.0.1:${process.env.PORT ?? 3000}/api/health`).then((r) => { if (!r.ok) process.exit(1); }).catch(() => process.exit(1));"]
Why
No further detail recorded for this rule.
Fix
—
MEDIUMObfuscation / stealthobf.zero_width · apps/web/src/features/applications/csv.ts:10
F-07 Obfuscation / stealthCWE-506 · CWE-94Layer L1
const text = input.replace(/^/, "");
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.db_uri · .github/workflows/e2e.yml:15
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.db_uri · docs/contributing/development.mdx:75
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.db_uri · docs/getting-started/quickstart.mdx:88
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · packages/pdf/src/semantic/template-manifest.test.ts:69
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · packages/pdf/src/templates/bronzor/semantic.ts:21
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1

Excerpt withheld: it is a secret, and we never print one.

Why
No further detail recorded for this rule.
Fix
—
LOWInventory / provenanceinv.hidden_file · .codacy.yml
F-13 Inventory / provenanceCWE-1104Layer L0
.codacy.yml
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · .markdownlint-cli2.yaml
F-13 Inventory / provenanceCWE-1104Layer L0
.markdownlint-cli2.yaml
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · docs/.mintignore
F-13 Inventory / provenanceCWE-1104Layer L0
.mintignore
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWFilesystem / pathfs.traversal · apps/server/src/openapi/generate-spec.ts:5
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
target = fileURLToPath(new URL("../../../../docs/spec.json", import.meta.url)),
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · apps/server/src/openapi/generate-spec.ts:7
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
const packageJson = JSON.parse(await readFile(new URL("../../../../package.json", import.meta.url), "utf8")) as {
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · apps/server/src/openapi/generator.test.ts:110
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
await readFile(new URL("../../../../docs/spec.json", import.meta.url), "utf8"),
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · apps/server/src/static/web.ts:10
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
fileURLToPath(new URL("../../../web/dist", import.meta.url)),
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · apps/server/src/static/web.ts:12
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
fileURLToPath(new URL("../../web/dist", import.meta.url)),
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.metadata_ip · packages/utils/src/url-security.node.test.ts:197
F-04 Network egressCWE-200 · CWE-319Layer L1
expect(isPrivateOrLoopbackHost("::ffff:169.254.169.254")).toBe(true);
Why
cloud metadata endpoint: the classic SSRF credential grab
Fix
—
LOWNetwork egressnet.raw_ip · apps/server/src/http/auth.test.ts:77
F-04 Network egressCWE-200 · CWE-319Layer L1
body: JSON.stringify({ redirect_uris: ["https://192.168.1.10/callback"] }),
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · apps/server/src/http/oauth-flow.integration.test.ts:20
F-04 Network egressCWE-200 · CWE-319Layer L1
const redirectURI = "http://127.0.0.1:33921/callback";
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · apps/server/src/http/oauth-flow.integration.test.ts:166
F-04 Network egressCWE-200 · CWE-319Layer L1
const redirectURI = "http://127.0.0.1:33921/callback";
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · apps/server/src/http/oauth-flow.integration.test.ts:276
F-04 Network egressCWE-200 · CWE-319Layer L1
redirect_uris: ["http://127.0.0.1:33921/callback"],
Why
No further detail recorded for this rule.
Fix
—
LOWObfuscation / stealthobf.decode_call · packages/pdf/src/templates/shared/picture-shadow.test.ts:8
F-07 Obfuscation / stealthCWE-506 · CWE-94Layer L1
const png = decode(Uint8Array.from(atob(shadow.src.split(",")[1] ?? ""), (char) => char.charCodeAt(0)));
Why
No further detail recorded for this rule.
Fix
—

Tools it exposes

2 declared in source · 0 destructive

2 read0 write0 destructive
ToolWhat it doesRisk
EnglishNativeread
idResume ID.read

Safer alternatives

Audit history

  1. ✕BLOCK F 41 / 100

    Source changed, verdict held · 4d474828a092

Questions about Reactive Resume MCP server

What is the Reactive Resume MCP server?
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!
What tools does Reactive Resume expose?
2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Reactive Resume safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (41/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does Reactive Resume need?
It reads AUTH_SECRET, BETTER_AUTH_INTERNAL_URL, OAUTH_TEST_DATABASE_URL and SKILL_KEYWORD_ARTIFACT_DIR 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 Reactive Resume run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @reactive-resume/tooling at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (4d474828a092), read on 2026-09-19. The repository is watched and re-audited when it changes.
I already installed Reactive Resume. What should I do?
Remove it from your client's MCP configuration, then rotate any API keys and tokens that were in your environment while it ran.
Can the verdict change?
Yes. The repository is watched and re-audited when its source changes. If the findings are removed the verdict updates, and the history on this page shows it.

Sources

  • reactive-resume/app on GitHub — the source we read, its licence, stars and activityObserved · 19 Sep 2026
  • ModelsAtlas trust audit — BLOCK verdict for commit 4d474828a092Observed · 19 Sep 2026

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.