Agent Data API
Memecoin screener, backtests, exit alerts, wallet traces + web search, enrichment, 50+ tools (x402)
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"agent-data-api": {
"url": "https://agent-data.centorprat.workers.dev/mcp"
}
}
}远程端点
https://agent-data.centorprat.workers.dev/mcpstreamable-http它能做什么
工具清单
工具(15)
🟢catalog_read(what, watch, since)
FREE, no payment. what=prices: every tool with its price per tier and an input example, plus the plain-HTTP x402 endpoint for each. what=screen_fields: every memecoin field you can filter on, with presets. what=memecoin_alerts: the alerts of a watch (give watch, optional since cursor). what=track_record: how each memecoin preset's live signals actually did at 1 h and 6 h, vs all tokens, and the lookalike model's blind score.
输入模式
{
"type": "object",
"properties": {
"what": {
"type": "string",
"enum": [
"prices",
"screen_fields",
"memecoin_alerts",
"track_record"
],
"description": "Which free answer to return."
},
"watch": {
"type": "string",
"description": "memecoin_alerts: the watch id from memecoin_watch."
},
"since": {
"type": "integer",
"description": "memecoin_alerts: return alerts after this cursor (default 0)."
}
},
"required": [
"what"
]
}🟢web_search(q, read, research, region, time, ...)
Search the web: Google-quality results re-ranked for authority, merged with papers (arXiv), GitHub and news when the query needs them; optional category. Use it to find pages; with read=N it also returns the full clean text of the top N pages; with research=true it reads up to 8 pages and extracts the passages that answer the query, with sources. For one known URL use web_read instead. Price: results only $0.003, read 1-5 pages $0.01, research $0.05. Returns titles, URLs, snippets (and page markdown with a prompt-injection verdict per page). Live results; 1-15 s. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "The query, e.g. 'best espresso machine 2026'."
},
"read": {
"type": "integer",
"minimum": 0,
"maximum": 8,
"description": "Pages to read in full (0 = results only, default 0)."
},
"research": {
"type": "boolean",
"description": "true = research mode: read up to 8 pages and return key passages ($0.05)."
},
"region": {
"type": "string",
"description": "Country code for results, e.g. us, uk, de, es (default us)."
},
"time": {
"type": "string",
"enum": [
"day",
"week",
"month",
"year"
],
"description": "Only results from this period."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Results to return in results-only mode (default 10)."
},
"category": {
"type": "string",
"enum": [
"news",
"research paper",
"github",
"financial",
"company",
"pdf",
"docs"
],
"description": "Optional: favor one kind of source (results-only mode)."
},
"max_chars": {
"type": "integer",
"minimum": 500,
"maximum": 20000,
"description": "Max characters per page read (default 4000)."
}
},
"required": [
"q"
]
}🟢web_read(url, raw, format, max_chars, text, ...)
Fetch one public URL and return its main content as clean markdown (title, publish date, word count) plus a prompt-injection verdict; raw=true returns the raw body instead (text or base64). Give `text` instead of `url` to only scan text you already have for prompt injection. To find pages first use web_search. Price: read $0.003, raw $0.002, text scan $0.002. Fetched live via Cloudflare's network; 1-10 s. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Public http(s) URL to read."
},
"raw": {
"type": "boolean",
"description": "true = raw body (no cleanup), default false."
},
"format": {
"type": "string",
"enum": [
"auto",
"text",
"base64",
"markdown"
],
"description": "raw mode only (default auto)."
},
"max_chars": {
"type": "integer",
"minimum": 500,
"maximum": 100000,
"description": "Max characters returned (default 20000)."
},
"text": {
"type": "string",
"description": "Instead of url: text to scan for prompt injection."
},
"html": {
"type": "string",
"description": "Optional HTML of that text, to also find hidden instructions."
}
}
}🟢company_enrich(domain, tier)
Everything public about a company from its domain: name, description, size hints, address, phones, emails, socials, website platform, email provider and security, SaaS stack. tier=max adds its LinkedIn company page (employees, followers, industry, open jobs) and verifies each email found. For only email checks use email_verify. Price: standard $0.01, max $0.05. Reads the site live; 5-25 s. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Company website domain, e.g. stripe.com."
},
"tier": {
"type": "string",
"enum": [
"standard",
"max"
],
"description": "Default standard."
}
},
"required": [
"domain"
]
}🟢email_verify(emails)
Check email addresses without sending mail: syntax, domain and MX records, disposable domains, role accounts, catch-all hints, and a valid / risky / invalid verdict each, plus a summary. Up to 20 addresses cost $0.002 per call; 21-200 addresses are a bulk call at $0.05. For company data use company_enrich. DNS lookups live; under 1 s for 20. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"emails": {
"description": "Addresses: a list, or one comma-separated string (max 200).",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 200
},
{
"type": "string"
}
]
}
},
"required": [
"emails"
]
}🟢token_check(address, chain, level)
Check a token before trading. level=quick: one-line pre-trade verdict for up to 10 tokens ($0.01). level=safety (default): contract / mint safety: honeypot simulation, buy/sell tax, mint and freeze authority, Token-2022 traps, holders, liquidity ($0.01). level=report: memecoin report with rug-risk %, launch structure, snipers, bundles and a plain summary ($0.02). level=max: all of it plus the holder trace of pump.fun / Base tokens, one verdict and every red flag ($0.10). For wallets use address_check; to find tokens use memecoin_screen. Live data (chain, RugCheck, DexScreener); 1-30 s. Signals, not advice. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Token contract (0x...) or Solana mint. level=quick accepts up to 10, comma separated."
},
"chain": {
"type": "string",
"enum": [
"ethereum",
"bsc",
"base",
"solana"
],
"description": "Chain of a 0x token (Solana mints are detected). Default ethereum."
},
"level": {
"type": "string",
"enum": [
"quick",
"safety",
"report",
"max"
],
"description": "Depth and price (default safety)."
}
},
"required": [
"address"
]
}🟢address_check(address, tier)
Screen a wallet address (BTC, ETH/EVM, Solana, Tron, XRP, LTC) against OFAC sanctions and scam lists with on-chain context. tier=max adds the chain's own trail: a 2-hop Bitcoin trace with exposure, a Solana wallet's age and trading record, or a Base wallet's USDC counterparties. For tokens use token_check. Price: standard $0.01, max $0.05. Live; 2-20 s. Risk signals, not a legal finding. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "The wallet address."
},
"tier": {
"type": "string",
"enum": [
"standard",
"max"
],
"description": "Default standard."
}
},
"required": [
"address"
]
}🟢memecoin_screen(preset, filters, sort, chains, sources, ...)
Run your own screen over the live market: every pump.fun launch from our real-time stream plus DEX pools on Solana and Base, 120+ fields in 5m-24h windows, 8 presets. Use it to FIND tokens; then token_check to vet one, memecoin_holder_trace to trace its buyers, memecoin_watch to be alerted. Poll with `since`. Data refreshes every 20 s. Price $0.01. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"preset": {
"type": "string",
"description": "Optional starting point.",
"enum": [
"fresh-momentum",
"near-graduation",
"fresh-graduates",
"clean-launch",
"volume-breakout",
"dex-safe-movers",
"base-new-pools",
"dump-alert"
]
},
"filters": {
"type": "object",
"description": "{field: condition}; added to the preset's filters (yours win).",
"additionalProperties": true
},
"sort": {
"type": "array",
"description": "Sort keys, e.g. [{\"field\": \"buyers.m5\", \"dir\": \"desc\"}].",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"dir": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
}
}
},
"chains": {
"type": "array",
"items": {
"type": "string",
"enum": [
"solana",
"base"
]
},
"description": "Default both."
},
"sources": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pump.fun",
"dex"
]
},
"description": "pump.fun = bonding curves from our real-time stream; dex = DEX pools. Default both."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max tokens returned (default 20)."
},
"since": {
"type": "string",
"description": "Cursor from a previous response: only tokens created after it (for polling)."
}
},
"required": [],
"description": "A screen strategy. Each filter is {field: condition}. condition = {\"min\": x, \"max\": y} for numbers, true/false for booleans, {\"in\": [...]} / {\"notIn\": [...]} for strings, {\"contains\": text} for lists, {\"exists\": true}. Field names come from catalog_read what=screen_fields, e.g. ageMinutes, marketCapUsd, buyers.m5, buyRatio.m15, volumeUsd.h1, priceChangePct.m5, holders, top10HolderPct, devSoldPct, snipers, bundleSupplyPct, curveProgressPct, liquidityUsd, rugcheck.score, trace.coordinationRiskPct, learned.p2x6h."
}🟢memecoin_holder_trace(token, tier, buyers, depth)
Are a token's early buyers independent or one operator? Follows each early buyer's first funding (up to 2 hops): clusters sharing a funder (exchange hubs excluded), dev-linked and fresh wallets, launch-block bundles, split supply, supply bought and still held, coordination risk %. tier=max: 60 buyers, 2 hops, the creator's other launches and insider rings vs sniper bots. Works for pump.fun tokens (Solana) and Base tokens (0x...). Price: standard $0.02, max $0.10. 5-60 s. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "pump.fun mint or Base token 0x..."
},
"tier": {
"type": "string",
"enum": [
"standard",
"max"
],
"description": "Default standard."
},
"buyers": {
"type": "integer",
"minimum": 5,
"maximum": 60,
"description": "Standard tier: early buyers to trace (default 30)."
},
"depth": {
"type": "integer",
"minimum": 1,
"maximum": 2,
"description": "Standard tier: funding hops (default 2)."
}
},
"required": [
"token"
]
}🟢memecoin_backtest(strategy, exits, entryAt, sweep, costPctPerSide, ...)
Replay a screen strategy plus exit rules on every graded pump.fun token we recorded (snapshots at 5/15/30/60 min of age) or on a preset's live signal ledger: win rate, average / median return after fees, exit reasons, per-day results, best and worst trades. Give `sweep` to try every take-profit x stop-loss x hold combination, ranked on older entries and re-scored on the newest 30% (walk-forward). Price: one rule set $0.01, sweep $0.05. Under 2 s. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"type": "object",
"description": "A screen strategy. Each filter is {field: condition}. condition = {\"min\": x, \"max\": y} for numbers, true/false for booleans, {\"in\": [...]} / {\"notIn\": [...]} for strings, {\"contains\": text} for lists, {\"exists\": true}. Field names come from catalog_read what=screen_fields, e.g. ageMinutes, marketCapUsd, buyers.m5, buyRatio.m15, volumeUsd.h1, priceChangePct.m5, holders, top10HolderPct, devSoldPct, snipers, bundleSupplyPct, curveProgressPct, liquidityUsd, rugcheck.score, trace.coordinationRiskPct, learned.p2x6h.",
"properties": {
"preset": {
"type": "string",
"description": "Optional starting point.",
"enum": [
"fresh-momentum",
"near-graduation",
"fresh-graduates",
"clean-launch",
"volume-breakout",
"dex-safe-movers",
"base-new-pools",
"dump-alert"
]
},
"filters": {
"type": "object",
"description": "{field: condition}; added to the preset's filters (yours win).",
"additionalProperties": true
},
"sort": {
"type": "array",
"description": "Sort keys, e.g. [{\"field\": \"buyers.m5\", \"dir\": \"desc\"}].",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"dir": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
}
}
},
"chains": {
"type": "array",
"items": {
"type": "string",
"enum": [
"solana",
"base"
]
},
"description": "Default both."
},
"sources": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pump.fun",
"dex"
]
},
"description": "pump.fun = bonding curves from our real-time stream; dex = DEX pools. Default both."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max tokens returned (default 20)."
},
"since": {
"type": "string",
"description": "Cursor from a previous response: only tokens created after it (for polling)."
}
}
},
"exits": {
"type": "object",
"description": "Exit rules (same names as memecoin_exit_check).",
"properties": {
"takeProfit": {
"type": "array",
"description": "Tiers: [{\"atPct\": 100, \"sellPct\": 50}, {\"atPct\": 300, \"sellPct\": 100}] = at +100% sell 50% of the original position, at +300% sell the rest.",
"items": {
"type": "object",
"properties": {
"atPct": {
"type": "number"
},
"sellPct": {
"type": "number"
}
}
}
},
"stopLossPct": {
"type": "number",
"description": "Exit if this % below entry, e.g. 35."
},
"trailingStopPct": {
"type": "number",
"description": "Exit if this % below the peak since entry."
},
"trailingActivatesAtPct": {
"type": "number",
"description": "The trailing stop only applies once the gain reached this %."
},
"maxHoldMinutes": {
"type": "number",
"description": "Time stop in minutes (max 360)."
}
}
},
"entryAt": {
"description": "Snapshot age in minutes (5, 15, 30, 60) or \"signal\" (a preset's live signals). Default 15.",
"anyOf": [
{
"type": "integer",
"enum": [
5,
15,
30,
60
]
},
{
"type": "string",
"enum": [
"signal"
]
}
]
},
"sweep": {
"type": "object",
"description": "Grid to sweep (max 64 combinations).",
"properties": {
"takeProfitPct": {
"type": "array",
"items": {
"type": "number"
},
"description": "Take-profit levels to try, e.g. [30, 100, 200]."
},
"stopLossPct": {
"type": "array",
"items": {
"type": "number"
},
"description": "Stop-loss levels to try, e.g. [20, 35, 50]."
},
"maxHoldMinutes": {
"type": "array",
"items": {
"type": "number"
},
"description": "Time stops to try, e.g. [15, 60, 240]."
}
}
},
"costPctPerSide": {
"type": "number",
"description": "Fees + slippage per side in % (default 2)."
},
"minVolumeUsd5m": {
"type": "number",
"description": "Skip tokens with less 5-minute volume at entry (default 500)."
},
"days": {
"type": "number",
"description": "Lookback in days (default 7, max 21)."
}
}
}🟢memecoin_exit_check(token, chain, entry, rules, alreadySoldPct, ...)
Your entry and exit rules applied to the token's real path since you entered: hold / sell X% / exit now, with every rule that fired and the position's gain, peak and drawdown. Includes live-only rules (dev sells, sniper dumps, sell-burst dump detector, liquidity drop). Poll it while you hold, or let memecoin_watch poll for you. Price $0.003. Under 2 s. Signals only: your agent executes the trade. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Token mint / contract."
},
"chain": {
"type": "string",
"enum": [
"solana",
"base",
"ethereum",
"bsc"
],
"description": "Optional; detected from the token."
},
"entry": {
"type": "object",
"description": "Give ONE of: marketCapUsd, priceUsd or time (ISO 8601, e.g. 2026-10-24T09:00:00Z).",
"properties": {
"marketCapUsd": {
"type": "number",
"description": "Market cap in USD when you bought."
},
"priceUsd": {
"type": "number",
"description": "Token price in USD when you bought."
},
"time": {
"type": "string",
"description": "When you bought, ISO 8601 (the price then is read from our records)."
}
}
},
"rules": {
"type": "object",
"description": "Exit rules: everything in the backtest exits plus live-only signals.",
"properties": {
"takeProfit": {
"type": "array",
"description": "Tiers: [{\"atPct\": 100, \"sellPct\": 50}, {\"atPct\": 300, \"sellPct\": 100}] = at +100% sell 50% of the original position, at +300% sell the rest.",
"items": {
"type": "object",
"properties": {
"atPct": {
"type": "number"
},
"sellPct": {
"type": "number"
}
}
}
},
"stopLossPct": {
"type": "number",
"description": "Exit if this % below entry, e.g. 35."
},
"trailingStopPct": {
"type": "number",
"description": "Exit if this % below the peak since entry."
},
"trailingActivatesAtPct": {
"type": "number",
"description": "The trailing stop only applies once the gain reached this %."
},
"maxHoldMinutes": {
"type": "number",
"description": "Time stop in minutes (max 360)."
},
"exitIfDevSells": {
"type": "boolean",
"description": "The creator wallet sold after your entry."
},
"exitIfDevSoldPctAbove": {
"type": "number",
"description": "The creator has sold more than this % of its bag."
},
"exitIfSniperHoldDropPct": {
"type": "number",
"description": "Snipers dumped this % of their launch bag."
},
"exitIfTop10AbovePct": {
"type": "number",
"description": "Top-10 holders own more than this %."
},
"exitIfSellRatioAbove": {
"type": "number",
"description": "Share of sells (0-1) in `window` above this."
},
"window": {
"type": "string",
"enum": [
"m5",
"m15",
"m30",
"h1"
],
"description": "Window for exitIfSellRatioAbove (default m5)."
},
"exitIfLiquidityDropPct": {
"type": "number",
"description": "DEX liquidity fell this % in the last hour."
},
"exitIfDrawdownFromPeakPct": {
"type": "number",
"description": "Token is this % below its all-time peak."
},
"exitIfVerdict": {
"type": "string",
"enum": [
"avoid",
"caution"
],
"description": "Pre-trade verdict flipped to this."
},
"exitIfSellBurst": {
"type": "number",
"description": "Dump detector: last minute's sell volume >= this multiple of the token's median minute volume (pump.fun), e.g. 4."
},
"exitIfStall": {
"type": "object",
"properties": {
"minutes": {
"type": "number",
"description": "Minutes held."
},
"minGainPct": {
"type": "number",
"description": "Gain % it must have reached by then."
}
},
"description": "Exit after `minutes` if the gain never reached minGainPct."
},
"exitIfCollapseProbAbove": {
"type": "number",
"description": "Lookalike model: probability (0-1) of an 80% collapse within 1 h."
},
"exitIfCoordinationAbove": {
"type": "number",
"description": "Wallet trace coordination risk % above this."
}
}
},
"alreadySoldPct": {
"type": "number",
"description": "% of the original position already sold (for tiered take-profits)."
},
"notifyAtGainPct": {
"type": "array",
"items": {
"type": "number"
},
"description": "Watches only: alert once at each gain %, e.g. [50, 100, 200]."
}
},
"required": [
"token",
"entry"
],
"description": "An open position to check."
}🟢memecoin_watch(type, strategy, position, interval, tier, ...)
Creates a watch (this is the only tool that stores state): we re-run your screen strategy (alert on each new matching token) or your position's exit rules (alert when hold turns into sell / exit, plus gain milestones) on your interval. Read alerts free with catalog_read what=memecoin_alerts, or get them by webhook / Telegram / Discord. tier=standard: 24 h, intervals 5m-1d (positions also 1m), $0.05. tier=max: 7 days, strategies at 1m too, $0.25. Keep the returned watch id secret: it is the key to its alerts. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"strategy",
"position"
],
"description": "strategy = alert on new matching tokens; position = alert on exit signals."
},
"strategy": {
"type": "object",
"description": "A screen strategy. Each filter is {field: condition}. condition = {\"min\": x, \"max\": y} for numbers, true/false for booleans, {\"in\": [...]} / {\"notIn\": [...]} for strings, {\"contains\": text} for lists, {\"exists\": true}. Field names come from catalog_read what=screen_fields, e.g. ageMinutes, marketCapUsd, buyers.m5, buyRatio.m15, volumeUsd.h1, priceChangePct.m5, holders, top10HolderPct, devSoldPct, snipers, bundleSupplyPct, curveProgressPct, liquidityUsd, rugcheck.score, trace.coordinationRiskPct, learned.p2x6h.",
"properties": {
"preset": {
"type": "string",
"description": "Optional starting point.",
"enum": [
"fresh-momentum",
"near-graduation",
"fresh-graduates",
"clean-launch",
"volume-breakout",
"dex-safe-movers",
"base-new-pools",
"dump-alert"
]
},
"filters": {
"type": "object",
"description": "{field: condition}; added to the preset's filters (yours win).",
"additionalProperties": true
},
"sort": {
"type": "array",
"description": "Sort keys, e.g. [{\"field\": \"buyers.m5\", \"dir\": \"desc\"}].",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"dir": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
}
}
},
"chains": {
"type": "array",
"items": {
"type": "string",
"enum": [
"solana",
"base"
]
},
"description": "Default both."
},
"sources": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pump.fun",
"dex"
]
},
"description": "pump.fun = bonding curves from our real-time stream; dex = DEX pools. Default both."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Max tokens returned (default 20)."
},
"since": {
"type": "string",
"description": "Cursor from a previous response: only tokens created after it (for polling)."
}
}
},
"position": {
"type": "object",
"description": "An open position to check.",
"required": [
"token",
"entry"
],
"properties": {
"token": {
"type": "string",
"description": "Token mint / contract."
},
"chain": {
"type": "string",
"enum": [
"solana",
"base",
"ethereum",
"bsc"
],
"description": "Optional; detected from the token."
},
"entry": {
"type": "object",
"description": "Give ONE of: marketCapUsd, priceUsd or time (ISO 8601, e.g. 2026-10-24T09:00:00Z).",
"properties": {
"marketCapUsd": {
"type": "number",
"description": "Market cap in USD when you bought."
},
"priceUsd": {
"type": "number",
"description": "Token price in USD when you bought."
},
"time": {
"type": "string",
"description": "When you bought, ISO 8601 (the price then is read from our records)."
}
}
},
"rules": {
"type": "object",
"description": "Exit rules: everything in the backtest exits plus live-only signals.",
"properties": {
"takeProfit": {
"type": "array",
"description": "Tiers: [{\"atPct\": 100, \"sellPct\": 50}, {\"atPct\": 300, \"sellPct\": 100}] = at +100% sell 50% of the original position, at +300% sell the rest.",
"items": {
"type": "object",
"properties": {
"atPct": {
"type": "number"
},
"sellPct": {
"type": "number"
}
}
}
},
"stopLossPct": {
"type": "number",
"description": "Exit if this % below entry, e.g. 35."
},
"trailingStopPct": {
"type": "number",
"description": "Exit if this % below the peak since entry."
},
"trailingActivatesAtPct": {
"type": "number",
"description": "The trailing stop only applies once the gain reached this %."
},
"maxHoldMinutes": {
"type": "number",
"description": "Time stop in minutes (max 360)."
},
"exitIfDevSells": {
"type": "boolean",
"description": "The creator wallet sold after your entry."
},
"exitIfDevSoldPctAbove": {
"type": "number",
"description": "The creator has sold more than this % of its bag."
},
"exitIfSniperHoldDropPct": {
"type": "number",
"description": "Snipers dumped this % of their launch bag."
},
"exitIfTop10AbovePct": {
"type": "number",
"description": "Top-10 holders own more than this %."
},
"exitIfSellRatioAbove": {
"type": "number",
"description": "Share of sells (0-1) in `window` above this."
},
"window": {
"type": "string",
"enum": [
"m5",
"m15",
"m30",
"h1"
],
"description": "Window for exitIfSellRatioAbove (default m5)."
},
"exitIfLiquidityDropPct": {
"type": "number",
"description": "DEX liquidity fell this % in the last hour."
},
"exitIfDrawdownFromPeakPct": {
"type": "number",
"description": "Token is this % below its all-time peak."
},
"exitIfVerdict": {
"type": "string",
"enum": [
"avoid",
"caution"
],
"description": "Pre-trade verdict flipped to this."
},
"exitIfSellBurst": {
"type": "number",
"description": "Dump detector: last minute's sell volume >= this multiple of the token's median minute volume (pump.fun), e.g. 4."
},
"exitIfStall": {
"type": "object",
"properties": {
"minutes": {
"type": "number",
"description": "Minutes held."
},
"minGainPct": {
"type": "number",
"description": "Gain % it must have reached by then."
}
},
"description": "Exit after `minutes` if the gain never reached minGainPct."
},
"exitIfCollapseProbAbove": {
"type": "number",
"description": "Lookalike model: probability (0-1) of an 80% collapse within 1 h."
},
"exitIfCoordinationAbove": {
"type": "number",
"description": "Wallet trace coordination risk % above this."
}
}
},
"alreadySoldPct": {
"type": "number",
"description": "% of the original position already sold (for tiered take-profits)."
},
"notifyAtGainPct": {
"type": "array",
"items": {
"type": "number"
},
"description": "Watches only: alert once at each gain %, e.g. [50, 100, 200]."
}
}
},
"interval": {
"type": "string",
"enum": [
"1m",
"5m",
"15m",
"30m",
"1h",
"4h",
"1d"
],
"description": "Check interval (default 5m)."
},
"tier": {
"type": "string",
"enum": [
"standard",
"max"
],
"description": "Default standard."
},
"webhook": {
"type": "string",
"description": "Optional https URL: each alert is POSTed there."
},
"notify": {
"type": "object",
"description": "Optional delivery of each alert as a message.",
"properties": {
"telegram": {
"type": "object",
"description": "Send alerts with your Telegram bot.",
"properties": {
"botToken": {
"type": "string",
"description": "From @BotFather, e.g. 123456:AA..."
},
"chatId": {
"type": "string",
"description": "Numeric chat id or @channel (add the bot first)."
}
}
},
"discordWebhook": {
"type": "string",
"description": "https://discord.com/api/webhooks/... URL."
}
}
}
},
"required": [
"type"
]
}🟢x402_lookup(action, need, max_price, network, limit, ...)
Answers about the x402 agent-payments market from the whole Bazaar index and Base chain history. action=recommend: which x402 API to call for a need, ranked by fit, price and trust ($0.005). seller_check: is an x402 endpoint / seller trustworthy, its prices and payers ($0.005). payer_profile: a Base wallet's x402 payments, sellers and counterparties up to 3 hops ($0.01). seller_customers: who pays a seller and how much ($0.01). payments_feed: a wallet's payments in time order, with a cursor ($0.003). Bazaar index refreshed every 6 h; chain data real time. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"recommend",
"seller_check",
"payer_profile",
"seller_customers",
"payments_feed"
],
"description": "Which question to answer (sets the price, see above)."
},
"need": {
"type": "string",
"description": "recommend: the task in plain words, e.g. 'weather forecast for a city'."
},
"max_price": {
"type": "number",
"description": "recommend: max USD per call."
},
"network": {
"type": "string",
"description": "recommend: e.g. base, solana."
},
"limit": {
"type": "integer",
"description": "recommend / payments_feed: rows to return."
},
"url": {
"type": "string",
"description": "seller_check: endpoint URL, host or payTo address."
},
"address": {
"type": "string",
"description": "payer_profile / payments_feed: Base wallet 0x..."
},
"seller": {
"type": "string",
"description": "seller_customers: seller host or payTo address."
},
"days": {
"type": "integer",
"description": "payer_profile / seller_customers: lookback days (default 30)."
},
"depth": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "payer_profile: hops (default 1)."
},
"since": {
"type": "string",
"description": "payments_feed: ISO time cursor from the previous response."
}
},
"required": [
"action"
]
}🟢shopify_lookup(action, domain, app, exclude_app, missing, ...)
action=store: one Shopify store's apps by category (reviews, email, subscriptions, loyalty...), pixels, theme and catalog hints, gaps and sales pitch angles. action=search: stores from our index of ~19k Shopify stores by app used / not used, missing category, country and keyword (lead lists). Price $0.01 each. Store reads are live (3-15 s); the index is refreshed weekly. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"store",
"search"
],
"description": "store = one store by domain; search = find stores in the index."
},
"domain": {
"type": "string",
"description": "store: the store's domain, e.g. allbirds.com."
},
"app": {
"type": "string",
"description": "search: stores using this app, e.g. Klaviyo."
},
"exclude_app": {
"type": "string",
"description": "search: stores NOT using this app."
},
"missing": {
"type": "string",
"description": "search: stores with no app in this category, e.g. loyalty."
},
"country": {
"type": "string",
"description": "search: 2-letter country, e.g. US."
},
"q": {
"type": "string",
"description": "search: keyword in the store name or products."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"description": "search: rows (default 10)."
}
},
"required": [
"action"
]
}🟢data_tool_run(tool, input, tier)
Runs one data tool with its JSON input: Google Maps places with contacts, YouTube videos / transcripts / comments, Indeed, LinkedIn and 13 other job boards, LinkedIn companies, Google News and Trends, Google Ads library, TikTok comments, Pinterest, Airbnb, Redfin, AliExpress, app stores, website contacts and SEO checks, sanctions, clinical trials and more. catalog_read what=prices lists every tool with an input example. Price $0.01 per call (small capped runs). tier=max runs a bigger job for: google-maps-scraper ($0.10), indeed-jobs-scraper ($0.05), linkedin-company-scraper ($0.05), linkedin-jobs-scraper ($0.05), youtube-comments-scraper ($0.05). Runs live on Apify; 10 s-4 min. Paid with x402 (USDC on Base, Polygon or Solana) per call; failed or empty calls are never charged.
输入模式
{
"type": "object",
"properties": {
"tool": {
"type": "string",
"description": "Tool id from catalog_read what=prices, e.g. google-maps-scraper."
},
"input": {
"type": "object",
"description": "The tool's JSON input (see its example in catalog).",
"additionalProperties": true
},
"tier": {
"type": "string",
"enum": [
"standard",
"max"
],
"description": "max = bigger caps, only for the tools listed above."
}
},
"required": [
"tool",
"input"
]
}社区
证据