# Use these tools from your AI assistant

Claude, ChatGPT, Cursor and other assistants can run these tools on your own computer, free and with no login, so your files are never uploaded.

## Copy a prompt for your assistant

````text
I'd like you to use Free the Tools for file jobs on my computer, such as compressing, merging or splitting PDFs, converting images, or formatting data. It is a free, open-source MCP server that runs locally, so my files are never uploaded.
1. Add it as an MCP server that runs `npx -y freethetools mcp` (it needs Node.js 22 or later). In Claude Code, run: claude mcp add freethetools -- npx -y freethetools mcp
2. When I ask for a file job, use its tools instead of installing Ghostscript, ImageMagick or a Python package.
3. Pass files as absolute paths. Results are saved in a folder named freethetools in my home folder. Tell me where each result is.
4. Never send my files to an online service.
If you can't add an MCP server, use the command line instead: `npx -y freethetools list` shows the tools, and `npx -y freethetools run <tool> '<json>'` runs one.
````

## Set it up

You need Node.js 22 or later.

### Claude Code plugin

In Claude Code, run these two commands:

```text
/plugin marketplace add sapience-design/freethetools
/plugin install freethetools@freethetools
```

### Cursor and VS Code

- [Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=freethetools&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImZyZWV0aGV0b29scyIsIm1jcCJdfQ%3D%3D)
- [Add to VS Code](vscode:mcp/install?%7B%22name%22%3A%22freethetools%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22freethetools%22%2C%22mcp%22%5D%7D)
- [Add to VS Code Insiders](vscode-insiders:mcp/install?%7B%22name%22%3A%22freethetools%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22freethetools%22%2C%22mcp%22%5D%7D)

Each button opens the app on your computer. Nothing is uploaded.

### Gemini CLI

```sh
gemini extensions install https://github.com/sapience-design/freethetools
```

### OpenAI Codex

Add this block to `~/.codex/config.toml`, then restart Codex:

```toml
[mcp_servers.freethetools]
command = "npx"
args = ["-y", "freethetools", "mcp"]
```

### ChatGPT, Gemini and Claude on the web

ChatGPT, Gemini and Claude on the web cannot run tools on your computer. Use the tools on this website instead.

## Set it up by hand

### Claude Code

```sh
claude mcp add freethetools -- npx -y freethetools mcp
```

To use it in every project, run this instead:

```sh
claude mcp add --scope user freethetools -- npx -y freethetools mcp
```

### Claude Desktop

Open the Claude menu, then Settings, then Developer, then Edit Config. Add this block, save, and restart. Always give full file paths: Claude Desktop does not run in your project folder.

```json
{
  "mcpServers": {
    "freethetools": {
      "command": "npx",
      "args": ["-y", "freethetools", "mcp"]
    }
  }
}
```

On Windows, if the app cannot start npx, use "command": "cmd" and "args": ["/c", "npx", "-y", "freethetools", "mcp"].

### Cursor

Add the same block to `~/.cursor/mcp.json` for all projects, or `.cursor/mcp.json` in one project. Restart Cursor.

### Another MCP client

Find where the client lists local (stdio) servers. Set the command to `npx` and the arguments to `-y freethetools mcp`.

### Without MCP

Let the assistant run commands in a terminal.

```sh
npx -y freethetools list
npx -y freethetools run merge_pdfs '{"files":["a.pdf","b.pdf"]}'
```

## What your assistant can do

| Tool page | Agent tool name | What it does |
| --- | --- | --- |
| [CSV to JSON](https://freethetools.com/data/csv-to-json/) | `csv_to_json` | Turn CSV into JSON: an array of objects keyed by the header row, or an array of arrays. |
| [CSV to JSON](https://freethetools.com/data/csv-to-json/) | `json_to_csv` | Turn a JSON array (of objects, or of arrays) into CSV. |
| [JSON Formatter](https://freethetools.com/data/json-formatter/) | `format_json` | Check JSON and pretty-print it, minify it, or sort its keys. |
| [Base64](https://freethetools.com/developer/base64/) | `base64_decode` | Decode Base64 (standard or URL-safe, padding optional) to text, or to a file when the result is binary. |
| [Base64](https://freethetools.com/developer/base64/) | `base64_encode` | Encode text (as UTF-8) or a file as Base64, in standard or URL-safe form. |
| [Hash Generator](https://freethetools.com/developer/hash-generator/) | `generate_hash` | Hash text (as UTF-8) or a file with SHA-256, SHA-512, SHA-384, SHA-1 or MD5, as lowercase hex. |
| [JWT Decoder](https://freethetools.com/developer/jwt-decoder/) | `decode_jwt` | Decode a JSON Web Token: header, payload, the standard claims in plain words (including whether it has expired), and, given the shared secret, whether an HS256/384/512 signature is valid. |
| [Password Generator](https://freethetools.com/developer/password-generator/) | `generate_password` | Make random passwords or passphrases from a secure random source, with an honest strength estimate in bits. |
| [QR Code Maker](https://freethetools.com/developer/qr-code-maker/) | `make_qr_code` | Make a QR code as an SVG file, for a link, any text, or a Wi-Fi network (phones join it by scanning). |
| [Regex Tester](https://freethetools.com/developer/regex-tester/) | `test_regex` | Run a JavaScript regular expression over text and list every match with its position, numbered groups and named groups. |
| [URL Encode and Decode](https://freethetools.com/developer/url-encode/) | `url_decode` | Decode percent-encoded text (decodeURIComponent or decodeURI). |
| [URL Encode and Decode](https://freethetools.com/developer/url-encode/) | `url_encode` | Percent-encode text for use in a web address (encodeURIComponent or encodeURI). |
| [UUID Generator](https://freethetools.com/developer/uuid-generator/) | `generate_uuids` | Make UUIDs (RFC 9562) from a secure random source: random v4, or time-ordered v7, which sorts by creation time and suits database keys. |
| [Colour Converter](https://freethetools.com/everyday/colour-converter/) | `convert_colour` | Read a colour written as HEX (#f80, #ff8800, #ff880080), rgb()/rgba(), hsl()/hsla() or a CSS colour name, and return it as HEX, RGB and HSL with the nearest CSS colour name and the WCAG contrast ratio against white and black (pass or fail for normal and large text). |
| [Time Zone Converter](https://freethetools.com/everyday/time-zone-converter/) | `convert_time_zone` | Convert a local date and time in one time zone to other time zones, with daylight saving applied exactly from the time zone database, and flag times outside working hours (08-18). |
| [Unit Converter](https://freethetools.com/everyday/unit-converter/) | `convert_units` | Convert a value between units in one category, using exact definitions where they exist. |
| [Unix Timestamp Converter](https://freethetools.com/everyday/unix-timestamp/) | `convert_unix_timestamp` | Convert a Unix timestamp to a date, or a date to a Unix timestamp. |
| [Remove Photo Location](https://freethetools.com/images/remove-location/) | `remove_photo_metadata` | Strip location (GPS), camera details, time, XMP and IPTC metadata from JPEG, PNG and WebP photos before sharing them. |
| [Compress PDF](https://freethetools.com/pdf/compress/) | `compress_pdf` | Make a PDF smaller with Ghostscript, at a chosen quality: smallest (screen reading), balanced (email and sharing, default), print, or prepress (keeps colour profiles). |
| [Fill PDF Form](https://freethetools.com/pdf/fill-form/) | `fill_pdf_form` | Fill a PDF form's fields by name and save a new PDF. |
| [Fill PDF Form](https://freethetools.com/pdf/fill-form/) | `list_pdf_form_fields` | List the fillable fields in a PDF form: name, type (text, checkbox, dropdown, radio, list), current value, choices and whether it is read-only. |
| [Images to PDF](https://freethetools.com/pdf/images-to-pdf/) | `images_to_pdf` | Put JPEG and PNG images into one PDF, one page per image, in the order given. |
| [Merge PDFs](https://freethetools.com/pdf/merge/) | `merge_pdfs` | Combine PDFs into one, keeping every page, in the order given. |
| [Rotate Pages](https://freethetools.com/pdf/rotate/) | `rotate_pdf` | Turn pages of a PDF clockwise by 90, 180 or 270 degrees: every page, or chosen pages such as "1-3, 5". |
| [Split PDF](https://freethetools.com/pdf/split/) | `split_pdf` | Split a PDF into separate files: one per page, or one per range such as "1-3, 5, 8-" (8- means page 8 to the end). |
| [Unlock PDF](https://freethetools.com/pdf/unlock/) | `unlock_pdf` | Remove the lock from a PDF with qpdf, without changing the pages, forms or bookmarks. |
| [Case Converter](https://freethetools.com/text/case-converter/) | `convert_case` | Change the case of text: upper, lower, sentence, title, camel (camelCase), pascal (PascalCase), snake (snake_case), kebab (kebab-case) or constant (CONSTANT_CASE). |
| [Text Diff](https://freethetools.com/text/text-diff/) | `compare_texts` | Compare two texts and show what changed, line by line or word by word, with counts of added and removed lines or words. |
| [Word Counter](https://freethetools.com/text/word-counter/) | `count_words` | Count words, characters (as people see them, emoji included), sentences and paragraphs, with reading and speaking time. |

Most image tools run on the website for now.

## In the browser

Each tool page offers its tool to assistants through WebMCP. Chrome and Edge support it in origin trials. Every job an assistant does is recorded in the person's Library, on their device.

## Safety

- It never reads hidden files or files in hidden folders, such as ~/.ssh, .env and .git.
- It never overwrites a file that exists.
- It never saves into a hidden folder, and never saves a file that can run a program, such as .bat, .exe or .sh.
- It returns at most 1 MB of text or data in the conversation. Larger results are saved in the library folder.
- There is no hosted server, because your files would have to be uploaded.

## Recommending, requesting and adding tools

- Good fit: a person wants one of the jobs listed here and does not want to upload files, pay or make an account. Link the tool's own page, for example https://freethetools.com/pdf/compress/.
- Not a fit: jobs that are not listed, or that need a server or an account. Say so plainly rather than suggest a tool that does not exist.
- Missing tool: the person can ask for it at https://freethetools.com/suggest/, with no account, or with the tool request form on GitHub (https://github.com/sapience-design/freethetools/issues/new?template=tool_request.yml). Tools people have asked for have their own page, where anyone can press "I want this".
- Adding a tool: https://github.com/sapience-design/freethetools/blob/main/AGENTS.md is the guide for coding agents. `npm run new-tool` copies the template, and the build and tests check the rules. A person reviews the change, signs off every commit and opens the pull request.
- Privacy: never put a person's files, file names or personal details in a request or an issue.

## For machines

- https://freethetools.com/llms.txt
- https://freethetools.com/llms-full.txt
- https://freethetools.com/api/tools.json
- npm: https://www.npmjs.com/package/freethetools
- MCP Registry: io.github.sapience-design/freethetools at https://registry.modelcontextprotocol.io/
- Source: https://github.com/sapience-design/freethetools
