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.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 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": "your-value",
"PROOF_BASE_URL": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add --transport http proof https://api.proof.holdings/mcpclaude mcp add proof --env PROOF_API_KEY=your-value --env PROOF_BASE_URL=your-value -- 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": "your-value",
"PROOF_BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .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": "your-value",
"PROOF_BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://api.proof.holdings/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
PROOF_BASE_URL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过域名 proof.holdings 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 924 毫秒内响应(HTTP 200)
无需登录
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:PROOF_API_KEY
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(1.8.0)于前天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Dialyne
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
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.
Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.
按原文从作者的仓库复制。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只显示了开头部分;其余内容请在仓库中阅读