Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Pay for AI inference with USDC micropayments on Polygon. No API keys needed.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
DRAIN_PRIVATE_KEY标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"drain": {
"command": "npx",
"args": [
"-y",
"drain-mcp"
],
"env": {
"DRAIN_PRIVATE_KEY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add drain --env DRAIN_PRIVATE_KEY=your-value -- npx -y drain-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"drain": {
"command": "npx",
"args": [
"-y",
"drain-mcp"
],
"env": {
"DRAIN_PRIVATE_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"drain": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"drain-mcp"
],
"env": {
"DRAIN_PRIVATE_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 kimbo128 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:DRAIN_PRIVATE_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.3)于9个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Brontide agent arena
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ 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.
THE MECH ARENA BUILT FOR AI AGENTS. HUMANS WELCOME. Pilot mech duels over MCP, free, no sign-in.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Payments for AI Agents — No API keys, no credit cards, no subscriptions.
MCP server for the Handshake58 AI Marketplace. Agents discover service providers, pay automatically, and call any service — LLM inference, web scraping, image generation, search, and more.
Supports two payment protocols:
| DRAIN | MPP | |
|---|---|---|
| Setup | Open channel ($0.02 gas) | None |
| Per request | $0.0001–$0.01 | Varies by provider |
| Best for | High-volume sessions | Single requests, REST APIs |
| Payment | USDC on Polygon | USDC on Tempo chain |
Use drain-mcp when you need to:
Do NOT use drain-mcp when:
1. drain_providers(protocol: "mpp") → Find MPP providers
1. drain_providers(protocol: "drain") → Find DRAIN providers
drain_cooperative_close(channelId). Instant refund of unspent deposit. Always do this when finished.drain_close_channel(channelId). Reclaims unspent USDC after the expiry timestamp. Funds do NOT return automatically.Rule of thumb: Close when the task is done. Keep open while working.
MPP providers: drain-mcp handles 402 automatically via mppx/Tempo. Just use mpp_chat or mpp_request — payment is resolved transparently.
DRAIN providers return 402 Payment Required with headers when no payment voucher is sent:
| Header | Value |
|---|---|
X-Payment-Protocol | drain-v2 |
X-Payment-Provider | Provider wallet address (open channel to this) |
X-Payment-Contract | DRAIN contract address |
X-Payment-Chain | 137 (Polygon Mainnet) |
X-Payment-Signing | URL for EIP-712 signing parameters |
X-Payment-Docs | Provider docs endpoint |
DRAIN Flow:
402 with headersdrain-mcp or use the signing API at the X-Payment-Signing URLX-Payment-Provider addressX-DRAIN-Voucher headerEverything you need is in the 402 response. No prior registration required.
Find service providers. Filter by model name, category, or online status.
{
"model": "gpt-4o", "category": "scraping", "onlineOnly": true }
Categories: llm, image, audio, code, scraping, vpn, multi-modal, other
Get details about a provider including usage instructions (docs). The docs explain how to format requests for that provider.
{ "provider": "hs58-openai" }
Check wallet USDC balance, POL for gas, and DRAIN contract allowance.
Approve USDC spending for the DRAIN contract. Required once before opening channels.
{ "amount": "100" }
Open a payment channel. Locks USDC for the specified duration.
{
"provider": "hs58-openai", "amount": "5.00", "duration": "24h" }
Returns channelId, expiry time, and provider usage docs.
Check a channel's deposit, spending, remaining balance, and expiry.
List all known channels with status (active/expired/closed). Find expired channels that need closing.
Send a paid request through a DRAIN channel. Works for ALL DRAIN provider types:
{
"channelId": "0x...", "model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}] }
Send a chat request to an MPP LLM provider. Payment is automatic via Tempo — no channel, no setup.
{
"provider": "provider-id-or-url", "messages": [{"role": "user", "content": "Hello"}], "model": "optional-model-id" }
Send a request to an MPP REST API service (Tavily, Brave, Wolfram, etc.). Payment is automatic via Tempo.
{
"url": "https://tavily.mpp.paywithlocus.com/tavily/search", "body": {"query": "AI agents", "max_results": 5} }
Read the provider's docs first (drain_provider_info) to find the correct endpoint paths and request format.
Report success or failure after using any provider (DRAIN or MPP). Feeds the marketplace quality scoring system.
{
"providerId": "provider-id", "outcome": "success", "reason": "accurate_result" }
Close a channel early with provider consent. Use this when your task is done — instant refund of unspent deposit. No need to wait for expiry.
{ "channelId": "0x..." }
Close an expired channel and reclaim unspent USDC. Use when the channel has passed its expiry timestamp.
{ "channelId": "0x..." }
Opening a GPT-4o channel:
Gas to open channel: $0.02 (one-time)
Deposit: $0.50 (refundable remainder) Per request: ~$0.001755 Requests possible: ~285
Cost for 10 requests: $0.02 gas + $0.01755 usage = $0.04 Refund after close: $0.50 - $0.01755 = $0.48 Gas to close: $0.02
GET https://handshake58.com/api/mcp/providersProviders are not limited to LLM chat. Each provider has a category field and a docs endpoint explaining how to format requests.
| Category | Description | Message Format |
|---|---|---|
| llm | Language models (GPT-4o, Claude, Grok, Gemini) | Standard chat messages |
| image | Image generation | JSON in user content (see docs) |
| audio | Audio/TTS/STT | JSON in user content (see docs) |
| code | Code generation | Standard chat or JSON (see docs) |
| scraping | Web scraping, data extraction | JSON in user content (see docs) |
| vpn | VPN services | JSON in user content (see docs) |
| multi-modal | Multi-modal models | Standard chat messages |
| other | Everything else | Always check docs |
Rule: For any category other than `llm`, call `drain_provider_info` first to read the docs.
What provider do I want?
├── MPP provider (protocol="mpp") │ ├── mppType="llm" → mpp_chat(provider, messages) │ └── mppType="rest" → mpp_request(url, body) │ └── Done. Payment was automatic. │ └── DRAIN provider (protocol="drain") └── See DRAIN flow below
Do I have an active channel?
├── YES → Use drain_chat() with existing channelId └── NO → ├── drain_balance() → Do I have USDC? │ ├── NO → Cannot proceed. Need USDC on Polygon. │ └── YES → │ ├── drain_providers() → Find provider │ │ ├── NO providers → Cannot proceed. │ │ └── Found provider → │ │ ├── drain_approve() → First time only │ │ └── drain_open_channel() → Get channelId │ │ └── drain_chat() → Send requests
Am I done with this task?
├── YES → drain_cooperative_close(channelId) → Instant refund └── NO → ├── More requests soon? → Keep channel open └── Channel expired? → drain_close_channel(channelId) → Reclaim funds
| Use Case | Amount | Duration |
|---|---|---|
| Quick test / single query | $0.50 - $1 | 1h |
| Short task (few queries) | $2 - $5 | 4h |
| Extended session | $5 - $20 | 24h |
| Long-running agent | $20 - $100 | 7d |
"Insufficient balance"
→ Need more USDC. Check drain_balance().
"Insufficient allowance" → Run drain_approve().
"Channel not found" → channelId is wrong or channel was closed. Open new channel.
"Channel expired" → For drain_chat: Open a new channel. → For drain_close_channel: Expected. Proceed with close.
"Insufficient channel balance" → Channel deposit used up. Open new channel with more funds.
"Provider offline" → Use drain_providers() to find alternative provider.
npm install -g drain-mcp
Generate a key on your own machine — nothing is sent over the network:
node -e "const w=require('ethers').Wallet.createRandom();console.log('Address:', w.address, '\nKey:', w.privateKey)"
Send $1–5 USDC on Polygon Mainnet to your wallet address. Use a dedicated low-value wallet — never your main wallet.
No POL needed — if your wallet holds $5+ USDC, free gas is provided:
curl -X POST https://handshake58.com/api/gas-station \
-H "Content-Type: application/json" \ -d '{"address": "0x_your_wallet_address"}'
Returns 0.1 POL (~10K transactions). Sends only your public address.
{
"mcpServers": { "drain": { "command": "drain-mcp", "env": { "DRAIN_PRIVATE_KEY": "0x..." } } } }
| Variable | Required | Default | Description |
|---|---|---|---|
DRAIN_PRIVATE_KEY | Yes | — | Polygon wallet private key (also used for MPP/Tempo) |
DRAIN_CHAIN_ID | No | 137 | 137 (Polygon) or 80002 (Amoy testnet) |
DRAIN_RPC_URL | No | Public RPC | Custom Polygon RPC endpoint |
DRAIN_MPP_MAX_DEPOSIT | No | 1 | Max USDC per MPP session deposit |
DRAIN_PRIVATE_KEY is loaded into memory by the local MCP process. It is used for:
The key is never transmitted to any server. Providers verify signatures against on-chain state.
DRAIN: Exposure is capped by the smart contract:
drain_close_channelMPP: Each request is paid individually at the provider's advertised price. No pre-d
只显示了开头部分;其余内容请在仓库中阅读