# Ruah (npm · ruah-mcp)

On-device image tools: background removal, compression, resize, crop, AI upscale, metadata removal.

- Trust score: 68/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `ruah-mcp`: 68/100 (this document), [markdown](https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp.md), [page](https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp)

## Channel facts

- Registry: `npm`
- Package: `ruah-mcp`
- Version: `0.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 99/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 44 of 165 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2062 tokens (~343/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Ruah MCP server?

Ruah runs locally as an npm package, launched with npx -y ruah-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add tools-ruah-ruah-mcp -- npx -y ruah-mcp
```

### Cursor

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

### VS Code

```json
{
  "servers": {
    "tools-ruah-ruah-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ruah-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add tools-ruah-ruah-mcp -- npx -y ruah-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tools-ruah-ruah-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "ruah-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tools-ruah-ruah-mcp --command npx --arg -y --arg ruah-mcp
```

### Hermes

```yaml
mcp_servers:
  tools-ruah-ruah-mcp:
    command: "npx"
    args: ["-y", "ruah-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "tools-ruah-ruah-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "ruah-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add tools-ruah-ruah-mcp -t stdio -c npx -a -y ruah-mcp
```

### Other

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-03 (score 68, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-11-02 (score 53)

First indexed and scored.

## MCP tools (6)

### `remove_background` (~189 tokens)

Remove background

Cut the main subject out of a photo and make the background transparent (on-device AI — the image never leaves this computer). Saves a transparent PNG and returns its path plus a small preview. Use for "remove the background", "cut out", "transparent background", "누끼", product and profile photos. The PNG is lossless and large; to make it smaller, pass it to `compress` with format webp or png (jpeg cannot be transparent). The first call downloads a ~98 MB model once.

Input parameters:

- `input_path` (string, required): Image file to process (jpg, png, webp, avif, gif, tiff; heic on macOS). Absolute, ~/…, or relative to the working directory.
- `output_path` (string): Where to save the PNG. Default: "<name>-cutout.png" next to the input. Existing files are never overwritten.

### `compress` (~318 tokens)

Compress image

Make an image file smaller with little visible quality loss, on-device (same encoders and defaults as ruah.tools). Saves a new file and reports the size before and after; the original is never changed. Formats: keep = same format as the input; webp = usually the smallest and keeps transparency; avif = smaller still, slower to encode; jpeg = photos only, transparency becomes white; png = lossy palette compression that keeps transparency (or lossless=true for exact colours). Prefer webp unless the user needs a specific format. This is also the tool for converting between formats ("convert to WebP/AVIF/JPG/PNG"): set `format`. To change the pixel dimensions, use `resize` instead (it can change the format in the same step).

Input parameters:

- `format` (string): Output format: keep = same as the input; webp = usually smallest, keeps transparency; avif = smaller still, slower; jpeg = photos only, transparency becomes white; png = keeps transparency. Default k…
- `input_path` (string, required): Image file to compress. Absolute, ~/…, or relative to the working directory.
- `lossless` (boolean): png only: keep exact colours (bigger files).
- `output_path` (string): Where to save. Default: "<name>-compressed.<ext>" next to the input. Existing files are never overwritten.
- `quality` (integer): 1–100 for webp/avif/jpeg. Default 80 (visually near-identical, much smaller).

### `resize` (~355 tokens)

Resize image

Change an image's pixel dimensions, keeping its proportions, on-device (same high-quality resampler and encoders as ruah.tools). Give exactly one of max_side (the longest side in pixels — e.g. 1920 for web pages, 1080 for social posts, 640 for thumbnails) or percent. It never enlarges unless allow_upscale is true. Saves a new file and reports the size before and after; the original is never changed. The output is also compressed with the same format/quality options as `compress`, so "make it 800px and WebP" is one call.

Input parameters:

- `allow_upscale` (boolean): Allow max_side to make the image larger than the original. Default false.
- `format` (string): Output format: keep = same as the input; webp = usually smallest, keeps transparency; avif = smaller still, slower; jpeg = photos only, transparency becomes white; png = keeps transparency. Default k…
- `input_path` (string, required): Image file to resize. Absolute, ~/…, or relative to the working directory.
- `lossless` (boolean): png only: keep exact colours (bigger files).
- `max_side` (integer): Fit inside this many pixels on the longest side.
- `output_path` (string): Where to save. Default: "<name>-resized.<ext>" next to the input. Existing files are never overwritten.
- `percent` (number): Scale to this percentage of the original (1–100; to enlarge, use max_side with allow_upscale).
- `quality` (integer): 1–100 for webp/avif/jpeg. Default 80 (visually near-identical, much smaller).

### `crop` (~481 tokens)

Crop, rotate or flip image

Cut an image down to an aspect ratio or an exact region, and/or turn it by quarter turns or mirror it, on-device (same tool as ruah.tools/crop: whole pixels moved, never resampled). aspect_ratio keeps the largest centred area of that shape (e.g. "1:1" for a square profile picture, "16:9" for a video thumbnail, "4:5" for a portrait post). box keeps an exact region, in pixels of the input as it is shown (upright). rotate and the flips work alone or together with either. Saves a new file and reports which region of the input it kept; the original is never changed. To change the pixel size use `resize`; to change only the format or file size use `compress`.

Input parameters:

- `aspect_ratio` (string): Width:height of the result, e.g. "1:1", "4:5", "3:2", "16:9". Keeps the largest centred area of that shape (after rotate). Give this or box, not both.
- `box` (object): Exact region to keep, in pixels of the input as shown (upright), measured before rotate and flips. Give this or aspect_ratio, not both.
- `flip_horizontal` (boolean): Mirror left↔right (after rotating).
- `flip_vertical` (boolean): Mirror top↔bottom (after rotating).
- `format` (string): Output format: keep = same as the input; webp = usually smallest, keeps transparency; avif = smaller still, slower; jpeg = photos only, transparency becomes white; png = keeps transparency. Default k…
- `input_path` (string, required): Image file to crop. Absolute, ~/…, or relative to the working directory.
- `lossless` (boolean): png only: keep exact colours. Default true; false makes a smaller palette PNG.
- `output_path` (string): Where to save. Default: "<name>-crop.<ext>" next to the input. Existing files are never overwritten.
- `quality` (integer): 1–100 for webp/avif/jpeg. Default 90, like the web crop tool.
- `rotate` (integer): Turn clockwise by this many degrees: 90, 180 or 270 (-90 turns anticlockwise). Default 0.

### `upscale` (~462 tokens)

Upscale image (AI)

Enlarge an image 2× or 4× with on-device AI super-resolution (the same models as ruah.tools/upscale — the image never leaves this computer). Unlike `resize`, it redraws detail and crisp edges instead of stretching pixels into blur. Made for small or low-resolution images: icons, thumbnails, old web images, small product shots. Saves a new file and returns its path plus a small preview; the original is never changed. The result is limited to 16.8 megapixels (4096×4096): ×4 fits inputs up to about 1000×1000, ×2 up to about 2000×2000. To make an already large photo bigger, use `resize` with allow_upscale. Time grows with the output: small images take seconds, ×4 of 1000×1000 a minute or more. Transparency is kept: a transparent logo, icon or cut-out comes back transparent, with no dark fringe (save as png, webp or avif to keep it). The first ×2 call downloads an 8 MB model once, the first ×4 call 55 MB.

Input parameters:

- `format` (string): Output format: keep = same as the input; webp = usually smallest, keeps transparency; avif = smaller still, slower; jpeg = photos only, transparency becomes white; png = keeps transparency. Default k…
- `input_path` (string, required): Image file to upscale (jpg, png, webp, avif, gif, tiff; heic on macOS). Absolute, ~/…, or relative to the working directory.
- `lossless` (boolean): png only: keep exact colours. Default true; false makes a smaller palette PNG.
- `output_path` (string): Where to save. Default: "<name>-upscaled-x2.<ext>" (or -x4) next to the input. Existing files are never overwritten.
- `quality` (integer): 1–100 for webp/avif/jpeg. Default 90, like the web upscaler.
- `scale`: 2 = twice the width and height (default — quicker, and enough for most images); 4 = four times, for genuinely tiny sources.

### `strip_metadata` (~257 tokens)

Remove metadata

Remove hidden metadata from an image before sharing it, on-device (same cleaner as ruah.tools): EXIF (GPS location, camera and device, date taken), XMP, IPTC, comments, embedded thumbnails and extra data such as motion-photo video. JPEG and PNG are cleaned losslessly — only the image data and its display settings (colour profile, orientation) are copied, not re-encoded — so the photo looks exactly the same. Other formats (HEIC from an iPhone, AVIF, GIF, …) are rebuilt from their pixels with no metadata at all: WebP stays WebP, images with transparency become PNG, photos become JPEG (quality 92). Saves a new file; the original is never changed. The result lists what was removed (e.g. a GPS location) and what is left — no need to check with other tools. Use for "remove EXIF", "strip GPS / location", "clean metadata before posting".

Input parameters:

- `input_path` (string, required): Image file to clean. Absolute, ~/…, or relative to the working directory.
- `output_path` (string): Where to save. Default: "<name>-clean.<ext>" next to the input. Existing files are never overwritten.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp#diagnostics

## Score history

- 2026-11-05: 68
- 2026-11-04: 68
- 2026-11-03: 68
- 2026-11-02: 53

## Common questions

### What is the Ruah MCP server?

Ruah is an MCP server listed in the public MCP registry as tools.ruah/ruah-mcp. On-device image tools: background removal, compression, resize, crop, AI upscale, metadata removal. This page covers its npm package (ruah-mcp).

### Is the Ruah MCP server safe to use?

Ruah scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Ruah MCP server expose?

Ruah exposes 6 tools: remove_background, compress, resize, crop, upscale, strip_metadata. Their descriptions and schemas cost roughly 2,062 tokens of context every time the server is loaded.

### Is the Ruah MCP server still maintained?

Ruah is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Ruah MCP server under?

Ruah declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/ruah-mcp
- Socket report: https://socket.dev/npm/package/ruah-mcp
- Repository: https://github.com/0-big/ruah-mcp
- Website: https://ruah.tools/
- Changelog RSS feed: https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp.json
- HTML version of this page: https://verifymcp.io/servers/tools-ruah-ruah-mcp/ruah-mcp
