ToolSnap MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pricingA | 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). Always returns immediately — has no side effects and costs nothing. Call this first to understand what is available and at what cost before using paid tools. |
| account_balanceA | 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. |
| account_depositA | 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. |
| wallet_setupA | 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, verifying the on-chain balance, and — critically — wiring the ToolSnap pay-proxy so paid tools actually work (a funded wallet alone is not enough: most MCP clients can't satisfy x402 on their own). |
| fetch_extractA | 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. Note: does NOT run JavaScript — for client-side-rendered SPAs use screenshot_url or fetch_html instead (fetch_extract detects this and returns an error WITHOUT charging). Cost: $0.02 USDC on Base. First call free per wallet address. |
| fetch_htmlA | 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. |
| page_assetsA | 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. Returns an error if the URL is unreachable. Has no side effects. Free. Ideal for auditing or migrating a site: get the full asset manifest in one cheap call instead of loading the page into context. Do NOT use to list hyperlinks — use page_links instead. |
| page_linksA | 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. Returns an error if the URL is unreachable. Has no side effects. Free. Ideal for systematically crawling a site for migration or for building a sitemap. Do NOT use to list page assets (images, scripts) — use page_assets instead. |
| screenshot_urlA | 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. Returns JSON with the hosted URL, size, and dimensions. Returns an error if the URL is unreachable or the page fails to load. The hosted image expires after ~24 h — download it promptly if you need it longer. Has no side effects on the target page. Cost: $0.04 USDC pay-per-call on Base ($0.025 prepaid). First call free per wallet. Ideal for site migration/reconstruction (visual reference) and visual QA. |
| keyword_researchA | 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. Returns JSON with all results. Returns an error if keywords is empty, exceeds 20 items, or the upstream API is unavailable. Has no side effects. Cost: $0.04 USDC pay-per-call on Base ($0.025 prepaid) — real COGS per batch. No first-call-free. Ideal for SEO audits, content planning, and PPC budget estimation. |
| remove_backgroundA | Remove the background from an image (U²-Net model via fal.ai) and return a transparent PNG hosted on a public URL — never raw bytes, so it does not bloat context. Returns JSON with url (public PNG, expires ~24 h — download promptly) and file_size_bytes. Returns an error if the image_url is not publicly accessible or the image format is unsupported. Has no side effects on the source image. To pass a local image, first upload it with upload_file and pass the returned URL here. Cost: $0.03 USDC pay-per-call ($0.02 prepaid). No first-call-free. |
| upload_fileA | Upload a base64-encoded image to ToolSnap temporary storage and receive a short-lived URL to pass to tools like remove_background. The file is automatically deleted once consumed by a tool. Returns JSON with url (temporary), key, content_type, file_size_bytes. Returns an error if the base64 data is malformed or the content_type is not supported. Do NOT use this URL as a permanent link. Accepts JPEG, PNG, WEBP, or GIF up to 10 MB. Free — no payment required. |
| task_recipesA | 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='' to get the full ready-to-paste prompt, the tools it uses and an estimated cost. Always returns immediately — has no side effects and costs nothing. Use this when the user asks for a whole task (migrate/clone a site, audit SEO) rather than a single operation. |
| uuid_generateA | Generate one or more random UUID v4 values. Returns a newline-separated string of UUIDs (or a single UUID string when count=1). Has no side effects. Free. Use when you need unique identifiers for records, sessions, tokens, or any entity requiring a globally unique ID. |
| hash_textA | Compute a cryptographic hash (SHA-256, SHA-1, or SHA-512) of any text string. Returns the hash as a lowercase hex string. Has no side effects. Use for integrity checks, content fingerprinting, or generating deterministic IDs from content. Do NOT use for password storage — use a dedicated KDF (bcrypt, argon2) instead. |
| base64_encodeA | Encode a UTF-8 text string to Base64. Handles non-ASCII characters correctly. Returns the Base64-encoded string. Has no side effects. Use when you need to embed binary or unicode data in JSON, URLs, or HTTP headers. Do NOT use to encode binary files — this tool accepts UTF-8 text only. |
| base64_decodeA | Decode a Base64 string back to UTF-8 text. Handles non-ASCII characters correctly. Returns the decoded UTF-8 string, or an error if the input is not valid Base64. Has no side effects. Use to recover the original text from a Base64-encoded value. Do NOT use to decode binary data — output is always interpreted as UTF-8 text. |
| url_encodeA | Percent-encode a string for safe inclusion in a URL query parameter or path segment (encodeURIComponent). Returns the encoded string. Has no side effects. Free. Use when building URLs that contain special characters, spaces, or non-ASCII text. Do NOT use to encode a full URL — only encode individual query values or path segments. |
| url_decodeA | Decode a percent-encoded URL string back to plain text (decodeURIComponent). Returns the decoded string, or an error if the input contains an invalid percent-escape sequence. Has no side effects. Free. Use to recover the original text from a URL-encoded value. |
| json_formatA | Parse and reformat a JSON string with a configurable indent level (0 = minified, 2 = standard pretty-print). Returns the reformatted JSON string, or an error if the input is not valid JSON. Has no side effects. Use to pretty-print, validate, or minify JSON. Do NOT use to query or transform JSON values — use json_query instead. |
| timestamp_convertA | Convert between Unix timestamps (seconds) and ISO 8601 date strings. Auto-detects direction: numeric input → ISO string, date string input → Unix seconds. Accepts Unix in seconds or milliseconds (auto-detected by magnitude). Returns an error if the input cannot be parsed as a timestamp or date. Has no side effects. Free. Use when you need to convert epoch values to human-readable dates or vice-versa. |
| text_statsA | Count characters, words, lines, and sentences in a text string. Returns a JSON object with counts for characters, words, lines, sentences, and average word length. Has no side effects. Free. Use when you need to analyse or report on the size and structure of a body of text. Do NOT use to count LLM tokens — use count_tokens instead. |
| html_to_markdownA | Convert a URL or raw HTML string into clean Markdown. Strips navigation, ads, scripts, and boilerplate; preserves headings, lists, links, code blocks, and emphasis. Provide exactly one of url or html — not both. Returns the Markdown string. Returns an error if the URL is unreachable. Has no side effects. Use instead of loading raw HTML into context — saves 85–98% of tokens. Do NOT use for JavaScript-rendered SPAs — use fetch_html or screenshot_url instead. |
| fetch_structuredA | 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. Returns an empty object if the page has no matching semantic markup. Returns an error if the URL is unreachable or the schema parameter is not valid JSON. Has no side effects. Ideal for articles, products, recipes, and events with semantic markup. Do NOT use for pages without structured markup — use fetch_extract or html_to_markdown instead. |
| diff_textA | Compare two text strings and return a unified diff showing additions (+), deletions (-), and context lines. Returns a unified diff string, or '(no differences)' when inputs are identical. Has no side effects — does not modify either input. Free. Use for review agents, changelog generation, and patch creation. Input is capped at 5000 lines per string. |
| csv_queryA | Fetch a CSV from a URL (or accept raw CSV text) and query it: select columns, filter rows, sort, and limit results. Provide exactly one of url or csv — not both. Returns a JSON array of objects (default) or CSV text when format=csv. Returns an error if the URL is unreachable, returns a non-2xx status, or the content cannot be parsed as CSV. Has no side effects. Use instead of loading the full CSV into your context — send only the data you need. |
| json_queryA | 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)]). Provide exactly one of url or json — not both. Returns only the matching values as JSON. Returns an error if the URL is unreachable, the response is not valid JSON, or the query expression is invalid. Has no side effects. Use instead of loading large JSON payloads into your context. |
| pdf_text_extractA | Fetch a PDF from a URL and extract its text content. Handles FlateDecode-compressed streams and RC4-encrypted PDFs that open with an empty password. Returns clean plain text. Returns an error if the URL is unreachable, the response is not a PDF, or the PDF is password-protected with a non-empty password. Has no side effects. Works on text-based PDFs (Word, LaTeX, web-generated); does NOT perform OCR on scanned/image-only PDFs. Use instead of loading raw PDF bytes into your context. |
| regex_extractA | 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 |
| fetch_metadataA | 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; missing fields are omitted. Returns an error if the URL is unreachable. Has no side effects. Much cheaper than loading the full page — ideal for link previews, SEO audits, and content classification. Do NOT use to extract page body text — use fetch_extract or html_to_markdown instead. |
| count_tokensA | 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. Does NOT send text to any LLM — estimation is purely local. Has no side effects. Free. Use before sending long context to an LLM to avoid surprises. Do NOT use to count characters or words — use text_stats instead. |
| rss_parseA | 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). Returns an error if the URL is unreachable or the response is not valid RSS/Atom XML. Has no side effects. Use instead of fetching raw XML — saves 90%+ of tokens. Ideal for news aggregation, content monitoring, and feed-based workflows. |
| sitemap_parseA | 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. Returns an error if the URL is unreachable or the response is not valid XML sitemap format. Has no side effects. Use to enumerate all pages of a site, find recently updated content, or build a crawl queue — without loading raw XML into context. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/icosaedro-git/toolsnap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server