{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T19:27:28.294Z","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp","markdownUrl":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.md","server":{"slug":"gridhra-atx-mcp","name":"atx-mcp","registryName":"io.github.gridhra/atx-mcp","description":"Deterministic, non-generative image transform MCP server: reproducible recipes, immutable originals.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"ghcr-io-gridhra-atx-mcp","type":"oci","identifier":"ghcr.io/gridhra/atx-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp","version":"0.6.7","transport":"stdio","scoredAt":"2026-11-05T06:22:49.574Z"},"score":{"total":49,"tier":"low","status":"scored","weekDelta":-3,"history":[{"date":"2026-11-05","total":49},{"date":"2026-11-04","total":52},{"date":"2026-11-03","total":52},{"date":"2026-11-02","total":52},{"date":"2026-11-01","total":52},{"date":"2026-10-31","total":52},{"date":"2026-10-30","total":52},{"date":"2026-10-29","total":52},{"date":"2026-10-28","total":52},{"date":"2026-10-27","total":51},{"date":"2026-10-26","total":51},{"date":"2026-10-25","total":51},{"date":"2026-10-24","total":50},{"date":"2026-10-23","total":50},{"date":"2026-10-22","total":49},{"date":"2026-10-21","total":49},{"date":"2026-10-20","total":48},{"date":"2026-10-19","total":48},{"date":"2026-10-18","total":47},{"date":"2026-10-17","total":47},{"date":"2026-10-16","total":46},{"date":"2026-10-15","total":46},{"date":"2026-10-14","total":45},{"date":"2026-10-13","total":10},{"date":"2026-10-12","total":10},{"date":"2026-10-10","total":10},{"date":"2026-10-08","total":10},{"date":"2026-10-04","total":41},{"date":"2026-10-03","total":40},{"date":"2026-10-02","total":40}]},"categories":[{"name":"Supply Chain Security","score":0,"verdict":"unverified","reasons":["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."],"codes":[{"code":"supplychain.malware_inconclusive","args":{"reason":"ecosystem_unsupported"}},{"code":"cve.inconclusive","args":{"reason":"no_sbom_attached"}},{"code":"installscript.inconclusive","args":{"reason":"no_install_concept"}},{"code":"dephealth.inconclusive","args":{"reason":"no_sbom_attached"}}]},{"name":"Provenance & Transparency","score":48,"verdict":"fail","reasons":["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)."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"9"}},{"code":"disclosure.present","args":{}}]},{"name":"Schema Quality & AI Usability","score":60,"verdict":"fail","reasons":["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."],"codes":[{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"457","items":"13","tools":"13","tokens":"5947","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":73,"verdict":"partial","reasons":["Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"22"}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["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."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["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."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"13"}},{"code":"toolsafety.manipulation_clean","args":{"units":"14","judged":"14"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":["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."],"malware":[],"components":[{"slug":"atx-mcp","type":"npm","identifier":"atx-mcp","withdrawn":false,"score":50,"current":false,"url":"https://verifymcp.io/servers/gridhra-atx-mcp/atx-mcp","markdownUrl":"https://verifymcp.io/servers/gridhra-atx-mcp/atx-mcp.md"},{"slug":"ghcr-io-gridhra-atx-mcp","type":"oci","identifier":"ghcr.io/gridhra/atx-mcp","withdrawn":false,"score":49,"current":true,"url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp","markdownUrl":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.md"}],"facts":[{"label":"Registry","value":"oci"},{"label":"Package","value":"ghcr.io/gridhra/atx-mcp"},{"label":"Version","value":"0.6.7"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"apply_transform","title":null,"description":"Apply a transform recipe at full resolution and issue a new revision.\nPass either `recipe` ({\"operations\": [...]}, applied in order, at most one\n\"encode\" and it must be last) or `preset` (a built-in named recipe) - exactly\none of the two - and either `revision_id` (one image) or `revision_ids` (the same\nrecipe over a batch of up to 64; one failure does not abort the rest). Call list_operations for the operation catalog and the preset\nnames, explain_operation for one operation's full schema.\nIdempotent: the same (revision_id, resolved recipe) returns the existing derived\nrevision; a preset hashes identically to the equivalent raw recipe.\nNote: if the recipe's encode format is png, webp, or avif, any ICC color profile\non the source is dropped (embedding is only supported for jpeg output); this is\nreported as a warning, not an error.","inputs":[{"name":"preset","type":"string|null","required":false,"description":"ビルトインプリセット名(`list_operations` の presets セクション参照)。\n指定するとそのプリセットのレシピが使われる。`recipe` とは排他。"},{"name":"recipe","type":"object|null","required":false,"description":"変換レシピ。`{\"operations\": [...]}`。`preset` とはどちらか一方のみ指定する。"},{"name":"revision_id","type":"string|null","required":false,"description":"入力 revision ID(\"rev_...\")。`revision_ids` とは排他で、どちらか一方が必須。"},{"name":"revision_ids","type":"array|null","required":false,"description":"同じレシピを複数 revision に適用する(1..=64 件)。`revision_id` とは排他。\n1件が失敗してもバッチは中断せず、その要素に error が入る。"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":388},{"name":"compare_revisions","title":null,"description":"Scale two revisions to a long edge of 640px each and compose them on one canvas\n(side by side, or stacked) with an 8px gap, returned inline as a JPEG. A is placed\nleft/top, B is placed right/bottom. Useful for before/after or A/B visual checks.\nlayout=\"diff\" instead requires A and B to share the exact same dimensions and returns\na single pixel-difference heatmap plus mean_abs_diff/max_abs_diff/changed_pixel_ratio\nand an `ssim` score (structural similarity, 1.0 = identical).\nEvery layout also reports `perceptual_hash_distance`: the Hamming distance between\nthe two dHash values (0..=64), where 5 or less usually means the same picture\nre-encoded or resized and 20 or more means two different pictures.","inputs":[{"name":"layout","type":null,"required":false,"description":"`\"side_by_side\"`(既定、水平に並べる)| `\"stacked\"`(垂直に並べる)|\n`\"diff\"`(並べる代わりに1枚の差分ヒートマップを作る。A/B の寸法が完全一致している必要がある)。"},{"name":"revision_id_a","type":"string","required":true,"description":"比較対象 A の revision ID(\"rev_...\")。合成画像の左(または上)に置かれる。"},{"name":"revision_id_b","type":"string","required":true,"description":"比較対象 B の revision ID(\"rev_...\")。合成画像の右(または下)に置かれる。"}],"outputs":[{"name":"a","type":null,"required":true,"description":null},{"name":"a_position","type":"string","required":true,"description":"A が合成画像のどこに置かれるか(\"left\" | \"top\")。"},{"name":"b","type":null,"required":true,"description":null},{"name":"b_position","type":"string","required":true,"description":"B が合成画像のどこに置かれるか(\"right\" | \"bottom\")。"},{"name":"byte_size","type":"integer","required":true,"description":null},{"name":"changed_pixel_ratio","type":"number|null","required":false,"description":"`layout: \"diff\"` のときだけ載る: d > 2 の画素が全体に占める割合(0.0..=1.0)。"},{"name":"height","type":"integer","required":true,"description":null},{"name":"layout","type":"string","required":true,"description":null},{"name":"max_abs_diff","type":"integer|null","required":false,"description":"`layout: \"diff\"` のときだけ載る: 画素ごとのチャンネル最大絶対差 d の、全画素中の最大値。"},{"name":"mean_abs_diff","type":"number|null","required":false,"description":"`layout: \"diff\"` のときだけ載る: 全チャンネル・全画素平均の絶対差(0..255 スケール)。"},{"name":"mime_type","type":"string","required":true,"description":null},{"name":"perceptual_hash_distance","type":"integer|null","required":false,"description":"Hamming distance (0..=64) between the two revisions' perceptual hashes (dHash),\non every layout. 0 means the thumbnails are identical; 5 or less usually means\nthe same picture re-encoded or resized;…"},{"name":"preview_path","type":"string","required":true,"description":"比較プレビュー画像の絶対パス。"},{"name":"ssim","type":"number|null","required":false,"description":"Structural similarity (SSIM, 0..=1) over the two images' luma. Present only with\n`layout: \"diff\"` and equal dimensions. 1.0 is pixel-identical; above ~0.98 the\ndifference is usually invisible; below…"},{"name":"width","type":"integer","required":true,"description":"合成画像(比較プレビュー)の寸法・容量。"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":328},{"name":"detect_document","title":null,"description":"Detect the dominant quadrilateral (a sheet of paper, a screen, a whiteboard, a sign)\nin a revision with a contour-based search, and return it as a ready-to-paste\nperspective operation. This is to `perspective` what detect_tilt is to `rotate`:\nread-only, it never modifies the image, and a null quad means \"do not correct\".\nThe quad is in post-EXIF-orientation pixel coordinates, ordered tl, tr, br, bl, and\n`output_size_hint` is exactly the size `perspective` will produce from it.\nOptional `min_area_ratio` (0.05..=1.0, default 0.2) is the smallest fraction of the\nframe a candidate may cover. When quad is null the reason is the first warning:\nno_quad_found, already_rectified (the page already fills the frame) or low_confidence.","inputs":[{"name":"min_area_ratio","type":"number|null","required":false,"description":"画像面積に対する候補四角形の最小面積比(0.05..=1.0)。省略時は 0.2。"},{"name":"revision_id","type":"string","required":true,"description":"対象 revision ID(\"rev_...\")。"}],"outputs":[{"name":"detection","type":null,"required":true,"description":"検出結果。`quad` が null なら「補正しない」で、理由は `warnings` の先頭に入る。"},{"name":"revision_id","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":260},{"name":"detect_text_blocks","title":null,"description":"Find the text-like blocks (headline, paragraphs, table, caption) of a revision with\na binarize + run-length smearing + connected-components pass, and report whether the\ntext will survive a preview downscale. Read-only: it never modifies the image.\nBlocks come back in reading order (top to bottom, then left to right) in\npost-EXIF-orientation pixel coordinates, each with its line_count,\nmedian_line_height_px and ink_ratio. `legibility.line_height_at_1568_px` is the\nmedian line height once the whole image is shrunk to long edge 1568 (below ~16 the\ntext is usually unreadable), and `legibility.recommended_bands` splits the image into\ncrops that clear that bar - each entry is already a `crop` operation, so paste one into\na recipe before render_preview `long_edge: 1568` and read them in order.\n`legibility.strategy` says how it split: \"whole\" (no split needed), \"bands\"\n(full-width horizontal bands) or \"blocks\" (per-block crops, used when the image is too\nwide for full-width bands to help). Optional `max_blocks` (1..=128, default 32) and `min_block_area_ratio`\n(0.0..=1.0, default 0.00005) bound how many and how small the blocks may be.\nNo block found means the image has no text-like structure, not an error.","inputs":[{"name":"max_blocks","type":"integer|null","required":false,"description":"返すブロック数の上限(1..=128)。省略時は 32。"},{"name":"min_block_area_ratio","type":"number|null","required":false,"description":"作業画像面積に対する 1 ブロックの最小面積比(0.0..=1.0)。\nこれ未満の成分はノイズとして捨てる。省略時は 0.00005。"},{"name":"revision_id","type":"string","required":true,"description":"対象 revision ID(\"rev_...\")。"}],"outputs":[{"name":"detection","type":null,"required":true,"description":"検出結果。ブロックが無ければ `blocks` は空で `warnings` に理由が入る。"},{"name":"revision_id","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":432},{"name":"detect_tilt","title":null,"description":"Detect the tilt (roll) of a revision: Canny + Hough dominant lines for coarse\ncandidates, refined below 0.1 degree with an edge projection-profile search.\nHorizontal-only and vertical-only estimates are reported separately so a\ndisagreement can be read as perspective/camera position rather than roll,\nSet include_score_curve=true to also get the whole search range as a score curve\n(omitted by default to keep the answer small).\nRead-only: it never modifies the image. A null recommended angle means \"do not correct\".","inputs":[{"name":"include_score_curve","type":"boolean","required":false,"description":"探索範囲全体のスコア曲線(最大 300 点)を結果に含めるか。既定 false。\nピークの鋭さ・多峰性を自分で読みたいときだけ true にする(既定では省かれる)。"},{"name":"max_abs_angle","type":"number|null","required":false,"description":"探索する最大傾き角(度、0.5..=45)。省略時は 15。"},{"name":"revision_id","type":"string","required":true,"description":"対象 revision ID(\"rev_...\")。"}],"outputs":[{"name":"detection","type":null,"required":true,"description":"検出結果。`score_curve` は `include_score_curve: true` のときだけ載る。"},{"name":"revision_id","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":243},{"name":"explain_operation","title":null,"description":"Full reference for one recipe operation: every parameter with its type, range,\nrequired/default status and semantics, one or two ready-to-paste JSON examples,\nand the gotchas worth knowing before using it. A built-in preset name works too and\nreturns its full operation list, so a preset can be read and copied as a raw recipe.\nAn unknown name returns a structured error listing every valid operation and preset.\nRead-only.","inputs":[{"name":"operation","type":"string","required":true,"description":"説明したい op 名(`{\"op\": \"...\"}` に書く名前)。"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":120},{"name":"export_asset","title":null,"description":"Copy revisions' bytes out of the workspace. Pass either `revision_id` + `dest_path`\n(one file) or `revision_ids` + `dest_dir` (a batch of up to 64 into one existing\ndirectory; one failure does not abort the rest) - exactly one of the two forms.\nFor a batch, `filename_template` (default \"{revision_id}.{ext}\") builds each file\nname from {revision_id} / {index} (1-based, zero-padded) / {ext} (from the MIME type) /\n{stem} (the file name the lineage was imported from); it must be a plain file name,\nand if two entries would collide nothing is written.\nRefuses to overwrite an existing file unless overwrite=true (ask the user first),\nand never writes inside the workspace store or through a symbolic link.","inputs":[{"name":"dest_dir","type":"string|null","required":false,"description":"書き出し先ディレクトリ(ワークスペース外、既存のディレクトリ)。\n`revision_ids`(複数)専用。"},{"name":"dest_path","type":"string|null","required":false,"description":"書き出し先パス(ワークスペース外)。`revision_id`(単数)専用。"},{"name":"filename_template","type":"string|null","required":false,"description":"`dest_dir` 内のファイル名の組み立て方。既定 `\"{revision_id}.{ext}\"`。\n`revision_ids`(複数)専用。"},{"name":"overwrite","type":"boolean","required":false,"description":"既存ファイルを上書きしてよいか。既定 false(既存なら失敗する)。"},{"name":"revision_id","type":"string|null","required":false,"description":"書き出す revision ID(\"rev_...\")。`revision_ids` とは排他で、どちらか一方が必須。"},{"name":"revision_ids","type":"array|null","required":false,"description":"複数 revision を1回で書き出す(1..=64 件)。`revision_id` とは排他。\nこのときは `dest_path` ではなく `dest_dir` を渡す。\n1件が失敗してもバッチは中断せず、`failed` に理由が入る。"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":459},{"name":"generate_mask","title":null,"description":"Generate a deterministic grayscale mask as a new PNG revision, with exactly the\ndimensions of `reference_revision_id`. `kind` is \"linear_gradient\" (angle_degrees,\nstart, end), \"radial_gradient\" (center_x, center_y, radius, feather),\n\"luminosity_range\" (min, max, feather) or \"color_range\" (hue_center, hue_width,\nfeather); the gradients use only the reference's dimensions, the other two compute\nweights from its pixels. White = the masked operation applies fully, black = not at\nall. Reference the returned revision_id from any tone/filter operation as\n\"mask\": {\"revision_id\": \"rev_...\", \"invert\": false, \"feather_px\": 0}, or visualise it\nwith render_preview overlay=\"mask\". Idempotent: the same params over the same\nreference produce byte-identical PNG bytes and return the existing revision.","inputs":[{"name":"angle_degrees","type":"number|null","required":false,"description":"linear_gradient: グラデーション軸の角度(度)。0 = 上が白で下へ向かって黒、\n90 = 左が白で右へ向かって黒(正の角度で時計回り)。既定 0。"},{"name":"center_x","type":"number|null","required":false,"description":"radial_gradient: 中心の X(画像幅に対する相対値 0..1)。既定 0.5。"},{"name":"center_y","type":"number|null","required":false,"description":"radial_gradient: 中心の Y(画像高に対する相対値 0..1)。既定 0.5。"},{"name":"end","type":"number|null","required":false,"description":"linear_gradient: 軸上で重みが 0.0 に達する位置(0..1、`start` 以上)。既定 1.0。"},{"name":"feather","type":"number|null","required":false,"description":"減衰帯の幅。radial_gradient では対角線の半分に対する比(0..1、既定 0.25)、\nluminosity_range では輝度単位(0..255、既定 16)、\ncolor_range では色相の度数(0..180、既定 15)。linear_gradient では使わない\n(`start`/`end` の間隔がフェザそのもの)。"},{"name":"hue_center","type":"number|null","required":false,"description":"color_range: 中心色相(度、0..360)。必須。"},{"name":"hue_width","type":"number|null","required":false,"description":"color_range: 中心からの**片側**幅(度、1..180)。既定 30。"},{"name":"kind","type":"string","required":true,"description":"`\"linear_gradient\"` | `\"radial_gradient\"` | `\"luminosity_range\"` | `\"color_range\"`。"},{"name":"max","type":"integer|null","required":false,"description":"luminosity_range: 完全に選択される輝度域の上限(0..255、`min` 以上)。既定 255。"},{"name":"min","type":"integer|null","required":false,"description":"luminosity_range: 完全に選択される輝度域の下限(0..255)。既定 0。"},{"name":"radius","type":"number|null","required":false,"description":"radial_gradient: 重みが 1.0 の内円の半径(対角線の半分に対する比 0..1)。既定 0.5。"},{"name":"reference_revision_id","type":"string","required":true,"description":"寸法(と、輝度/色域マスクでは画素)の供給元になる画像 revision ID。"},{"name":"start","type":"number|null","required":false,"description":"linear_gradient: 軸上で重みが 1.0 のままでいる終端位置(0..1)。既定 0.0。"}],"outputs":[{"name":"generator","type":"string","required":true,"description":"既定値まで解決したパラメータの正規化 JSON(origin の generator と同一文字列)。"},{"name":"height","type":"integer","required":true,"description":null},{"name":"kind","type":"string","required":true,"description":"生成した種別(`linear_gradient` 等)。"},{"name":"mean_weight","type":"number","required":true,"description":"マスクの平均重み(0..1)。1 に近いほど広く、0 に近いほど狭い被覆。"},{"name":"next","type":"string","required":true,"description":"次の一手(op への参照の仕方)。"},{"name":"reference_revision_id","type":"string","required":true,"description":"参照した画像 revision(寸法・画素の供給元)。"},{"name":"reused","type":"boolean","required":true,"description":"同じマスクが既に生成済みで既存 revision を返した場合 true(冪等ヒット)。"},{"name":"revision","type":null,"required":true,"description":null},{"name":"width","type":"integer","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":769},{"name":"import_asset","title":null,"description":"Import a local image file into the workspace and issue an immutable revision.\nPass either `path` (one file) or `paths` (a batch of up to 64; one bad file does not\nabort the batch, it lands in `failed`) - exactly one of the two.\nIdempotent: importing the same bytes again returns the existing revision.\nIf the imported bytes are already the output of a recipe held in this workspace,\nthe result carries a warning plus `already_derived_from` so the same recipe is not\napplied twice.","inputs":[{"name":"path","type":"string|null","required":false,"description":"取り込むローカルファイルの絶対パス(または cwd からの相対パス)。\n`paths` とは排他で、どちらか一方が必須。"},{"name":"paths","type":"array|null","required":false,"description":"複数ファイルを1回で取り込む(1..=64 件)。`path` とは排他。\n1件が失敗してもバッチは中断せず、`failed` に理由が入る。"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":231},{"name":"inspect_image","title":null,"description":"Inspect a revision: dimensions, MIME type, byte size, alpha/ICC presence,\nEXIF orientation and summary, whether GPS (PII) metadata is present, luma\nstatistics, a `sharpness` score (variance of the Laplacian - relative, so compare\nit against a known-good capture rather than an absolute; for documents below ~30\nusually means motion blur or defocus) and a `perceptual_hash` (dHash, 16 hex\ndigits) for telling \"is this the same picture?\" without comparing pixels.\nSet include_exif=true to also get every EXIF field as {ifd, tag, value} entries;\nit is off by default because the full dump can carry GPS coordinates and names.","inputs":[{"name":"include_exif","type":"boolean","required":false,"description":"EXIF 全フィールドを `info.exif` に載せるか。既定 false。\n\n既定で落としているのはプライバシーのため: 全量には GPS 座標や\n個人名が入りうるので、明示的に要求されたときだけ返す\n(`exif_summary` と `has_gps` は従来どおり常に載る)。"},{"name":"revision_id","type":"string","required":true,"description":"対象 revision ID(\"rev_...\")。"}],"outputs":[{"name":"info","type":null,"required":true,"description":null},{"name":"path","type":"string","required":true,"description":null},{"name":"revision_id","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":277},{"name":"list_assets","title":null,"description":"List revisions in the workspace ledger (lineage, recipe hash, dimensions, sizes).","inputs":[{"name":"asset_id","type":"string|null","required":false,"description":"指定した asset_id の revision だけに絞る。省略時は全件。"}],"outputs":[{"name":"count","type":"integer","required":true,"description":null},{"name":"revisions","type":"array","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":54},{"name":"list_operations","title":null,"description":"Compact catalog of the recipe vocabulary: every operation with a one-line\ndescription and its parameter names with terse type/range hints, plus the\nbuilt-in preset names. Optional `category` (\"geometry\" | \"color\" | \"filter\" |\n\"output\") narrows the list. Call explain_operation for the full schema of one\noperation. Read-only.","inputs":[{"name":"category","type":"string|null","required":false,"description":"絞り込む分類(`\"geometry\"` | `\"color\"` | `\"filter\"` | `\"output\"`)。省略時は全件。"}],"outputs":[{"name":"count","type":"integer","required":true,"description":null},{"name":"ops","type":"array","required":true,"description":"op の名前と分類だけ。要約・パラメータはテキスト側 / `explain_operation` 側。"},{"name":"presets","type":"array","required":true,"description":"ビルトインプリセット名(`apply_transform` / `render_preview` の `preset` に渡せる)。\n説明はテキストサマリ側にだけ載せる。"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":119},{"name":"render_preview","title":null,"description":"Render a recipe as a small JPEG preview (long edge <= 768 by default) and return it\ninline plus a file path, so the composition can be checked before committing to\napply_transform. Takes either `recipe` or `preset`, exactly like apply_transform - or\nNEITHER, which previews the revision as it is (use this with overlay=\"grid\" to read\ncrop coordinates off an image before writing a recipe).\nOptional `long_edge` (256..=1568) sets the preview size: raise it to 1568 when the\npoint of the preview is to READ text in the image; 768 is too small for that.\nOptional `overlay` (\"grid\" | \"thirds\" | \"horizon\") draws semi-transparent composition\nguide lines on the returned preview only (never on the apply_transform output).\noverlay=\"mask\" instead visualises a mask: pass `mask_revision_id` (required for this\noverlay and rejected for the others) and the preview is tinted red where the mask\nweight exceeds 0.5 and dimmed elsewhere, so the coverage can be eyeballed.\nNote: if the recipe's encode format is png, webp, or avif, any ICC color profile\non the source is dropped (embedding is only supported for jpeg output); this is\nreported as a warning, not an error.","inputs":[{"name":"long_edge","type":"integer|null","required":false,"description":"プレビューの長辺(256..=1568)。省略時は 768。\n文字を読む用途では 1568 まで上げる(DESIGN.md §9.12)。"},{"name":"mask_revision_id","type":"string|null","required":false,"description":"`overlay: \"mask\"` で可視化するマスク画像 revision ID。\n`overlay` が `\"mask\"` のときのみ指定でき、そのときは必須。"},{"name":"overlay","type":"string|null","required":false,"description":"構図確認用のガイド線。`\"grid\"`(1/8 刻みの格子)| `\"thirds\"`(三分割法)|\n`\"horizon\"`(1/12 刻みの水平線のみ、傾き目視用)| `\"mask\"`(マスクの被覆可視化。\n`mask_revision_id` が必須)。省略時はオーバレイなし。"},{"name":"preset","type":"string|null","required":false,"description":"ビルトインプリセット名。`recipe` とは排他。"},{"name":"recipe","type":"object|null","required":false,"description":"変換レシピ。`{\"operations\": [...]}`。`preset` とはどちらか一方のみ指定する。"},{"name":"revision_id","type":"string","required":true,"description":"入力 revision ID(\"rev_...\")。"}],"outputs":[{"name":"byte_size","type":"integer","required":true,"description":null},{"name":"engine_version","type":"string","required":true,"description":null},{"name":"estimated_vision_tokens","type":"integer","required":true,"description":"Rough token cost of reading this preview inline: a rule of thumb for Anthropic\nvision models (pixels / 750, rounded up); other hosts differ. Use it to decide\nwhether a larger `long_edge` (or reading…"},{"name":"height","type":"integer","required":true,"description":null},{"name":"mask_revision_id","type":"string|null","required":false,"description":"`overlay: \"mask\"` で可視化したマスクの revision ID。それ以外では null。"},{"name":"mime_type","type":"string","required":true,"description":null},{"name":"overlay","type":"string|null","required":false,"description":"適用した overlay。未指定なら null。"},{"name":"preview_path","type":"string","required":true,"description":"プレビュー画像の絶対パス。"},{"name":"recipe_hash","type":"string","required":true,"description":null},{"name":"source_revision_id","type":"string","required":true,"description":null},{"name":"warnings","type":"array","required":true,"description":null},{"name":"width","type":"integer","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":555}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T06:22:49.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":"no_attestation","reasonLabel":"No attestation published","discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-09-29","recent":[{"id":"chg_01a1aa5f-d507-7616-8ee9-7287aa98a3f3","kind":"check.verdict","summary":"Stability (pass → 0.73)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a1aa5f-d507-7616-8ee9-7287aa98a3f3"},{"id":"chg_01a1aa5f-d508-791f-b605-b5c9c3ccb332","kind":"score.total_changed","summary":"Trust score (52 → 49)","materiality":"functional","direction":"regression","scoreDelta":-3,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a1aa5f-d508-791f-b605-b5c9c3ccb332"},{"id":"chg_01a18652-7904-730a-9253-2e2af5e39b0d","kind":"check.verdict","summary":"Stability (0.97 → pass)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a18652-7904-730a-9253-2e2af5e39b0d"},{"id":"chg_01a18128-e4cd-7cf4-a1e3-9f6285bf83b0","kind":"score.total_changed","summary":"Trust score (51 → 52)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a18128-e4cd-7cf4-a1e3-9f6285bf83b0"},{"id":"chg_01a17838-3df1-7c5c-b510-c4d686ad4009","kind":"package.version_changed","summary":"Package version (0.6.5 → 0.6.7)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a17838-3df1-7c5c-b510-c4d686ad4009"},{"id":"chg_01a171b5-898f-7969-b500-ec432c012115","kind":"score.total_changed","summary":"Trust score (50 → 51)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-25","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a171b5-898f-7969-b500-ec432c012115"},{"id":"chg_01a16767-bb79-7054-be04-f5d030ab1b51","kind":"score.total_changed","summary":"Trust score (49 → 50)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a16767-bb79-7054-be04-f5d030ab1b51"},{"id":"chg_01a15d19-ba37-7cce-a608-4ae09366b87c","kind":"score.total_changed","summary":"Trust score (48 → 49)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a15d19-ba37-7cce-a608-4ae09366b87c"},{"id":"chg_01a152cb-cf9a-7183-9f4c-a7331270a315","kind":"score.total_changed","summary":"Trust score (47 → 48)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-19","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a152cb-cf9a-7183-9f4c-a7331270a315"},{"id":"chg_01a1487e-6745-75a4-aa6c-7b35a126b8c6","kind":"score.total_changed","summary":"Trust score (46 → 47)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a1487e-6745-75a4-aa6c-7b35a126b8c6"},{"id":"chg_01a13e33-09bb-792e-a721-ba9d2a535a76","kind":"score.total_changed","summary":"Trust score (45 → 46)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-15","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13e33-09bb-792e-a721-ba9d2a535a76"},{"id":"chg_01a13c20-10df-750f-a476-c8f9f0ff07a6","kind":"check.reverified","summary":"Tool coverage (unverified → 100)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13c20-10df-750f-a476-c8f9f0ff07a6"},{"id":"chg_01a13c20-10df-7ead-aa44-8d43f180ddb9","kind":"check.reverified","summary":"MCP protocol (unverified → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13c20-10df-7ead-aa44-8d43f180ddb9"},{"id":"chg_01a13c20-10df-7a46-8911-8e7d2a249297","kind":"check.reverified","summary":"Stability (unverified → 0.50)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13c20-10df-7a46-8911-8e7d2a249297"},{"id":"chg_01a13c20-10dd-7c20-a282-15d6cdd03241","kind":"check.reverified","summary":"Injection markers (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13c20-10dd-7c20-a282-15d6cdd03241"},{"id":"chg_01a13c20-10e0-742b-bea1-4f89acb4a87b","kind":"score.total_changed","summary":"Trust score (10 → 45)","materiality":"functional","direction":"improvement","scoreDelta":35,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a13c20-10e0-742b-bea1-4f89acb4a87b"},{"id":"chg_01a118f6-ab63-7a7c-8544-1d6ec631aef6","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-08","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a118f6-ab63-7a7c-8544-1d6ec631aef6"},{"id":"chg_01a118f6-a83f-7f24-8384-18ec2292959e","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-08","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a118f6-a83f-7f24-8384-18ec2292959e"},{"id":"chg_01a118f6-aa91-73da-b180-9bd3111b3e11","kind":"check.unverifiable","summary":"Stability (0.17 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-08","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a118f6-aa91-73da-b180-9bd3111b3e11"},{"id":"chg_01a118f6-aafc-7c45-9777-9ff3d346724e","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-08","url":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp#chg-chg_01a118f6-aafc-7c45-9777-9ff3d346724e"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp","markdown":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.md","changelogJson":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/gridhra-atx-mcp/ghcr-io-gridhra-atx-mcp.xml","external":[{"label":"GitHub Container Registry","href":"https://ghcr.io/gridhra/atx-mcp"},{"label":"Repository","href":"https://github.com/gridhra/atx-mcp"}]}}