Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Free bar for digital product briefs: your model judges, open rules and code score it.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://briefs.welance.com/mcpพิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http perfect-brief https://briefs.welance.com/mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"perfect-brief": {
"url": "https://briefs.welance.com/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"perfect-brief": {
"type": "http",
"url": "https://briefs.welance.com/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://briefs.welance.com/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ชื่อและคำอธิบายเครื่องมือตามที่ server ตอบมาเมื่อ 7 พ.ย. 2569 ผู้ทำเป็นคนเขียน ไม่ใช่เรา แสดงเป็นข้อความล้วน
get_rulesRead the bar before judging anything. Free; no model runs. Returns the live catalogue with its version: every rule's id, title, criteria (what the judge reads), weight, gate role, policy context and how to pass it, plus the arithmetic — status scores, confidence threshold, accept
get_brief_templateA brief template built from the live rules, with the inputs each section needs. Use it to start a brief from nothing, or to see which section a gap belongs in. Markdown, one section per rule, gate rules marked; write in any language.
get_judge_promptThe judge prompt and verdict JSON Schema, for YOUR model to answer. Free. This is the service judge's own prompt, word for word, so your model grades against the same bar. Pass the brief to get it embedded, or leave it empty for a template with a {{BRIEF}} placeholder. Answer the
get_improvement_promptA working order for improving a brief with your own model, gate first. Pass the verdicts you already have (the JSON array from your model) to target the failing rules in weight order; without them the prompt walks every rule. The prompt keeps the author's voice and forbids invent
check_briefDeterministic checks only — semantic coverage is INCOMPLETE. Never a score. Finds what a pattern can find for certain: emails, URLs and phone numbers (which block anonymisation), a stated budget and timeline, personal-data cues without a compliance cue, unfilled placeholders, the
aggregate_verdictsTurn your model's verdicts into the bar's score, gate and decision. Advisory. Validates the verdicts against the live ruleset (every rule exactly once, valid status and confidence, the version you judged at) and against the brief (each quote must be copied verbatim), then aggrega
bar_statusWhich ruleset version is live, and what this free surface can do. Confirms the mode (bring your own model, zero provider calls, no fallback to welance's model) and the tools available.
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันโดเมน welance.com แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตอบกลับใน 191 ms (HTTP 200)
ไม่ต้องล็อกอิน
อ่านคำอธิบายเครื่องมือ 7 ตัวแล้ว ไม่พบคำสั่งแอบแฝงถึง AI
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.14.1) เข้า registry 10 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, EmbeddedCI BenchPod
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
briefs.welance.com)| [Welance Directory](https://welance.com/directory) | guided brief builder and marketplace powered by this scoring service |
| [Brief Bar](https://briefs.welance.com/) | what the service does · [console](https://briefs.welance.com/console.html) · [rules](https://briefs.welance.com/rules.html) |
| [API docs](https://briefs.welance.com/docs) | OpenAPI, every field described |
| [Integrate](https://briefs.welance.com/integrate.html) | four routes into your workflow: console · prompt · MCP · API |
| [Your brief, your key](https://briefs.welance.com/data.html) | what travels where, what we keep, and how to bring your own key |
| [Privacy](https://briefs.welance.com/privacy.html) · [Terms](https://briefs.welance.com/terms.html) | the hosted service and its MCP connector: who runs it, what is kept and for how long, fair use |
| [llms.txt](https://briefs.welance.com/llms.txt) | the bar, written for machines — point your assistant at it |
Eight languages, no build step, no tracking. Same origin serves the pages and the API.
Scores a digital product brief against an open, versioned ruleset. The score says *how good* a brief is; a separate gate says *whether it may publish*. An LLM only ever judges (server-side, key never leaves the box); deterministic code owns every number, the gate, and the decision.
The product target is a brief that makes expectations explicit and open to discussion, so client and supplier can understand whether and how to work together before committing. See the product decision and audit of current rule coverage. The audit identifies proposed improvements; it does not change current scoring.
This repo is the service. The ruleset + engine live inside it as an installable package (brief_bar/) so they can later be split into their own OSS repo and consumed here as a pinned dependency — the seam is already drawn.
brief_bar/ the open ruleset + deterministic engine (the OSS core)
rules/*.yaml 14 rules, weights sum to 100, ★ = gate requirement scoring.yaml the €10k floor, the 4-requirement gate (anonymised is directory-context, deactivatable), the bands score.py weighted average + gate + decision (no model here) judge.py MockJudge (keyword, offline) + LLMJudge protocol llm.py batched-judge & suggestion prompts (versioned with rules) fixtures/*.yaml labelled briefs = the regression corpus / CI immune system app/ the FastAPI service main.py routes, rate limit, CORS; mounts site/ at / scorer.py mock/LLM orchestration + Redis verdict cache site/ THE public pages: landing, console, rules — served both by GitHub Pages and by the service itself (one surface) CLAUDE.md · PLAN.md bootstrap + phased mission for an agentic coding session GOVERNANCE.md · CONTRIBUTING.md · CODEOWNERS · LICENSE the open-bar machinery (MIT) docker-compose.yml api + redis (the only stateful dependency: ephemeral cache)
cp .env.example .env # add a spend-capped PB_OPENROUTER_API_KEY
make up # docker compose up --build -d (api + redis) make health # GET /v1/healthz open http://localhost:8000 # the console (mock judge works with no key)
Without an API key the service runs mock-only (instant keyword engine, fully deterministic) — enough to develop against and to run the whole test suite. Add the key to unlock the llm judge and /v1/suggest.
The console can import PDF, UTF-8 TXT and Markdown documents up to 10 MB (10,000,000 bytes). Text extraction runs locally using the vendored PDF.js display API and worker; the original file is not uploaded. Review the extracted text before explicitly scoring with AI. Imported-document scoring sets no_cache: true.
The API's separate text limit defaults to 1,000,000 characters (PB_REQUEST_MAX_CHARS). Existing environment overrides still apply. Provider context limits may be lower; a successful import does not guarantee that every model can judge the document. Text is never silently truncated or summarised. PDF extraction is limited to 1,000 pages and 60 seconds; pages without extractable text, password-protected PDFs and malformed files are refused. Run OCR or remove blank pages before import when needed. There is no multipart/file storage API.
POST /v1/score
{ "brief": "…", "locale": "it", "judge": "mock" } // judge: "mock" | "llm"
{ "score": 92.0, "band": "Directory-ready", "decision": "blocked",
"decision_label": "Blocked — hard requirements unmet", "gate": { "passed": false, "missing": ["anonymised"] }, "verdicts": [ { "rule_id": "anonymised", "status": "fail", "confidence": 0.8, "quote": "Stripe … mara@acme.it", "note": "identifying info present", "weight": 8, "severity": "high", "gate": "pass" }, … ], "review_required": false, "low_confidence": [], "ruleset_version": "1.0.0+83107baec655", "engine": "brief-bar@1.0.0+83107baec655", "judge": "mock", "cached": false }
The `ruleset_version` is your audit trail: it pins exactly which bar judged a
brief, and every verdict carries a verbatim quote from the brief as evidence — inspectable by a human long after any particular model is gone. (The mock judge is reproducible forever; the LLM judge runs at temperature 0 and is cached by (ruleset_version, model, brief), but temperature 0 is not a determinism guarantee across provider updates — the quotes are the part of the trail that never expires.)
Welance uses OpenRouter (PB_OPENROUTER_API_KEY). Publish scoring runs on deepseek/deepseek-v4-pro; interactive suggestion generation runs on google/gemini-3.1-flash-lite. Self-hosters may still configure the optional direct-Anthropic adapter, but it is not part of the Welance deployment. With OpenRouter, requests may pick a model from the server's allowlist (PB_OPENROUTER_MODELS, exact vendor-prefixed slugs, comma-separated); anything else is rejected with 422. The resolved model is returned in every score for a reproducible audit trail. Suggestion generation may use a lower-latency model selected by PB_SUGGEST_MODEL. Single-rule suggestions are editable human choices and default to one generation call; set PB_SUGGEST_VERIFY=true to restore a second LLM review. The authoritative score and the multi-gap repair loop keep their verification behavior. Suggestion responses name their verifier model when one ran. The service reuses its OpenRouter connection pool and applies separate bounded output ceilings (PB_SUGGEST_MAX_TOKENS, PB_SUGGEST_ALL_MAX_TOKENS, and PB_VERIFIER_MAX_TOKENS) because short suggestion JSON does not need the judge's larger allowance. Successful service-funded suggestions are cached; BYOK calls always bypass that shared cache.
The judge normally asks for all fourteen verdicts in one provider call. PB_JUDGE_BATCH_SIZE=5 instead runs deterministic 5/5/4 rule batches with at most PB_JUDGE_CONCURRENCY=3 calls in flight, then merges them before the same deterministic aggregation. It is an operational latency option, not a scoring mode: any incomplete or failed batch refuses the entire score. Keep it at its default 0 until the live make test-llm-batching comparison has passed for the deployed model.
Bring your own key: send X-LLM-Key: and the call runs on your key — any valid OpenRouter model slug is allowed unless this deployment sets PB_BYOK_MODELS (you pay), used per request, never stored or logged. BYOK scoring deliberately bypasses the shared verdict cache, so the supplied key always funds a fresh call. Use a spend-capped key. The console exposes this as an optional field in live mode.
Sending a key to somebody else's server deserves more than that paragraph. Every line that touches it, where it provably is not, and the honest limits are at briefs.welance.com/security.html; the claim is enforced by tests/test_byok_leak.py, which fails if the key ever reaches a log, a cache write, or a response.
Other endpoints:
POST /v1/suggest {brief, rule_id, locale, model?} → tailored fixes for one gap (LLM).POST /v1/suggest/all {brief, rule_ids?, locale, model?} → one fix per failing gap; omit rule_ids to auto-detect (LLM).GET /v1/rules → the full catalogue (id, title, weight, gate, criteria, references) for the directory UI.GET /v1/models → the enabled judge models (default + available) for a model picker.GET /v1/healthz → service release, ruleset version, engine + LLM availability.GET / → the interactive console.Suggestion responses include X-PB-Generation-Ms, X-PB-Verification-Ms, X-PB-Cached, X-PB-Cache-Ms, X-PB-Model, and the standard Server-Timing header, so callers can distinguish model latency from network/UI latency without exposing prompts or document contents. /v1/healthz also reports whether the optional Redis cache/rate-limit store is currently connected.
https://briefs.welance.com/mcp is a free remote MCP server (Streamable HTTP, stateless JSON). No model of ours runs. Your assistant's own model judges the brief with the service judge's own prompt; the bar's code validates those verdicts and does the arithmetic with the same engine as /v1/score.
| tool | what it does |
|---|---|
get_rules | the live catalogue: criteria, weights, gate, policy contexts, status scores, bands, version |
get_brief_template | a Markdown brief built from the live rules, with the inputs each section needs |
get_judge_prompt | the judge prompt (word for word the service's) + the verdict JSON Schema, for your model |
get_improvement_prompt | a gate-first working order for your model to improve the brief |
check_brief | deterministic checks only (contacts, stated budget/timeline, data cues, placeholders) — semantic coverage is incomplete, never a score |
aggregate_verdicts | validates your model's verdicts (every rule once, verbatim quotes, live version) and aggregates them |
bar_status | live ruleset version and capabilities |
Also as prompts (score_with_your_model — the whole workflow, gate first — judge_brief, improve_brief, brief_template) and resources (perfect-brief://rules, …/template, …/judge-prompt, …/verdict-schema). The same contract is plain HTTP at /v1/byo/* (see /docs).
Advisory, never authority. An aggregated result is tagged evaluation_source: "client", authoritative: false, with the ruleset version, evidence errors and pattern conflicts, and a *Find a team on welance/directory →* link (PB_DIRECTORY_URL). It cannot authorise publication: the welance/directory scores every brief itself on /v1/score.
Claude (claude.ai, Desktop): Settings → Connectors → *Add custom connector* → https://briefs.welance.com/mcp. Claude Code:
claude mcp add --transport http perfect-brief https://briefs.welance.com/mcp
ChatGPT: Settings → Apps & Connectors → Advanced → enable developer mode → *Create* → URL https://briefs.welance.com/mcp, no authentication (availability depends on the plan).
Cursor (~/.cursor/mcp.json or .cursor/mcp.json):
{ "mcpServers": { "perfect-brief": { "url": "https://briefs.welance.com/mcp" } } }
VS Code (.vscode/mcp.json, or *MCP: Add Server…* → HTTP):
{ "servers": { "perfect-brief": { "type": "http", "url": "https://briefs.welance.com/mcp" } } }
Local (stdio) — same tools, f
ตัดมาแค่ช่วงต้น อ่านต่อใน repo