QuickBuild agent tools (x402)

Screenshot, TTS, image gen, translate, summarize, URL-to-Markdown, site audit. Pay per call (x402).

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
87%
Naming quality
82%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin summarize
  • MEDIUMTool description contains URL to non-standard domainin screenshot_url

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,785Tokens (tool definitions)
~1.3 KBTypical response size
Significant attention impact (4.52% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agent-tools": {
      "url": "https://quickbuild.quynguyenbac.workers.dev/mcp"
    }
  }
}

Remote endpoints

https://quickbuild.quynguyenbac.workers.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (18)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢website_audit(url)

[PAID $0.05 USDC per call via x402 on Base; errors are free] Pre-launch website audit: up to 3 pages crawled, 30 links checked, meta/OG/canonical, security headers, HTTPS, 404 handling, sitemap, and leaked-secret patterns in client JS (masked). Read-only.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL (hostname, not IP). Private/reserved addresses are refused. Optional: defaults to https://example.com."
    }
  },
  "required": []
}
🟢page_metadata(url)

[PAID $0.005 USDC per call via x402 on Base; errors are free] Fetch one public web page and return structured metadata: title, meta description, canonical, lang, robots, Open Graph and Twitter card tags, favicon, RSS/Atom feeds, JSON-LD @types, and internal/external links (up to 100 each). Good for link previews, unfurling and quick site triage.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL (hostname, not IP). Private/reserved addresses are refused. Optional: defaults to https://example.com."
    }
  },
  "required": []
}
🟢url_to_markdown(url, maxChars)

[PAID $0.005 USDC per call via x402 on Base; errors are free] Fetch one public web page and return its main content (article/main/body, scripts/nav/footer stripped) as clean Markdown with absolute links, plus title and length. Up to 2 MB HTML, 10 s timeout; optional maxChars (default 50000, max 200000).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL (hostname, not IP). Private/reserved addresses are refused. Optional: defaults to https://example.com."
    },
    "maxChars": {
      "type": "integer",
      "minimum": 500,
      "maximum": 200000,
      "description": "Truncate markdown to this many characters (default 50000)"
    }
  },
  "required": []
}
🟢summarize(url, text, length, maxPoints, focus, ...)

[PAID $0.02 USDC per call via x402 on Base; errors are free] Fetch a public web page (or take raw text) and return a structured JSON brief made by Llama 3.3 70B: title, language, contentType, summary, keyPoints, named entities with types, topic tags, concrete facts (prices, dates, versions, limits) as label/value pairs, sentiment and audience. Grounded in the page only, no invented facts. Reads up to 24,000 chars of main content (2 MB HTML, 10 s fetch timeout). All params optional: with none it summarizes https://example.com. GET with query params, or POST a JSON body for long text (up to 200,000 chars accepted, first 24,000 analyzed).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL to read (hostname, not IP; private addresses refused). Optional: defaults to https://example.com. Ignored when `text` is given."
    },
    "text": {
      "type": "string",
      "description": "Raw text or Markdown to summarize instead of a URL (optional, max 200000 chars, first 24000 analyzed). Prefer POST for long text."
    },
    "length": {
      "type": "string",
      "enum": [
        "short",
        "medium",
        "long"
      ],
      "description": "Summary length: short = 1-2 sentences, medium = 3-4 (default), long = 5-8."
    },
    "maxPoints": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "description": "Max number of keyPoints (default 5)."
    },
    "focus": {
      "type": "string",
      "description": "Optional aspect to emphasize, e.g. \"pricing\", \"API limits\", \"risks\" (max 200 chars)."
    },
    "lang": {
      "type": "string",
      "description": "Optional output language for summary/keyPoints (ISO 639-1, e.g. \"en\"). Default: same as the content."
    }
  },
  "required": []
}
🟢translate(text, url, to, from, maxChars)

[PAID $0.005 USDC per call via x402 on Base; errors are free] LLM translation (Meta Llama 4 Scout on Workers AI, M2M100 fallback). Give `text`, or a `url` whose main content is extracted as Markdown and translated in blocks, preserving Markdown formatting, URLs and code blocks. Source language auto-detected (or set `from`). Up to 20,000 chars per call (default 8,000). All params optional: with none it translates a short Spanish sample to English. Languages: en,es,fr,de,it,pt,nl,ru,uk,pl,cs,ro,hu,el,bg,sv,da,no,fi,tr,ar,he,fa,hi,bn,ur,ta,zh,ja,ko,vi,th,id,ms,tl,sw.

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "Text or Markdown to translate (optional). If omitted and no url, a short Spanish sample is used."
    },
    "url": {
      "type": "string",
      "description": "Public http(s) URL whose main content is translated (optional; used when `text` is absent)."
    },
    "to": {
      "type": "string",
      "description": "Target language, ISO 639-1 code or English name (default \"en\")."
    },
    "from": {
      "type": "string",
      "description": "Source language code, or \"auto\" (default: auto-detect)."
    },
    "maxChars": {
      "type": "integer",
      "minimum": 100,
      "maximum": 20000,
      "description": "Max source chars to translate (default 8000)."
    }
  },
  "required": []
}
🟢generate_image(prompt, steps)

[PAID $0.01 USDC per call via x402 on Base; errors are free] Generate an original 1024x1024 image from a text prompt with FLUX.1 [schnell] on Workers AI (about 2-5 s). Returns JSON with image_base64 + mimeType, or the raw image bytes with format=jpeg. Content policy: no sexual/nude, gore, hate, real or famous people, or ID documents/currency; such prompts get HTTP 400 and are not charged. All params optional: with no prompt a sample watercolor lighthouse is drawn.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "What to draw (max 1000 chars). Optional: defaults to a watercolor lighthouse."
    },
    "steps": {
      "type": "integer",
      "minimum": 1,
      "maximum": 8,
      "description": "Diffusion steps, more = more detail (default 4)."
    }
  },
  "required": []
}
🟢screenshot_url(url, width, height, fullPage, type, ...)

[PAID $0.008 USDC per call via x402 on Base; errors are free] Render a public web page in a real headless Chrome (JavaScript executed, waits for network idle) and return a screenshot: viewport (default 1280x800) or full page (up to 8000 px tall), PNG or JPEG, optional dark mode and extra wait. JSON with image_base64 + finalUrl/status/title, or raw image bytes with format=png|jpeg. Typically 2-6 s (up to ~25 s when busy). Use it for visual QA, link previews, archiving, checking what a page really shows, or feeding a vision model. Adult/malware domains (Cloudflare family DNS) and private addresses are refused. All params optional: with none it captures https://example.com. Errors are never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL to capture (hostname, not IP). Optional: defaults to https://example.com."
    },
    "width": {
      "type": "integer",
      "minimum": 320,
      "maximum": 1920,
      "description": "Viewport width in px (default 1280)."
    },
    "height": {
      "type": "integer",
      "minimum": 240,
      "maximum": 2000,
      "description": "Viewport height in px (default 800)."
    },
    "fullPage": {
      "type": "boolean",
      "description": "Capture the whole scrollable page, capped at 8000 px tall (default false)."
    },
    "type": {
      "type": "string",
      "enum": [
        "png",
        "jpeg"
      ],
      "description": "Image type (default png)."
    },
    "quality": {
      "type": "integer",
      "minimum": 30,
      "maximum": 100,
      "description": "JPEG quality (default 80; jpeg only)."
    },
    "waitMs": {
      "type": "integer",
      "minimum": 0,
      "maximum": 5000,
      "description": "Extra wait after load before capturing, ms (default 0)."
    },
    "darkMode": {
      "type": "boolean",
      "description": "Emulate prefers-color-scheme: dark (default false)."
    }
  },
  "required": []
}
🟢text_to_speech(text, lang)

[PAID $0.005 USDC per call via x402 on Base; errors are free] Turn text (up to 2000 chars) into spoken audio with MeloTTS on Cloudflare Workers AI, in English, Spanish, French, Chinese, Japanese or Korean. Returns JSON with audio_base64 + mimeType (audio/wav, 44.1 kHz mono), or the raw audio bytes with format=wav. Good for voice replies, narration, accessibility and language practice. Text with sexual, hateful or violent content is refused (HTTP 400, not charged). All params optional: with none it speaks a short English sample. GET with query params or POST a JSON body.

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "Text to speak (max 2000 chars). Optional: defaults to a short English sample."
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "es",
        "fr",
        "zh",
        "ja",
        "ko"
      ],
      "description": "Language of the text / voice (default en)."
    }
  },
  "required": []
}
🟢base_gas_price

[PAID $0.001 USDC per call via x402 on Base; errors are free] Live gas snapshot for Base mainnet (chain 8453) read from public Base RPC: latest block number/time/utilization, base fee, eth_gasPrice, eth_maxPriorityFeePerGas, the last 10 blocks of base fees, slow/standard/fast EIP-1559 fee suggestions (10th/50th/90th percentile tips) in gwei and wei, and the estimated total cost (L2 execution + OP Stack L1 data-fee upper bound) of an ETH transfer, an ERC-20 transfer and a swap in ETH and USD (Chainlink ETH/USD on Base). No params. Cached 4 s. Errors are never charged.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢base_wallet_balances(address, tokens, includeZero)

[PAID $0.002 USDC per call via x402 on Base; errors are free] Balances of one address on Base mainnet in a single call: native ETH, the well-known tokens USDC, USDT, USDbC, DAI, WETH, cbETH, wstETH, AERO (non-zero only, or all with includeZero=true), plus up to 10 extra ERC-20 contracts you pass in `tokens` (symbol/name/decimals read on-chain). Also nonce, account type (EOA, EIP-7702 delegated EOA, or contract) and a USD total for ETH/WETH (Chainlink) and stablecoins. Read live from public Base RPC via Multicall3; cached 10 s. All params optional: defaults to a well-known public address. Invalid input = 400, never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Base address (0x + 40 hex). Optional: defaults to 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 (vitalik.eth)."
    },
    "tokens": {
      "type": "string",
      "description": "Optional comma-separated extra ERC-20 contract addresses on Base (max 10)."
    },
    "includeZero": {
      "type": "boolean",
      "description": "Also list well-known tokens with zero balance (default false)."
    }
  },
  "required": []
}
🟢base_token_info(address, holder)

[PAID $0.002 USDC per call via x402 on Base; errors are free] Inspect a token or any address on Base mainnet: contract vs EOA (incl. EIP-7702 delegation), bytecode size, ERC-20 name/symbol/decimals/totalSupply (raw and formatted; bytes32 symbols handled), proxy implementation (EIP-1967, beacon, ZeppelinOS/FiatToken), whether it is a well-known Base token (guards against spoofed symbols), and optionally the balance of `holder`. Read live from public Base RPC; metadata cached 1 h. All params optional: defaults to USDC on Base. Invalid input = 400, never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Token / contract address on Base (0x + 40 hex). Optional: defaults to USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913."
    },
    "holder": {
      "type": "string",
      "description": "Optional address whose balance of this token to include."
    }
  },
  "required": []
}
🟢base_tx_status(hash)

[PAID $0.002 USDC per call via x402 on Base; errors are free] Look up one transaction on Base mainnet by hash: status (success, failed or pending), block, timestamp, confirmations, from/to, value, method id, gas used, effective gas price, fee split into L2 execution and L1 data fee (ETH and USD), contract created, and decoded ERC-20 Transfer events (token, symbol, from, to, amount; up to 20). Useful to confirm a payment landed. Read live from public Base RPC. All params optional: defaults to a confirmed USDC x402 payment. Unknown hash = 404, invalid hash = 400, never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "hash": {
      "type": "string",
      "description": "Transaction hash (0x + 64 hex). Optional: defaults to 0x20215b4a54f0a39995f3afbd748d7b52c3a1922685ddf08e5f694ea1e89b52bf."
    }
  },
  "required": []
}
🟢llm_chat(prompt, system, messages, model, max_tokens, ...)

[PAID $0.003 USDC per call via x402 on Base; errors are free] One-shot LLM completion on Cloudflare Workers AI with a minimal interface: give `prompt` (and optionally `system`, or OpenAI-style `messages`), get {text, model, finish_reason, usage}. Models: llama-3.1-8b (default), llama-3.2-3b, llama-3.2-1b, mistral-7b, granite-4.0-micro. max_tokens capped at 512, input up to 24000 chars, Llama Guard 3 safety check, 503 "capacity" when the daily budget is used up. Errors are never charged. All params optional: with none it answers a short sample question. For the OpenAI wire format use POST /v1/chat/completions.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "User message. Optional: defaults to a short sample question."
    },
    "system": {
      "type": "string",
      "description": "Optional system instruction."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        }
      },
      "description": "Optional OpenAI-style history (POST JSON)."
    },
    "model": {
      "type": "string",
      "enum": [
        "llama-3.1-8b",
        "llama-3.2-3b",
        "llama-3.2-1b",
        "mistral-7b",
        "granite-4.0-micro"
      ],
      "description": "Model alias (default llama-3.1-8b)."
    },
    "max_tokens": {
      "type": "integer",
      "minimum": 1,
      "maximum": 512,
      "description": "Max output tokens (default/cap 512)."
    },
    "temperature": {
      "type": "number",
      "minimum": 0,
      "maximum": 2,
      "description": "Sampling temperature."
    }
  },
  "required": []
}
🟢text_embeddings(input, model, encoding_format, dimensions)

[PAID $0.001 USDC per call via x402 on Base; errors are free] Drop-in OpenAI Embeddings endpoint: POST {input: string | string[], model, encoding_format: float|base64, dimensions} and get {object: "list", data: [{embedding, index}], model, usage}. Models (Cloudflare Workers AI): bge-m3 (1024-d, multilingual (100+ languages), 8192-token context); bge-large-en-v1.5 (1024-d, English); bge-base-en-v1.5 (768-d, English); bge-small-en-v1.5 (384-d, English, fastest); embeddinggemma-300m (768-d, multilingual (Google EmbeddingGemma)). Any other model name (e.g. text-embedding-3-small) maps to bge-m3; the actual model is in the response. `dimensions` truncates and re-normalizes. Up to 100 inputs per call, 8000 chars each, 60000 chars total, one fixed price per call. For RAG, semantic search, clustering and dedupe. Errors are never charged. GET ?input= also works; with no params it embeds a sample sentence.

Input Schema

{
  "type": "object",
  "properties": {
    "input": {
      "type": [
        "string",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Text or array of texts to embed (max 100). Optional: defaults to a sample sentence."
    },
    "model": {
      "type": "string",
      "enum": [
        "bge-m3",
        "bge-large-en-v1.5",
        "bge-base-en-v1.5",
        "bge-small-en-v1.5",
        "embeddinggemma-300m"
      ],
      "description": "Embedding model alias (default bge-m3)."
    },
    "encoding_format": {
      "type": "string",
      "enum": [
        "float",
        "base64"
      ],
      "description": "float (default) or base64 (little-endian float32)."
    },
    "dimensions": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1024,
      "description": "Optional output size; vectors are truncated and re-normalized."
    }
  },
  "required": []
}
🟢rerank_documents(query, documents, top_n, return_documents, model)

[PAID $0.002 USDC per call via x402 on Base; errors are free] Cohere/Jina-style rerank: POST {query, documents: string[] | {text}[], top_n, return_documents} and get {results: [{index, relevance_score, document?}]} sorted by relevance. Models (Cloudflare Workers AI): bge-reranker-base (cross-encoder, English/Chinese, scores 0..1); bge-m3 (multilingual similarity scoring) (default bge-reranker-base; other names map to it). Up to 100 documents, each scored on its first 4000 chars; one fixed price per call. Use after vector search to pick the best passages for an LLM. Errors are never charged. All params optional: with none it ranks a small sample.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query (max 2000 chars). Optional with documents omitted: a sample is ranked."
    },
    "documents": {
      "type": "array",
      "items": {
        "type": [
          "string",
          "object"
        ]
      },
      "description": "Documents to rank: strings or {text} objects (max 100)."
    },
    "top_n": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Return only the best N (default all)."
    },
    "return_documents": {
      "type": "boolean",
      "description": "Include the document text in each result (default false)."
    },
    "model": {
      "type": "string",
      "enum": [
        "bge-reranker-base",
        "bge-m3"
      ],
      "description": "Rerank model (default bge-reranker-base)."
    }
  },
  "required": []
}
🟢crypto_price(symbols, ids, vs, address, chain)

[PAID $0.001 USDC per call via x402 on Base; errors are free] Live crypto prices for up to 25 coins per call: pass tickers in `symbols` (BTC,ETH,SOL,AERO,...; common tickers built in, others resolved by CoinGecko search to the largest coin with that ticker), CoinGecko `ids`, or one token `address` + `chain` (base default; ethereum, arbitrum, optimism, polygon, bsc, avalanche, solana). Returns price, market cap, 24h volume and 24h % change in each `vs` currency (usd default; up to 5, e.g. usd,eur,btc) plus last-updated time. Data: CoinGecko public API, cached 30 s; falls back to Coinbase spot rates (price only) if CoinGecko is unavailable. All params optional: with none it returns BTC and ETH in USD. Unknown coins = 404, invalid input = 400, never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "symbols": {
      "type": "string",
      "description": "Comma-separated tickers, e.g. BTC,ETH,SOL (max 25). Optional: defaults to BTC,ETH."
    },
    "ids": {
      "type": "string",
      "description": "Comma-separated CoinGecko coin ids, e.g. bitcoin,aerodrome-finance (optional)."
    },
    "vs": {
      "type": "string",
      "description": "Comma-separated quote currencies (max 5), e.g. usd,eur,btc. Default usd."
    },
    "address": {
      "type": "string",
      "description": "Optional token contract address; returns that token price (overrides symbols/ids)."
    },
    "chain": {
      "type": "string",
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "optimism",
        "polygon",
        "bsc",
        "avalanche",
        "solana"
      ],
      "description": "Chain of `address` (default base)."
    }
  },
  "required": []
}
🟢fx_rate(from, to, amount, date)

[PAID $0.002 USDC per call via x402 on Base; errors are free] Foreign-exchange rates from one base currency (`from`, default USD) to a list of currencies (`to`, comma-separated, or "all"; default 14 majors incl. EUR, GBP, JPY, CNY, INR, KRW, VND), with `amount` converted. Live mode uses Coinbase public exchange rates (updated about every minute, 160+ ISO 4217 currencies plus XAU/XAG), falling back to exchangerate-api daily rates. With `date=YYYY-MM-DD` it returns the ECB reference rates for that day (Frankfurter, ~30 major currencies, back to 1999-01-04). All params optional: with none it returns USD to 14 major currencies. Invalid codes = 400, never charged.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Base currency, ISO 4217 code (default USD)."
    },
    "to": {
      "type": "string",
      "description": "Comma-separated target codes (max 50) or \"all\". Default: EUR,GBP,JPY,CNY,CHF,CAD,AUD,INR,KRW,SGD,HKD,MXN,BRL,VND."
    },
    "amount": {
      "type": "number",
      "minimum": 0,
      "description": "Amount in `from` to convert (default 1)."
    },
    "date": {
      "type": "string",
      "description": "Optional YYYY-MM-DD for historical ECB reference rates (since 1999-01-04). Omit for live rates."
    }
  },
  "required": []
}
🟢free_site_check(url)

[FREE, 10 calls/hour per IP] Quick check of one public website: homepage meta/OG/canonical, security headers, HTTPS, and up to 20 links tested for breakage. For the deeper 3-page audit with leaked-key scan use website_audit (paid).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public http(s) URL or hostname to check."
    }
  },
  "required": [
    "url"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools