PluginBench
MCP Server
Active
MIT

prodlint MCP Server

io.github.prodlint/prodlint

Static analysis for AI-generated code: 52 checks for security, reliability, performance, and AI quality issues.

What is the prodlint MCP server?

The prodlint MCP server is a static analysis tool that scans codebases for production-readiness issues commonly introduced by AI coding tools like Cursor, v0, and Copilot. It detects 52 security, reliability, performance, and AI-quality problems—hallucinated imports, missing auth, hardcoded secrets, unvalidated server actions, and more—with zero configuration and no LLM required.

prodlint flags issues that TypeScript and ESLint miss: hardcoded secrets, hallucinated packages, missing authentication, XSS vectors, and other production-readiness problems. It's designed specifically for vibe-coded apps and AI-generated code patterns, providing actionable findings across security (27 rules), reliability (11 rules), performance (6 rules), and AI quality (8 rules). Use it in CI/CD, as a GitHub Action, or directly in Cursor and Claude Code via MCP.

How to install prodlint

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "prodlint": {
      "command": "npx",
      "args": [
        "-y",
        "prodlint-mcp"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • scan — Scan a project directory for production-readiness issues across security, reliability, performance, and AI quality categories.
  • web-score — Check any deployed website for AI agent-readiness using 14 checks covering llms.txt, TDMRep, AgentCard, AI-Disclosure, and HTTP Signatures.

Use cases

  • Catch hardcoded secrets, API keys, and tokens before they reach production
  • Detect hallucinated imports and missing dependencies that will break at runtime
  • Identify missing authentication and rate limiting on API routes
  • Find unvalidated server actions and form data handling vulnerabilities
  • Validate SQL queries for injection risks and ensure proper ORM usage
  • Enforce production-readiness standards in CI/CD pipelines with GitHub Actions

prodlint MCP server FAQ

What is prodlint?

prodlint is a static analysis tool that detects 52 production-readiness issues in code, especially problems introduced by AI coding tools. It checks for security vulnerabilities, reliability issues, performance problems, and AI-quality concerns without requiring configuration or an LLM.

Is prodlint free?

Yes, prodlint is open-source under the MIT license and free to use.

How do I use prodlint in Cursor or Claude?

Install the MCP server by running `claude mcp add prodlint -- npx -y -p prodlint prodlint-mcp` for Claude Code, or add it to your Cursor/Windsurf config with the command `npx -y -p prodlint prodlint-mcp`. Then ask your AI to run prodlint on your project.

What authentication is required?

No authentication is required. prodlint runs locally on your codebase with zero configuration.

Can I use prodlint in CI/CD?

Yes. Use the GitHub Action by adding `.github/workflows/prodlint.yml`, or run `npx prodlint --json` or `npx prodlint --sarif` for CI integration and GitHub Code Scanning.

What are the 52 rules?

27 security rules (secrets, auth, validation, CORS, SQL injection, etc.), 11 reliability rules (hallucinated imports, error handling, promises, etc.), 6 performance rules (sync I/O, N+1 queries, unbounded queries, etc.), and 8 AI-quality rules (placeholder content, dead exports, overuse of 'use client', etc.).

README (reference)

Source of truth, from the repository.

prodlint

npm version npm downloads License: MIT

Production readiness for vibe-coded apps.

Static analysis for vibe-coded apps. Flags the security, reliability, performance, and AI quality issues that Cursor, v0, Bolt, and Copilot create — hallucinated imports, missing auth, hardcoded secrets, unvalidated server actions, and more. Zero config, no LLM, 52 rules.

npx prodlint
  prodlint v0.10.0
  Scanned 148 files · 2 critical · 5 warnings · 1 info

  src/app/api/checkout/route.ts
    12:1  INFO  No rate limiting — anyone could spam this endpoint and run up your API costs  rate-limiting
    28:5  WARN  Empty catch block silently swallows error  shallow-catch

  src/actions/submit.ts
    5:3   CRIT  Server action uses formData without validation  next-server-action-validation
      ↳ Validate with Zod: const data = schema.safeParse(Object.fromEntries(formData))

  src/lib/db.ts
    1:1   CRIT  Package "drizzle-orm" is imported but not in package.json  hallucinated-imports

  Scores
  security        72 ████████████████░░░░  (8 issues)
  reliability     85 █████████████████░░░  (4 issues)
  performance     95 ███████████████████░  (1 issue)
  ai-quality      90 ██████████████████░░  (3 issues)

  Overall: 82/100 (weighted)

  2 critical · 5 warnings · 4 info

Why?

Vibe coding is the fastest way to build. Shipping fast means knowing your code is production-ready — not just that it compiles. Hardcoded secrets, hallucinated packages, missing auth, and XSS vectors pass type-checks and look correct — but they aren't ready for production.

prodlint checks what TypeScript and ESLint don't: whether your vibe-coded app is ready for production.

Install

npx prodlint                              # Run directly (no install)
npx prodlint ./my-app                     # Scan specific path
npx prodlint --json                       # JSON output for CI
npx prodlint --sarif                      # SARIF 2.1.0 for GitHub Code Scanning
npx prodlint --summary                    # Quick pass/fail + top 3 blockers
npx prodlint --profile startup            # Only critical findings
npx prodlint --profile strict             # All findings including info
npx prodlint --baseline .prodlint-baseline.json   # Only new findings
npx prodlint --ignore "*.test.ts"         # Ignore patterns
npx prodlint --min-severity warning       # Only warnings and criticals
npx prodlint --quiet                      # Suppress badge output

Or install it:

npm i -D prodlint     # Project dependency
npm i -g prodlint     # Global install

52 Rules across 4 Categories

Security (27 rules)

RuleWhat it checks
secretsAPI keys, tokens, passwords hardcoded in source
auth-checksAPI routes with no authentication
env-exposureNEXT_PUBLIC_ on server-only secrets
input-validationRequest body used without validation
cors-configAccess-Control-Allow-Origin: *, wildcard + credentials escalated to critical
unsafe-htmldangerouslySetInnerHTML with user data
sql-injectionString-interpolated SQL queries (ORM-aware)
open-redirectUser input passed to redirect()
rate-limitingAPI routes with no rate limiter
phantom-dependencyPackages in node_modules but missing from package.json
insecure-cookieSession cookies missing httpOnly/secure/sameSite
leaked-env-in-logsprocess.env.* inside console.log calls
insecure-randomMath.random() used for tokens, secrets, or session IDs
next-server-action-validationServer actions using formData without Zod/schema validation
env-fallback-secretSecurity-sensitive env vars with hardcoded fallback values
verbose-error-responseError stack traces or messages leaked in API responses
missing-webhook-verificationWebhook routes without signature verification
server-action-authServer actions with mutations but no auth check
eval-injectioneval(), new Function(), dynamic code execution
next-public-sensitiveNEXT_PUBLIC_ prefix on secret env vars
ssrf-riskUser-controlled URLs passed to fetch in server code
path-traversalFile system operations with unsanitized user input
unsafe-file-uploadFile upload handlers without type or size validation
supabase-missing-rlsCREATE TABLE in migrations without enabling RLS
deprecated-oauth-flowOAuth Implicit Grant (response_type=token)
jwt-no-expiryJWT tokens signed without an expiration
client-side-auth-onlyPassword comparisons or auth logic in client components

Reliability (11 rules)

RuleWhat it checks
hallucinated-importsImports of packages not in package.json
error-handlingAsync operations without try/catch
unhandled-promiseFloating promises with no await or .catch
shallow-catchEmpty catch blocks that swallow errors
missing-loading-stateClient components that fetch without a loading state
missing-error-boundaryRoute layouts without a matching error.tsx
missing-transactionMultiple Prisma writes without $transaction
redirect-in-try-catchredirect() inside try/catch — Next.js redirect throws, catch swallows it
missing-revalidationServer actions with DB mutations but no revalidatePath
missing-useeffect-cleanupuseEffect with subscriptions/timers but no cleanup return
hydration-mismatchwindow/Date.now()/Math.random() in server component render path

Performance (6 rules)

RuleWhat it checks
no-sync-fsreadFileSync in API routes
no-n-plus-oneDatabase calls inside loops
no-unbounded-query.findMany() / .select('*') with no limit
no-dynamic-import-loopimport() inside loops
server-component-fetch-selfServer components fetching their own API routes
missing-abort-controllerFetch/axios calls without timeout or AbortController

AI Quality (8 rules)

RuleWhat it checks
ai-smellsany types, console.log, TODO comments piling up
placeholder-contentLorem ipsum, example emails, "your-api-key-here" left in production code
hallucinated-api.flatten(), .contains(), .substr() — methods AI invents
stale-fallbacklocalhost:3000 hardcoded in production code
comprehension-debtFunctions over 80 lines, deep nesting, too many parameters
codebase-consistencyMixed naming conventions across the project
dead-exportsExported functions that nothing imports
use-client-overuse"use client" on files that don't use any client-side APIs

Smart Detection

prodlint avoids common false positives:

  • AST parsing — Babel-based analysis for 12 rules (imports, catch blocks, redirects, SSRF, path traversal, JWT, HTML injection, hydration, transactions, env leaks, loops, SQL) with regex fallback
  • Monorepo support — npm/yarn/pnpm workspace dependencies resolved automatically
  • Framework awareness — Prisma, Drizzle, Supabase, Knex, and Sequelize whitelists prevent false SQL injection flags
  • Middleware detection — Clerk, NextAuth, Supabase middleware detected — auth findings downgraded
  • Block comment awareness — patterns inside /* */ are ignored
  • Path alias support — @/, ~/, and tsconfig paths aren't flagged as hallucinated imports
  • Route exemptions — auth, webhook, health, and cron routes are exempt from auth/rate-limit checks
  • Test/script file awareness — lower severity for non-production files
  • Fix suggestions — findings include actionable fix hints with remediation code

Scoring

Each category starts at 100. Deductions per finding:

SeverityDeductionPer-rule cap
critical-8max 1
warning-2max 2
info-0.5max 3

Diminishing returns: after 30 points deducted in a category, further deductions are halved; after 50, quartered.

Weighted overall: security 40%, reliability 30%, performance 15%, ai-quality 15%. Floor at 0. Exit code 1 if any critical findings exist.

GitHub Action

Add to .github/workflows/prodlint.yml:

name: Prodlint
on: [pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: prodlint/prodlint@v1
        with:
          threshold: 50

Posts a score breakdown as a PR comment and fails the build if below threshold.

InputDefaultDescription
path.Path to scan
threshold0Minimum score to pass (0-100)
ignoreComma-separated glob patterns to ignore
commenttruePost PR comment with results
OutputDescription
scoreOverall score (0-100)
criticalNumber of critical findings

SARIF + GitHub Code Scanning

Upload prodlint results to GitHub's Security tab:

- name: Run prodlint
  run: npx prodlint --sarif > prodlint.sarif

- name: Upload SARIF
  uses: github/codeql-action/upload-sarif@v4
  with:
    sarif_file: prodlint.sarif
    category: prodlint

Baseline for Existing Projects

Adopt prodlint gradually without drowning in pre-existing findings:

# Save current state as baseline
npx prodlint --baseline-save .prodlint-baseline.json

# CI only fails on NEW findings
npx prodlint --baseline .prodlint-baseline.json

MCP Server

Use prodlint inside Cursor, Claude Code, or any MCP-compatible editor:

Claude Code:

claude mcp add prodlint -- npx -y -p prodlint prodlint-mcp

Cursor / Windsurf:

{
  "mcpServers": {
    "prodlint": {
      "command": "npx",
      "args": ["-y", "-p", "prodlint", "prodlint-mcp"]
    }
  }
}

-p prodlint runs the MCP server straight from the prodlint package, so you always get the current scanner.

Ask your AI: "Run prodlint on this project" and it calls the scan tool directly.

Site Score

Check any deployed website for AI agent-readiness — 14 checks covering emerging standards like llms.txt, TDMRep, AgentCard, AI-Disclosure, HTTP Signatures (RFC 9421), and more.

npx prodlint --web example.com
npx prodlint --web example.com --json     # JSON output
  prodlint site score
  example.com · 14 checks

  Score: 42 C  ████████░░░░░░░░░░░░

  ✗ AI-Disclosure Header          0/10  No AI-Disclosure header found.
  ✗ Content-Usage Directives      0/10  No Content-Usage directives found.
  ✗ TDMRep                        0/10  No TDMRep found.
  ✗ A2A AgentCard                  0/5  No agent-card.json found.
  ✗ ai.txt                         0/5  No ai.txt found at site root.
  ! llms.txt                       2/5  llms.txt found but missing key sections.
  ✓ robots.txt                   10/10  robots.txt found with 15 rules.
  ✓ Sitemap                      10/10  Valid sitemap with 42 URLs.
  ✓ Structured Data              10/10  Found JSON-LD structured data.
  ✓ OpenGraph                    10/10  Complete OpenGraph tags found.
  ✓ Page Speed                    5/5   Loaded in 0.8s.
  ✓ AI Bot Directives             5/5   AI-specific bot rules found.
  ✓ WebMCP Tools                   0/5  No WebMCP tools detected.

  7 passed · 5 failed · 1 warnings

  Full results: https://prodlint.com/score?url=example.com

Or check your score interactively at prodlint.com/score.

For AI Tools

prodlint is designed specifically for AI-generated code patterns. Every rule checks for production issues that AI coding tools consistently create — not style nits.

Suppression

Suppress a single line:

// prodlint-disable-next-line secrets
const key = "sk_test_example_for_docs"

Suppress an entire file (place at top):

// prodlint-disable secrets

Programmatic API

import { scan } from 'prodlint'

const result = await scan({ path: './my-project' })
console.log(result.overallScore) // 0-100
console.log(result.findings)     // Finding[]

Badge

[![prodlint](https://img.shields.io/badge/prodlint-85%2F100-brightgreen)](https://prodlint.com)

License

MIT

Related MCP servers

ASASOHawk logo

ASOHawk

Active

App Store optimization analytics and metadata management for iOS developers, powered by AI agents.

11
View repository →
PRProdPoke logo

ProdPoke

Maintained

AI QA tester — real browsers scan sites for bugs, SEO, perf, and accessibility issues via chat.

1
MIT
View repository →

Score and value collectible Telegram usernames: namability 0-100, fair price, thesis. No API key.

0
JavaScript
MIT
View repository →

Behavioral therapy for AI agents — self-diagnosis, alignment, and training via MCP

1
TypeScript
MIT
View repository →
POPostlyra logo

Postlyra

Active

Manage Telegram drafts, media, schedules and publications from AI clients.

0
JavaScript
View repository →

MCP security trust-check for agents before installing MCPs, Skills or tools.

0
JavaScript
View repository →