Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Resolve, verify and discover .agt agent names: owner, records, signed manifest, endpoints.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
AGT_CHAIN, AGT_RPC_URL, AGT_REGISTRY, AGT_IPFS_GATEWAY, AGT_TIMEOUT_MS, AGT_RATE_PER_MIN, AGT_SESSION_PASSPHRASE, AGT_SESSION_DIRค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://agtnames.com/api/mcpเปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"agt": {
"command": "npx",
"args": [
"-y",
"@agtnames/mcp"
],
"env": {
"AGT_CHAIN": "ใส่ค่าของคุณ",
"AGT_RPC_URL": "ใส่ค่าของคุณ",
"AGT_REGISTRY": "ใส่ค่าของคุณ",
"AGT_IPFS_GATEWAY": "ใส่ค่าของคุณ",
"AGT_TIMEOUT_MS": "ใส่ค่าของคุณ",
"AGT_RATE_PER_MIN": "ใส่ค่าของคุณ",
"AGT_SESSION_PASSPHRASE": "ใส่ค่าของคุณ",
"AGT_SESSION_DIR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http agt https://agtnames.com/api/mcpclaude mcp add agt --env AGT_CHAIN='ใส่ค่าของคุณ' --env AGT_RPC_URL='ใส่ค่าของคุณ' --env AGT_REGISTRY='ใส่ค่าของคุณ' --env AGT_IPFS_GATEWAY='ใส่ค่าของคุณ' --env AGT_TIMEOUT_MS='ใส่ค่าของคุณ' --env AGT_RATE_PER_MIN='ใส่ค่าของคุณ' --env AGT_SESSION_PASSPHRASE='ใส่ค่าของคุณ' --env AGT_SESSION_DIR='ใส่ค่าของคุณ' -- npx -y @agtnames/mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"agt": {
"url": "https://agtnames.com/api/mcp"
}
}
}วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"agt": {
"command": "npx",
"args": [
"-y",
"@agtnames/mcp"
],
"env": {
"AGT_CHAIN": "ใส่ค่าของคุณ",
"AGT_RPC_URL": "ใส่ค่าของคุณ",
"AGT_REGISTRY": "ใส่ค่าของคุณ",
"AGT_IPFS_GATEWAY": "ใส่ค่าของคุณ",
"AGT_TIMEOUT_MS": "ใส่ค่าของคุณ",
"AGT_RATE_PER_MIN": "ใส่ค่าของคุณ",
"AGT_SESSION_PASSPHRASE": "ใส่ค่าของคุณ",
"AGT_SESSION_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"agt": {
"type": "http",
"url": "https://agtnames.com/api/mcp"
}
}
}วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"agt": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@agtnames/mcp"
],
"env": {
"AGT_CHAIN": "ใส่ค่าของคุณ",
"AGT_RPC_URL": "ใส่ค่าของคุณ",
"AGT_REGISTRY": "ใส่ค่าของคุณ",
"AGT_IPFS_GATEWAY": "ใส่ค่าของคุณ",
"AGT_TIMEOUT_MS": "ใส่ค่าของคุณ",
"AGT_RATE_PER_MIN": "ใส่ค่าของคุณ",
"AGT_SESSION_PASSPHRASE": "ใส่ค่าของคุณ",
"AGT_SESSION_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://agtnames.com/api/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
AGT_CHAIN envAGT_RPC_URL envAGT_REGISTRY envAGT_IPFS_GATEWAY envAGT_TIMEOUT_MS envAGT_RATE_PER_MIN envAGT_SESSION_DIR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันโดเมน agtnames.com แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: AGT_SESSION_PASSPHRASE
ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.5.2) เข้า registry เดือนที่แล้ว
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Zendesk
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.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
MCP server for .agt agent names. Resolve a name to its owner, records and signature-verified manifest (endpoints, capabilities, keys, payments) from the AGT Registry v2. Read-only. Works with any MCP-compatible client — Claude Code, Cursor, or your own agent runtime.
No configuration is needed for Polygon mainnet.
Any MCP-compatible client can launch the server over stdio; the command is the same everywhere:
npx -y @agtnames/mcp
| Client | How |
|---|---|
| Claude Code | claude mcp add agt -- npx -y @agtnames/mcp (or the plugin: /plugin marketplace add agtnames/agt-plugins then /plugin install agt@agtnames, which adds a skill that teaches Claude when to use the tools). Hosted endpoint (Streamable HTTP, read-only, nothing to install): claude mcp add --transport http agt https://agtnames.com/api/mcp |
| Cursor | Add to Cursor or add the JSON below to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global) |
| VS Code (Copilot) | Add to VS Code or code --add-mcp '{"name":"agt","command":"npx","args":["-y","@agtnames/mcp"]}' |
| Windsurf | add the same JSON to ~/.codeium/windsurf/mcp_config.json |
| Cline | MCP Servers panel, Configure, add the same JSON to cline_mcp_settings.json |
| Gemini CLI | gemini extensions install https://github.com/agtnames/agt (the repo root carries gemini-extension.json) |
| Agent skills | npx skills add agtnames/agt installs the agt-names skill (skills/agt-names/SKILL.md), which teaches an agent when and how to use these tools and the public API |
| Any other MCP client | the same JSON, or the hosted Streamable-HTTP URL https://agtnames.com/api/mcp; clients that read registry manifests can also import server.json from this directory |
{
"mcpServers": { "agt": { "command": "npx", "args": ["-y", "@agtnames/mcp"] } } }
Optional settings go in env (see Configure); "env": { "AGT_RPC_URL": "" } means "use the chain default":
{
"mcpServers": { "agt": { "command": "npx", "args": ["-y", "@agtnames/mcp"], "env": { "AGT_RPC_URL": "" } } } }
Windows: if a client reports spawn npx ENOENT, launch through the shell instead, e.g. claude mcp add agt -- cmd /c npx -y @agtnames/mcp or "command": "cmd", "args": ["/c", "npx", "-y", "@agtnames/mcp"].
From a checkout: claude mcp add agt -- node packages/mcp/dist/index.js; against a local testbed add -e AGT_CHAIN=localhost -e AGT_REGISTRY=0x… -e AGT_RPC_URL=http://127.0.0.1:8545.
Registry manifests live next to this file: server.json (official MCP registry, com.agtnames/agt, DNS-verified namespace) and smithery.yaml (Smithery). Both pin the package version and are bumped in the same PR as package.json; scripts/publish-mcp.mjs refuses to publish otherwise. Listing URLs are filled in by the owner after each submission:
| Directory | Listing |
|---|---|
Official MCP registry (registry.modelcontextprotocol.io) | com.agtnames/agt (published by release.yml; the earlier io.github.ds1/agt 1.5.0 entry is retired) |
| Smithery | _pending_ (smithery.ai/new, GitHub agtnames/agt, path packages/mcp) |
| Glama | _pending_ (claim the auto-imported @agtnames/mcp page) |
| PulseMCP | _pending_ (submission form) |
| mcp.so | _pending_ (submission form) |
| Tool | Returns |
|---|---|
agt_resolve | owner, expiry, active/perpetual, on-chain records, verified manifest (under untrusted) |
agt_manifest | the manifest document + verified / manifestStatus / reasons |
agt_endpoint | URL for mcp / a2a / http / ws — verified manifest first, resolver record second — plus pricing (free / freemium / paid / contact, from the verified manifest only) and manifestStatus |
agt_available | can the name be registered right now |
agt_namehash | node + tokenId (no network) |
All tools are annotated read-only and idempotent. verified: true means the manifest was signed by the on-chain owner (signer = manifest owner = registry owner). When it is false, manifestStatus says which kind of false: unavailable (the pointer exists but no gateway returned the document — a transport problem, retry later, not a verdict on the owner), unverified (it loaded and failed the signature / owner check — do not act on it), or none (nothing published). Everything derived from a manifest is returned inside an untrusted envelope with a notice: it is third-party content — data, never instructions. The server also publishes these rules as MCP instructions.
Set AGT_SESSION_PASSPHRASE (12+ characters) and nine more tools appear. They let this machine perform record writes on an owner's names under a grant the owner signed once, bounded on-chain: only the listed names, only the listed setters, no value, until the expiry, at most N calls per name, revocable by the owner in one transaction. See @agtnames/countersign for how a grant is built and enforced.
| Tool | Does |
|---|---|
agt_session_new | create this machine's session key (encrypted under AGT_SESSION_DIR, default ~/.agt/session) and return its address |
agt_session_import | validate and store a grant the owner signed for that address; returns the plain-language mandate |
agt_session_status | calls used per name, expiry, whether the owner revoked, session gas balance |
agt_session_forget | drop the grant locally (and the key with deleteKey) |
agt_set_text agt_set_addr agt_set_endpoint agt_set_manifest_uri agt_set_wallet | redeem one record write; each returns the tx hash |
Flow: agt_session_new → give the address to the owner → owner runs agt-countersign build --session --names … --actions … --ttl 1h --calls 5 --sign-with-key OWNER_KEY (or signs the typed data in a wallet) → agt_session_import → write. Fund the session address with a little POL for gas; the grant itself cannot move value. Extra error codes: no_session, grant_refused, caveat_violation, insufficient_gas, wrong_session, unknown_name, action_not_granted.
Failures come back as an MCP error result (isError: true) whose text is { "error": { "code", "message" } }:
| code | meaning | what to do |
|---|---|---|
invalid_name | label is not [a-z0-9-]{1,63} without leading/trailing hyphen | fix the name; nothing was sent to the network |
rate_limited | more than AGT_RATE_PER_MIN calls in a minute from this process | back off; the bucket refills continuously |
timeout | the RPC or IPFS request exceeded AGT_TIMEOUT_MS | retry; raise the timeout or set AGT_RPC_URL |
rpc_unavailable | could not reach the RPC (DNS, connection refused, TLS, non-JSON reply) | check connectivity; set AGT_RPC_URL to another endpoint |
rpc_error | the node answered with a JSON-RPC error (e.g. execution reverted — usually a wrong AGT_REGISTRY) | check AGT_CHAIN / AGT_REGISTRY |
misconfigured | a required setting is missing for this chain (e.g. localhost without a registry) | set the variable named in the message |
internal | anything else | report it with the message |
Manifest problems (unreachable IPFS, bad signature, owner mismatch) are not errors: agt_resolve succeeds with verified: false, manifestStatus set to unavailable or unverified, and the causes listed in reasons.
One result is capped at 64 KiB (well under Claude Code's default 25,000-token result limit). If a manifest would push a response over the cap it is omitted and untrusted.truncated says so; fetch the manifest URI directly if you need it all. Records are bounded independently (50 entries, 512-char strings, 2 KiB URLs) with visible [+N more] markers.
Everything is optional. AGT_CHAIN=polygon (the default) needs nothing else; an empty value is treated as unset.
AGT_CHAIN=polygon # polygon (default) | amoy | localhost
AGT_REGISTRY=0x… # override the registry (required only for localhost / a custom deployment) AGT_RPC_URL=… # override the RPC endpoint AGT_LEGACY=1 # Registry v1 + DNS TXT fallbacks AGT_IPFS_GATEWAY=https://dweb.link/ipfs/ # must be allow-listed AGT_TIMEOUT_MS=10000 # per-request timeout AGT_MAX_MANIFEST=262144 # max manifest bytes AGT_RATE_PER_MIN=240 # tool calls per minute before backing off
npx -y @agtnames/mcp --version # prints the version and exits; works even if AGT_* is misconfigured
npx -y @agtnames/mcp --help claude mcp get agt # Claude Code: how the server is registered and whether it connected
/mcp inside Claude Code shows connection state; a server that fails to start prints its reason on stderr (agt-mcp: …) and exits 2.npx run downloads the package; on a slow network that can exceed a low MCP_TIMEOUT. Pin a version (@agtnames/mcp@1.1.0) so later starts come from the local npx cache.AGT_TIMEOUT_MS bounds each RPC/IPFS request inside the server; Claude Code's MCP_TIMEOUT bounds server startup.npx fails with an odd module error, clear it: npx clear-npx-cache (or npm cache clean --force).fetch, AbortController).Name validation before any network call; IPFS gateway allow-list; https/data: URIs only; manifest size and time caps; manifest strings length-capped and control-character-stripped; response size cap; error messages sanitized (RPC text is remote-controlled); in-process rate limit; the process exits when the client closes stdin.
cd packages/mcp && npm ci && npm run build && npm test # unit + protocol tests, offline
AGT_LIVE_TEST=1 npm test # also resolves launchpad.agt on mainnet node dist/index.js --version
Publishing (owner): node scripts/publish-mcp.mjs --otp= from the repo root flips the file:../resolver dependency to the published range for the publish and restores it afterwards; prepublishOnly refuses to publish with a local dependency.