Private agent payments on Solana via ZK proofs: deposit, withdraw, list pools, estimate fees.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y snap-mcp-server
MCP client config
{
"mcpServers": {
"snap-protocol": {
"command": "npx",
"args": [
"-y",
"snap-mcp-server"
]
}
}
}Private agent-to-agent payments on Solana using zero-knowledge proofs.
SNAP is live on Solana mainnet. See the security docs for the protocol's threat model and trust assumptions.
SNAP lets AI agents pay each other without on-chain observers learning who paid whom. Deposits enter a shielded pool under a cryptographic commitment. Withdrawals leave the pool with a Groth16 proof that shows the recipient is entitled to the funds without revealing which deposit is being claimed.
withdraw_zk or withdraw_zk_relayed.Install the SDK and its peer dependencies:
npm install snap-solana-sdk @solana/web3.js @coral-xyz/anchor
Minimal private payment:
import { Connection, Keypair, PublicKey, clusterApiUrl } from "@solana/web3.js";
import { SNAPClient } from "snap-solana-sdk";
async function main() {
const connection = new Connection("https://your-rpc-url.com", "confirmed");
const sender = Keypair.generate();
const recipient = Keypair.generate();
const pool = new PublicKey("B8SyffZKt8LABKogWjH9rZcjY5PV2hyYRCbTxxbcrpFf");
const snapA = new SNAPClient(connection, sender);
const snapB = new SNAPClient(connection, recipient);
const note = await snapA.deposit(pool, 0.1);
const serialized = SNAPClient.serializeNote(note);
await snapB.withdraw(pool, SNAPClient.deserializeNote(serialized), recipient);
}
void main();
If you want a runnable walkthrough from this repo, use:
npx tsx examples/basic-payment.ts
npx tsx examples/agent-to-agent.ts
npx tsx examples/relayed-withdrawal.ts
| Component | Description |
|---|---|
| Solana Program | Anchor program with deposit, withdraw_zk, and withdraw_zk_relayed |
| ZK Circuit | circom Groth16 circuit using Poseidon and a depth-10 Merkle tree |
| SDK | snap-solana-sdk for note handling, proof generation, and client API |
| Agent Kit Plugin | Solana Agent Kit v2 plugin with snap_create_pool, snap_deposit, snap_withdraw, and snap_withdraw_private |
| LangChain Tools | snap-langchain-tools — StructuredTool wrappers for LangChain/LangGraph agents |
| Relayer | Express service for gas-abstracted private withdrawals |
Pool denominations are 0.1 SOL, 1 USDC, and 10 USDC. See THREAT_MODEL.md for trust assumptions.
| Field | Value |
|---|---|
| Program ID | 9uePoqdgaXpqFLQM2ED1GGQrwSEiqe3r6tW1AfsnrrbS |
| Pool — 0.1 SOL | B8SyffZKt8LABKogWjH9rZcjY5PV2hyYRCbTxxbcrpFf |
| Pool — 1 USDC | 5LeuHrPBgHNhgbCy996MEjcsBk5gNHhVj6AiuuCHZ8od |
| Pool — 10 USDC | ECuHf8kgiWfmL3Q6id4WGBQWvuukhzqvF5vsxuPAKZBv |
| Network | Solana mainnet-beta |
| Protocol fee | 0.25% |
├── programs/ # Solana program (Rust/Anchor)
├── circuits/ # circom ZK circuit
├── sdk-package/ # snap-solana-sdk npm package
├── agent-kit-tool/ # Solana Agent Kit plugin
├── relayer/ # Express relay service
├── agents/ # Demo agent scripts
├── examples/ # Minimal end-to-end examples
├── scripts/ # Deployment and quickstart scripts
├── docs/ # Troubleshooting, circuit, and compliance docs
└── tests/ # Integration tests
# Build the Solana program
anchor build
# Run validator-backed tests
PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH" anchor test --skip-build
# Build and test the SDK package
cd sdk-package && npm install && npm run build && npm test
Known risks, protocol limits, and security documentation are in FINDINGS.md, docs/CIRCUIT_SPEC.md, docs/THREAT_MODEL.md, docs/COMPLIANCE.md, and docs/GOVERNANCE.md.
MIT