← MCP servers · amruthpillai

Reactive Resume

BLOCKgrade F · trust 41/100

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!

agent skillsaidsh pluginhacktoberfestjavascriptmcp serverreactresume builder

Overview

From the repository's own README, as read at the audited commit.

> [!IMPORTANT]> **Repository moved:** Reactive Resume now lives at **[`reactive-resume/reactive-resume`](https://github.com/reactive-resume/reactive-resume)** on GitHub.> **Docker Hub stays at `amruthpillai/reactive-resume`.** GHCR builds now publish to `ghcr.io/reactive-resume/reactive-resume`.> Verified image tags: `latest`, `v5`, `v5.3`, and `v5.3.0` (AMD64 and ARM64). The current version was rebuilt and production redeployed for this rename; no new GitHub release or version bump was made. See [migration details](https://github.com/reactive-resume/reactive-resume/issues/3503).> GitHub Sponsors and Open Collective funding links remain unchanged.<div align="center">  <a href="https://rxresu.me">    <img src="apps/web/public/opengraph/banner.jpg" alt="Reactive Resume" />  </a>  <h1>Reactive Resume</h1>  <p>Reactive Resume is a free and open-source resume builder that makes it easy to create, update, and share your resume.</p>  <p>    <a href="https://rxresu.me"><strong>Get Started</strong></a>    ·    <a href="https://docs.rxresu.me"><strong>Learn More</strong></a>  </p>  <p>    <img src="https://img.shields.io/github/package-json/v/reactive-resume/reactive-resume?style=flat-square" alt="Reactive Resume Version">    <img src="https://img.shields.io/github/stars/reactive-resume/reactive-resume?style=flat-square" alt="GitHub Stars">    <img src="https://img.shields.io/github/license/reactive-resume/reactive-resume?style=flat-square" alt="License" />    <img src="https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square" alt="Docker Pulls" />    <a href="https://discord.gg/aSyA5ZSxpb"><img src="https://img.shields.io/discord/1173518977851473940?style=flat-square&label=discord" alt="Discord" /></a>    <a href="https://crowdin.com/project/reactive-resume"><img src="https://badges.crowdin.net/reactive-resume/localized.svg?style=flat-square" alt="Crowdin" /></a>    <a href="https://github.com/sponsors/AmruthPillai"><img src="https://img.shields.io/

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 tooling --env AUTH_SECRET=${AUTH_SECRET} --env BETTER_AUTH_INTERNAL_URL=${BETTER_AUTH_INTERNAL_URL} --env OAUTH_TEST_DATABASE_URL=${OAUTH_TEST_DATABASE_URL} --env SKILL_KEYWORD_ARTIFACT_DIR=${SKILL_KEYWORD_ARTIFACT_DIR} -- npx -y @reactive-resume/[email protected]
claude-desktop
{
  "mcpServers": {
    "tooling": {
      "command": "npx",
      "args": [
        "-y",
        "@reactive-resume/[email protected]"
      ],
      "env": {
        "AUTH_SECRET": "${AUTH_SECRET}",
        "BETTER_AUTH_INTERNAL_URL": "${BETTER_AUTH_INTERNAL_URL}",
        "OAUTH_TEST_DATABASE_URL": "${OAUTH_TEST_DATABASE_URL}",
        "SKILL_KEYWORD_ARTIFACT_DIR": "${SKILL_KEYWORD_ARTIFACT_DIR}"
      }
    }
  }
}

Exposed tools (2) 2 read · 0 write · 0 destructive

ToolRiskDescription
EnglishreadNative
idreadResume ID.

Details

Source
amruthpillai/reactive-resume
npm
@reactive-resume/tooling@0.0.0
Transports
streamable-http
Credentials it reads
AUTH_SECRETBETTER_AUTH_INTERNAL_URLOAUTH_TEST_DATABASE_URLSKILL_KEYWORD_ARTIFACT_DIR
License
MIT
Stars
43,117 · pushed 0d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

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

What the source does

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

Findings (25)

HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.env.example:19
DATABASE_URL="postgresql://postgres:postgres@postgres:5432/postgres"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
compose.dev.yml:16
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/postgres
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
plans/14-rtl-export-layout.md:45
| fa-IR | `توسعهدهنده نرمافزار — ۲۰۲۶` | Persian letters/digits and the literal ZWNJ between words |
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:75
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));"]
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
apps/web/src/features/applications/csv.ts:10
const text = input.replace(/^/, "");
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/e2e.yml:15
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/contributing/development.mdx:75
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/getting-started/quickstart.mdx:88
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/pdf/src/semantic/template-manifest.test.ts:69
binding: { type: "alias", canonicalKind: "section", token: "interleaved-section-row" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/pdf/src/templates/bronzor/semantic.ts:21
token: "interleaved-section-row",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.codacy.yml
.codacy.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint-cli2.yaml
.markdownlint-cli2.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.mintignore
.mintignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.symlink · CWE-1104
CLAUDE.md
CLAUDE.md
Why it matters. link not followed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/src/openapi/generate-spec.ts:5
target = fileURLToPath(new URL("../../../../docs/spec.json", import.meta.url)),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/src/openapi/generate-spec.ts:7
const packageJson = JSON.parse(await readFile(new URL("../../../../package.json", import.meta.url), "utf8")) as {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/src/openapi/generator.test.ts:110
await readFile(new URL("../../../../docs/spec.json", import.meta.url), "utf8"),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/src/static/web.ts:10
fileURLToPath(new URL("../../../web/dist", import.meta.url)),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/server/src/static/web.ts:12
fileURLToPath(new URL("../../web/dist", import.meta.url)),
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/utils/src/url-security.node.test.ts:197
expect(isPrivateOrLoopbackHost("::ffff:169.254.169.254")).toBe(true);
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/http/auth.test.ts:77
body: JSON.stringify({ redirect_uris: ["https://192.168.1.10/callback"] }),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/http/oauth-flow.integration.test.ts:20
const redirectURI = "http://127.0.0.1:33921/callback";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/http/oauth-flow.integration.test.ts:166
const redirectURI = "http://127.0.0.1:33921/callback";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/server/src/http/oauth-flow.integration.test.ts:276
redirect_uris: ["http://127.0.0.1:33921/callback"],
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/pdf/src/templates/shared/picture-shadow.test.ts:8
const png = decode(Uint8Array.from(atob(shadow.src.split(",")[1] ?? ""), (char) => char.charCodeAt(0)));

Gates applied: no_behavioural_pass.

Audited 2026-09-18 · audit v0.4.0 · source sha 4d474828a092 · full audit: observations/trust-audit/mcp-server/amruthpillai__reactive-resume.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-184d474828a092BLOCKF41first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

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-18. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-18 · job trust-audit-2026-09-18