Deterministic AI agent microtools, no accounts/API keys. fetch_extract: 98% token cut. 47 tools.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free, read-only. Query a comma-separated CSV with a header row, from a URL (max 5 MB, streamed) or inline text, one of the two: select columns, filter rows, sort, limit. Returns {meta:{returned_rows,columns,total_rows,truncated},rows:[{column:value}]}, all values strings, or CSV text with format='csv'. One filter condition, no joins or aggregates. Unknown select columns and bad filters error with the valid names or operators. Over 5 MB: csv_query_xl (paid, 100 MB).
Inline CSV text. Not with url.
CSV URL, max 5 MB. Not with csv.
Rows to return. Default 500, max 5000; over it meta.truncated=true.
'column op value'. Ops: = != contains startswith endswith (text, case-insensitive), > >= < <= (numeric). E.g. 'age >= 30'.
json (default): {meta,rows}. csv: text with header row.
Columns to keep, comma-separated, exact header names. Omit for all.
Headers to forward (Authorization, Cookie…).
Column to sort by; numeric when values parse as numbers, else text.
asc (default) or desc.
Tool list last changed Oct 25, 2026.
Free, read-only. Query a comma-separated CSV with a header row, from a URL (max 5 MB, streamed) or inline text, one of the two: select columns, filter rows, sort, limit. Returns {meta:{returned_rows,columns,total_rows,truncated},rows:[{column:value}]}, all values strings, or CSV text with format='csv'. One filter condition, no joins or aggregates. Unknown select columns and bad filters error with the valid names or operators. Over 5 MB: csv_query_xl (paid, 100 MB).
| Argument | Type | Description |
|---|---|---|
| csv | string | Inline CSV text. Not with url. |
| url | string | CSV URL, max 5 MB. Not with csv. |
| limit | number | Rows to return. Default 500, max 5000; over it meta.truncated=true. |
| filter | string | 'column op value'. Ops: = != contains startswith endswith (text, case-insensitive), > >= < <= (numeric). E.g. 'age >= 30'. |
| format | string | json (default): {meta,rows}. csv: text with header row. |
| select | string | Columns to keep, comma-separated, exact header names. Omit for all. |
| headers | object | Headers to forward (Authorization, Cookie…). |
| sort_by | string | Column to sort by; numeric when values parse as numbers, else text. |
| sort_dir | string | asc (default) or desc. |
{
"type": "object",
"properties": {
"csv": {
"type": "string",
"description": "Inline CSV text. Not with url."
},
"url": {
"type": "string",
"description": "CSV URL, max 5 MB. Not with csv."
},
"limit": {
"type": "number",
"description": "Rows to return. Default 500, max 5000; over it meta.truncated=true."
},
"filter": {
"type": "string",
"description": "'column op value'. Ops: = != contains startswith endswith (text, case-insensitive), > >= < <= (numeric). E.g. 'age >= 30'."
},
"format": {
"enum": [
"json",
"csv"
],
"type": "string",
"description": "json (default): {meta,rows}. csv: text with header row."
},
"select": {
"type": "string",
"description": "Columns to keep, comma-separated, exact header names. Omit for all."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
},
"sort_by": {
"type": "string",
"description": "Column to sort by; numeric when values parse as numbers, else text."
},
"sort_dir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "asc (default) or desc."
}
}
}Fetch a URL, return clean text. Free. Median 98% fewer tokens than raw HTML. Not for JS SPAs.
| Argument | Type | Description |
|---|---|---|
| url* | string | Page URL. |
| headers | object | Headers to forward (Authorization, Cookie…). |
| maxChars | number | Default 8000, max 32000. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Page URL."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
},
"maxChars": {
"type": "number",
"description": "Default 8000, max 32000."
}
}
}Free, read-only. Fetch a page and return its HTML minus scripts, styles, svg, iframes, comments and inline handlers; tags and attributes stay, so structure is readable. For inspecting or rebuilding markup, not plain text (fetch_extract gives that). Runs no JavaScript: SPAs return an empty shell. Cut at maxChars with a marker.
| Argument | Type | Description |
|---|---|---|
| url* | string | http(s) page URL. Private addresses are refused. |
| headers | object | Headers to forward (Authorization, Cookie…). |
| maxChars | number | Output cap, chars. Default 16000, max 64000. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "http(s) page URL. Private addresses are refused."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
},
"maxChars": {
"type": "number",
"description": "Output cap, chars. Default 16000, max 64000."
}
}
}Fetch a URL, extract title/description/OG/Twitter/canonical/JSON-LD. Not for body text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Page URL. |
| headers | object | Headers to forward (Authorization, Cookie…). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Page URL."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
}
}
}Free, read-only. Convert a fetched URL or an HTML string you pass (one of the two) to Markdown: headings, links, lists, emphasis, code, quotes. Drops nav, header, footer, aside, script and style. Returns text, cut at maxChars with a marker. Runs no JavaScript: SPAs return an empty shell. Tables become plain text.
| Argument | Type | Description |
|---|---|---|
| url | string | Page URL to fetch. Not with html. |
| html | string | HTML text to convert. Not with url. |
| headers | object | Headers to forward (Authorization, Cookie…). |
| maxChars | number | Output cap, chars. Default 12000, max 50000. |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Page URL to fetch. Not with html."
},
"html": {
"type": "string",
"description": "HTML text to convert. Not with url."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
},
"maxChars": {
"type": "number",
"description": "Output cap, chars. Default 12000, max 50000."
}
}
}Free, read-only. JSONPath-lite query on JSON from a URL or an inline string (one of the two). Returns matches as JSON: one match bare, several as an array. Supports $, .key, ['key'], [0], [-1], [*], ..key and [?(@.k op v)]; no slices or jq. Errors on invalid JSON or over 5 MB (json_query_xl: paid, 25 MB).
| Argument | Type | Description |
|---|---|---|
| url | string | JSON URL, max 5 MB. Not with json. |
| json | string | Inline JSON text. Not with url. |
| limit | number | Default 100, max 1000. Above it: {results,total,returned}. |
| query* | string | Starts with $: '$.users[*].name', '$..price', '$.items[?(@.price<10)].id'. Filter ops: = != > >= < <= =~. '$' = whole document. |
| headers | object | Headers to forward (Authorization, Cookie…). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"url": {
"type": "string",
"description": "JSON URL, max 5 MB. Not with json."
},
"json": {
"type": "string",
"description": "Inline JSON text. Not with url."
},
"limit": {
"type": "number",
"description": "Default 100, max 1000. Above it: {results,total,returned}."
},
"query": {
"type": "string",
"description": "Starts with $: '$.users[*].name', '$..price', '$.items[?(@.price<10)].id'. Filter ops: = != > >= < <= =~. '$' = whole document."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
}
}
}Google Ads volume/CPC/competition for 1-20 keywords. $0.04 USDC/call. Paid: calling without a payment payload returns a structured 402 with payment options — that response is the documented behavior, not a failure.
| Argument | Type | Description |
|---|---|---|
| keywords* | array | 1-20 keywords. |
| language_code | string | ISO 639-1. |
| location_code | number | DataForSEO location (default Spain). |
| include_suggestions | boolean | Add related suggestions. |
{
"type": "object",
"required": [
"keywords"
],
"properties": {
"keywords": {
"type": "array",
"description": "1-20 keywords."
},
"language_code": {
"type": "string",
"default": "es",
"description": "ISO 639-1."
},
"location_code": {
"type": "number",
"default": 2724,
"description": "DataForSEO location (default Spain)."
},
"include_suggestions": {
"type": "boolean",
"default": true,
"description": "Add related suggestions."
}
}
}Free, read-only. Returns static text: a short note on when ToolSnap tools suit a task, plus how to store a note in your runtime's memory. This tool saves nothing. Use only if your user asks about persistent memory or ToolSnap setup; show them the text and save it only with their approval.
| Argument | Type | Description |
|---|---|---|
| harness | string | Your agent runtime, to tailor the save instruction. Omit for a generic one. |
{
"type": "object",
"required": [],
"properties": {
"harness": {
"enum": [
"claude-code",
"claude-desktop",
"hermes",
"grok-build",
"openclaw",
"generic"
],
"type": "string",
"description": "Your agent runtime, to tailor the save instruction. Omit for a generic one."
}
}
}Free, read-only. Extract plain text from a PDF given as a URL (max 20 MB) or inline base64 (max 5 MB), one of the two. Returns text, cut at maxChars with a marker. Text-layer PDFs only: scans return little or nothing (no OCR). Layout and tables are not preserved. Fails if the URL serves HTML, not a PDF.
| Argument | Type | Description |
|---|---|---|
| url | string | Direct link to the .pdf file, not a viewer page. Not with data. |
| data | string | Base64 PDF, max 5 MB decoded. Not with url. |
| headers | object | Headers to forward (Authorization, Cookie…). |
| maxChars | number | Output cap, chars. Default 20000, max 100000. |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Direct link to the .pdf file, not a viewer page. Not with data."
},
"data": {
"type": "string",
"description": "Base64 PDF, max 5 MB decoded. Not with url."
},
"headers": {
"type": "object",
"description": "Headers to forward (Authorization, Cookie…)."
},
"maxChars": {
"type": "number",
"description": "Output cap, chars. Default 20000, max 100000."
}
}
}Free, read-only, no network, no arguments. Returns a JSON menu: endpoint, docs; payment (x402 USDC on Base, pay-per-call vs prepaid: minimum deposit, discount, SpendAuthorization fields); tools[] with name and tier free|paid, and for paid ones price_usdc, prepaid_price_usdc, first_call_free and a value note. Flat prices are exact; fal.ai media tools show a default-args quote. Calling it charges nothing.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Remove an image's background, return a transparent PNG URL. $0.03 USDC/call. Paid: calling without a payment payload returns a structured 402 with payment options — that response is the documented behavior, not a failure.
| Argument | Type | Description |
|---|---|---|
| image_url* | string | Public image URL. |
{
"type": "object",
"required": [
"image_url"
],
"properties": {
"image_url": {
"type": "string",
"description": "Public image URL."
}
}
}Free, read-only. Fetch an RSS 2.0 or Atom feed and return JSON: feed title, link, description, lastBuildDate, itemCount, truncated, and items[] with title, link, pubDate, guid, description (HTML stripped), author, categories, enclosure. Items past maxItems are dropped and truncated=true. A URL that is not a feed returns type 'unknown' and no items. Not JSON Feed. Errors on non-2xx, 10 s timeout or private hosts.
| Argument | Type | Description |
|---|---|---|
| url* | string | Feed URL, http(s). Private hosts refused. |
| maxItems | number | Default 20, max 200. itemCount still reports the full total. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Feed URL, http(s). Private hosts refused."
},
"maxItems": {
"type": "number",
"description": "Default 20, max 200. itemCount still reports the full total."
}
}
}Screenshot a page → public image URL. $0.04/call. Paid: calling without a payment payload returns a structured 402 with payment options — that response is the documented behavior, not a failure.
| Argument | Type | Description |
|---|---|---|
| url* | string | Page URL. |
| width | number | Viewport px. |
| format | string | Default png. |
| height | number | Viewport px. |
| quality | number | JPEG only, 1-100. |
| fullPage | boolean | true = whole page, not viewport. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Page URL."
},
"width": {
"type": "number",
"default": 1280,
"description": "Viewport px."
},
"format": {
"enum": [
"png",
"jpeg"
],
"type": "string",
"default": "png",
"description": "Default png."
},
"height": {
"type": "number",
"default": 800,
"description": "Viewport px."
},
"quality": {
"type": "number",
"maximum": 100,
"minimum": 1,
"description": "JPEG only, 1-100."
},
"fullPage": {
"type": "boolean",
"default": false,
"description": "true = whole page, not viewport."
}
}
}Free, read-only. Fetch one XML sitemap and return JSON. A urlset gives urls[] (loc, lastmod, changefreq, priority, plus image/news extensions), urlCount and truncated. A sitemap index gives type 'sitemapindex' and sitemaps[] with the child URLs; children are not fetched, call again per child. Uncompressed XML only, no .gz. Errors on non-2xx, 10 s timeout or private hosts.
| Argument | Type | Description |
|---|---|---|
| url* | string | sitemap.xml or sitemap index URL, http(s), uncompressed. |
| maxUrls | number | Default 100, max 1000; urlCount still reports the full total. Ignored for a sitemap index. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "sitemap.xml or sitemap index URL, http(s), uncompressed."
},
"maxUrls": {
"type": "number",
"description": "Default 100, max 1000; urlCount still reports the full total. Ignored for a sitemap index."
}
}
}Free. Multi-tool workflow prompts (clone a site, SEO audit). No args → menu; recipe='<id>' → prompt.
| Argument | Type | Description |
|---|---|---|
| recipe | string | Recipe id; omit for menu. |
{
"type": "object",
"required": [],
"properties": {
"recipe": {
"type": "string",
"description": "Recipe id; omit for menu."
}
}
}Free, read-only, no network. Browse all 47 tools in 10 families (web, seo, data, documents, images, media, utils, payments, recipes, meta). No args: families with id, label, one-liner, tool count. family='<id>': each tool with name, price, description, notes, inputSchema. tool='<name>': that entry alone; wins over family. Unknown ids error naming the valid families. Run what you find via use_tool.
| Argument | Type | Description |
|---|---|---|
| tool | string | Exact tool name, e.g. 'fetch_rendered'. Takes precedence over family. |
| family | string | Family id, e.g. 'web', 'data'. Lists its tools with schemas. |
{
"type": "object",
"required": [],
"properties": {
"tool": {
"type": "string",
"description": "Exact tool name, e.g. 'fetch_rendered'. Takes precedence over family."
},
"family": {
"type": "string",
"description": "Family id, e.g. 'web', 'data'. Lists its tools with schemas."
}
}
}Free wrapper. Runs any catalog tool missing from your tools/list exactly as a direct call: args pass through unchanged and the inner tool's price, payment, read-only profile, result and errors apply verbatim. A missing or unknown name errors pointing to tool_catalog; it cannot call itself. Get names and schemas from tool_catalog first.
| Argument | Type | Description |
|---|---|---|
| args | object | Object matching that tool's inputSchema. Omit if none required. |
| name* | string | Exact tool name from tool_catalog. Not 'use_tool'. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"args": {
"type": "object",
"description": "Object matching that tool's inputSchema. Omit if none required."
},
"name": {
"type": "string",
"description": "Exact tool name from tool_catalog. Not 'use_tool'."
}
}
}