Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
One API, all things verified — control, delegation, human approval, anti-impersonation.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
PROOF_API_KEY, PROOF_BASE_URLค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://api.proof.holdings/mcpเปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"proof": {
"command": "npx",
"args": [
"-y",
"@proof-holdings/mcp-server"
],
"env": {
"PROOF_API_KEY": "ใส่ค่าของคุณ",
"PROOF_BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http proof https://api.proof.holdings/mcpclaude mcp add proof --env PROOF_API_KEY='ใส่ค่าของคุณ' --env PROOF_BASE_URL='ใส่ค่าของคุณ' -- npx -y @proof-holdings/mcp-serverเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"proof": {
"url": "https://api.proof.holdings/mcp"
}
}
}วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"proof": {
"command": "npx",
"args": [
"-y",
"@proof-holdings/mcp-server"
],
"env": {
"PROOF_API_KEY": "ใส่ค่าของคุณ",
"PROOF_BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"proof": {
"type": "http",
"url": "https://api.proof.holdings/mcp"
}
}
}วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"proof": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@proof-holdings/mcp-server"
],
"env": {
"PROOF_API_KEY": "ใส่ค่าของคุณ",
"PROOF_BASE_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://api.proof.holdings/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
PROOF_BASE_URL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันโดเมน proof.holdings แล้ว (registry ตรวจความเป็นเจ้าของโดเมน)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตอบกลับใน 924 ms (HTTP 200)
ไม่ต้องล็อกอิน
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 2 จาก 2 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: PROOF_API_KEY
ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.8.0) เข้า registry เมื่อวาน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, AvaHR
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.
Read hiring data and create inactive assessment and questionnaire drafts for human review.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
MCP (Model Context Protocol) server for the proof.holdings API. Exposes 179 tools for AI agents to create verifications, validate proofs, manage assets, and more.
Hosted — nothing to install. The same tools are served over HTTP at https://api.proof.holdings/mcp. Any MCP client or agent framework with HTTP transport can connect — add the URL as a remote MCP server in its settings (the config key varies by client). Authentication happens in the browser the first time a tool needs an account. As a config fragment:
{ "mcpServers": { "proof": { "type": "http", "url": "https://api.proof.holdings/mcp" } } }
⚠️ Versions before `1.1.0` predate the delegation tools and the keyless public mode and expose an older, smaller surface than this README describes. If a client is pinned to 1.0.0, upgrade it or use the hosted server above. The current instructions are always at https://proof.holdings/md/docs/mcp.md.
Local — this package. Installs and runs as a stdio server:
npm install -g @proof-holdings/mcp-server
Or run directly with npx (no install needed):
npx @proof-holdings/mcp-server
| Variable | Required | Default | Description |
|---|---|---|---|
PROOF_API_KEY | No | — | API key (pk_live_... or pk_test_...). Without it the server still starts in public mode: the keyless tools (account bootstrap, login, proof and delegation verification) work, and every other tool answers api_key_required. |
PROOF_BASE_URL | No | https://api.proof.holdings | API base URL |
Get your API key from the proof.holdings dashboard, or let the server get one for you with login (below).
npx @proof-holdings/mcp-server login
--channel, or asked). The terminal shows the link and a QR code to scan with your phone, the text and number to send for SMS, or asks for the code from the email.~/.proof-holdings/credentials (readable by you only), under the API in PROOF_BASE_URL. The server uses it from its next start, so restart your MCP client's server.login says so; sign it out in the dashboard under Settings → Security → Signed-in devices.PROOF_API_KEY, when set, always wins over the saved key, and a key saved for one API (say, staging) is never sent to another. Then leave env out of the client config:
{ "mcpServers": { "proof-holdings": { "command": "npx", "args": ["-y", "@proof-holdings/mcp-server"] } } }
| Command | What it does |
|---|---|
login | Signs in, confirms, creates and saves a key. --test creates a test key (pk_test_); --scopes a,b limits it (default: full access); --email you@example.com logs in by email. |
status | Shows which key the server would start with and where it comes from. No network call. |
logout | Removes the saved key for this API from this computer. |
The key does not expire. Logging in again replaces the saved key but does not revoke the old one, and logout only forgets it locally: revoke keys you no longer use in the dashboard (API keys) or with the revoke_api_key tool. login needs an interactive terminal and an https:// API (plain http only for localhost).
Add the following to your MCP client config file:
{
"mcpServers": { "proof-holdings": { "command": "npx", "args": ["-y", "@proof-holdings/mcp-server"], "env": { "PROOF_API_KEY": "pk_live_your_key_here" } } } }
Config file location by client:
| Client | Config file |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor | .cursor/mcp.json in your project root |
| Claude Code | Run claude mcp add proof-holdings -- npx -y @proof-holdings/mcp-server |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
Keep the scoped npx -y @proof-holdings/mcp-server command even after a global install. A bare command name is looked up on PATH, or by npx in the npm registry, where it can belong to someone else's package.
Group totals are exact. The tables name the tools you are most likely to reach for rather than all of them — your MCP client's own tools/list is the complete, current list, and it is the one this server answers from.
| Tool | Description |
|---|---|
create_verification | Create a verification challenge |
get_verification | Get verification status |
submit_verification_code | Submit a verification code |
trigger_verification | Trigger a verification check |
wait_for_verification | Poll until it completes |
create_multi_channel_verification | One phone, up to three channels, first completion wins |
create_verification_request | Create a multi-asset request |
get_request_by_reference | Look a request up by reference id |
| Tool | Description |
|---|---|
add_domain | Add a domain to verify |
verify_domain | Check the challenge record and mint the proof |
connect_cloudflare | Connect Cloudflare so records are written for you |
verify_domain_with_credentials | Prove control using stored credentials |
setup_domain_email | Set up sending from the domain |
| Tool | Description |
|---|---|
get_platform_summary | One-call snapshot of the account |
get_usage | Quota and usage for the period |
get_balance | The prepaid balance and the auto top-up setting |
search | Search across the account |
create_account | Bootstrap a new account (no key needed) |
create_api_key | Create a scoped API key |
list_assets | List verified assets and their proof handles |
| Tool | Description |
|---|---|
create_hitl | Create a human-approval configuration |
create_confirmation | Send an approval request to a person |
wait_for_confirmation | Poll until a person approves or denies |
create_authorization | Ask a person to consent to being contacted |
revoke_authorization | Withdraw a consent |
| Tool | Description |
|---|---|
create_circle | Create a circle of trusted contacts |
add_circle_member | Add a contact |
invite_circle_member | Send a single-use enrollment link |
create_identity_challenge | Run a cross-channel identity check |
| Tool | Description |
|---|---|
create_profile | Create a public profile |
claim_username | Claim a public username |
update_public_proofs | Choose which proofs a profile shows |
| Tool | Description |
|---|---|
list_templates | List a sub-account's message templates |
render_template | Render a template with variables |
list_webhook_deliveries | List webhook deliveries |
retry_webhook_delivery | Retry a failed delivery |
Each endpoint has its own URL, events and signing secret, and serves either every sub-account or the ones you select. A signing secret is returned only on create and on rotate — store it then.
| Tool | Description |
|---|---|
list_webhook_endpoints | List the account's webhook endpoints |
get_webhook_endpoint | Get one endpoint (no secret) |
create_webhook_endpoint | Add an endpoint; returns its signing secret |
update_webhook_endpoint | Change URL, events, scope, sub-accounts or status |
delete_webhook_endpoint | Delete an endpoint |
rotate_webhook_endpoint_secret | Replace an endpoint's signing secret |
rotate_callback_secret | Replace a sub-account's callback signing secret |
| Tool | Description |
|---|---|
create_delegation | Authorize an artifact from a domain you have proven |
revoke_delegation | Revoke a delegation |
verify_delegation | Check whether an artifact is authorized by the domain it claims |
validate_proof | Verify a signed proof token (no key needed) |
get_proof_status | Read a proof's status by its public handle |
list_revoked_proofs | Read the revocation list (no key needed) |
get_proof_token | Fetch the current (re-signed) token of a proof you own (not one of your own verified assets: that is read in the dashboard) |
list_reissued_proofs | List your proofs re-signed since an instant, except those of your own verified assets |
get_delegation_token | Fetch an active delegation's current token by handle (no key needed) |
| Tool | Description |
|---|---|
start_login | Begin a sign-in (no key needed) |
wait_for_login | Poll until sign-in completes |
get_current_user | Who the current session belongs to |
render_auth_link | Render a sign-in link for the user to open |
Use a test-mode API key (pk_test_*) to interact with the API without creating real verifications. Test-mode keys are available in your dashboard.
Two transports ship in this package:
npx -y @proof-holdings/mcp-server starts) — the server communicates over stdin/stdout. One user per process; this is what a client launches locally.node dist/remote.js) — a remote server that many users connect to over the network by URL, with no install. A connection starts ANONYMOUS — the keyless surface (account bootstrap, login, proof and delegation verification) works with no credential at all — and a tool that needs an account answers 401 with a WWW-Authenticate challenge naming the authorization server, which is what a standards-compliant client follows to sign in. The 401 lands on the TOOL CALL and never on a bare initialize or tools/list FOR AN ANONYMOUS CONNECTION: measured against live clients, refusing an anonymous handshake reads to the user as a connection timeout rather than as an invitation to log in. Three shapes are refused at the handshake instead — a presented token that does not resolve (there the 401 is what makes a client refresh), a request whose credential does not match the session it names, and an opening batch that smuggles a keyed tool call alongside initialize. A signed-in client sends the API key it was granted in the Authorization header — the only place a credential is read, never a query parameter — and each connection gets its own server and HTTP client, so one user's key or session can never reach another. /mcp serves POST (every JSON-RPC message) and DELETE (ending a session); every other method — including the optional standalone GET event stream — answers 405 with Allow: POST, DELETE, whatever session or credential the request carries. Nothing on this server pushes notifications, so declining the stream costs a client nothing, and it is what lets a client on Node 26's built-in fetch work: over HTTP/2 to the edge, with that stream open, it never sent its next request. PORT (default 3100), MCP_MAX_SESSIONS (default 100), MCP_SESSION_TTL_MS (default 30 min, counted from the last POST the server ACCEPTED — one it answered below 400. A POST refused before any work happens does not postpone it, whether the refusal is ours (body over 4MB) or the transport's (unparseable or empty body, unsupported mcp-protocol-version, a second initialize), and neither does a refused methตัดมาแค่ช่วงต้น อ่านต่อใน repo