Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Wraps any MCP server: identical write-tool calls run once, and every tool call is audit-logged.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"agentraas": {
"command": "uvx",
"args": [
"agentraas",
"wrap",
"--"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add agentraas -- uvx agentraas wrap --ตัวนี้ต้องใส่ค่าในคำสั่งเปิดเอง ให้คัดลอกค่าตั้งแล้วเติมค่า
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"agentraas": {
"command": "uvx",
"args": [
"agentraas",
"wrap",
"--"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้ต้องใส่ค่าในคำสั่งเปิดเอง ให้คัดลอกค่าตั้งแล้วเติมค่า
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"agentraas": {
"type": "stdio",
"command": "uvx",
"args": [
"agentraas",
"wrap",
"--"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub agentraas ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.16.0) เข้า registry 6 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Dechonet 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.
30 security tools for AI agents: phishing links, exposure maps, DNS, SSL, PQC, history, pivots.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
The reliability layer for what AI agents do. Every action your agent takes (a charge, an email, a CRM update, a tool call) runs once even when it is retried, can be checked against rules before it runs, and is recorded. This package brings that to your code:
@exactly_once and protect_tool (LangChain/LangGraph, CrewAI): a retry, yours, your framework's or a flaky network's, never becomes a duplicate charge or message. No server needed.agentraas wrap: the same for any MCP server's write tools.agentraas scan: lists which tools in your MCP servers can move money, delete data, run code or send messages, without calling any of them.agentraas chaos: finds the calls in your agent that would double up under retries, before production does.Client: points your calls at an AgentRaaS server for action policies, human approval, spend caps, circuit breaking and an audit trail.Works against any AgentRaaS deployment: self-hosted (./install.sh, free and unlimited on every tier) or AgentRaaS Cloud.
pip install agentraas
Wrap any function that has a side effect (charging a card, sending an email, creating a CRM record) so retries and concurrent duplicates run it exactly once. Nothing to deploy: state lives in a local SQLite file by default, or in your own Redis.
from agentraas.local import exactly_once, RedisStore
@exactly_once() # SQLite file, one machine def charge(customer, amount): return stripe.Charge.create(customer=customer, amount=amount).id
charge("cus_1", 4200) # runs for real charge("cus_1", 4200) # retry: returns the cached id, no second charge
@exactly_once(store=RedisStore("redis://localhost:6379/0"), key=lambda order: order["id"], ttl=3600) async def ship(order): ...
idempotency_key parameter and send it to the provider (e.g. Stripe's Idempotency-Key header). The decorator fills it with the same value on every retry: @exactly_once()
def charge(customer, amount, idempotency_key=None): return stripe.Charge.create(customer=customer, amount=amount, idempotency_key=idempotency_key).id
- A duplicate that arrives while the first call is still running waits for
its result (up to wait=30 seconds, then InFlightError).
RedisStore needs pip install redis.When you want a dashboard, audit trail, human approval or circuit breaking on top, point the same calls at an AgentRaaS server with the Client below.
pip install "agentraas[langchain]", then wrap the tools that have side effects. Works with LangChain agents, create_react_agent and ToolNode.
from agentraas.langchain import protect_tool
tools = [protect_tool(charge_card), protect_tool(send_email), search] agent = create_react_agent(model, tools)
When the model calls a protected tool again with the same arguments, or the graph re-runs the tool node after a crash or retry, the stored result comes back instead of a second charge. Takes the same store=, key= and ttl= options as @exactly_once above (e.g. store=RedisStore(...) for several workers, key=lambda order_id, **_: order_id). Tool results must be JSON-serializable.
pip install "agentraas[crewai]" (CrewAI needs Python 3.10+), then wrap the tools that have side effects, either BaseTool subclasses or @tool functions:
from agentraas.crewai import protect_tool
agent = Agent(role="Billing", goal="...", backstory="...", tools=[protect_tool(ChargeCardTool()), protect_tool(send_email)])
When the agent calls a protected tool again with the same arguments, or a crew is kicked off again after a crash, the stored result comes back instead of a second charge. Same store=, key= and ttl= options as above. The original tool object is left unchanged.
Put agentraas wrap -- in front of an MCP server's command. Everything passes through unchanged, except that an identical call to a write tool (same tool, same arguments) inside the dedup window gets the first call's result back instead of running again. An agent that retries or loops can't send the same email or open the same issue twice. Every tool call is appended to an audit log.
Claude Desktop / Cursor config:
{
"mcpServers": { "github": { "command": "uvx", "args": ["agentraas", "wrap", "--", "npx", "-y", "@modelcontextprotocol/server-github"] } } }
readOnlyHint annotation decides, falling back to names like get_*, list_*, search_*. Override with --dedupe TOOL / --no-dedupe TOOL.isError: true) is not cached, so a retry runs for real.--ttl 600). State lives in ~/.agentraas/mcp-dedup.db, the log in ~/.agentraas/mcp-audit.jsonl (--db, --log)._meta: {"agentraas/deduplicated": true}.agentraas scan # every server in your Claude Desktop, Cursor, Claude Code configs
agentraas scan -- npx -y @modelcontextprotocol/server-github agentraas scan --config .mcp.json --fail-on high # CI: exit 1 on a high-risk tool
Starts each stdio server the way your client does, sends only initialize and tools/list, and sorts the tools: moves money, deletes, runs code, sends (high), writes (medium), reads (low), from their readOnlyHint/destructiveHint annotations and the words in their names. Only scan configs you trust: it runs their commands. --json for machine-readable output. https://agentraas.io/mcp-scan
GitHub Actions:
- uses: agentraas/agentraas/src/scan-action@main
with: config: .mcp.json # or command: "npx -y @modelcontextprotocol/server-github"; fail-on: high | medium | none
agentraas-chaos sits between your code and an API. The first time each distinct write request (POST/PUT/PATCH/DELETE) arrives, it lets the request execute and then drops the response, the network failure that turns a retry into a double charge. Then it reports every action that executed more than once.
pip install agentraas
agentraas-chaos --mock -- python my_agent.py
agentraas-chaos --upstream https://api.stripe.com -- pytest
Your command gets AGENTRAAS_CHAOS_URL (e.g. http://127.0.0.1:8787); use it as the API base URL. Without a command it runs until Ctrl-C, so you can point an n8n workflow or any other tool at it by hand.
agentraas-chaos: 6 write requests, 3 responses dropped after execution
DUPLICATES: 1 action(s) executed more than once
2x POST /v1/charges (body sha256 623f14d1b00d) ... Protected by an idempotency key: 2 retries
It exits with code 1 when it finds a duplicate, so it can fail CI. --fault error-after-commit returns a 502 instead of dropping the connection. A retry that repeats an Idempotency-Key it has already seen is counted as protected, not executed again.
In GitHub Actions:
- uses: actions/setup-python@v5
with: { python-version: "3.12" }
agentraas applyDescribe a server's dedup rules, validation rules, action policies and spend caps in YAML, review them like code, and apply them from CI:
pip install "agentraas[apply]"
# agentraas.yaml
apiVersion: agentraas.io/v1alpha1 kind: DedupRule metadata: {name: charge-once, org: org_acme} spec: {service: stripe, action: charges.create, fields: [customer, amount], ttlSeconds: 300}
apiVersion: agentraas.io/v1alpha1 kind: SpendCap metadata: {org: org_acme} spec: {service: stripe, action: refunds.create, window: day, maxCalls: 100, onExceed: block}
export AGENTRAAS_URL=https://agentraas.example.com AGENTRAAS_EMAIL=ci@acme.com AGENTRAAS_PASSWORD=...
agentraas apply -f agentraas.yaml --dry-run # print the plan agentraas apply -f agentraas.yaml # create what's missing, replace what changed agentraas apply -f agentraas.yaml --prune # also delete rules the file doesn't list
Kinds: DedupRule, ValidationRule, ActionPolicy, SpendCap. Spec keys are the API's fields in camelCase. Running it twice changes nothing.
agentraas tunnel prints a public URL and replays every request sent to it against a local port, so you can point Stripe, GitHub or n8n webhooks at code you haven't deployed. Needs a free AgentRaaS account (an agent API key).
pip install "agentraas[tunnel]"
agentraas tunnel --port 3000 --org org_acme --agent agent_1 --key ar_live_...
One tunnel per org, 2-hour sessions, 30-second local response timeout.
agentraas callEvery command also runs under the short name agtrs. call sends one action through an AgentRaaS server and prints the answer as JSON: the same dedup, policies, approvals and audit as the Client. Handy for scripts and for checking a rule by hand.
export AGENTRAAS_KEY=ar_live_... AGENTRAAS_ORG=org_acme AGENTRAAS_AGENT=agent_1
export AGENTRAAS_URL=https://agentraas.io # default http://localhost:13000 agtrs call stripe charge.create '{"amount": 4999, "currency": "usd"}' echo '{"text": "hi"}' | agtrs call slack message.post -
--key, --org, --agent, --url and --idempotency-key override the environment. A rejected call prints the error and its hints and exits 1.
The same list as the dashboard's Waiting for approval, for any org you can write to. Logs in like apply (AGENTRAAS_EMAIL / AGENTRAAS_PASSWORD against AGENTRAAS_URL, default https://agentraas.io).
agtrs approvals # req id, service, action, agent, payload
agtrs approve req_abc123 # runs the call; asks first (--yes to skip) agtrs deny req_abc123
approve exits 1 if the call ran and failed (it is then in Failed requests). Without a terminal it refuses unless --yes is passed, so a script never approves by accident.
Every call in the orgs you belong to, newest first, with the same login as approvals:
agtrs audit # last 50: time, status, service action, agent, org, duration, req id, error
agtrs audit -n 200 --json # adds run/step ids, dedup hash, redacted payload preview (max 1,000) agtrs audit --csv > audit.csv # the dashboard's CSV export (newest 10,000)
Calls that failed and were kept (the dashboard's Failed requests), with the same login as approvals:
agtrs dlq # id, time, service action, agent, org, req id, error
agtrs dlq replay 42 # sends the call again with the same idempotency key; asks first (--yes to skip) agtrs dlq dismiss 42 # drop it without sending
replay exits 1 if the service fails again; the entry stays in the list.
agtrs rules prints the rules alr
ตัดมาแค่ช่วงต้น อ่านต่อใน repo