comprabtc-mcp
Provides tools for managing non-custodial Bitcoin DCA (Dollar Cost Averaging) plans on the Celo blockchain, including creating, renewing, canceling plans, and tracking portfolio.
CompraBTC
Non-custodial Bitcoin DCA agent on Celo. Define your plan once — $X every hour/day in BTC — and an on-chain agent buys Bitcoin for you, straight into your own wallet. Funds never leave your wallet between purchases.
Live app: https://comprabtc.vercel.app (works in MiniPay and any injected wallet)
Agent API: https://comprabtc-production.up.railway.app (
GET /service descriptor ·GET /api/statspublic metrics)Built for the Celo Agentic Payments & DeFAI Hackathon — leaderboard
Deployed contracts (Celo mainnet, chain 42220)
Contract | Address |
DCAExecutor (verified) | |
USDT (token in) | |
WBTC — native bridge (token out) | |
Uniswap V3 SwapRouter02 |
Swaps route through the USDT/WBTC 0.3% Uniswap V3 pool. Protocol fee: 1% + $0.005 flat per execution, with on-chain hard caps (≤1%, ≤$0.05 flat) and a revert if the fee would ever eat the installment.
Agent identity: ERC-8004 #9665 on Celo mainnet (8004scan). Every transaction carries ERC-8021 attribution tags.
Related MCP server: hiveclear
How it works
flowchart TB
USER["👤 User wallet<br/>(MiniPay / MetaMask / Valora)"]
FE["Frontend — Next.js PWA<br/>(Vercel)"]
subgraph onchain["⛓️ Celo mainnet"]
USDT["USDT (ERC-20)"]
EXEC["DCAExecutor<br/>0xd03f…4189<br/>non-custodial, on-chain limits"]
ROUTER["Uniswap V3 SwapRouter02<br/>USDT/WBTC 0.3% pool"]
TREASURY["Treasury"]
end
subgraph backend["🤖 Agent backend — Railway"]
KEEPER["Keeper (cron 60s)<br/>scans PlanCreated events,<br/>checks due plans"]
API["Express API<br/>POST /api/execute<br/>(x402-gated, permissionless)"]
DB[("Supabase<br/>plans · executions")]
TG["Telegram bot<br/>purchase alerts + ops"]
end
FACIL["x402 facilitator<br/>api.x402.celo.org"]
USER -- "① approve(budget) — once" --> USDT
USER -- "② createPlan(amount, interval) — once" --> EXEC
FE -.-> USER
KEEPER -- "discovers plans<br/>(PlanCreated events)" --> EXEC
KEEPER -- "③ pays 0.02 USDT via x402<br/>(EIP-3009 signature)" --> API
API -- "verify + settle" --> FACIL
API -- "④ execute(user, minOut)<br/>+ ERC-8021 attribution tags" --> EXEC
EXEC -- "⑤ transferFrom<br/>(one installment)" --> USDT
EXEC -- "fee 1% + $0.005" --> TREASURY
EXEC -- "⑥ swap USDT→WBTC" --> ROUTER
ROUTER -- "⑦ WBTC straight<br/>to the user's wallet" --> USER
API -- "records execution" --> DB
API -- "🔔 purchase alert" --> TGThe user approves USDT to
DCAExecutor(cap = total plan budget) and creates a plan with on-chain limits (amount per run, minimum interval). Cancelling = one click (cancelPlanorapprove(0)).The keeper discovers plans from
PlanCreatedevents, and each cycle pays the execution API with an x402 micropayment before callingexecute()— so every purchase is also an agent-to-agent payment.On-chain limits mean even a compromised keeper can't overcharge: it can never pull more than
amountPerRunor execute beforeminIntervalelapses.Users get Telegram alerts on every purchase (link from Settings in the app).
Repository layout
Directory | What it is |
| |
Express API + keeper loop (viem) + x402 middleware + Supabase + Telegram bot | |
Next.js PWA (wagmi/viem) — MiniPay auto-connect, plan creation, BTC portfolio | |
Unit economics, copy review | |
Full architecture plan and piece-by-piece feasibility verification |
Running locally
Frontend (needs NEXT_PUBLIC_EXECUTOR_ADDRESS, NEXT_PUBLIC_API_URL, NEXT_PUBLIC_ATTRIBUTION_CODE, NEXT_PUBLIC_TELEGRAM_BOT in frontend/.env.local):
cd frontend && pnpm install && pnpm dev # http://localhost:3000Backend + keeper (Node 22; see backend/src/config.ts for required env vars — executor address, keeper key, Supabase credentials, x402 API key; DB schema in backend/supabase/schema.sql):
cd backend && pnpm install && pnpm dev # API on :8080, keeper ticks every 60sContracts:
cd contracts && forge test # unit + Celo mainnet fork tests
forge script script/Deploy.s.sol --rpc-url celo --broadcast --verify --interactives 1For AI agents
An agent with its own funded wallet can set up a Bitcoin savings plan in two transactions — and so can an agent assisting a human (the web app handles the signing):
MCP server (treasury DCA):
claude mcp add comprabtc -- npx -y comprabtc-mcp— tools to check status, create/renew/cancel the plan and track the portfolio, signing with the treasury's own wallet. Seemcp/README.md.Agent skill:
npx skills add csacanam/comprabtc— covers plan creation (viem), monitoring, budget math, cancelling, and the permissionless x402 execution trigger.Service descriptor (machine-readable how-to):
GET https://comprabtc-production.up.railway.app/· LLM index: comprabtc.vercel.app/llms.txtAgent identity: ERC-8004 #9665 on Celo — metadata · 8004scan
Hackathon tracks
Track 1 — on-chain revenue: protocol fee charged inside
execute(), every tx tagged with ERC-8021 attribution.Track 2 — x402 payments: the keeper pays
/api/executeper run via the Celo x402 facilitator. The endpoint is permissionless — any agent can pay to trigger an execution.Track 4 — Aigora: agent registered on the Aigora marketplace (#395) + feedback PRs at trionlabs/aigora-skills.
License
MIT
This server cannot be installed
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/csacanam/comprabtc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server