singit
Integrates with Solana devnet for USDC escrow payments: the Capture402 backend holds, captures, releases and refunds devnet USDC between agent wallets under human-set mandates, using devnet throwaway keypairs and returning finalized devnet transaction signatures.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@singitHold 2.5 USDC for the data provider under mandate 42"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
singit-agent-pay
Agents that pay each other, safely: an MCP server that lets AI agents hold, capture, release and refund USDC under human-set mandates (budget, per-tx cap, allowed payees, deadlines), with disputes only a human can resolve and a full audit log.
Status: the default demo runs on the mock backend (in-memory, synthetic data, no keys). The Solana devnet backend (
Capture402Backend) is implemented and tested locally against the pinned public ABI. The live entrypoint requires a private durable journal and resolves original pending transactions before serving writes. Devnet acceptance still requires a verified deployment, explicit provider/keys/funding and separate authorization. Devnet only, never mainnet.
Quickstart
Requires Node 20, 22 or 24 (nvm use reads .nvmrc = 22), macOS or Linux.
npm ci # also installs singit-mcp/ dependencies
npm run demo:all # MCP server on :8787 + dashboard on :5173, Ctrl-C stops bothThen open http://127.0.0.1:5173 and press ▶ Run demo story. The story is in docs/DEMO.md.
For an operator with funded devnet wallets and private configuration, use
npm run live:all -- /absolute/path/to/private/devnet.env.
Live demo setup explains the two wallet roles, startup recovery
and the separate browser/MCP acceptance. Live mode never falls back to mock.
URL | What |
MCP, streamable HTTP | |
health check | |
read-only JSON state | |
demo dashboard |
On first run demo:all writes random local dev secrets to singit-mcp/.env.local (gitignored).
Other scripts: npm run demo (the same story in the terminal), npm test (singit-mcp unit + contract tests, then the dashboard e2e), npm run typecheck.
Dashboard e2e on its own: (cd singit-mcp && npm ci), then cd demo-dashboard && npm run test:e2e (in-process, imports ../singit-mcp/src). Without singit-mcp's deps: SINGIT_BACKEND=local npm run test:e2e (built-in local adapter).
Related MCP server: agent-insurance-mcp-server
Connect an MCP client
Streamable HTTP (recommended): start the server with npm run start:http (or npm run demo:all), then point the client at http://127.0.0.1:8787/mcp. The human approval secret stays in the server process, out of the agent's config.
# Claude Code
claude mcp add --transport http singit http://127.0.0.1:8787/mcp// Cursor: .cursor/mcp.json
{ "mcpServers": { "singit": { "url": "http://127.0.0.1:8787/mcp" } } }stdio: the client spawns the server itself. Don't put the human approval secret in the agent's config; disputes then refuse to resolve, which is the safe default.
# Claude Code
claude mcp add singit -- npx tsx /ABS/PATH/singit-agent-pay/singit-mcp/src/index.ts// Claude Desktop: claude_desktop_config.json (Cursor uses the same shape)
{
"mcpServers": {
"singit": {
"command": "npx",
"args": ["tsx", "/ABS/PATH/singit-agent-pay/singit-mcp/src/index.ts"]
}
}
}Tools (11)
Amounts are USDC base units as decimal strings (2500000 = 2.5 USDC); times are Unix seconds. Every write takes an actor. hold is the pay tool.
Tool | What it does |
| Payer, total budget, per-tx cap, expiry, allowed payees |
| A mandate with its remaining budget and holds |
| All mandates |
| Lock funds for a payee (payment authorization) |
| Capture some or all of a hold |
| Return the uncaptured remainder to the payer |
| Payee refunds a captured amount |
| Payer disputes a hold; captures freeze |
| Disputes, filterable by status or mandate |
| Refund or reject; needs a human approval token |
| Every action, including blocked ones |
Full schemas, refusal codes and the backend contract: docs/INTERFACE.md. Architecture: docs/ARCHITECTURE.md.
Repository layout
Path | What |
| The MCP server: mandate engine, |
| Zero-dependency web dashboard that plays the demo story against singit-mcp |
| Architecture, interface, demo story |
Built during the hackathon
FinTechers Prague, Track 2 "Agents that pay each other", 19–20 Oct 2026. Everything in this repository was written during the hackathon (the first commit is tagged hackathon-start):
singit-mcp: MCP server (stdio + streamable HTTP) with 11 tools
Mandate engine: budget, per-tx cap, allowed counterparties, expiry, devnet-USDC mint pinning, deadline bounds
Escrow lifecycle: hold / capture / release / refund over a pluggable
PaymentBackendHuman approval: disputes resolve only with an HMAC token over the exact decision, issued out of band; agents cannot self-approve
Audit log: every action and every refusal, with stable codes
Demo dashboard: live story, blocked events, human console
Backend contract tests: one conformance suite for the mock and the devnet backend
Pre-existing (reused, not judged)
SingIt: singitai.app, github.com/bubon-ik/SingItAI. The team's existing product and x402 API; not part of this repository.
capture402 escrow: capture402-solana, the Solana auth/capture escrow program the devnet backend targets. First published 19 Oct 2026 10:46 (CEST), before the 12:00 kickoff. Not part of this repository.
Safety
Solana devnet and devnet USDC only. Keys are devnet throwaway keypairs loaded from file paths in env (SINGIT_PAYER_KEYPAIR, SINGIT_MERCHANT_KEYPAIR), never committed; agents never see keys. txSig values are mock refs (mock-tx-N) on mock and finalized devnet signatures on Capture402. UNKNOWN is a separate pending outcome, never payment proof.
License
Apache-2.0, same as capture402.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for AI agents to discover campaigns by humans and donate USDC directly on Base.
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
MCP server for Boson Protocol — on-chain agentic commerce for physical & digital goods.
Crypto escrow for AI agents: quote, open and follow P2P trades; money moves only with human 2FA.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for AI agents to create and manage P2P escrow deals on Base (ETH or ERC-20).84 npm1MIT
- AlicenseAqualityDmaintenanceMCP server for AI agent transaction insurance and escrow — protect agent-to-agent payments with smart escrow, dispute resolution, and risk scoring.1130 PyPIMIT
- AlicenseAqualityDmaintenanceAn MCP server for creating, settling, disputing, and refunding escrows on EVM chains.83 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for Pact, an escrow protocol for agent-to-agent commerce, enabling agents to create pacts, fund escrow, deliver work, and settle with an LLM evaluator as dispute backstop.8 npmMIT