Returns the machine-readable pricing menu for this server: which tools are free vs paid, pay-per-call vs discounted prepaid pricing, how to deposit and spend a prepaid balance, payment method, and quantified value (token savings, ROI). Call this first to understand what is available and at what cost before using paid tools.
No parameters.
account_balance
Check the prepaid USDC balance for an address. Free. Returns remaining balance, the discounted prepaid per-call price, and how many paid calls it covers. Deposit once with account_deposit to pay a discounted per-call rate with no 402 round-trip and no gas per call.
Parameters (1)
addressstringrequired
The 0x EVM address whose prepaid balance to look up (the address that funded the deposit).
account_deposit
Open or top up a prepaid balance by depositing USDC on Base via x402 (one on-chain settlement). After depositing, paid tools are debited off-chain at the discounted prepaid price with no per-call 402 and no per-call gas, until the balance runs out. Non-refundable credits. Minimum deposit $0.50. Call with the signed x402 PaymentPayload in _meta["x402/payment"] for the amount you want to deposit (>= minimum); the full deposited amount is credited to the paying address.
No parameters.
wallet_setup
Returns the step-by-step procedure for you (the agent) to generate your own wallet on your host and have your human fund it with USDC on Base. ToolSnap never sees, stores, or transmits the private key — it is born and lives on your machine. Call this after receiving a no_payment_method error from any paid tool. The procedure covers: OS detection, choosing the best secret store (macOS Keychain / Windows Credential Manager / Linux Secret Service / file fallback), generating and storing the key without it ever appearing in context, printing the public address + QR for the human to fund, and verifying the on-chain balance.
No parameters.
fetch_extract
Fetch a URL and return clean text, stripped of HTML, scripts, styles, and navigation. Benchmark (11 real pages): median 98.1% token reduction (53 820 → 2 001 tokens); saves ~$0.156/call at Sonnet pricing ($3/M tokens) vs loading raw HTML. Break-even at 26 KB pages — virtually all real pages qualify. Deterministic, parallel-safe, zero-setup. Cost: $0.02 USDC on Base. First call free per wallet address.
Parameters (2)
urlstringrequired
The URL to fetch and extract text from
maxCharsnumber
Max characters to return (default 8000, max 32000)
fetch_html
Fetch a URL and return clean HTML with structure preserved — tags, classes, ids and semantic layout kept, but scripts, styles, comments, SVG/iframe blobs and inline JS handlers removed. Unlike fetch_extract (flattens to text) or html_to_markdown (converts to Markdown), this keeps the DOM skeleton so an agent can reconstruct the page as static HTML. Ideal for site migration (e.g. WordPress → static). Cost: $0.02 USDC on Base. First call free per wallet address.
Parameters (2)
urlstringrequired
The URL to fetch (http:// or https://).
maxCharsnumber
Max characters to return (default 16000, max 64000).
page_assets
Fetch a URL and return a JSON inventory of every asset it references — images (incl. srcset), stylesheets, scripts, fonts, icons/favicons and media — all resolved to absolute URLs and deduplicated. Ideal for auditing or migrating a site: get the full asset manifest in one cheap call instead of loading the page into context. Free.
Parameters (1)
urlstringrequired
URL to fetch (http:// or https://).
page_links
Fetch a URL and return a JSON list of all its links, classified as internal (same host), external (different host) or other (mailto:, tel:, etc.), resolved to absolute URLs, deduplicated, each with its anchor text. Ideal for systematically crawling a site for migration or for building a sitemap. Free.
Parameters (2)
urlstringrequired
URL to fetch (http:// or https://).
maxLinksnumber
Max links to return (default 2000, max 2000).
screenshot_url
Capture a screenshot of a web page (full-page or viewport) and return a PUBLIC image URL — not the bytes — so it never bloats your context. Upload-to-R2 backed; ideal for site migration/reconstruction (visual reference of the original page) and visual QA. Params: url (required), fullPage, width, height, format (png/jpeg), quality (jpeg only). Returns JSON with the hosted URL, size, and dimensions. Cost: $0.04 USDC pay-per-call on Base ($0.025 prepaid) — priced above the flat rate because each capture drives a real render cost. First call free per wallet.
Parameters (6)
urlstringrequired
The URL of the page to screenshot (http:// or https://).
fullPageboolean
Capture the entire scrollable page instead of just the viewport. Default false.
widthnumber
Viewport width in pixels (default 1280, 100–4000).
heightnumber
Viewport height in pixels (default 800, 100–4000). Ignored when fullPage is true.
formatstring
Image format: "png" (default) or "jpeg".
qualitynumber
JPEG quality 1–100 (only applies when format is jpeg).
keyword_research
Query Google Ads data via DataForSEO for 1–20 keywords and get per-keyword: monthly search volume, CPC (USD), competition score (0–1 + level label), 12-month trend, and top-5 related keyword suggestions. Ideal for SEO audits, content planning, and PPC budget estimation. Params: keywords (string or string[], max 20, required), language_code (default "es"), location_code (default 2724 = Spain, use 2840 for USA), include_suggestions (default true). Returns JSON with all results. Cost: $0.04 USDC pay-per-call on Base ($0.025 prepaid) — real COGS per batch. No first-call-free.
Parameters (4)
keywordsarrayrequired
One keyword (string) or up to 20 keywords (array of strings, max 20). Pass a single string for one keyword or an array for multiple keywords in one API call.
language_codestring
ISO 639-1 language code for Google Ads data. Default "es" (Spanish). Use "en" for English, "fr" for French, etc.
location_codenumber
DataForSEO location code for Google Ads geo-targeting. Default 2724 (Spain). Use 2840 for USA, 2826 for UK. Full list: https://api.dataforseo.com/v3/keywords_data/google_ads/locations
include_suggestionsboolean
Whether to fetch top-5 related keyword suggestions per seed keyword. Default true. Set false to skip the suggestions call and reduce latency.
remove_background
Removes the background from an image (U²-Net model via fal.ai) and returns a transparent PNG hosted on a public URL — never raw bytes, so it does not bloat context. Input: `image_url` (any public JPEG/PNG/WEBP URL, or a temporary URL from upload_file). Output: `url` (public PNG, expires in ~24 h — download promptly), `file_size_bytes`. Use for product photos, profile pictures, logo cutouts, or any image that needs a clean transparent background before compositing. Cost: $0.03 USDC pay-per-call ($0.02 prepaid). No first-call-free.
Parameters (1)
image_urlstringrequired
Public URL of the source image (JPEG, PNG, or WEBP). Must be accessible from the internet — local paths and data: URIs are not supported.
upload_file
Upload a base64-encoded image to ToolSnap temporary storage and receive a URL to pass to tools like remove_background. The file is automatically deleted once consumed by a tool (e.g. remove_background deletes it immediately after reading). Do not use this URL as a permanent link. Accepts JPEG, PNG, WEBP, or GIF up to 10 MB. Free tool — no payment required. Returns: url (temporary), key, content_type, file_size_bytes.
Parameters (2)
datastringrequired
Base64-encoded image data (no data: URI prefix — just the raw base64 string).
content_typestringrequired
MIME type of the image: "image/jpeg", "image/png", "image/webp", or "image/gif".
task_recipes
Free. Returns a menu of pre-designed complex tasks that ToolSnap makes easy (e.g. replicate a website as static HTML, run an SEO audit), each as a ready-to-run prompt that orchestrates the right ToolSnap tools end-to-end. Call with no arguments to list available recipes; call with recipe='<id>' to get the full ready-to-paste prompt, the tools it uses and an estimated cost. Use this when the user asks for a whole task (migrate/clone a site, audit SEO, etc.) rather than a single operation.
Parameters (1)
recipestring
The recipe id to expand (e.g. 'replicate_website', 'seo_audit'). Omit to list the menu.
uuid_generate
Generate one or more random UUID v4 values. Use when you need unique identifiers for records, sessions, tokens, or any entity requiring a globally unique ID.
Parameters (1)
countnumber
Number of UUIDs to generate (1–100, default 1).
hash_text
Compute a cryptographic hash (SHA-256, SHA-1, or SHA-512) of any text string. Returns lowercase hex. Use for integrity checks, content fingerprinting, or generating deterministic IDs from content.
Parameters (2)
textstringrequired
The text to hash.
algorithmstring
Hash algorithm to use. Default "SHA-256".
base64_encode
Encode a UTF-8 text string to Base64. Handles non-ASCII characters correctly. Use when you need to embed binary or unicode data in JSON, URLs, or HTTP headers.
Parameters (1)
textstringrequired
The UTF-8 text to encode as Base64.
base64_decode
Decode a Base64 string back to UTF-8 text. Handles non-ASCII characters correctly. Use to recover the original text from a Base64-encoded value.
Parameters (1)
datastringrequired
The Base64-encoded string to decode.
url_encode
Percent-encode a string for safe inclusion in a URL query parameter or path segment (encodeURIComponent). Use when building URLs that contain special characters, spaces, or non-ASCII text.
Parameters (1)
textstringrequired
The text to URL-encode.
url_decode
Decode a percent-encoded URL string back to plain text (decodeURIComponent). Use to recover the original text from a URL-encoded value.
Parameters (1)
textstringrequired
The URL-encoded string to decode.
json_format
Parse and reformat a JSON string with a configurable indent level (0 = minified, 2 = standard pretty-print). Use to pretty-print, validate, or minify JSON.
Convert between Unix timestamps (seconds) and ISO 8601 date strings. Auto-detects direction: numbers → ISO, date strings → Unix seconds. Accepts Unix in seconds or milliseconds (auto-detected). Use when you need to convert epoch values to human-readable dates or vice-versa.
Parameters (2)
inputstringrequired
The value to convert. Either a Unix timestamp (as a number or numeric string, seconds or ms) or an ISO/date string like "2024-01-15T10:30:00Z".
tostring
"iso" to force output as ISO 8601, "unix" to force output as Unix seconds. Omit to auto-detect.
text_stats
Count characters, words, lines, and sentences in a text string. Returns a JSON object. Use when you need to analyse or report on the size and structure of a body of text.
Parameters (1)
textstringrequired
The text to analyse.
html_to_markdown
Convert a URL or raw HTML string into clean Markdown. Strips navigation, ads, scripts, and boilerplate; preserves headings, lists, links, code blocks, and emphasis. Use instead of loading raw HTML into context — saves 85–98% of tokens compared to the original page. Accepts either a URL (fetched server-side) or an html parameter with raw HTML.
Parameters (3)
urlstring
URL to fetch and convert (http:// or https://).
htmlstring
Raw HTML string to convert directly (alternative to url).
maxCharsnumber
Max characters of Markdown to return (default 12000, max 50000).
extract_structured
Fetch a URL and extract structured data matching a JSON Schema — title, author, date, price, description, rating, image, and more. Reads JSON-LD, Open Graph, Twitter Cards, and Schema.org microdata embedded in the page; returns only the extracted JSON object. No LLM required: extraction is deterministic. Ideal for articles, products, recipes, events, and any page using semantic markup.
Parameters (2)
urlstringrequired
URL to fetch and extract data from.
schemastringrequired
JSON Schema (as a JSON string) describing the fields to extract. E.g. {"type":"object","properties":{"title":{"type":"string"},"price":{"type":"number"}}}
diff_text
Compare two text strings and return a unified diff showing additions (+), deletions (-), and context lines. Useful for review agents, changelog generation, and patch creation. Returns '(no differences)' when inputs are identical. Free — no payment required.
Parameters (5)
astringrequired
The "before" text (original).
bstringrequired
The "after" text (modified).
contextnumber
Number of unchanged context lines around each change (default 3, max 10).
label_astring
Label for the "before" file header (default "a").
label_bstring
Label for the "after" file header (default "b").
csv_query
Fetch a CSV from a URL (or accept raw CSV text) and query it: select columns, filter rows, sort, and limit results. Returns JSON array of objects by default, or CSV with format=csv. Use instead of loading the full CSV into your context — send only the data you need.
Parameters (8)
urlstring
URL of the CSV file to fetch (http/https).
csvstring
Raw CSV text (alternative to url).
selectstring
Comma-separated column names to include (e.g. 'name,age,country'). Omit to include all columns.
filterstring
Row filter expression: 'column op value'. Operators: = != > >= < <= contains startswith endswith. E.g. 'age > 30' or 'country = US'.
sort_bystring
Column name to sort by.
sort_dirstring
Sort direction: 'asc' (default) or 'desc'.
limitnumber
Maximum number of rows to return (default 500, max 5000).
formatstring
Output format: 'json' (default) or 'csv'.
json_query
Fetch JSON from a URL (or accept raw JSON) and query it with a JSONPath-lite expression. Supports property access, array indexing, wildcards ([*]), recursive descent (..), and filter expressions ([?(@.price < 10)]). Returns only the matching values as JSON — use instead of loading large JSON payloads into your context.
Max number of results to return (default 100, max 1000).
pdf_text_extract
Fetch a PDF from a URL and extract its text content. Handles FlateDecode-compressed streams (the most common compression in modern PDFs) and RC4-encrypted PDFs that open with an empty password. Works on text-based PDFs (those generated from Word, LaTeX, web, etc.); does not perform OCR on scanned/image-only PDFs. Returns clean plain text — use instead of loading raw PDF bytes into your context.
Parameters (2)
urlstringrequired
URL of the PDF to fetch (http/https). Must be a PDF file.
maxCharsnumber
Max characters to return (default 20000, max 100000).
regex_extract
Run a regular expression against text and return all matches. Supports capture groups, named groups, and multiline input. Returns a JSON array of match objects — each has `match` (full match) and `groups` (array of capture groups, or object for named groups). Use for extracting emails, URLs, codes, patterns, or any structured data from unstructured text.
Fetch a URL and extract its metadata: title, meta description, Open Graph tags (og:title, og:image, og:type…), Twitter Card tags, canonical URL, robots directive, author, keywords, JSON-LD structured data, and lang/charset. Returns a structured JSON object. Much cheaper than loading the full page — ideal for link previews, SEO audits, and content classification.
Parameters (1)
urlstringrequired
URL to fetch (http:// or https://).
count_tokens
Estimate the number of tokens a text will consume when sent to an LLM. Uses a byte-pair encoding approximation compatible with cl100k_base (GPT-4, Claude, and most modern models). Accurate to ±10% on English prose. Returns token count, character count, byte count, and a cost estimate footnote. Use before sending long context to an LLM to avoid surprises.
Parameters (2)
textstringrequired
Text to count tokens for.
modelstring
Model name hint (default "cl100k_base"). Accepted: cl100k_base, gpt-4, gpt-4o, gpt-3.5-turbo, claude, claude-3, claude-sonnet, claude-haiku, claude-opus, text-embedding-ada-002. All currently use the same cl100k_base approximation.
rss_parse
Fetch and parse an RSS 2.0 or Atom 1.0 feed URL. Returns structured JSON with feed metadata (title, description, language, last-build date) and an array of items (title, link, pubDate, author, categories, description, enclosure). Use instead of fetching raw XML — saves 90%+ of tokens and eliminates XML parsing in the agent. Ideal for news aggregation, content monitoring, and feed-based workflows.
Parameters (2)
urlstringrequired
RSS or Atom feed URL (http:// or https://).
maxItemsnumber
Max feed items to return (default 20, max 200).
sitemap_parse
Fetch and parse an XML sitemap (urlset or sitemapindex). Returns structured JSON: for urlsets — array of URLs with loc, lastmod, changefreq, priority, plus image/news sitemap extensions; for sitemapindex — list of child sitemap URLs. Use to enumerate all pages of a site, find recently updated content, or build a crawl queue — without loading raw XML into context.
Parameters (2)
urlstringrequired
Sitemap URL (http:// or https://). Accepts sitemap.xml, sitemap_index.xml, or any XML sitemap.
maxUrlsnumber
Max URLs to return from a urlset (default 100, max 1000). Has no effect on sitemapindex (all child sitemaps are always returned).
One connection, superpowers for your agent: deterministic microtools. Pay per call with USDC on Base — no account needed — or buy fiat credits with a card if you'd rather not touch crypto.
1. Deterministic — no LLM in the loop. Most agent stacks now "clean" web pages by paying a second model to summarize them. ToolSnap's extraction is pure parsing: exact quotes, stable output, zero added inference cost, reproducible runs. What you extract is what the page said.
2. Context-efficient by design. The biggest cost for AI agents isn't generation — it's context. Loading a raw webpage can burn 50,000+ tokens on HTML boilerplate; connecting a fat MCP server can burn as many in tool definitions. ToolSnap moves the work server-side and keeps discovery compact: tools/list shows a small curated core, and the full catalog of 38 microtools (web, PDFs, CSV/JSON, sitemaps, RSS, images…) sits one free tool_catalog() call away, executed via use_tool.
Benchmark (11 real pages, June 2026):
Raw HTML
Extracted
Saving
Median tokens
53,820
2,001
98.1%
Cost @ Sonnet ($3/M)
$0.162
$0.006
$0.156/call
Break-even page size
—
—
26 KB
fetch_extract is free — this saving costs nothing.
3. No account required (crypto path). Free tools work the second you connect. Paid tools settle per call with USDC on Base via x402 — an agent with a wallet can pay cold: no signup, no subscription, no key management. Rather not touch crypto? Buy fiat credits with a card and get an API key instead — same discounted per-call price, no wallet needed.
Free tools work immediately with the URL connection above. Paid tools need an
x402 payment client — a wallet alone is not enough, because most MCP clients
can't satisfy a 402 Payment Required on their own. Use the pay-proxy below.
Paid tools — connect through the pay-proxy
scripts/pay-proxy.mjs is a local stdio MCP server that wraps the remote
endpoint, reads your wallet, and signs + retries automatically when the server
asks for payment. The private key never leaves your host; only signatures are sent.
No wallet yet? Call the wallet_setup tool — it generates a wallet you control,
helps your human fund it with USDC on Base, and wires this proxy. Key resolution
order: TOOLSNAP_WALLET_KEY → ~/.toolsnap/wallet.key → macOS Keychain
(toolsnap-agent-wallet/default).
Buy credits at mcp.toolsnap.app/checkout (handled by
Polar, our Merchant of Record). You'll get an API key in a one-time pop-up —
connect with it directly, no proxy needed:
Clients that can't send custom headers (some claude.ai connectors) can embed
the key in the URL instead: https://mcp.toolsnap.app/mcp/sk_live_... (the
key may then appear in that client's request logs — prefer the header when
your client supports it).
38 tools total. tools/list shows a curated core (~18); discover everything else with the free tool_catalog tool and run it with use_tool(name, args).
Paid (x402) — real per-call COGS only
Tool
Description
Price
screenshot_url
Capture a page → public image URL.
$0.04 USDC
keyword_research
Google Ads volume/CPC/competition via DataForSEO.
$0.04 USDC
remove_background
Remove an image's background → transparent PNG URL.
$0.03 USDC
No first-call-free: these three tools have real per-call cost, so every call settles from the start. Pay-per-call is $0.03–$0.04 USDC on Base using x402 v2 (EIP-3009 transferWithAuthorization); prepaid (deposit once, debit off-chain, crypto or card) is cheaper per call.
Free (always)
Flagship: fetch_extract (URL → clean text, median 98.1% fewer tokens than raw HTML) and fetch_html (URL → clean structured HTML). Plus a wide utility catalog:
Tool
Description
pricing
Machine-readable pricing menu. Call this first.
tool_catalog
Discover the full tool catalog (families → detail).
use_tool
Execute any tool not in your tools/list.
memory_snippet
Get the ToolSnap habit block for your harness's persistent memory.
task_recipes
Ready-to-run multi-tool workflows for whole tasks.
uuid_generate
1–100 random UUID v4 values
hash_text
SHA-256 / SHA-1 / SHA-512 (hex)
base64_encode / base64_decode
Base64 encode/decode
url_encode / url_decode
Percent-encode/decode
json_format
Parse + pretty-print or minify JSON
timestamp_convert
Unix ↔ ISO 8601 (auto-detects direction)
text_stats
Chars, words, lines, sentences
Call tool_catalog() for the complete, current list with schemas and prices.
Payment (x402)
When an agent calls a paid tool (e.g. screenshot_url) without payment, the server returns:
Settlement: on-chain transferWithAuthorization via relayer wallet
Anti-replay: Cloudflare KV nonce store (7-day TTL)
First-call-free: mechanism exists in code (KV key first_free:{address}) for future flat-rate tools; all current paid tools have real COGS and are excluded, so every call settles