HTTP
POST /api/quote returns the snapped ticks and the rent of a list of bands. POST /api/paint returns the batch, base64 transactions with the position NFT keys already signed, ready for the owner's wallet.
curl -X POST $SITE/api/paint -H 'content-type: application/json' -d '{
"owner": "<wallet>",
"base": "So11111111111111111111111111111111111111112",
"quote": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"configId": "3h2e43PunVA5K34vwKCLHWhZF4aZpyaC9RmxvshGAQpL",
"bands": [{ "id": "a", "lo": 70, "hi": 80, "value": 50 }]
}'bandsToPositions
A single TypeScript file, /sdk/feepad.ts, wraps the endpoint. Copy it into a project; it needs @solana/web3.js and nothing else.
import { bandsToPositions } from "./feepad";
const batch = await bandsToPositions({
site: "https://<feepad site>",
owner: wallet.publicKey.toBase58(),
base: SOL, quote: USDC, tier: "0.04%",
bands: [{ lo: 70, hi: 80, value: 50 }, { lo: 80, hi: 83, value: 30 }],
});
const signed = await wallet.signAllTransactions(batch.transactions);MCP server
The site serves an MCP endpoint over HTTP at /api/mcp (JSON-RPC 2.0). Tools:
| Tool | Does |
|---|---|
list_tiers | The 18 CLMM fee tiers with tick spacing |
pool_view | Pool id, existence and live price for a pair and tier |
quote_bands | Snapped ticks and rent for a list of bands |
paint_positions | The signed-ready batch for a list of bands |
list_coins | Feepad coins and their curve progress |
ledger | Claims, shapes and burns with signatures |
{ "mcpServers": { "feepad": { "type": "http", "url": "https://<feepad site>/api/mcp" } } }