# atx-mcp (oci · ghcr.io/gridhra/atx-mcp)

Deterministic, non-generative image transform MCP server: reproducible recipes, immutable originals.

- Trust score: 49/100 (low)
- Change this week: −3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `atx-mcp`: 50/100, [markdown](https://verifymcp.io/servers/gridhra-atx-mcp/atx-mcp.md), [page](https://verifymcp.io/servers/gridhra-atx-mcp/atx-mcp)
- oci · `ghcr.io/gridhra/atx-mcp`: 49/100 (this document), [markdown](https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.md), [page](https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/gridhra/atx-mcp`
- Version: `0.6.7`
- 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**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
- **Provenance & Transparency**: 48/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 9 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 60/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5947 tokens (~457/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (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 atx-mcp server?

atx-mcp runs locally as a container image, launched with docker run --rm -i ghcr.io/gridhra/atx-mcp:0.6.7, plus the required -v, which you supply. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add gridhra-atx-mcp -- docker run --rm -i ghcr.io/gridhra/atx-mcp:0.6.7
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### Cursor

```json
{
  "mcpServers": {
    "gridhra-atx-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/gridhra/atx-mcp:0.6.7"
      ]
    }
  }
}
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### VS Code

```json
{
  "servers": {
    "gridhra-atx-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/gridhra/atx-mcp:0.6.7"
      ]
    }
  }
}
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### Codex

```bash
codex mcp add gridhra-atx-mcp -- docker run --rm -i ghcr.io/gridhra/atx-mcp:0.6.7
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gridhra-atx-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/gridhra/atx-mcp:0.6.7"
      ],
      "enabled": true
    }
  }
}
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### Hermes

```yaml
mcp_servers:
  gridhra-atx-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/gridhra/atx-mcp:0.6.7"]
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### Netclaw

```json
{
  "McpServers": {
    "gridhra-atx-mcp": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/gridhra/atx-mcp:0.6.7"
      ]
    }
  }
}
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

### Other

```json
{
  "mcpServers": {
    "gridhra-atx-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/gridhra/atx-mcp:0.6.7"
      ]
    }
  }
}
```

Incomplete: the registry marks -v as required and gives no value we can show, so it is not in this command. Add it before you run it.

## 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-05 (score 49, −3)

- [functional] Stability: pass → 0.73

### 2026-10-29 (score 52, 0)

- [security] Stability: 0.97 → pass

### 2026-10-28 (score 52, +1)

No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 51, 0)

- [functional] Package version: 0.6.5 → 0.6.7

### 2026-10-25 (score 51, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 50, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 49, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-19 (score 48, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (13)

### `apply_transform` (~388 tokens)

Apply a transform recipe at full resolution and issue a new revision.
Pass either `recipe` ({"operations": [...]}, applied in order, at most one
"encode" and it must be last) or `preset` (a built-in named recipe) - exactly
one of the two - and either `revision_id` (one image) or `revision_ids` (the same
recipe over a batch of up to 64; one failure does not abort the rest). Call list_operations for the operation catalog and the preset
names, explain_operation for one operation's full schema.
Idempotent: the same (revision_id, resolved recipe) returns the existing derived
revision; a preset hashes identically to the equivalent raw recipe.
Note: if the recipe's encode format is png, webp, or avif, any ICC color profile
on the source is dropped (embedding is only supported for jpeg output); this is
reported as a warning, not an error.

Input parameters:

- `preset` (string|null): ビルトインプリセット名(`list_operations` の presets セクション参照)。 指定するとそのプリセットのレシピが使われる。`recipe` とは排他。
- `recipe` (object|null): 変換レシピ。`{"operations": [...]}`。`preset` とはどちらか一方のみ指定する。
- `revision_id` (string|null): 入力 revision ID("rev_...")。`revision_ids` とは排他で、どちらか一方が必須。
- `revision_ids` (array|null): 同じレシピを複数 revision に適用する(1..=64 件)。`revision_id` とは排他。 1件が失敗してもバッチは中断せず、その要素に error が入る。

### `compare_revisions` (~328 tokens)

Scale two revisions to a long edge of 640px each and compose them on one canvas
(side by side, or stacked) with an 8px gap, returned inline as a JPEG. A is placed
left/top, B is placed right/bottom. Useful for before/after or A/B visual checks.
layout="diff" instead requires A and B to share the exact same dimensions and returns
a single pixel-difference heatmap plus mean_abs_diff/max_abs_diff/changed_pixel_ratio
and an `ssim` score (structural similarity, 1.0 = identical).
Every layout also reports `perceptual_hash_distance`: the Hamming distance between
the two dHash values (0..=64), where 5 or less usually means the same picture
re-encoded or resized and 20 or more means two different pictures.

Input parameters:

- `layout`: `"side_by_side"`(既定、水平に並べる)| `"stacked"`(垂直に並べる)| `"diff"`(並べる代わりに1枚の差分ヒートマップを作る。A/B の寸法が完全一致している必要がある)。
- `revision_id_a` (string, required): 比較対象 A の revision ID("rev_...")。合成画像の左(または上)に置かれる。
- `revision_id_b` (string, required): 比較対象 B の revision ID("rev_...")。合成画像の右(または下)に置かれる。

Output parameters:

- `a`
- `a_position` (string): A が合成画像のどこに置かれるか("left" | "top")。
- `b`
- `b_position` (string): B が合成画像のどこに置かれるか("right" | "bottom")。
- `byte_size` (integer)
- `changed_pixel_ratio` (number|null): `layout: "diff"` のときだけ載る: d > 2 の画素が全体に占める割合(0.0..=1.0)。
- `height` (integer)
- `layout` (string)
- `max_abs_diff` (integer|null): `layout: "diff"` のときだけ載る: 画素ごとのチャンネル最大絶対差 d の、全画素中の最大値。
- `mean_abs_diff` (number|null): `layout: "diff"` のときだけ載る: 全チャンネル・全画素平均の絶対差(0..255 スケール)。
- `mime_type` (string)
- `perceptual_hash_distance` (integer|null): Hamming distance (0..=64) between the two revisions' perceptual hashes (dHash), on every layout. 0 means the thumbnails are identical; 5 or less usually means the same picture re-encoded or resized;…
- `preview_path` (string): 比較プレビュー画像の絶対パス。
- `ssim` (number|null): Structural similarity (SSIM, 0..=1) over the two images' luma. Present only with `layout: "diff"` and equal dimensions. 1.0 is pixel-identical; above ~0.98 the difference is usually invisible; below…
- `width` (integer): 合成画像(比較プレビュー)の寸法・容量。

### `detect_document` (~260 tokens)

Detect the dominant quadrilateral (a sheet of paper, a screen, a whiteboard, a sign)
in a revision with a contour-based search, and return it as a ready-to-paste
perspective operation. This is to `perspective` what detect_tilt is to `rotate`:
read-only, it never modifies the image, and a null quad means "do not correct".
The quad is in post-EXIF-orientation pixel coordinates, ordered tl, tr, br, bl, and
\`output_size_hint` is exactly the size `perspective` will produce from it.
Optional `min_area_ratio` (0.05..=1.0, default 0.2) is the smallest fraction of the
frame a candidate may cover. When quad is null the reason is the first warning:
no_quad_found, already_rectified (the page already fills the frame) or low_confidence.

Input parameters:

- `min_area_ratio` (number|null): 画像面積に対する候補四角形の最小面積比(0.05..=1.0)。省略時は 0.2。
- `revision_id` (string, required): 対象 revision ID("rev_...")。

Output parameters:

- `detection`: 検出結果。`quad` が null なら「補正しない」で、理由は `warnings` の先頭に入る。
- `revision_id` (string)

### `detect_text_blocks` (~432 tokens)

Find the text-like blocks (headline, paragraphs, table, caption) of a revision with
a binarize + run-length smearing + connected-components pass, and report whether the
text will survive a preview downscale. Read-only: it never modifies the image.
Blocks come back in reading order (top to bottom, then left to right) in
post-EXIF-orientation pixel coordinates, each with its line_count,
median_line_height_px and ink_ratio. `legibility.line_height_at_1568_px` is the
median line height once the whole image is shrunk to long edge 1568 (below ~16 the
text is usually unreadable), and `legibility.recommended_bands` splits the image into
crops that clear that bar - each entry is already a `crop` operation, so paste one into
a recipe before render_preview `long_edge: 1568` and read them in order.
\`legibility.strategy` says how it split: "whole" (no split needed), "bands"
(full-width horizontal bands) or "blocks" (per-block crops, used when the image is too
wide for full-width bands to help). Optional `max_blocks` (1..=128, default 32) and `min_block_area_ratio`
(0.0..=1.0, default 0.00005) bound how many and how small the blocks may be.
No block found means the image has no text-like structure, not an error.

Input parameters:

- `max_blocks` (integer|null): 返すブロック数の上限(1..=128)。省略時は 32。
- `min_block_area_ratio` (number|null): 作業画像面積に対する 1 ブロックの最小面積比(0.0..=1.0)。 これ未満の成分はノイズとして捨てる。省略時は 0.00005。
- `revision_id` (string, required): 対象 revision ID("rev_...")。

Output parameters:

- `detection`: 検出結果。ブロックが無ければ `blocks` は空で `warnings` に理由が入る。
- `revision_id` (string)

### `detect_tilt` (~243 tokens)

Detect the tilt (roll) of a revision: Canny + Hough dominant lines for coarse
candidates, refined below 0.1 degree with an edge projection-profile search.
Horizontal-only and vertical-only estimates are reported separately so a
disagreement can be read as perspective/camera position rather than roll,
Set include_score_curve=true to also get the whole search range as a score curve
(omitted by default to keep the answer small).
Read-only: it never modifies the image. A null recommended angle means "do not correct".

Input parameters:

- `include_score_curve` (boolean): 探索範囲全体のスコア曲線(最大 300 点)を結果に含めるか。既定 false。 ピークの鋭さ・多峰性を自分で読みたいときだけ true にする(既定では省かれる)。
- `max_abs_angle` (number|null): 探索する最大傾き角(度、0.5..=45)。省略時は 15。
- `revision_id` (string, required): 対象 revision ID("rev_...")。

Output parameters:

- `detection`: 検出結果。`score_curve` は `include_score_curve: true` のときだけ載る。
- `revision_id` (string)

### `explain_operation` (~120 tokens)

Full reference for one recipe operation: every parameter with its type, range,
required/default status and semantics, one or two ready-to-paste JSON examples,
and the gotchas worth knowing before using it. A built-in preset name works too and
returns its full operation list, so a preset can be read and copied as a raw recipe.
An unknown name returns a structured error listing every valid operation and preset.
Read-only.

Input parameters:

- `operation` (string, required): 説明したい op 名(`{"op": "..."}` に書く名前)。

### `export_asset` (~459 tokens)

Copy revisions' bytes out of the workspace. Pass either `revision_id` + `dest_path`
(one file) or `revision_ids` + `dest_dir` (a batch of up to 64 into one existing
directory; one failure does not abort the rest) - exactly one of the two forms.
For a batch, `filename_template` (default "{revision_id}.{ext}") builds each file
name from {revision_id} / {index} (1-based, zero-padded) / {ext} (from the MIME type) /
{stem} (the file name the lineage was imported from); it must be a plain file name,
and if two entries would collide nothing is written.
Refuses to overwrite an existing file unless overwrite=true (ask the user first),
and never writes inside the workspace store or through a symbolic link.

Input parameters:

- `dest_dir` (string|null): 書き出し先ディレクトリ(ワークスペース外、既存のディレクトリ)。 `revision_ids`(複数)専用。
- `dest_path` (string|null): 書き出し先パス(ワークスペース外)。`revision_id`(単数)専用。
- `filename_template` (string|null): `dest_dir` 内のファイル名の組み立て方。既定 `"{revision_id}.{ext}"`。 `revision_ids`(複数)専用。
- `overwrite` (boolean): 既存ファイルを上書きしてよいか。既定 false(既存なら失敗する)。
- `revision_id` (string|null): 書き出す revision ID("rev_...")。`revision_ids` とは排他で、どちらか一方が必須。
- `revision_ids` (array|null): 複数 revision を1回で書き出す(1..=64 件)。`revision_id` とは排他。 このときは `dest_path` ではなく `dest_dir` を渡す。 1件が失敗してもバッチは中断せず、`failed` に理由が入る。

### `generate_mask` (~769 tokens)

Generate a deterministic grayscale mask as a new PNG revision, with exactly the
dimensions of `reference_revision_id`. `kind` is "linear_gradient" (angle_degrees,
start, end), "radial_gradient" (center_x, center_y, radius, feather),
"luminosity_range" (min, max, feather) or "color_range" (hue_center, hue_width,
feather); the gradients use only the reference's dimensions, the other two compute
weights from its pixels. White = the masked operation applies fully, black = not at
all. Reference the returned revision_id from any tone/filter operation as
"mask": {"revision_id": "rev_...", "invert": false, "feather_px": 0}, or visualise it
with render_preview overlay="mask". Idempotent: the same params over the same
reference produce byte-identical PNG bytes and return the existing revision.

Input parameters:

- `angle_degrees` (number|null): linear_gradient: グラデーション軸の角度(度)。0 = 上が白で下へ向かって黒、 90 = 左が白で右へ向かって黒(正の角度で時計回り)。既定 0。
- `center_x` (number|null): radial_gradient: 中心の X(画像幅に対する相対値 0..1)。既定 0.5。
- `center_y` (number|null): radial_gradient: 中心の Y(画像高に対する相対値 0..1)。既定 0.5。
- `end` (number|null): linear_gradient: 軸上で重みが 0.0 に達する位置(0..1、`start` 以上)。既定 1.0。
- `feather` (number|null): 減衰帯の幅。radial_gradient では対角線の半分に対する比(0..1、既定 0.25)、 luminosity_range では輝度単位(0..255、既定 16)、 color_range では色相の度数(0..180、既定 15)。linear_gradient では使わない (`start`/`end` の間隔がフェザそのもの)。
- `hue_center` (number|null): color_range: 中心色相(度、0..360)。必須。
- `hue_width` (number|null): color_range: 中心からの**片側**幅(度、1..180)。既定 30。
- `kind` (string, required): `"linear_gradient"` | `"radial_gradient"` | `"luminosity_range"` | `"color_range"`。
- `max` (integer|null): luminosity_range: 完全に選択される輝度域の上限(0..255、`min` 以上)。既定 255。
- `min` (integer|null): luminosity_range: 完全に選択される輝度域の下限(0..255)。既定 0。
- `radius` (number|null): radial_gradient: 重みが 1.0 の内円の半径(対角線の半分に対する比 0..1)。既定 0.5。
- `reference_revision_id` (string, required): 寸法(と、輝度/色域マスクでは画素)の供給元になる画像 revision ID。
- `start` (number|null): linear_gradient: 軸上で重みが 1.0 のままでいる終端位置(0..1)。既定 0.0。

Output parameters:

- `generator` (string): 既定値まで解決したパラメータの正規化 JSON(origin の generator と同一文字列)。
- `height` (integer)
- `kind` (string): 生成した種別(`linear_gradient` 等)。
- `mean_weight` (number): マスクの平均重み(0..1)。1 に近いほど広く、0 に近いほど狭い被覆。
- `next` (string): 次の一手(op への参照の仕方)。
- `reference_revision_id` (string): 参照した画像 revision(寸法・画素の供給元)。
- `reused` (boolean): 同じマスクが既に生成済みで既存 revision を返した場合 true(冪等ヒット)。
- `revision`
- `width` (integer)

### `import_asset` (~231 tokens)

Import a local image file into the workspace and issue an immutable revision.
Pass either `path` (one file) or `paths` (a batch of up to 64; one bad file does not
abort the batch, it lands in `failed`) - exactly one of the two.
Idempotent: importing the same bytes again returns the existing revision.
If the imported bytes are already the output of a recipe held in this workspace,
the result carries a warning plus `already_derived_from` so the same recipe is not
applied twice.

Input parameters:

- `path` (string|null): 取り込むローカルファイルの絶対パス(または cwd からの相対パス)。 `paths` とは排他で、どちらか一方が必須。
- `paths` (array|null): 複数ファイルを1回で取り込む(1..=64 件)。`path` とは排他。 1件が失敗してもバッチは中断せず、`failed` に理由が入る。

### `inspect_image` (~277 tokens)

Inspect a revision: dimensions, MIME type, byte size, alpha/ICC presence,
EXIF orientation and summary, whether GPS (PII) metadata is present, luma
statistics, a `sharpness` score (variance of the Laplacian - relative, so compare
it against a known-good capture rather than an absolute; for documents below ~30
usually means motion blur or defocus) and a `perceptual_hash` (dHash, 16 hex
digits) for telling "is this the same picture?" without comparing pixels.
Set include_exif=true to also get every EXIF field as {ifd, tag, value} entries;
it is off by default because the full dump can carry GPS coordinates and names.

Input parameters:

- `include_exif` (boolean): EXIF 全フィールドを `info.exif` に載せるか。既定 false。 既定で落としているのはプライバシーのため: 全量には GPS 座標や 個人名が入りうるので、明示的に要求されたときだけ返す (`exif_summary` と `has_gps` は従来どおり常に載る)。
- `revision_id` (string, required): 対象 revision ID("rev_...")。

Output parameters:

- `info`
- `path` (string)
- `revision_id` (string)

### `list_assets` (~54 tokens)

List revisions in the workspace ledger (lineage, recipe hash, dimensions, sizes).

Input parameters:

- `asset_id` (string|null): 指定した asset_id の revision だけに絞る。省略時は全件。

Output parameters:

- `count` (integer)
- `revisions` (array)

### `list_operations` (~119 tokens)

Compact catalog of the recipe vocabulary: every operation with a one-line
description and its parameter names with terse type/range hints, plus the
built-in preset names. Optional `category` ("geometry" | "color" | "filter" |
"output") narrows the list. Call explain_operation for the full schema of one
operation. Read-only.

Input parameters:

- `category` (string|null): 絞り込む分類(`"geometry"` | `"color"` | `"filter"` | `"output"`)。省略時は全件。

Output parameters:

- `count` (integer)
- `ops` (array): op の名前と分類だけ。要約・パラメータはテキスト側 / `explain_operation` 側。
- `presets` (array): ビルトインプリセット名(`apply_transform` / `render_preview` の `preset` に渡せる)。 説明はテキストサマリ側にだけ載せる。

### `render_preview` (~555 tokens)

Render a recipe as a small JPEG preview (long edge <= 768 by default) and return it
inline plus a file path, so the composition can be checked before committing to
apply_transform. Takes either `recipe` or `preset`, exactly like apply_transform - or
NEITHER, which previews the revision as it is (use this with overlay="grid" to read
crop coordinates off an image before writing a recipe).
Optional `long_edge` (256..=1568) sets the preview size: raise it to 1568 when the
point of the preview is to READ text in the image; 768 is too small for that.
Optional `overlay` ("grid" | "thirds" | "horizon") draws semi-transparent composition
guide lines on the returned preview only (never on the apply_transform output).
overlay="mask" instead visualises a mask: pass `mask_revision_id` (required for this
overlay and rejected for the others) and the preview is tinted red where the mask
weight exceeds 0.5 and dimmed elsewhere, so the coverage can be eyeballed.
Note: if the recipe's encode format is png, webp, or avif, any ICC color profile
on the source is dropped (embedding is only supported for jpeg output); this is
reported as a warning, not an error.

Input parameters:

- `long_edge` (integer|null): プレビューの長辺(256..=1568)。省略時は 768。 文字を読む用途では 1568 まで上げる(DESIGN.md §9.12)。
- `mask_revision_id` (string|null): `overlay: "mask"` で可視化するマスク画像 revision ID。 `overlay` が `"mask"` のときのみ指定でき、そのときは必須。
- `overlay` (string|null): 構図確認用のガイド線。`"grid"`(1/8 刻みの格子)| `"thirds"`(三分割法)| `"horizon"`(1/12 刻みの水平線のみ、傾き目視用)| `"mask"`(マスクの被覆可視化。 `mask_revision_id` が必須)。省略時はオーバレイなし。
- `preset` (string|null): ビルトインプリセット名。`recipe` とは排他。
- `recipe` (object|null): 変換レシピ。`{"operations": [...]}`。`preset` とはどちらか一方のみ指定する。
- `revision_id` (string, required): 入力 revision ID("rev_...")。

Output parameters:

- `byte_size` (integer)
- `engine_version` (string)
- `estimated_vision_tokens` (integer): Rough token cost of reading this preview inline: a rule of thumb for Anthropic vision models (pixels / 750, rounded up); other hosts differ. Use it to decide whether a larger `long_edge` (or reading…
- `height` (integer)
- `mask_revision_id` (string|null): `overlay: "mask"` で可視化したマスクの revision ID。それ以外では null。
- `mime_type` (string)
- `overlay` (string|null): 適用した overlay。未指定なら null。
- `preview_path` (string): プレビュー画像の絶対パス。
- `recipe_hash` (string)
- `source_revision_id` (string)
- `warnings` (array)
- `width` (integer)

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#diagnostics

## Score history

- 2026-11-05: 49
- 2026-11-04: 52
- 2026-11-03: 52
- 2026-11-02: 52
- 2026-11-01: 52
- 2026-10-31: 52
- 2026-10-30: 52
- 2026-10-29: 52
- 2026-10-28: 52
- 2026-10-27: 51
- 2026-10-26: 51
- 2026-10-25: 51
- 2026-10-24: 50
- 2026-10-23: 50
- 2026-10-22: 49
- 2026-10-21: 49
- 2026-10-20: 48
- 2026-10-19: 48
- 2026-10-18: 47
- 2026-10-17: 47
- 2026-10-16: 46
- 2026-10-15: 46
- 2026-10-14: 45
- 2026-10-13: 10
- 2026-10-12: 10
- 2026-10-10: 10
- 2026-10-08: 10
- 2026-10-04: 41
- 2026-10-03: 40
- 2026-10-02: 40

## Common questions

### What is the atx-mcp server?

atx-mcp is listed in the public MCP registry as io.github.gridhra/atx-mcp. Deterministic, non-generative image transform MCP server: reproducible recipes, immutable originals. This page covers its container image (ghcr.io/gridhra/atx-mcp).

### Is the atx-mcp server safe to use?

atx-mcp scores 49 out of 100 on VerifyMCP. 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 atx-mcp server expose?

atx-mcp exposes 13 tools: apply_transform, compare_revisions, detect_document, detect_text_blocks, detect_tilt, and 8 more. Their descriptions and schemas cost roughly 4,235 tokens of context every time the server is loaded.

### Is the atx-mcp server still maintained?

atx-mcp 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 atx-mcp server under?

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

### What did VerifyMCP test on the atx-mcp server?

VerifyMCP ran 12 checks on atx-mcp, covering Source repository, Provenance, License, Maintenance and 8 more. 4 items could not be completed, a gap on our side rather than a finding about atx-mcp: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to a container image, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- GitHub Container Registry: https://ghcr.io/gridhra/atx-mcp
- Repository: https://github.com/gridhra/atx-mcp
- Changelog RSS feed: https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.json
- HTML version of this page: https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp
