Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Local Laya and Von typed decisions over TypeSafe-compatible MCP.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"decidealot": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/decidealot:v0.7.1"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add decidealot -- docker run -i --rm docker.io/psyb0t/decidealot:v0.7.1วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"decidealot": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/decidealot:v0.7.1"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"decidealot": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/decidealot:v0.7.1"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub psyb0t ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.7.1) เข้า registry 30 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Fomu MCP
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.
Kenya government form guides: checklists, draft letters, eCitizen, Huduma, timelines. Sample data.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Your hardware or TypeSafe's hosted Jev. Run Laya, Von, a CLM projection head, or Jev through one TypeSafe-compatible HTTP and MCP endpoint.
At startup Decidealot downloads and verifies every enabled local bundle. It then loads only the provider selected by a request, unloads it after the configured idle period, and returns typed choice, score, and noul answers with model probabilities. CLM adds a small local projection head over one configured Qwen3-8B embeddings endpoint. It exposes the TypeSafe HTTP API and MCP Streamable HTTP from the same local container.
You need Docker. This starts the CPU image on loopback, stores downloaded model files in one narrow host directory, and gives the container no capabilities or writable root filesystem.
model_directory="$HOME/.local/share/decidealot/models"
runtime_uid=$(id -u) runtime_gid=$(id -g) mkdir --parents "$model_directory"
docker run --detach --name decidealot --init --restart unless-stopped \ --user "$runtime_uid:$runtime_gid" \ --read-only --cap-drop ALL --security-opt no-new-privileges:true \ --pids-limit 512 --memory 8g --cpus 4 \ --tmpfs /tmp:rw,noexec,nosuid,size=128m \ --tmpfs /var/run:rw,noexec,nosuid,size=8m \ --log-driver json-file --log-opt max-size=10m --log-opt max-file=5 \ --mount type=bind,source="$model_directory",target=/models \ --publish 127.0.0.1:8080:8080 \ psyb0t/decidealot:latest
Check the service, then ask Laya to make one typed decision:
curl --fail http://127.0.0.1:8080/health
curl --fail http://127.0.0.1:8080/v1/systemone \ --header 'Content-Type: application/json' \ --data '{ "model": "laya", "state": "A proposed action would permanently delete protected data.", "questions": { "handling": { "type": "choice", "instructions": "Choose the required handling for this action.", "criteria": { "allow": "The action is reversible and does not affect protected data.", "require_review": "The action is irreversible or affects protected data." } } } }'
The first service startup downloads the enabled pinned model bundles and can take several minutes. The default configuration enables Laya and Von. Wait for /health before sending a decision. Later service starts reuse the same host directory.
An example response looks like this. The answer, probabilities, and token count vary with the model call:
{
"model": "laya", "answers": { "handling": { "type": "choice", "choice": "require_review", "confidence": 0.94, "probabilities": {"allow": 0.06, "require_review": 0.94} } }, "usage": {"input_tokens": 91, "output_tokens": 0} }
For that result, your application queues the action for human review instead of running it. Decidealot does not perform the action. Your caller checks the chosen label and applies its own probability threshold, for example allowing an action only when choice is allow and probabilities.allow is at least 0.95.
Set DECIDEALOT_TYPESAFE_API_KEY in a private environment file or secret store. Jev enables automatically when the key is present. Call GET /v1/models and select a hosted name returned by TypeSafe, such as jev-latest. Decidealot caches the authenticated TypeSafe catalog for 60 seconds and refreshes it on the next model-listing or hosted-model request after expiry. New hosted model names need no Decidealot release. It sends the complete state and questions to TypeSafe's fixed HTTPS API, not to a local model. The key never belongs in the request body, a tracked file, or a client-side application.
For a Jev-only container, disable all local models so startup downloads no model bundles. Pass the upstream key as an environment variable from your secret store, then use the same REST or MCP endpoint shown below:
docker run --detach --name decidealot --init --restart unless-stopped \
--read-only --cap-drop ALL --security-opt no-new-privileges:true \ --tmpfs /tmp:rw,noexec,nosuid,size=128m \ --env DECIDEALOT_TYPESAFE_API_KEY \ --env DECIDEALOT_LAYA_ENABLED=false \ --env DECIDEALOT_VON_ENABLED=false \ --publish 127.0.0.1:8080:8080 \ psyb0t/decidealot:latest
The variable must already be set in the shell or supplied by your container manager. GET /v1/models confirms which Jev selectors are enabled. The API guide has a complete request and response example. TypeSafe charges for its API calls; model probabilities still need your own action thresholds.
Send the state to judge and a bounded question. Decidealot returns typed results with probabilities.
| Endpoint | What it does |
|---|---|
POST /v1/systemone | Runs the selected local model or hosted Jev against state and returns typed answers. |
POST /v1/systemone/batch | Runs independent System One requests and returns an ordered results list. |
GET /v1/models | Lists every supported alias and the model behind it. |
POST /v1/models/unload | Stops loaded local providers; hosted Jev is unaffected. |
/mcp | MCP Streamable HTTP, with system_one, system_one_batch, list_models, and unload_models tools. |
GET /health | Reports whether configured local bundles are ready. Jev-only startup has no bundle download. |
choice questions need named criteria. score questions need an ordered criteria array whose position is the score. noul questions return a probability between zero and one. The API guide has the request rules, response shape, validation failures, aliases, authentication, and lifecycle behavior.
Put the subject in state, the question and decision rules in each question's instructions, and explicit descriptions in criteria. A label like review does not explain what should be reviewed. For noul, write the statement whose probability you want in instructions.
CLM accepts optional flat request configuration. The selected model already identifies which settings apply:
{
"model": "clm", "config": {"temperature": 0.8}, "state": "The operation permanently removes protected data.", "questions": { "review": { "type": "noul", "instructions": "This operation requires human review because it removes protected data." } } }
CLM temperature defaults to 1 and accepts finite numbers greater than 0 and at most 100. Lower values sharpen its probability distribution; they do not make the answer more correct. Laya, Von, and hosted Jev currently accept only omitted or empty config. Unsupported keys and values return 422, never silently disappear. The same config belongs in MCP tool arguments or each individual batch request. Request configuration covers the contract.
The same container serves MCP Streamable HTTP at http://127.0.0.1:8080/mcp. The system_one tool takes the same model, state, and questions fields as POST /v1/systemone. system_one_batch takes a requests list, each item with those same fields. list_models returns the live catalog. unload_models releases local model memory. Direct loopback clients and containers using the decidealot Docker service name work by default.
Point an MCP client at that exact URL. Its configuration format varies, but the connection values are always equivalent to this:
{
"mcpServers": { "decidealot": { "url": "http://127.0.0.1:8080/mcp", "headers": { "Authorization": "Bearer your-token-here" } } } }
Omit the Authorization header only when DECIDEALOT_API_KEY is empty. The MCP tools return structured output matching the HTTP result bodies, so an agent can inspect probabilities before it chooses the next action. A client that only supports local stdio can use the optional OpenClaw bridge described in Agent integrations. The API guide has tool inputs, output shapes, session behavior, and failure behavior.
The MCP server keeps DNS-rebinding protection enabled. A proxy, tunnel, or public DNS name must be allowed explicitly. Add the exact public Host value to DECIDEALOT_MCP_ALLOWED_HOSTS. Browser-based MCP clients must also add their exact origin, including the scheme, to DECIDEALOT_MCP_ALLOWED_ORIGINS.
For a proxy that publishes https://mcp.example.net/mcp, put these values in the Compose .env file before docker compose up -d, or pass the same variables with docker run --env:
DECIDEALOT_API_KEY=replace-with-a-real-secret
DECIDEALOT_MCP_ALLOWED_HOSTS=127.0.0.1,127.0.0.1:*,localhost,localhost:*,[::1],[::1]:*,decidealot,decidealot:*,mcp.example.net DECIDEALOT_MCP_ALLOWED_ORIGINS=http://127.0.0.1:*,http://localhost:*,http://[::1]:*,https://mcp.example.net
Keep --publish 127.0.0.1:8080:8080 when a local reverse proxy terminates TLS. The proxy forwards the request unchanged with Host: mcp.example.net. After bearer authentication, Decidealot returns 421 for an untrusted host and 403 for an untrusted browser origin. Invalid or missing bearer credentials return 401 first. Do not disable this protection or allow a broad wildcard for an internet-facing endpoint.
Every request must name a selector. GET /v1/models returns the same catalog at runtime.
| Selector | What it runs | Pick it when |
|---|---|---|
laya, laya-auto, laya-latest | Laya with automatic checkpoint routing. | State may arrive in more than one language or script. |
laya-english | Laya's English checkpoint. | State is English and uses the Latin script. |
laya-multilingual | Laya's multilingual checkpoint. | State is in another language or script, including short Latin-script text that is not clearly English. |
laya-typed-decisions | Laya's checkpoint tuned for structured workflow decisions. | Your workload looks like repeated policy, routing, triage, or approval decisions. Validate it on your own cases first. |
von, von-latest, von-1.1, von-1.1.0 | The local English-only Von 1.1 model. | You want Von's independent result for a short, well-posed decision, or want to compare it with Laya before standardizing a workflow. |
clm, clm-latest, clm-0.1, clm-0.1-8b | The local CLM v0.1 projection head over one configured Qwen3-8B embeddings endpoint. | You have a trusted embeddings service that emits CLM-compatible 4096-wide last-token Qwen3-8B vectors. |
Names returned by TypeSafe, such as jev-latest | TypeSafe's hosted Jev API. | You have a TypeSafe API key and intend to send the state and questions to TypeSafe. |
Laya is one model family with three checkpoints. Its automati
ตัดมาแค่ช่วงต้น อ่านต่อใน repo