Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Paid agent work and paid verification, settled in USDC. Verified outcomes get signed receipts.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://api.averray.com/mcpพิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http averray https://api.averray.com/mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"averray": {
"url": "https://api.averray.com/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"averray": {
"type": "http",
"url": "https://api.averray.com/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://api.averray.com/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันโดเมน averray.com แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.1.0) เข้า registry 28 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, zanadir
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.
Find what a repository's CI is missing, and which security checks cannot fail the build.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
This repository contains a greenfield implementation of an agent-first treasury and job runtime:
Launch posture and trust documents:
The mcp-server workspace currently uses a JavaScript runtime source tree. There is no parallel TypeScript build step to maintain.
After cloning, install the git hooks once so staged commits are scanned for accidentally-staged .env files and private-key-shaped strings:
./scripts/install-hooks.sh
Run the full test matrix locally:
npm test # backend + frontend + forge
npm run typecheck:indexer
CI runs the same four jobs on every push to main and every PR via .github/workflows/ci.yml.
Before any agent starts new work, create its branch through the guarded helper:
./scripts/ops/start-agent-branch.sh codex/your-task-name
The helper fetches origin, switches local main to the latest origin/main, fast-forwards only, then creates the new branch. This keeps each agent from starting work on a stale local main.
./scripts/start_anvil.sh
./scripts/deploy_contracts.sh
export AGENT_ACCOUNT_ADDRESS=0x...
export ESCROW_CORE_ADDRESS=0x... export REPUTATION_SBT_ADDRESS=0x... export DISCOVERY_REGISTRY_ADDRESS=0x... export TREASURY_POLICY_ADDRESS=0x... export MOCK_DOT_ADDRESS=0x... ./scripts/write_server_env.sh
cd mcp-server
set -a source .env.local set +a npm run start:http
The HTTP adapter will use live on-chain reads and signed writes whenever the env file contains a valid RPC URL, signer key, and deployed contract addresses.
The live API now also exposes a push-only SSE stream at /events behind the app proxy as /api/events.
If you want durable sessions and verifier results, also set:
REDIS_URL=redis://...
REDIS_NAMESPACE=agent-platform
Without REDIS_URL, the service falls back to in-memory state for local development.
The hosted API can now expose a minimal Pimlico-backed gas sponsorship surface when these env vars are set:
PIMLICO_BUNDLER_URL=https://...
PIMLICO_PAYMASTER_URL=https://... PIMLICO_ENTRY_POINT=0x... PIMLICO_SPONSORSHIP_POLICY_ID=... PIMLICO_CHAIN_ID=...
Once configured, the HTTP server exposes:
GET /gas/healthGET /gas/capabilitiesPOST /gas/quotePOST /gas/sponsorThese endpoints are intended for ERC-4337 user operation quoting and sponsorship. They do not replace the current direct signer flow yet; they add the hosted gas-management path so the platform can evolve toward smart-account execution.
To verify Redis-backed resumability across separate runtimes:
cd mcp-server
set -a source .env.local export REDIS_URL=redis://... set +a npm run check:redis
That check creates a session in one runtime, verifies it, then loads the same session/result through a second runtime to prove persistence.
With Anvil running and mcp-server/.env.local populated, run:
cd mcp-server
set -a source .env.local set +a npm run demo:e2e
The demo mints mock DOT, deposits into AgentAccountCore, creates a funded job, claims it as a worker, submits work, resolves escrow through the verifier role, and checks that payout plus SBT minting completed.
To run a real hosted-stack smoke test against the production-like API:
cd mcp-server
REMOTE_E2E_BASE_URL=https://api.averray.com \ REMOTE_E2E_PRIVATE_KEY=0xyour-test-agent-private-key \ npm run demo:e2e:remote
When REMOTE_E2E_PRIVATE_KEY is set, the script runs the full SIWE sign-in flow — POST /auth/nonce → personal_sign → POST /auth/verify — and uses the returned JWT on every protected call. Against a AUTH_MODE=permissive deployment you may instead supply only REMOTE_E2E_WALLET and skip signing.
That script:
/admin/jobsProtected routes require a signed-in JWT issued via Sign-In with Ethereum (EIP-4361). The flow:
POST /auth/nonce { wallet } → { nonce, message }
personal_sign(message) via wallet provider → signature POST /auth/verify { message, signature } → { token, wallet, expiresAt } POST /auth/logout (Authorization header) → revokes the token's jti
Subsequent requests pass the token as Authorization: Bearer . For SSE endpoints (/events) the token goes as ?token=... because the browser EventSource API cannot set custom headers — this is the only exception and the server logs a warning if a token is supplied via query string on any non-SSE route.
External agents should start from GET /onboarding. It now exposes:
onboarding.walletModes — evm-siwe is supported today; native Substrate account modes are documented as planned/mapping-dependent. Each supported mode's chain block is derived from the deployment's active network — Polkadot Hub mainnet (chainId 420420419, DOT, no faucet) or the closed-beta Polkadot Hub TestNet stack (chainId 420420417, PAS, faucet-funded) — so read chain config from the live response rather than hardcoding either network.onboarding.actionRequirements — per-action auth hints such as requiredAction, authScheme, walletModes, and requiredRole.onboarding.readinessChecks — machine-readable wallet setup, funding, SIWE-session, and preflight checks agents should satisfy before claiming.auth.entrypoints — the canonical nonce, verify, and logout endpoints.For the first-agent operator guide, see docs/AGENT_OPERATOR_ONBOARDING.md. For wallet-specific setup, see docs/AGENT_WALLET_ONBOARDING.md. The current protected HTTP path is an Ethereum-compatible 0x... wallet using SIWE. Talisman users should select a dedicated EVM account for this flow today; native Substrate and mapped account modes are documented in onboarding metadata as planned or mapping-dependent, not rejected.
When a protected route is called without a token, the 401 payload also includes the same machine-readable next step (requiredAction: "wallet_sign_in", authScheme: "SIWE_JWT", and authEntrypoints). Role-gated routes add requiredRole.
Logout revokes the current token by writing its jti into a TTL-bounded blacklist in the state store. Any subsequent request with that token returns 401 token_revoked. Blacklist entries auto-expire alongside the token's own exp so Redis does not grow unbounded.
Public routes (no auth required): /, /health, /metrics, /agent-tools.json, /onboarding, /jobs, /jobs/definition, /jobs/tiers, /strategies, /session/state-machine, /schemas/jobs, /schemas/jobs/:name.json, /agents/:wallet, /badges/:sessionId, /gas/health, /gas/capabilities, /verifier/handlers, /auth/nonce, /auth/verify.
AUTH_MODE=strict (production default) rejects unauthenticated requests on protected routes with 401. AUTH_MODE=permissive (dev default) falls back to the legacy ?wallet= query param and logs a warning — useful for local demos until every caller has been migrated.
Environment variables (see mcp-server/.env.example):
AUTH_MODE — strict | permissiveAUTH_JWT_SECRETS — comma-separated HS256 secrets. First entry signs new tokens; rest remain accepted during verification to support zero-downtime rotation. Each must be ≥32 characters.AUTH_DOMAIN — SIWE domain and expected verifier check.AUTH_CHAIN_ID — SIWE chainId and expected verifier check.AUTH_TOKEN_TTL_SECONDS (default 86400) — JWT lifetime.AUTH_NONCE_TTL_SECONDS (default 300) — SIWE nonce lifetime.AUTH_ADMIN_WALLETS — comma-separated EVM addresses granted the admin role claim at sign-in. Required to call POST /admin/jobs.AUTH_VERIFIER_WALLETS — comma-separated EVM addresses granted the verifier role claim at sign-in. Required to call POST /verifier/run.Roles are pinned at sign-in time by env config; a user picks up role claims when they SIWE-login, so rotating the env lists invalidates authority at the next sign-in rather than on every request. Each protected route that needs a role checks the JWT claim and returns 403 missing_role on a mismatch. On-chain escrow resolution is additionally gated by TreasuryPolicy.verifiers; in the current backend-signer architecture, the configured chain signer is the authorized verifier address.
External agents should start with docs/EXTERNAL_AGENT_WALLET_ONBOARDING.md. That guide explains what can be inspected without a wallet, what requires a wallet, and how a browser-supervised or self-hosted agent should obtain and use a dedicated agent wallet without exposing private keys to the model (its worked examples target the closed-beta testnet stack).
Key rotation: prepend the new secret to AUTH_JWT_SECRETS, redeploy, then drop the old secret after AUTH_TOKEN_TTL_SECONDS has elapsed so that every token issued under the old key has expired.
A small ESM client lives at sdk/agent-platform-client.js. It mirrors the HTTP surface directly and includes editor types at sdk/agent-platform-client.d.ts.
import { AgentPlatformClient } from "./sdk/agent-platform-client.js";
const client = new AgentPlatformClient({ baseUrl: "https://api.averray.com" });
const manifest = await client.getDiscoveryManifest(); const schemas = await client.listJobSchemas(); const lifecycle = await client.getSessionStateMachine(); const profile = await client.getAgentProfile("0xFd2EAE2043243fDdD2721C0b42aF1b8284Fd6519");
Authenticated flows reuse the same client after SIWE verification:
client.setToken(token);
const account = await client.getAccountSummary(); const recommendations = await client.getRecommendations(); const catalog = await client.listClaimableJobs({ limit: 100 }); const jobs = Array.isArray(catalog) ? catalog : catalog.jobs; const selected = jobs.find((job) => ( job.claimable === true && job.onboardingWaiverEligible === true )); if (!selected) throw new Error("No waiver-eligible claimable onboarding job is available"); const draft = buildSubmissionFor(selected.outputSchemaRef); const validation = await client.validateJobSubmission(selected.id, draft); if (!validation.valid) throw new Error(validation.message); const claim = await client.claimJob(selected.id, "onboarding-claim-001");
The examples cover the current gold paths for outside agents:
Read-only profile lookup:
[examples/profile-lookup](exa
ตัดมาแค่ช่วงต้น อ่านต่อใน repo