Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Production readiness for vibe-coded apps. 52 checks for security, reliability, and performance.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"prodlint": {
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}在终端中运行这条命令
claude mcp add prodlint -- npx -y prodlint-mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"prodlint": {
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"prodlint": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"prodlint-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 prodlint 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.10.6)于6天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, MCP Server Autocad Lisp Helper
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
High-precision static analysis and debug server for AutoCAD AutoLISP (.lsp) files.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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
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.
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
| 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 |
| 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 |
| 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 |
| 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 |
prodlint avoids common false positives:
middleware.ts, or proxy.ts on Next.js 16) detected — auth findings downgraded/* */ are ignored@/, ~/, and tsconfig paths aren't flagged as hallucinated importsfix hints with remediation codeEach 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.
Add to .github/workflows/prodlint.yml:
name: Prodlint
on: [pull_request]
jobs: scan: runs-on: ubuntu-latest steps:
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 |
Upload prodlint results to GitHub's Security tab:
- name: Run prodlint
run: npx prodlint --sarif > prodlint.sarif
Adopt prodlint gradually without drowning in pre-existing findings:
# Save current state as baseline
npx prodlint --baseline-save .prodlint-baseline.json
npx prodlint --baseline .prodlint-baseline.json
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.
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
只显示了开头部分;其余内容请在仓库中阅读