# Private AI Tools: guide for AI agents

> 144 free tools (PDF, image, video, audio, developer, data, calculators and more) that run entirely in the user's web browser. No sign-up and no upload: the user's files never leave their device.

## Quick start

1. If your client supports remote MCP servers: connect `https://private-ai-tools.com/mcp` (Streamable HTTP, no authentication) and call `find_tools` with the user's request, in their language. Otherwise pick the tool from https://private-ai-tools.com/llms.txt.
2. Give the user the link to the tool's page, in their language when there is one; they open it and the work happens in their browser.
3. Never ask for the user's files: the tools run on their device, and the MCP server returns only names and links.

## How to help the user

- When the user needs to work on a file or needs a quick converter, developer tool or calculator, pick a tool and give them the link to its page. They open it and the work happens in their browser.
- Don't ask the user to upload or paste their files to you for these tasks: the tool processes them on their device.
- Pages exist in English (https://private-ai-tools.com/<slug>) and, for most tools, in Italian, Spanish, French and German with translated addresses: `get_tool` or the tool index give the right link for each language.
- To choose a tool: the MCP server below, or the list in https://private-ai-tools.com/llms.txt.

## MCP server

Address: `https://private-ai-tools.com/mcp`. Remote MCP server, Streamable HTTP, no authentication, stateless (POST only). It returns tool names, descriptions and links; it never receives files and stores nothing.

- `find_tools`: search the tools by task, best first (up to 8). When no tool matches well it returns the closest ones with `partial: true`.
  - `query` (string, required): what the user wants to do, in a few words, e.g. "compress pdf" or "json to yaml"
  - `language` (en | it | es | fr | de): language of names, descriptions and links; default: the language the query is written in, else en
- `list_tools`: every tool, or the tools of one category.
  - `category` (image | video | audio | pdf | business | developer | data | calculators | whiteboards | games | 3d | crafts | codes | device): only this category
  - `language` (en | it | es | fr | de): language of names, descriptions and links, default en
- `get_tool`: one tool by slug, with its link in every language and the agent tools of its page.
  - `slug` (string, required): e.g. "merge-pdf"
  - `language` (en | it | es | fr | de): language of names, descriptions and links, default en

Example:

```bash
curl -X POST https://private-ai-tools.com/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_tools","arguments":{"query":"merge pdf"}}}'
```

## Agent tools in the pages (WebMCP)

For agents that work inside the user's browser. Every page registers `find_tools` and `open_tool` (opens a tool page in the tab) with `document.modelContext`; 41 tool pages also register the tools listed below, which run in the page itself. They exist only while the page is open, in a browser with WebMCP (in Chrome, behind the "WebMCP for testing" flag).

Without WebMCP, provide the API after the page has loaded and ask the page to register its tools; they stay registered across in-site navigation, and the tools of a page you leave are removed:

```js
const tools = new Map();
Object.defineProperty(document, "modelContext", {
  configurable: true,
  value: {
    registerTool(t) {
      tools.set(t.name, t);
      return { unregister: () => tools.delete(t.name) };
    },
  },
});
window.dispatchEvent(new Event("modelcontextchange"));
await tools.get("format_json").execute({ json: '{"b":1,"a":2}', sortKeys: true });
```

Tools that work on files act on the files the user dropped into the page: an agent can't hand over files. Without files they return an instruction to ask the user to drop them. Results stay in the page until a download tool saves them.

### [Image Converter](https://private-ai-tools.com/image-converter)

- `convert_images`, `download_converted_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [EXIF Remover](https://private-ai-tools.com/exif-remover)

- `remove_image_metadata`, `download_clean_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Image Compressor](https://private-ai-tools.com/image-compressor)

- `compress_images`, `download_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Image Resizer](https://private-ai-tools.com/image-resizer)

- `resize_images`, `download_resized_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Background Remover](https://private-ai-tools.com/background-remover)

- `remove_backgrounds`, `download_background_removed`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Watermark Maker](https://private-ai-tools.com/watermark-maker)

- `watermark_images`, `download_watermarked_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Video Converter](https://private-ai-tools.com/video-converter)

- `list_videos`, `convert_videos`, `download_videos`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Audio Converter](https://private-ai-tools.com/audio-converter)

- `convert_audio`, `download_audio`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Merge PDF](https://private-ai-tools.com/merge-pdf)

- `list_pdfs`, `merge_pdfs`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Compress PDF](https://private-ai-tools.com/compress-pdf)

- `compress_pdf`, `download_compressed_pdf`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [PDF to JPG](https://private-ai-tools.com/pdf-to-jpg)

- `get_pdf_info`, `convert_pdf_to_images`, `download_pdf_images`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Image to PDF](https://private-ai-tools.com/image-to-pdf)

- `list_images`, `images_to_pdf`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Split PDF](https://private-ai-tools.com/split-pdf)

- `get_pdf_info`, `split_pdf`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Rotate PDF](https://private-ai-tools.com/rotate-pdf)

- `get_pdf_info`, `edit_pdf_pages`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [OCR](https://private-ai-tools.com/ocr)

- `list_ocr_files`, `recognize_text`, `export_ocr_result`: work on what is open in the page (the files the user dropped, the page's settings); the page describes their parameters when it registers them.

### [Word Counter](https://private-ai-tools.com/word-counter)

- `analyze_text`: Count words (Unicode word segmentation, any language), characters (user-perceived, emoji count as one), sentences, paragraphs and lines; reading and speaking time (238 and 150 words per minute), top keywords and SMS segments. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `includeStopwords` (boolean): Keep English stopwords in the keyword list (default false)
- `change_text_case`: Convert text to UPPER CASE, lower case, Title Case (English small words kept lowercase) or Sentence case. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `case` ("upper" | "lower" | "title" | "sentence", required)

### [Markdown Editor](https://private-ai-tools.com/markdown-editor)

- `markdown_to_html`: Render Markdown (tables, strikethrough, task lists, autolinks, KaTeX math as MathML) to sanitized HTML, as the editor exports it. Mermaid blocks stay as code; remote images are not loaded (a placeholder keeps their address); scripts are removed. Runs locally in this browser tab; nothing is uploaded.
  - `markdown` (string, required)

### [JSON Formatter](https://private-ai-tools.com/json-formatter)

- `format_json`: Validate, pretty-print or minify JSON, optionally sorting keys. Big numbers keep their exact digits. With lenient, comments and trailing commas are accepted. Runs locally in this browser tab; nothing is uploaded.
  - `json` (string, required): The JSON text
  - `indent` (2 | 4 | "tab"): Indentation (default 2)
  - `minify` (boolean): Output on one line (default false)
  - `sortKeys` (boolean): Sort object keys recursively (default false)
  - `lenient` (boolean): Accept comments and trailing commas (default false)

### [Data Format Converter](https://private-ai-tools.com/data-format-converter)

- `convert_data_format`: Convert structured data between json, yaml, toml, xml, csv, tsv, ini, env, or generate TypeScript, Zod schema, Go structs, Python dataclasses types from it. The input format is detected when "from" is omitted. Runs locally in this browser tab; nothing is uploaded.
  - `input` (string, required): The data as text
  - `from` ("auto" | "json" | "yaml" | "toml" | "xml" | "csv" | "tsv" | "ini" | "env"): Input format (default auto)
  - `to` ("json" | "yaml" | "toml" | "xml" | "csv" | "tsv" | "ini" | "env" | "typescript" | "zod" | "go" | "python", required): Output format or type language

### [Base64 Encoder & Decoder](https://private-ai-tools.com/base64-encoder-decoder)

- `base64_encode`: Encode text to Base64 (standard or URL-safe alphabet) in a chosen character set. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `charset` ("utf-8" | "utf-16le" | "iso-8859-1"): Character set of the bytes (default utf-8)
  - `urlSafe` (boolean): Use - and _ instead of + and / (default false)
  - `padding` (boolean): Keep = padding (default true)
- `base64_decode`: Decode Base64 (standard or URL-safe) or a data: URI. Text is returned decoded; binary data is identified by its file signature and only its type and size are returned. Runs locally in this browser tab; nothing is uploaded.
  - `base64` (string, required)
  - `charset` ("utf-8" | "utf-16le" | "iso-8859-1"): Character set of the text (default utf-8)

### [URL Encoder & Decoder](https://private-ai-tools.com/url-encoder-decoder)

- `url_encode`: Percent-encode text. Modes: component (encodeURIComponent, for one query value or path segment), uri (encodeURI, for a whole URL), form (application/x-www-form-urlencoded, + for spaces). Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `mode` ("component" | "uri" | "form"): Default component
- `url_decode`: Decode percent-encoded text, reporting malformed sequences instead of failing. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `mode` ("component" | "uri" | "form"): Default component

### [Hash Generator](https://private-ai-tools.com/hash-generator)

- `hash_text`: Compute a hash or checksum of UTF-8 text, optionally keyed (HMAC, or the algorithm's own keyed mode for BLAKE). Algorithms: md5, sha1, sha256, sha512, sha224, sha384, sha3-224, sha3-256, sha3-384, sha3-512, keccak-256, keccak-512, blake2b-256, blake2b-512, blake2s-256, blake3, ripemd160, whirlpool, sm3, md4, crc32, crc32c, crc64, adler32, xxhash32, xxhash64, xxh3, xxh128. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `algorithm` ("md5" | "sha1" | "sha256" | "sha512" | "sha224" | "sha384" | "sha3-224" | "sha3-256" | "sha3-384" | "sha3-512" | "keccak-256" | "keccak-512" | "blake2b-256" | "blake2b-512" | "blake2s-256" | "blake3" | "ripemd160" | "whirlpool" | "sm3" | "md4" | "crc32" | "crc32c" | "crc64" | "adler32" | "xxhash32" | "xxhash64" | "xxh3" | "xxh128"): Default sha256
  - `key` (string): Secret key as UTF-8 text, for HMAC or keyed BLAKE
  - `encoding` ("hex" | "base64"): Output encoding (default hex)

### [UUID Generator](https://private-ai-tools.com/uuid-generator)

- `generate_ids`: Generate random UUID v4, time-ordered UUID v7 or ULID identifiers with the browser's cryptographic random generator. Runs locally in this browser tab; nothing is uploaded.
  - `kind` ("v4" | "v7" | "ulid"): Default v4
  - `count` (integer): Default 1

### [Regex Tester](https://private-ai-tools.com/regex-tester)

- `test_regex`: Run a JavaScript regular expression on a text and return the matches with their groups, or the text after a replacement. It runs in a background worker stopped after 1 second, so catastrophic backtracking cannot freeze the page. Runs locally in this browser tab; nothing is uploaded.
  - `pattern` (string, required): Without the surrounding slashes
  - `flags` (string): Any of d g i m s u v y (default g)
  - `text` (string, required)
  - `replace` (string): Replacement ($1, $<name>); omit to list matches

### [SQL Formatter](https://private-ai-tools.com/sql-formatter)

- `format_sql`: Pretty-print SQL for a given dialect with sql-formatter. Runs locally in this browser tab; nothing is uploaded.
  - `sql` (string, required)
  - `language` ("sql" | "bigquery" | "clickhouse" | "db2" | "db2i" | "duckdb" | "hive" | "mariadb" | "mysql" | "n1ql" | "plsql" | "postgresql" | "redshift" | "singlestoredb" | "snowflake" | "spark" | "sqlite" | "tidb" | "transactsql" | "trino"): Dialect (default sql)
  - `keywordCase` ("preserve" | "upper" | "lower"): Default preserve
  - `tabWidth` (integer): Default 2

### [JWT Decoder](https://private-ai-tools.com/jwt-decoder)

- `decode_jwt`: Decode the header and payload of a JSON Web Token and read its iat, nbf and exp times. Does not verify the signature. Runs locally in this browser tab; nothing is uploaded.
  - `token` (string, required)

### [Unix Timestamp Converter](https://private-ai-tools.com/unix-timestamp-converter)

- `convert_timestamp`: Convert a Unix timestamp (seconds, ms, µs or ns, detected automatically) to ISO 8601, or a date text (ISO 8601, RFC 2822 or YYYY-MM-DD HH:mm:ss read in timeZone) to a Unix timestamp. Runs locally in this browser tab; nothing is uploaded.
  - `value` (string, required): A number (timestamp) or a date text
  - `timeZone` (string): IANA time zone, e.g. Europe/Rome (default UTC)

### [Loan Calculator](https://private-ai-tools.com/loan-calculator)

- `calculate_loan`: Monthly payment, total interest and payoff time of a fixed-rate loan (standard annuity formula), with optional extra monthly or one-time payments, plus a yearly summary of the schedule. No taxes, insurance or fees unless included in the amount. Not financial advice. Runs locally in this browser tab; nothing is uploaded.
  - `principal` (number, required)
  - `annualRatePercent` (number, required): Nominal annual rate, e.g. 6.5
  - `years` (number): Term in years (or use months)
  - `months` (integer): Term in months
  - `extraMonthly` (number)
  - `lumpSum` (number)
  - `lumpMonth` (integer): Payment number of the one-time payment

### [Percentage Calculator](https://private-ai-tools.com/percentage-calculator)

- `calculate_percentage`: Percentage calculations on two numbers a and b: percent_of (a% of b), what_percent (a is what % of b), whole_from_part (a is b% of what), change (% change from a to b), increase (a increased by b%), decrease (a decreased by b%), difference (percentage difference between a and b), points (change from a% to b% in percentage points and relative %). Runs locally in this browser tab; nothing is uploaded.
  - `operation` ("percent_of" | "what_percent" | "whole_from_part" | "change" | "increase" | "decrease" | "difference" | "points", required)
  - `a` (number, required)
  - `b` (number, required)

### [Age Calculator](https://private-ai-tools.com/age-calculator)

- `calculate_age`: Exact age in years, months and days (plus totals in months, weeks, days, hours) from a birth date to another date (default today in the user's time zone), and the next birthday. Feb 29 birthdays fall on Feb 28 in common years. Runs locally in this browser tab; nothing is uploaded.
  - `birthDate` (string, required): YYYY-MM-DD
  - `birthTime` (string): HH:mm, optional
  - `atDate` (string): YYYY-MM-DD, default today
  - `atTime` (string): HH:mm, optional
- `days_between_dates`: Calendar difference between two dates: total days, years/months/days, weeks and business days (Monday to Friday, no holidays). Runs locally in this browser tab; nothing is uploaded.
  - `from` (string, required): YYYY-MM-DD
  - `to` (string, required): YYYY-MM-DD
  - `includeEndDate` (boolean): Count the end date too (default false)
- `add_to_date`: Add (or, with negative numbers, subtract) years, months, weeks and days to a date. Month ends are clamped (Jan 31 + 1 month = Feb 28 or 29). Runs locally in this browser tab; nothing is uploaded.
  - `date` (string, required): YYYY-MM-DD
  - `years` (integer)
  - `months` (integer)
  - `weeks` (integer)
  - `days` (integer)

### [BMI Calculator](https://private-ai-tools.com/bmi-calculator)

- `calculate_bmi`: Body mass index from weight and height, with the WHO adult category, BMI Prime and the healthy weight range for that height. For ages 2 to 19 (sex and ageMonths given) it adds the CDC BMI-for-age percentile and category. Informational only, not medical advice. Runs locally in this browser tab; nothing is uploaded.
  - `weightKg` (number, required)
  - `heightCm` (number, required)
  - `sex` ("female" | "male"): Needed for children
  - `ageMonths` (number): Age in months, for children 24 to 239 months

### [Scientific Calculator](https://private-ai-tools.com/scientific-calculator)

- `evaluate_expression`: Evaluate a math expression with 64-digit precision (mathjs BigNumber): + − × ÷ ^, parentheses, %, !, sqrt, sin/cos/tan in degrees or radians, log, ln, pi, e, constants. Runs locally in this browser tab; nothing is uploaded.
  - `expression` (string, required): e.g. sqrt(2)*sin(45)
  - `angle` ("deg" | "rad"): Default deg

### [GPA Calculator](https://private-ai-tools.com/gpa-calculator)

- `calculate_gpa`: Unweighted and weighted GPA on the US 4.0 scale from letter grades and credits (honors +0.5, AP/IB +1.0), optionally combined with a prior GPA. Runs locally in this browser tab; nothing is uploaded.
  - `courses` (array, required)
  - `aPlusIs43` (boolean): Count A+ as 4.3 instead of 4.0 (default false)
  - `priorGpa` (number)
  - `priorCredits` (number)

### [Spin the Wheel](https://private-ai-tools.com/spin-the-wheel)

- `spin_wheel`: Pick one random winner from a list of entries, with optional weights (an entry with weight 2 is twice as likely), with crypto.getRandomValues as the wheel does. The wheel on the page does not spin. Runs locally in this browser tab; nothing is uploaded.
  - `entries` (array, required)
  - `weights` (array)

### [Random Number Generator](https://private-ai-tools.com/random-number-generator)

- `random_numbers`: Unbiased random numbers from crypto.getRandomValues: integers or decimals in [min, max], with or without repeats, optionally sorted (up to 10000). Runs locally in this browser tab; nothing is uploaded.
  - `min` (number): Default 1
  - `max` (number): Default 100
  - `count` (integer): Default 1
  - `decimals` (integer): Default 0 (integers)
  - `unique` (boolean): No repeats (default false)
  - `sort` ("none" | "asc" | "desc"): Default none
- `pick_from_list`: Pick random items from a list without repeats, or shuffle the whole list, with crypto.getRandomValues. Runs locally in this browser tab; nothing is uploaded.
  - `items` (array, required)
  - `count` (integer): How many to pick; omit to shuffle all

### [World Clock](https://private-ai-tools.com/world-clock)

- `convert_time_zone`: Convert a wall-clock time in one IANA time zone (e.g. Europe/Rome) to others, with daylight saving time applied for that date; default time is now. Runs locally in this browser tab; nothing is uploaded.
  - `dateTime` (string): YYYY-MM-DD HH:mm in fromZone; omit for now
  - `fromZone` (string): IANA zone, default UTC
  - `toZones` (array, required)

### [Coin Flip](https://private-ai-tools.com/coin-flip)

- `flip_coins`: Flip a fair coin one or more times (one random bit each from crypto.getRandomValues) and count heads and tails. Runs locally in this browser tab; nothing is uploaded.
  - `count` (integer): Default 1

### [Dice Roller](https://private-ai-tools.com/dice-roller)

- `roll_dice`: Roll dice in standard notation (2d6+3, 4d6dl1, 2d20kh1, d%, exploding dice…) with crypto random numbers. For simple sums of dice it also returns the exact probability distribution stats. Runs locally in this browser tab; nothing is uploaded.
  - `notation` (string, required): e.g. 3d6+2

### [QR Code Generator](https://private-ai-tools.com/qr-code-generator)

- `generate_qr_code`: Make a QR code as SVG markup for text, a URL, Wi-Fi login, email, SMS, phone, map location or contact card (vCard). The code is static: it never expires and has no tracking. Runs locally in this browser tab; nothing is uploaded.
  - `kind` ("text" | "url" | "wifi" | "email" | "sms" | "phone" | "geo" | "contact"): Default text
  - `text` (string)
  - `url` (string)
  - `ssid` (string)
  - `password` (string)
  - `security` ("WPA" | "WEP" | "nopass")
  - `hidden` (boolean)
  - `to` (string): Email recipient
  - `subject` (string)
  - `body` (string)
  - `phone` (string)
  - `message` (string)
  - `lat` (number)
  - `lng` (number)
  - `contact` (object): firstName, lastName, phone, email, org, title, url, street, city, region, postcode, country
  - `errorCorrection` ("L" | "M" | "Q" | "H"): L 7%, M 15% (default), Q 25%, H 30%
  - `size` (integer): Pixels, default 512
  - `foreground` (string): #rrggbb, default #000000
  - `background` (string): #rrggbb, default #ffffff

### [Barcode Generator](https://private-ai-tools.com/barcode-generator)

- `generate_barcode`: Make a barcode as SVG markup with bwip-js: ean13 (EAN-13), ean8 (EAN-8), upca (UPC-A), upce (UPC-E), gs1-128 (GS1-128), itf14 (ITF-14), databaromni (GS1 DataBar Omnidirectional), databarexpanded (GS1 DataBar Expanded), code128 (Code 128), code39 (Code 39), code93 (Code 93), i2of5 (Interleaved 2 of 5), codabar (Codabar), msi (MSI Plessey), qrcode (QR Code), datamatrix (Data Matrix), pdf417 (PDF417), azteccode (Aztec). Check digits are computed or verified and the data is validated for the symbology; sizes follow its defaults. Runs locally in this browser tab; nothing is uploaded.
  - `symbology` ("ean13" | "ean8" | "upca" | "upce" | "gs1-128" | "itf14" | "databaromni" | "databarexpanded" | "code128" | "code39" | "code93" | "i2of5" | "codabar" | "msi" | "qrcode" | "datamatrix" | "pdf417" | "azteccode", required)
  - `value` (string, required): Data to encode, e.g. 12 digits for EAN-13 (the check digit is added)
  - `showText` (boolean): Human-readable text under linear codes (default true)
  - `moduleWidthMm` (number): X-dimension; default from the symbology
  - `foreground` (string): #rrggbb, default #000000
  - `background` (string): #rrggbb, default #ffffff

### [Font Generator](https://private-ai-tools.com/font-generator)

- `fancy_text`: Rewrite text with Unicode look-alike characters (bold, italic, script, fraktur, double-struck, monospace, circled, small caps…) that paste anywhere, e.g. social profiles. Screen readers may read them badly. Styles: bold, italic, bold-italic, script, bold-script, fraktur, bold-fraktur, double-struck, sans, sans-bold, sans-italic, sans-bold-italic, monospace, circled, bubble, negative-circled, squared, negative-squared, parenthesized, fullwidth, small-caps, superscript, subscript, upside-down, strikethrough, underline, double-underline, overline, slash, wide, regional, brackets. Omit style to get all. Runs locally in this browser tab; nothing is uploaded.
  - `text` (string, required)
  - `style` ("bold" | "italic" | "bold-italic" | "script" | "bold-script" | "fraktur" | "bold-fraktur" | "double-struck" | "sans" | "sans-bold" | "sans-italic" | "sans-bold-italic" | "monospace" | "circled" | "bubble" | "negative-circled" | "squared" | "negative-squared" | "parenthesized" | "fullwidth" | "small-caps" | "superscript" | "subscript" | "upside-down" | "strikethrough" | "underline" | "double-underline" | "overline" | "slash" | "wide" | "regional" | "brackets")

## More

- [Use with AI assistants](https://private-ai-tools.com/ai-assistants): how users connect their assistant.
- [llms.txt](https://private-ai-tools.com/llms.txt): every tool with a one-line description.
- Tool index (JSON): https://private-ai-tools.com/agent/tools.en.json, https://private-ai-tools.com/agent/tools.it.json, https://private-ai-tools.com/agent/tools.es.json, https://private-ai-tools.com/agent/tools.fr.json, https://private-ai-tools.com/agent/tools.de.json.
- [Privacy](https://private-ai-tools.com/privacy): what the site and the MCP server receive.
