mint utilities
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
22 deterministic tools: PDF, image, QR, CSV/Excel, HTML to PDF, DNS/RDAP, FX rates, time zones.
| Author | com.voiddo.data |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 1938 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"mint utilities": {
"url": "https://data.voiddo.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (26)
csv_profileread-onlyProfile a CSV, TSV, XLSX or JSON table: row and column counts plus type, nulls, distinct values, min, max and samples for every column. Cost: 1 credit per call. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: JSON. {rows, cols, columns: [{name, inferred_type, null_count, distinct_count, distinct_capped, min, max, sample}]}
Parameters:
file(required) — ['string', 'object'] — The table: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.from— string — Source format. Omit to auto-detect.sheet— ['string', 'integer'] — xlsx input: sheet name, or 0-based sheet index (default: the first sheet).header— boolean — The first row holds column names. false: columns are named col1, col2, ...encoding— string — Text encoding of csv/tsv/json input (utf-8 falls back to cp1252).max_rows— integer — Reject inputs with more data rows than this (413).delimiter— string — csv input: field delimiter (default: detected among , ; tab |).
Hints: read-only yes · destructive no · idempotent yes · open-world yes
currency_ratesread-onlyLatest and historical euro foreign exchange reference rates from the European Central Bank, with conversion between any two of its currencies. Cost: 1 credit per call. Output: JSON. latest: {base, date, rates}; convert: {amount, from, to, rate, result, date_used}; history: {base, quote, series[{date, rate}]}
Parameters:
op— stringto— string — Currency to convert tobase— string — Base currency (latest, history); for convert the alias of 'from'date— string — YYYY-MM-DD; non-business days use the previous business day. Default: latest daydays— integer — history: calendar days ending at 'date' (default the latest day)from— string — Currency to convert from (default EUR)quote— string — Quote currency (history; latest filter; convert alias of 'to')amount— number — Amount of the 'from' currency (convert)quotes— array — Several quote currencies for latest; omit for all
Hints: read-only yes · destructive no · idempotent yes · open-world yes
dns_lookupread-onlyLook up A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV or PTR records of a public name through the Cloudflare and Google public resolvers. Cost: 1 credit per call. Output: JSON. {name, type, status, records:[{type, value, ttl}], count, resolver, elapsed_ms}
Parameters:
name(required) — string — Public hostname, e.g. example.com (internationalised names are converted to punycode). For type PTR: an IPv4/IPv6 address or a complete in-addr.arpa / ip6.arpa name.all— boolean — Query the common set (A, AAAA, CNAME, MX, NS, TXT, SOA, CAA) in one call; 'type' is then ignoredtype— string — Record type
Hints: read-only yes · destructive no · idempotent yes · open-world yes
holidays_lookupread-onlyPublic holidays of any of about 250 countries and regions for a given year, with optional subdivision, language and category. Cost: 1 credit per call. Output: JSON. {country, year, subdiv, holidays:[{date, name}], count}
Parameters:
country(required) — string — ISO 3166-1 alpha-2 country code, e.g. US, DE, ILyear(required) — integersubdiv— string — State / province / region code or name, e.g. BY, Bayern, CA, SCTlanguage— string — Language of the holiday names, e.g. de or en_US; default: English where available, else the country's own languageobserved— boolean — Include substitute days such as "Christmas Day (observed)"categories— array — Holiday categories, default ["public"]; e.g. public, bank, school, government, optional, half_day
Hints: read-only yes · destructive no · idempotent yes · open-world yes
html_to_imageread-onlyRender an HTML snippet to a PNG, JPEG or WEBP image at any width, with retina scaling and transparent background. Cost: 3 credits per call. Output: a file (image/png | image/jpeg | image/webp) returned inline, at most 1 MiB. The rendered image
Parameters:
html(required) — string — The HTML document or fragment (UTF-8, up to 2 MB). JavaScript is not executed.width— integer — Viewport width in CSS pxformat— stringheight— integer — Viewport height in CSS px; omit for a full-page image that fits the contentquality— integer — jpeg / webp qualitytransparent— boolean — Transparent page background (png / webp only)device_scale_factor— number — Pixel density (2 = retina)
Hints: read-only yes · destructive no · idempotent yes · open-world no
html_to_pdfread-onlyTurn an HTML document into a print-ready PDF with page size, margins, orientation and page-numbered header and footer. Cost: 3 credits per call. Output: a file (application/pdf) returned inline, at most 1 MiB. The PDF document
Parameters:
html(required) — string — The HTML document or fragment (UTF-8, up to 2 MB). JavaScript is not executed.scale— number — Rendering scaleformat— string — Paper sizelandscape— booleanmargin_mm— number — Page margin on all sides, millimetresfooter_text— string — Plain-text page footer; {page} and {pages} are replacedheader_text— string — Plain-text page header; {page} and {pages} are replacedprint_background— boolean — Print CSS backgrounds and colours
Hints: read-only yes · destructive no · idempotent yes · open-world no
image_convertread-onlyConvert and resize images between PNG, JPEG, WEBP, GIF, BMP, TIFF and ICO, with quality, fit modes, transparency handling and optional metadata stripping. Cost: 1 credit per call. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: a file (image/png | image/jpeg | image/webp | image/gif | image/bmp | image/tiff | image/x-icon) returned inline, at most 1 MiB. The converted image
Parameters:
file(required) — ['string', 'object'] — The image: base64 (or data: URI) string, or {"url": "https://..."}; up to 10 MBto(required) — string — Target formatfit— stringwidth— integer — Target width in pxheight— integer — Target height in pxquality— integer — jpeg / webp quality (webp 100 = lossless)background— string — Colour for transparent areas when the target has no alpha, and for contain padding (default white / transparent)strip_metadata— boolean — Drop EXIF / XMP / ICC (colours are converted to sRGB first)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
ip_lookupread-onlyReverse DNS name and registry record (network block, name, country) of a public IP address, from open registry data only. Cost: 1 credit per call. Output: JSON. {ip, version, is_private, reverse_dns, reverse_dns_all, network{name, country, ...}}
Parameters:
ip(required) — string — Public IPv4 or IPv6 address
Hints: read-only yes · destructive no · idempotent yes · open-world yes
iso_codesread-onlyLook up ISO 3166 country and subdivision codes, ISO 4217 currency codes and ISO 639 language codes by code or name fragment. Cost: 1 credit per call. Output: JSON. {type, query, results:[{alpha_2, alpha_3, numeric, name, ...}], count, total, truncated}
Parameters:
type(required) — stringquery(required) — string — Code or name fragment, case- and accent-insensitivelimit— integercountry— string — Only for type=subdivision: restrict to this country (ISO 3166-1 alpha-2)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
json_schema_validateread-onlyValidate a JSON document, or up to 1000 of them, against a JSON Schema (draft 7, 2019-09 or 2020-12) and list every error with its path. Cost: 1 credit per call. Output: JSON. {valid, errors: [{index, path, message, validator}], count}; meta: {draft, instances, truncated?}
Parameters:
schema(required) — object — The JSON Schema to validate against.draft— JSON Schema draft. auto follows the schema's $schema and defaults to 2020-12.instance— One JSON value to validate (any type, including null). Use this or instances.instances— array — Up to 1000 JSON values validated against the same schema. Use this or instance.
Hints: read-only yes · destructive no · idempotent yes · open-world no
json_yaml_convertread-onlyConvert text between JSON and YAML with safe parsing, indent, key sorting and minify options, and line-accurate error messages. Cost: 1 credit per call. Output: a file (application/json | application/yaml) returned inline, at most 1 MiB. converted.json or converted.yaml; meta: {from, to}
Parameters:
input(required) — string — The JSON or YAML text to convert (up to 2 MB).to— string — Target format. Default: yaml for JSON input, json for YAML input.from— string — Source format; auto tries JSON first, then YAML.indent— integer — Spaces per level. JSON: 0 puts items on their own lines without indentation. YAML: values below 2 are treated as 2.minify— boolean — JSON: single line without spaces. YAML: single-line flow style. Overrides indent.sort_keys— boolean — Sort object keys alphabetically (default: keep input order).
Hints: read-only yes · destructive no · idempotent yes · open-world no
kdp_preflightread-onlyCheck a KDP paperback interior and cover PDF against Amazon's published file specs and get a signed report. Cost: 5 credits per call. File inputs (interior, cover): base64 string, data: URI or {"url": "https://..."}. Output: JSON. {id, verdict: pass|warn|fail, label, ruleset, specs_date, created_at, files: {interior, cover?: {name, sha256, bytes}}, interior: {trim, pages, bleed, gutter_in, ...}, cover?, checks: [{id, part, status, title, detail}], signature, verify_url}
Parameters:
interior(required) — ['string', 'object'] — The interior PDF: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.trim— string — Trim size; found from the page size when omittedcover— ['string', 'object'] — Optional wrap cover PDF (back, spine and front in one page, with bleed).paper— string
Hints: read-only yes · destructive no · idempotent yes · open-world yes
kdp_puzzle_bookread-onlyA ready-to-upload KDP paperback puzzle book: interior PDF, wrap cover, signed file check, previews and listing notes. Cost: 500 credits per call. Output: a file (application/zip) returned inline, at most 1 MiB. ZIP: interior.pdf, cover.pdf, check-report.pdf/.json, preview/*.png, listing.txt, README.txt
Parameters:
kind(required) — string — sudoku, wordsearch, maze, cryptogram, wordscramble, numbersearch, kakuro, fillin, killersudoku, calcudoku, futoshiki, nonogram, skyscrapers, logicgrid, crossword, numberfill or samuraisudoku; variety for a book of several kinds (see mix)count(required) — integer — Number of puzzles. The fewest allowed fill KDP's 24-page minimum; the most are 400 sudoku (300 at hard or expert), 150 word searches, 200 mazes, 300 cryptograms, 55 word scrambles (40 at easy or hard), 150 number searches, 150 kakuro (100 at hard), 150 fill ins, 150 killer sudoku (120 at hard), 150 calcudoku, 200 futoshiki, 120 nonograms (no picture twice), 200 skyscrapers, 100 logic grids, 100 crosswords (no answer twice), 150 number fill ins, 150 samurai sudoku (75 at hard), 150 puzzles in a variety book (shared evenly by its kinds, at least 4 of each, none past its own maximum)level(required) — string — easy, medium, hard (and expert for sudoku and mazes)mix— array — Variety books only: the kinds of puzzle, in book order (default: wordsearch, sudoku, cryptogram, maze). Levels easy, medium or hard.seed— integer — Rebuild an earlier book exactly; omit for a new onetrim— stringpaper— stringtitle— stringauthor— stringthemes— array — Word search, word scramble, fill in or crossword themes to use, in order (default: the everyday themes, shuffled; the Christmas and winter ones only by name)subtitle— stringcover_color— string — The cover's color, so a series can look like no one else's. Default: the kind's own (sudoku navy, word search forest, maze terracotta, ...).large_print— boolean — Every text read while solving at 16 pt or more. Nonograms need room: in large print, easy on 7x10 or larger and medium on 8.5x11 or 8.27x11.69 (no hard); in regular print, hard on 7x10 or larger. Logic grids: in large print (a spread a puzzle), easy on 7x10 or larger, medium and hard on 8x10 or larger; in regular print, hard on 7x10 or larger. Crosswords in large print (a spread a puzzle) on 7x10 or larger. Samurai sudoku in large print on 8.5x11 or 8.27x11.69, in regular print on 7x10 or largercover_layout— string — Where the title sits on the front cover: puzzle_top (default: a puzzle from the book above the title), title_top (the title above the puzzle) or title_card (the puzzle across the whole front, the title on a card).
Hints: read-only yes · destructive no · idempotent yes · open-world no
kdp_reportread-onlyLook up a KDP file check report by id and confirm its signature and file fingerprints. Free tier only (credits do not apply to this tool). Output: JSON. {found, genuine, report?}
Parameters:
id(required) — string — Report id (20 hex characters)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
kdp_spine_calcread-onlyFull cover size, spine width, safe areas, barcode box, gutter and margins for an Amazon KDP paperback, with an optional PDF cover guide. Cost: 1 credit per call. Output: JSON. {valid, problems[], ruleset, specs_date, trim, pages, paper, page_limits, cover: {width_in, height_in, spine_in, bleed_in, width_px_300dpi, height_px_300dpi, spine_text_allowed, back_safe, front_safe, spine_text_box, barcode_area}, interior: {page_width_in, page_height_in, bleed…
Parameters:
pages(required) — integer — Interior page counttrim— string — Trim size in inches, width x heightbleed— boolean — Interior pages with bleed (pictures to the edge)paper— string — white, cream, groundwood, standard_color or premium_colortemplate— boolean — Also return a PDF cover guide (base64)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
markdown_renderread-onlyRender Markdown to a sanitised HTML page or fragment, or to a PDF, with tables, fenced code, heading anchors, an optional table of contents and a choice of themes. Cost: 1 credit per call. Output: a file (text/html | application/pdf) returned inline, at most 1 MiB. document.html / fragment.html (text/html; charset=utf-8) or document.pdf. meta: {format, theme, title, headings, bytes, pages?}. pdf costs 3 credits, html and fragment 1.
Parameters:
markdown(required) — string — The Markdown source (up to 1 MB of text)css— string — Alias of themetoc— boolean — Add a table of contents above the contenttheme— string — Built-in stylesheet for html and pdftitle— string — Page title; default is the first level-1 headingformat— string — html = complete page (1 credit), fragment = content only (1 credit), pdf = A4 document (3 credits)
Hints: read-only yes · destructive no · idempotent yes · open-world no
pdf_inforead-onlyRead a PDF's page count, encryption flag, metadata, page sizes in millimetres, text-layer presence and bookmark count. Cost: 1 credit per call. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: JSON. {page_count, encrypted, password_required, metadata: {title, author, subject, creator, producer}, page_sizes_mm: [{n, width, height}] (first 50 pages), has_text, outline_count}
Parameters:
file(required) — ['string', 'object'] — The PDF: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
pdf_mergeread-onlyMerge 2 to 20 PDF files into one document in the order given, optionally keeping their bookmarks. Cost in credits: ceil(total pages / 20), minimum 1. File input (files): base64 string, data: URI or {"url": "https://..."}. Output: a file (application/pdf) returned inline, at most 1 MiB. merged.pdf; meta: {page_count, files}
Parameters:
files(required) — array — 2 to 20 PDFs in merge order; all together up to 10 MB.keep_bookmarks— boolean — Keep the bookmarks (outline) of the input files.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
pdf_splitread-onlySplit a PDF into parts by page ranges such as '1-2,5-' or every N pages, returned as one PDF or a zip of parts. Cost in credits: ceil(pages written / 20), minimum 1. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: a file (application/pdf | application/zip) returned inline, at most 1 MiB. part_01.pdf when there is one part, otherwise split.zip holding part_01.pdf ...; meta: {parts, page_count}
Parameters:
file(required) — ['string', 'object'] — The PDF: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.ranges— string — Comma-separated page ranges, one part each: '1-2,5-' ('5-' runs to the last page).every_n— integer — Alternative to ranges: parts of this many pages.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
pdf_textread-onlyExtract the text of a PDF page by page as plain text or Markdown, with page selection, an optional layout-preserving mode and the document metadata. Cost in credits: ceil(pages extracted / 20), minimum 1. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: JSON. {page_count, pages: [{n, text}] (Markdown: [{n, markdown}]), chars, metadata: {title, author, subject, keywords, creator, producer, created, modified}}; meta.note when the PDF has no text layer.
Parameters:
file(required) — ['string', 'object'] — The PDF: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.pages— string — Pages to extract, e.g. '1-3,7' or '5-' (default: all pages).format— string — text: the plain text of each page. markdown: headings, bold and italic, lists and paragraphs as Markdown, page headers and footers that repeat on most pages left out (layout does not apply).layout— boolean — Preserve the visual layout (columns, spacing) instead of reading order.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
qr_coderead-onlyTurn text or a URL into a crisp QR code as PNG or SVG, with size and error-correction control. Cost: 1 credit per call. Output: a file (image/png | image/svg+xml) returned inline, at most 1 MiB. The QR image
Parameters:
text(required) — string — Text or URL to encodebg— stringfg— stringsize— integer — Edge length in px (png)format— stringmargin— integer — Quiet zone in moduleserror_correction— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
rdap_lookupread-onlyLook up the public registration record of a domain, IP address or AS number from its registry's RDAP service, without personal contact data. Cost: 1 credit per call. Output: JSON. Normalised registration record: domain, IP network or autonomous system
Parameters:
query(required) — string — Domain name (example.com), IPv4/IPv6 address (1.1.1.1) or AS number (AS15169)fields— string — compact: normalised summary; full: summary plus the registry answer without contact data under 'raw'
Hints: read-only yes · destructive no · idempotent yes · open-world yes
screenshotread-onlyCapture a public web page as a PNG, JPEG or WEBP image: any viewport size, full page, retina scaling, optional cookie-banner hiding. Free tier only (credits do not apply to this tool). Output: a file (image/png | image/jpeg | image/webp) returned inline, at most 1 MiB. The screenshot
Parameters:
url(required) — string — Public http(s) URL (robots.txt is honoured), or an inline data:text/html URLwidth— integer — Viewport width in CSS pxformat— stringheight— integer — Viewport height in CSS pxquality— integer — jpeg / webp qualitydelay_ms— integer — Extra wait after load, before the shotfull_page— boolean — Capture the whole scrollable page (capped at 16384 CSS px / 50 megapixels)device_scale_factor— number — Pixel density (2 = retina)block_cookie_banners— boolean — Hide common cookie-consent dialogs (best effort)
Hints: read-only yes · destructive no · idempotent yes · open-world yes
svg_to_pngread-onlyRender an SVG document to a PNG at a chosen width, height or scale and background; external files, network references and XML entities are never loaded. Cost: 1 credit per call. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: a file (image/png) returned inline, at most 1 MiB. The rendered PNG
Parameters:
svg— string — The SVG markup as text (up to 2 MB). Use `file` instead for a base64 / URL / uploaded .svg or .svgzfile— ['string', 'object'] — Alternative to `svg`: an .svg or .svgz file as base64, data: URI or {"url": "https://..."}scale— number — Multiplier of the SVG's own size (default 1); not combinable with width / heightwidth— integer — Output width in px (height follows the aspect ratio unless given)height— integer — Output height in px (width follows the aspect ratio unless given)background— string — transparent, #rrggbb or #rrggbbaa
Hints: read-only yes · destructive no · idempotent yes · open-world yes
tabular_convertread-onlyConvert tables between CSV, TSV, XLSX and JSON with format, delimiter and encoding detection, header control and exact number and date handling. Cost in credits: 1 credit; 2 credits when the output is xlsx. File input (file): base64 string, data: URI or {"url": "https://..."}. Output: a file (text/csv | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/json) returned inline, at most 1 MiB. The converted table. meta: {rows, cols, from, to, sheet?, sheets?, encoding?, delimiter?}.
Parameters:
file(required) — ['string', 'object'] — The table: base64 string (or data: URI) or {"url": "https://..."}. Up to 10 MB.to(required) — string — Target format.from— string — Source format. Omit to auto-detect.sheet— ['string', 'integer'] — xlsx input: sheet name, or 0-based sheet index (default: the first sheet).header— boolean — The first row is a header (becomes JSON keys). false: no header row is read or written, and JSON output is an array of arrays.encoding— string — Text encoding of csv/tsv/json input. utf-8 falls back to cp1252; any other value is strict.max_rows— integer — Reject inputs with more data rows than this (413) instead of truncating silently.delimiter— string — csv input: field delimiter (default: detected among , ; tab |).infer_types— boolean — csv/tsv input to json/xlsx output: turn exact numbers (and, for xlsx, ISO dates) and true/false into typed values.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
timezone_convertread-onlyConvert a date and time between IANA time zones with exact daylight-saving handling, inspect a zone's offset and transitions, or list a country's zones. Cost: 1 credit per call. Output: JSON. convert: {input, output, offset_from, offset_to, dst_from, dst_to, utc, ...}; info: {tz, offset, abbreviation, dst, previous_transition, next_transition}; list: {country, zones, count}
Parameters:
op— stringtz— string — info: the zone to describe, an IANA name or a fixed offset (from_tz is accepted as an alias). Required for info.query— string — list: only zones whose name contains this text (case-insensitive), e.g. york or europe/to_tz— string — convert: target zone, an IANA name or a fixed offset. Required for convert.country— string — list: ISO 3166-1 alpha-2 code, e.g. US. Omit to list every zone.from_tz— string — convert: source zone, an IANA name such as Europe/Berlin or a fixed offset such as +05:30. Required when datetime has no offset.datetime— string — ISO 8601, e.g. 2026-03-29T01:30:00 (wall clock in from_tz / tz) or 2026-03-29T00:30:00Z / 2026-03-29T01:30:00+01:00 (exact instant). Required for convert and info.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.