madeonsol_tokens_list
Browse filtered, sortable Solana token directory by market-cap, liquidity, activity, DEX, and authority flags. Includes computed 1h volume, MEV-share, and MC-change deltas.
Instructions
Filtered, sortable token directory. Browse all tracked Solana tokens by market-cap band, liquidity floor, recent-activity window, primary DEX, authority/safety flags, and computed 1h volume / MEV-share / MC-change deltas. Default min_liq=2000 skips phantom-MC dust (low-liquidity pools producing absurd VWAP×supply products) — pass min_liq=0 to opt out. Computed filters (min_volume_1h_usd, max_mev_share_pct, mc_change_1h_min_pct, mc_change_1h_max_pct) over-fetch and post-filter — pagination.post_filtered=true on the response means page size may be < limit. PRO+ only.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| min_mc | No | Minimum market cap in USD | |
| max_mc | No | Maximum market cap in USD | |
| min_liq | No | Minimum quote-side liquidity in USD (default 2000 — pass 0 to opt out of phantom-MC filter) | |
| active_h | No | Only tokens with a trade in the last N hours | |
| primary_dex | No | Filter by primary DEX | |
| authority_revoked | No | Only tokens whose mint+freeze authority is revoked | |
| exclude_token2022 | No | Exclude Token-2022 mints (transfer-fee / hook risk) | |
| min_lp_burnt_pct | No | Minimum % of LP supply burned (0-100) | |
| min_volume_1h_usd | No | Minimum trailing 1h volume in USD (post-filter — may shrink page size) | |
| max_mev_share_pct | No | Maximum MEV-share % of 1h volume (post-filter) | |
| mc_change_1h_min_pct | No | Minimum 1h MC change % (post-filter; negative allowed) | |
| mc_change_1h_max_pct | No | Maximum 1h MC change % (post-filter) | |
| sort | No | Sort axis (default mc_desc) | |
| limit | No | Page size (max 100) | |
| offset | No | Pagination offset |
Implementation Reference
- src/index.ts:569-577 (handler)Tool handler: fetches the filtered token directory from /api/v1/tokens, passing all query parameters (min_mc, max_mc, min_liq, active_h, primary_dex, authority_revoked, etc.) as URL search params.
async (args) => { const url = new URL(`${BASE_URL}/api/v1/tokens`); for (const [k, v] of Object.entries(args)) { if (v !== undefined) url.searchParams.set(k, typeof v === "boolean" ? (v ? "true" : "false") : String(v)); } const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } }); const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`; return { content: [{ type: "text" as const, text }] }; } - src/index.ts:551-567 (schema)Zod schema defining all input parameters for the madeonsol_tokens_list tool: market cap range, liquidity floor, activity window, DEX filter, authority/safety flags, computed filters, sort, and pagination.
{ min_mc: z.number().optional().describe("Minimum market cap in USD"), max_mc: z.number().optional().describe("Maximum market cap in USD"), min_liq: z.number().optional().describe("Minimum quote-side liquidity in USD (default 2000 — pass 0 to opt out of phantom-MC filter)"), active_h: z.number().optional().describe("Only tokens with a trade in the last N hours"), primary_dex: z.enum(["pumpfun", "pumpswap", "raydium", "meteora", "orca", "raydium_clmm"]).optional().describe("Filter by primary DEX"), authority_revoked: z.boolean().optional().describe("Only tokens whose mint+freeze authority is revoked"), exclude_token2022: z.boolean().optional().describe("Exclude Token-2022 mints (transfer-fee / hook risk)"), min_lp_burnt_pct: z.number().optional().describe("Minimum % of LP supply burned (0-100)"), min_volume_1h_usd: z.number().optional().describe("Minimum trailing 1h volume in USD (post-filter — may shrink page size)"), max_mev_share_pct: z.number().optional().describe("Maximum MEV-share % of 1h volume (post-filter)"), mc_change_1h_min_pct: z.number().optional().describe("Minimum 1h MC change % (post-filter; negative allowed)"), mc_change_1h_max_pct: z.number().optional().describe("Maximum 1h MC change % (post-filter)"), sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc"]).optional().describe("Sort axis (default mc_desc)"), limit: z.number().min(1).max(100).optional().describe("Page size (max 100)"), offset: z.number().min(0).optional().describe("Pagination offset"), }, - src/index.ts:548-578 (registration)Registration of the madeonsol_tokens_list tool via server.tool() with its name, description, Zod schema, read-only annotations, and handler function.
server.tool( "madeonsol_tokens_list", "Filtered, sortable token directory. Browse all tracked Solana tokens by market-cap band, liquidity floor, recent-activity window, primary DEX, authority/safety flags, and computed 1h volume / MEV-share / MC-change deltas. Default min_liq=2000 skips phantom-MC dust (low-liquidity pools producing absurd VWAP×supply products) — pass min_liq=0 to opt out. Computed filters (min_volume_1h_usd, max_mev_share_pct, mc_change_1h_min_pct, mc_change_1h_max_pct) over-fetch and post-filter — pagination.post_filtered=true on the response means page size may be < limit. PRO+ only.", { min_mc: z.number().optional().describe("Minimum market cap in USD"), max_mc: z.number().optional().describe("Maximum market cap in USD"), min_liq: z.number().optional().describe("Minimum quote-side liquidity in USD (default 2000 — pass 0 to opt out of phantom-MC filter)"), active_h: z.number().optional().describe("Only tokens with a trade in the last N hours"), primary_dex: z.enum(["pumpfun", "pumpswap", "raydium", "meteora", "orca", "raydium_clmm"]).optional().describe("Filter by primary DEX"), authority_revoked: z.boolean().optional().describe("Only tokens whose mint+freeze authority is revoked"), exclude_token2022: z.boolean().optional().describe("Exclude Token-2022 mints (transfer-fee / hook risk)"), min_lp_burnt_pct: z.number().optional().describe("Minimum % of LP supply burned (0-100)"), min_volume_1h_usd: z.number().optional().describe("Minimum trailing 1h volume in USD (post-filter — may shrink page size)"), max_mev_share_pct: z.number().optional().describe("Maximum MEV-share % of 1h volume (post-filter)"), mc_change_1h_min_pct: z.number().optional().describe("Minimum 1h MC change % (post-filter; negative allowed)"), mc_change_1h_max_pct: z.number().optional().describe("Maximum 1h MC change % (post-filter)"), sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc"]).optional().describe("Sort axis (default mc_desc)"), limit: z.number().min(1).max(100).optional().describe("Page size (max 100)"), offset: z.number().min(0).optional().describe("Pagination offset"), }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (args) => { const url = new URL(`${BASE_URL}/api/v1/tokens`); for (const [k, v] of Object.entries(args)) { if (v !== undefined) url.searchParams.set(k, typeof v === "boolean" ? (v ? "true" : "false") : String(v)); } const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } }); const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`; return { content: [{ type: "text" as const, text }] }; } );