prodlint
ภาพรวม
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Production readiness for vibe-coded apps. 52 checks for security, reliability, and performance.
สามเสาของ PopNx MCP
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
- เสียงผู้ใช้iยังไม่มีรีวิวรีวิวเปิดพร้อมระบบบัญชีในขั้นถัดไป
- ผลตรวจเบื้องต้นของเราiผ่าน 1 จาก 1 ข้อตรวจจากข้อมูลที่เปิดอยู่ ยังไม่ได้สแกนโค้ด
- การใช้งานiเริ่มต้น↓ 539/สัปดาห์ · ★ –
ใช้ทำอะไรได้
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
- การเชื่อมต่อ: รันบนเครื่อง
- ช่องทาง (transport): stdio
- หมวด: ความปลอดภัยไซเบอร์
ติดตั้ง
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ก่อนติดตั้ง
- ผลตรวจเบื้องต้น: ผ่าน 1 จาก 1 ข้อ
- รันในเครื่องคุณด้วยสิทธิ์ของผู้ใช้คุณ (ไฟล์ อินเทอร์เน็ต แอปต่าง ๆ)
- ทะเบียนไม่ได้ระบุ key ที่ต้องใส่
ต้องเตรียมก่อน
- npmติดตั้ง Node.js (มีคำสั่ง npx) ในเครื่อง
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"prodlint": {
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add prodlint -- npx -y prodlint-mcpหรือคัดลอกค่าตั้งเอง
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"prodlint": {
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
หรือคัดลอกค่าตั้งเอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"prodlint": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ทำอะไรได้บ้าง
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
ผลตรวจเบื้องต้นi
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 10 พ.ย. 2569
- ✓ ผ่าน
ตัวตนผู้ทำตรงกับ repo
ชื่อใน registry ยืนยันด้วยบัญชี GitHub prodlint ซึ่งเป็นเจ้าของ repo
- … ยังไม่ตรวจ
ยังมีคนดูแล
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
- … ยังไม่ตรวจ
มีสัญญาอนุญาต (license)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
- – ไม่เกี่ยว
endpoint ตอบ
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
- – ไม่เกี่ยว
ล็อกอินแบบ OAuth
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
- … ยังไม่ตรวจ
คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับตัวอื่นในหมวด ความปลอดภัยไซเบอร์i
- ดาวมากกว่า 0% ของอีก 1014 ตัวในหมวดนี้
- ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 100% ของอีก 1014 ตัวในหมวดนี้
- ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 1014 ตัวในหมวดนี้
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
คำถามที่พบบ่อย
prodlint ปลอดภัยไหม?
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใช้กุญแจหรือรหัสอะไรบ้าง?
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
ตัวนี้รันบนเครื่องหรือบนคลาวด์?
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
ยังมีคนดูแลอยู่ไหม?
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.10.7) เข้า registry วันนี้
ใช้กับโปรแกรมไหนได้บ้าง?
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
มีตัวไหนใช้แทนได้บ้าง?
ในหมวดเดียวกันมี AutoPilot IT, WatchGuard MCP, AgentProof
ตัวที่ใช้แทนได้
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
WatchGuard MCP
WatchGuard Cloud Firebox, Endpoint Security, ThreatSync, NDR and AuthPoint APIs for every customer
AgentProof
Start AgentProof security audits of websites you own or may test, and read reports and findings.
README จากผู้ทำ
เปิดอ่าน README
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
prodlint
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.6
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)
| Rule | What it checks |
|---|---|
secrets | API keys, tokens, passwords hardcoded in source |
auth-checks | API routes with no authentication |
env-exposure | NEXT_PUBLIC_ on server-only secrets |
input-validation | Request body used without validation |
cors-config | Access-Control-Allow-Origin: *, wildcard + credentials escalated to critical |
unsafe-html | dangerouslySetInnerHTML with user data |
sql-injection | String-interpolated SQL queries (ORM-aware) |
open-redirect | User input passed to redirect() |
rate-limiting | API routes with no rate limiter |
phantom-dependency | Packages in node_modules but missing from package.json |
insecure-cookie | Session cookies missing httpOnly/secure/sameSite |
leaked-env-in-logs | process.env.* inside console.log calls |
insecure-random | Math.random() used for tokens, secrets, or session IDs |
next-server-action-validation | Server actions using formData without Zod/schema validation |
env-fallback-secret | Security-sensitive env vars with hardcoded fallback values |
verbose-error-response | Error stack traces or messages leaked in API responses |
missing-webhook-verification | Webhook routes without signature verification |
server-action-auth | Server actions with mutations or AI model calls but no auth check |
eval-injection | eval(), new Function(), dynamic code execution |
next-public-sensitive | NEXT_PUBLIC_ prefix on secret env vars |
ssrf-risk | User-controlled URLs passed to fetch in server code |
path-traversal | File system operations with unsanitized user input |
unsafe-file-upload | File upload handlers without type or size validation |
supabase-missing-rls | CREATE TABLE in migrations without enabling RLS |
deprecated-oauth-flow | OAuth Implicit Grant (response_type=token) |
jwt-no-expiry | JWT tokens signed without an expiration |
client-side-auth-only | Password comparisons or auth logic in client components |
Reliability (11 rules)
| Rule | What it checks |
|---|---|
hallucinated-imports | Imports of packages not in package.json |
error-handling | Async operations without try/catch |
unhandled-promise | Floating promises with no await or .catch |
shallow-catch | Empty catch blocks that swallow errors |
missing-loading-state | Client components that fetch without a loading state |
missing-error-boundary | Route layouts without a matching error.tsx |
missing-transaction | Multiple Prisma writes without $transaction |
redirect-in-try-catch | redirect() inside try/catch — Next.js redirect throws, catch swallows it |
missing-revalidation | Server actions with DB mutations but no revalidatePath |
missing-useeffect-cleanup | useEffect with subscriptions/timers but no cleanup return |
hydration-mismatch | window/Date.now()/Math.random() in server component render path |
Performance (6 rules)
| Rule | What it checks |
|---|---|
no-sync-fs | readFileSync in API routes |
no-n-plus-one | Database calls inside loops |
no-unbounded-query | .findMany() / .select('*') with no limit |
no-dynamic-import-loop | import() inside loops |
server-component-fetch-self | Server components fetching their own API routes |
missing-abort-controller | Fetch/axios calls without timeout or AbortController |
AI Quality (8 rules)
| Rule | What it checks |
|---|---|
ai-smells | any types, console.log, TODO comments piling up |
placeholder-content | Lorem ipsum, example emails, "your-api-key-here" left in production code |
hallucinated-api | .flatten(), .contains(), .substr() — methods AI invents |
stale-fallback | localhost:3000 hardcoded in production code |
comprehension-debt | Functions over 80 lines, deep nesting, too many parameters |
codebase-consistency | Mixed naming conventions across the project |
dead-exports | Exported 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 14 rules (imports, catch blocks, redirects, redirects in try/catch, SSRF, path traversal, JWT, HTML injection, hydration, transactions, env leaks, loops, SQL, route handlers) 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 (
middleware.ts, orproxy.tson Next.js 16) 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
fixhints with remediation code
Scoring
Each category starts at 100. Deductions per finding:
| Severity | Deduction | Per-rule cap |
|---|---|---|
| critical | -8 | max 1 |
| warning | -2 | max 2 |
| info | -0.5 | max 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 when the scan finds critical issues or the score is below threshold. Each release of the action runs its matching prodlint version, so pinning the action (@v1, a version tag, or a commit SHA) also pins the scanner.
| Input | Default | Description |
|---|---|---|
path | . | Path to scan |
threshold | 0 | Minimum score to pass (0-100) |
fail-on-critical | true | Fail when the scan finds critical issues; false reports them without failing |
ignore | Comma-separated glob patterns to ignore | |
comment | true | Post PR comment with results |
| Output | Description |
|---|---|
score | Overall score (0-100) |
critical | Number 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 prodlint-mcp
Cursor / Windsurf:
{
"mcpServers": { "prodlint": { "command": "npx", "args": ["-y", "prodlint-mcp"] } } }
prodlint-mcp is a thin launcher for the server built into prodlint. It's published with every prodlint release, so it always runs the matching scanner.
Ask your AI: *"Run prodlint on this project"* and it calls the scan tool directly.
| Tool | Inputs | Returns |
|---|---|---|
scan | path (project directory), optional ignore, minSeverity (critical / warning / info), categories, maxFindings (default 30) | Score, category scores, and findings most severe first. Every critical finding is listed, even past maxFindings. |
scan-web | url | Site score, grade, and the 14 agent-readiness checks |
Both tools return a Markdown summary plus structured output (structuredContent matching each tool's outputSchema), and both are marked read-only (readOnlyHint), which hosted reviewers such as GitHub Copilot code review require before they call an MCP tool.
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-Us
ตัดมาแค่ช่วงต้น อ่านต่อใน repo