---
title: Rorsa Tools
description: >-
  An MCP toolkit that lets Claude (and other AI agents) generate, edit, and process images at production scale. 27
  tools, batch processing, GPU-accelerated background removal. The toolkit that built this very portfolio's image set.
lang: en
source: https://jimrarras.com/en/projects/rorsa-tools/
fetched: '2026-09-19T05:53:17.922Z'
---

Maintainer

An MCP toolkit that lets Claude (and other AI agents) generate, edit, and process images at production scale. 27 tools, batch processing, GPU-accelerated background removal. The toolkit that built this very portfolio's image set.

- **27** tools an AI assistant can call directly

- **54** automated test files

- **2** ways to run it, MCP server and terminal

## Stack
1. [Home](https://jimrarras.com/en/)
2. [Projects](https://jimrarras.com/en/projects/)
3. Rorsa Tools

tools an AI assistant can call directly

27

automated test files

54

ways to run it, MCP server and terminal

2

![Rorsa Tools](https://jimrarras.com/images/projects/rorsa-tools/hero.webp)

## The situation

I work with AI agents every day, and images were always where they stopped. The agent would write the page and the markup, then wait for a human to do the graphics, the sizes, the compression and the alt text. I built Rorsa Tools to close that gap: it is a toolkit an AI assistant calls directly, and the same toolkit runs from the terminal.

## One toolkit, two front doors

The same set of tools is exposed two ways: as an MCP server, so an agent can call them from inside a conversation, and as a terminal command for when I do it by hand.

One codebase, two interfaces. No tool works in one and is missing from the other, so whatever the agent learns holds for me too.

The pictures on this page were not delivered by a designer: an agent asked this very toolkit for them and committed them itself.

![Pixel art illustration: a palette of image tools on the left, a diagram chaining them together in the middle, and a chat window on the right](https://jimrarras.com/images/projects/rorsa-tools/mcp-tools.webp)

An illustration, not a real screen

How it works

- **27 tools on one surface:** 13 for images, 12 for text and SEO, and 2 for turning pages into markdown, with two executables out of the same package.
- **A fast start by construction:** the tool catalogue lives in a file with zero imports, so the server can answer `tools/list` before anything heavy loads. The implementations load lazily on the first call, because a cold start otherwise misses the client’s connect timeout.
- **Two model tiers:** a pro one and a flash one, with pro as the default wherever rendering text inside the image matters.
- **Disk boundaries:** the tools write only inside folders declared as allowed, so a wrong path is not a wrong file.

## Batches that do not fall over together

A page does not want one image, it wants dozens, in three sizes and two formats. Batch work breaks when one failure halfway through throws away everything already done.

Here each item fails on its own. At the end I get back what succeeded and what did not, and I re-run only the second list.

![Pixel art illustration: a terminal window with three progress bars for generate, resize and compress, and image thumbnails down the side](https://jimrarras.com/images/projects/rorsa-tools/cli-usage.webp)

An illustration, not a real screen

How it works

- **Per-item recovery:** the batch runner keeps each item’s result separately, so one failed image does not kill the batch.
- **Retries with limits:** transient errors are retried, but a cancellation from the caller propagates immediately and is never retried.
- **A heartbeat on long calls:** the server emits progress notifications while it works, which keeps the MCP client’s timeout alive through a batch that runs for minutes.
- **Processing and checks:** Sharp for size, compression and format, and 54 test files with Vitest in separate suites for the batch runner, the sidecar protocol, the markdown tools and the text tools.

## Backgrounds removed on my own machine

![Pixel art illustration: on the left a figure over a noisy background, in the middle a computer processing it, and on the right the same figure over a transparent chequerboard](https://jimrarras.com/images/projects/rorsa-tools/bg-removal.webp)

An illustration, not a real screen: background removal in three steps

Background removal never leaves the machine. The model runs locally on the graphics card, so no client’s picture goes to somebody else’s service to have an outline cut out of it, and the work goes through no API.

How it works

- **Why a sidecar:** the RMBG-2.0 model runs in Python and PyTorch and has no Node equivalent. The server starts one long-running Python process and talks to it in JSON, one line per request, over stdin and stdout.
- **When it is ready:** the process loads the model once at startup and answers a ping only once it has loaded.
- **When it falls over:** a crash, or a request that did not answer in time, marks the process dead, and the next call starts it again, with a legible error instead of silence.
- **Licence:** RMBG-2.0 is CC-BY-NC-4.0, non-commercial use only, written in the README rather than discovered later.

## Text too, not only images

The toolkit grew where it hurt: after the images came the text and the markdown mirror, the next jobs I had done dozens of times by hand.

How it works

- **Text and SEO:** 12 tools, from primitives (outline, section, polish, meta, alt text, keywords) to composites (a whole post, posts in bulk, an SEO rewrite, an FAQ, social variants, translation).
- **Markdown mirror:** 2 tools that turn one page or a whole sitemap into clean markdown with frontmatter, through a deterministic pipeline with no API cost, and optionally an `llms.txt` index.
- **Distribution and history:** source on GitHub plus a Claude Code plugin manifest, 171 commits, version 0.2.0.

## Links

## Related work

- Repo: `jimrarras/rorsa-tools` (private)

- Heartbeat PIM (MCP embedded): other production MCP work, but embedded in a commerce backend rather than standalone
