Atlas / MCP servers / denisbilli / ProdKit

ProdKitSAFE

mcp/denisbilli/prodkit
Verdict
SAFE
Grade
B
Trust score
85 /100
Exposed tools
4 4r · 0w · 0d
Transport
stdio
License
MIT
Stars
0
01

Overview

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

ProdKit is a deterministic local CLI that analyzes an existing web application repository and generates a production-readiness report or a remediation plan.

It is designed for early-stage and AI-generated apps where architecture and security quality can vary significantly.

ProdKit is read-only: it never modifies the target repository.

What ProdKit does

ProdKit inspects a target project and detects:

  • Frontend framework signals
  • Backend framework signals
  • Database technologies
  • Package manager
  • Docker and Docker Compose presence
  • Environment file and env-usage hygiene
  • Authentication and authorization signals
  • Tenant/organization signals
  • GDPR/privacy signals
  • Security hardening signals
  • Upload exposure signals
  • Billing signals: payment processors declared in any manifest this reads
  • Observability/logging signals
  • Background jobs/queue signals
  • Deployment readiness signals

Then it builds a structured production-readiness report with:

  • Overall score (0-100), or null where too little of the repository could be read

to characterise it

  • Maturity level (inconclusive, prototype, early, partial, production_ready)
  • Findings grouped by category
  • Critical issues and warnings
  • Passed checks
  • Suggested next steps
  • Technical evidence for each finding — a file and a line you can open, not a summary

Two things the report says about its own reading, because a finding is only worth what the reading behind it is:

  • How deeply each language was read. A syntax tree answered the question, or a

keyword search did, or the language was not read at all — and the report names which, per language. The optional typescript peer dependency decides whether JavaScript and TypeScript are parsed; without it they are searched as text, and the report says so rather than claiming otherwise.

  • Which questions could not be asked. A check whose answer depends on a reader that

could not run comes back unknown, never passed and

Read from source at commit af8a43497b3aOBSERVED · 2026-10-11
Advertisement
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 vue-app --env AUTH_GITHUB_ID=${AUTH_GITHUB_ID} --env AUTH_GITHUB_SECRET=${AUTH_GITHUB_SECRET} --env DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY} --env JWT_SECRET=${JWT_SECRET} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "vue-app": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "AUTH_GITHUB_ID": "${AUTH_GITHUB_ID}",
        "AUTH_GITHUB_SECRET": "${AUTH_GITHUB_SECRET}",
        "DJANGO_SECRET_KEY": "${DJANGO_SECRET_KEY}",
        "JWT_SECRET": "${JWT_SECRET}"
      }
    }
  }
}
03

Exposed tools (4)

4 read · 0 write · 0 destructive.

ToolRiskDescription
analyze_projectread
compare_profilesread
list_profilesread
plan_remediationread
04

Trust audit

SAFEgrade B · trust 85/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (14)

MEDIUMHard-coded secrets · inv.env_committed · CWE-798, CWE-321
tests/fixtures/env-without-a-template/.env
.env
Why it matters. a real .env in the package
Fix. ship .env.example with placeholders only
LOWInventory / provenance · inv.hidden_file · CWE-1104
.eslintrc.cjs
.eslintrc.cjs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/env-without-a-template/.env
.env
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/analyzer/structural/lookupTables.ts:2
import { readTextFileSafe } from '../../utils/readTextFileSafe';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/analyzer/structural/ownershipChecks.ts:2
import { readTextFileSafe } from '../../utils/readTextFileSafe';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/analyzer/structural/roleChecks.ts:2
import { readTextFileSafe } from '../../utils/readTextFileSafe';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/analyzer/structural/secretArguments.ts:2
import { readTextFileSafe } from '../../utils/readTextFileSafe';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/analyzer/structural/valuesFromPackage.ts:2
import { readTextFileSafe } from '../../utils/readTextFileSafe';
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/fixtures/identity-proxy-in-front/app/root.tsx:8
const claims = JSON.parse(atob(payload))
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
commander, fast-glob, zod, @modelcontextprotocol/sdk, @types/node, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, eslint
Why it matters. 10 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
tests/fixtures/a-connected-mailbox-is-not-a-seller/package.json
@nestjs/core, bcrypt, googleapis, stripe
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
tests/fixtures/a-file-picker-is-not-a-server/package.json
antd, react
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
tests/fixtures/a-js-framework-and-its-benchmarks/benchmarks/http/package.json
express
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
tests/fixtures/a-js-framework-and-its-benchmarks/package.json
typescript, vitest
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha af8a43497b3afull audit observations/trust-audit/mcp-server/denisbilli__prodkit.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-11af8a43497b3aSAFEB85first audit
06

Questions

What tools does @produtype/core expose?

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

Is @produtype/core safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (85/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does @produtype/core need?

It reads AUTH_GITHUB_ID, AUTH_GITHUB_SECRET, DJANGO_SECRET_KEY, JWT_SECRET, KEYS, NEXT_PUBLIC_SUPABASE_ANON_KEY, OPENAI_API_KEY, SECRET_KEY, SESSION_KEY, SESSION_SECRET, STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET 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 @produtype/core run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as vue-app at 0.1.0.

How current is this page?

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

Advertisement