atx-mcp
atx-mcp
Детерминированный (не-генеративный) MCP-сервер преобразования ассетов для универсальных ИИ-агентов, написанный на Rust.
Он исполняет редакторское намерение — «выровняй горизонт, обрежь до 16:9, сделай немного ярче» — как декларативный рецепт преобразования и отслеживает каждый результат как неизменяемую ревизию. Оригинальный ассет никогда не изменяется.
Коррекция наклона + автоуровни + применённый стиль (полностью детерминированный рецепт) — слева: вход / справа: выход.
Полное описание см. в docs/DESIGN.md.
Варианты использования
Привлекающее изображение для статьи
«Выровняй это фото и обрежь до 16:9, 1600px, для обложки. WebP.»
import_asset→detect_tilt(ИИ пропускает коррекцию, если изображение уже почти ровное) →apply_transform(rotate → crop → resize → encode) →export_asset. Оригинал никогда не затрагивается, и один и тот же рецепт каждый раз воспроизводит один и тот же результат.Несколько размеров для соцсетей/CMS
«Сгенерируй OGP, квадратную версию для Instagram и миниатюру этого фото.» Один оригинал расходится параллельно на OGP 1200×630, квадрат 1080 для Instagram и миниатюру 400px. Идемпотентность «один и тот же рецепт — одна и та же ревизия» означает, что повторный запуск никогда не создаёт вывод дважды; достаточно и однословного имени пресета.
Безопасно для публикации
«Точно удали данные о местоположении, но не трогай цвета.»
strip_metadata(exif) удаляет EXIF, включая GPS, сохраняя ICC-профиль нетронутым. ИИ также может предупредить заранее, проверивhas_gpsчерезinspect_image.Цветовые и стилевые корректировки
«Сделай только небо синее, всё остальное не трогай.» Охватывает
curves/levels/hsl/white_balance, пресетfilm_soft, а также импорт собственного.cubeLUT черезimport_assetи его применение черезlut.Локальные (маскированные) корректировки
«Немного затемни только небо, а землю оставь как есть.»
generate_maskсоздаёт маску (градиент, диапазон яркости или диапазон оттенка); после подключения маски к корректировкеrender_previewсoverlay:"mask"покажет точно, где изменение подействует, прежде чем вы его примените.Композитинг слоёв
«Размой копию этого фото и смешай её в режиме screen на 50% для мягкого свечения.» Стек
layersобъединяет 16 режимов наложения, непрозрачность и маски для создания воспроизводимых композиций, например мягкого фокуса.Водяные знаки, ретушь и перспектива
«Впечатай мой логотип в угол, убери линии электропередач и исправь сходящиеся вертикали.»
svg_overlayвпечатывает логотип,clone/healудаляют дефекты или провода, компонуя текстуру и тон, аperspectiveисправляет сходящиеся вертикали.Проверка и подотчётность
«Покажи это изображение до и после правок, бок о бок.»
compare_revisionsразмещает до/после бок о бок или возвращает тепловую карту различий со статистикой вродеmean_abs_diff. Каждая ревизия сохраняет свою родословную, поэтому полную историю правок любого изображения, использованного в статье, можно проследить и воспроизвести — побайтно идентично на любой машине.
Чего atx не делает — генеративного редактирования, RAW-конвертации, ML-автокадрирования — это вне области применения; дорожную карту см. в docs/DESIGN.md.
Related MCP server: img-convert MCP Server
Установка
Инструментарий Rust не требуется. Выберите один из вариантов.
1. npx (проще всего, рекомендуется)
Достаточно Node.js 18+. Готовый нативный бинарник для вашей платформы подтягивается автоматически через optionalDependencies.
# --scope user makes it available in every project (omit for current-project only)
claude mcp add --scope user asset-transform -- npx -y atx-mcp --workspace /path/to/asset-workspaceИли добавьте его напрямую в конфиг вашего MCP-клиента:
{
"mcpServers": {
"asset-transform": {
"command": "npx",
"args": ["-y", "atx-mcp", "--workspace", "/path/to/asset-workspace"]
}
}
}2. Готовый бинарник
Скрипты установки (по умолчанию устанавливается в ~/.local/bin или в %LOCALAPPDATA%\Programs\atx-mcp на Windows; архив проверяется по SHA256SUMS перед распаковкой):
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/gridhra/atx-mcp/main/scripts/install.sh | sh# Windows
irm https://raw.githubusercontent.com/gridhra/atx-mcp/main/scripts/install.ps1 | iexДля ручной загрузки возьмите atx-mcp-<version>-<target>.tar.gz (.zip на Windows) со страницы Releases. Поддерживаемые целевые платформы:
Платформа | Target triple |
macOS (Apple Silicon) |
|
macOS (Intel) |
|
Linux x86_64 |
|
Linux arm64 |
|
Windows x86_64 |
|
claude mcp add asset-transform -- ~/.local/bin/atx-mcp --workspace /path/to/asset-workspace3. Сборка из исходников (любая другая платформа)
Нужны только инструментарий Rust и C-компилятор (для сборки libwebp из его приложенного исходного кода).
cargo build --release
# => target/release/atx-mcp
claude mcp add asset-transform -- "$PWD/target/release/atx-mcp" --workspace /path/to/asset-workspace--workspace (env: ATX_WORKSPACE) — это каталог, используемый как хранилище ассетов. Он создаётся автоматически, если его нет.
Инструменты (11)
Инструмент | Назначение |
| Компактный каталог словаря рецептов: каждая операция с однострочным описанием и краткими подсказками по параметрам, плюс встроенные имена пресетов. Необязательный |
| Полный справочник по одной операции: таблица параметров (тип, диапазон, обязательность/значение по умолчанию, семантика), готовые к вставке примеры JSON и подводные камни. Имя встроенного пресета тоже работает и возвращает полный список его операций. Неизвестное имя возвращает допустимые операции и пресеты, сгруппированные (только чтение) |
| Импортирует локальное изображение в рабочее пространство (идемпотентность по sha256). Принимает |
| Проверяет размеры, EXIF, ICC-профиль, наличие GPS-данных и т. д. (только чтение) |
| Оценивает угол наклона через Canny+Hough (грубо) плюс профиль проекции (уточнение до 0,1°). Также возвращает оценки для горизонтальных/вертикальных линий; полная кривая оценок включается опционально через |
| Создаёт детерминированную полутоновую маску ( |
| Применяет рецепт (или |
| Применяет рецепт (или |
| Уменьшает две ревизии до длинной стороны ≤640 и возвращает их объединёнными в одно встроенное изображение, расположенными через |
| Читает журнал ревизий (только чтение) |
| Записывает ревизию в указанный путь (существующий файл перезаписывается только при явно указанном |
Пример рецепта
{
"operations": [
{ "op": "rotate", "angle_degrees": -1.8 },
{ "op": "crop", "aspect_ratio": "16:9" },
{ "op": "resize", "width": 1600 },
{ "op": "encode", "format": "webp", "quality": 82 }
]
}Поддерживаемые операции (27): auto_orient / rotate / perspective / crop (crop, pad) / resize (cover, contain, fill) / adjust / color_matrix / curves / levels / lut / white_balance / hsl / blur / median / unsharp_mask / convolve / clone / heal / svg_overlay / flip / vignette / grain / gradient_map / pixelate / auto_levels / encode (jpeg, png, webp, avif) / strip_metadata. Словарь операций намеренно не включён в схемы инструментов: вызывайте list_operations для актуального каталога и explain_operation для полной схемы, примеров и подводных камней конкретной операции.
LUT (.cube)
.cube 3D/1D LUT — это ассет, а не изображение: сначала импортируйте его, затем укажите рецепту на созданную им ревизию.
Импортируйте файл
.cubeчерезimport_asset. Он сохраняется как неизменяемая ревизия сmime_type: "application/x-cube"(inspect_imageнамеренно отказывается его обрабатывать — это не изображение).Используйте возвращённый
revision_idв рецепте:
{ "op": "lut", "lut_revision_id": "rev_...", "strength": 0.8 }strength (0..1, по умолчанию 1.0) линейно смешивается с оригиналом. Поскольку ревизии неизменяемы, включение указанного id в recipe_hash делает преобразование полностью детерминированным — но это также означает, что рецепт воспроизводим только внутри рабочего пространства, где хранится этот LUT, поэтому при переносе стиля между машинами переносите .cube вместе с рецептом. Обращение к неизвестному id завершается структурированной ошибкой до начала какой-либо работы с пикселями.
Наложения SVG (логотипы и водяные знаки)
.svg — это векторный ассет, как и .cube LUT: сначала импортируйте его, затем впечатывайте его в растровое изображение из рецепта.
Импортируйте файл
.svgчерезimport_asset. Он сохраняется как неизменяемая ревизия сmime_type: "image/svg+xml", а в сводке сообщается собственный размер SVG (0x0означает, что его нет — нетviewBoxи абсолютныхwidth/heightу корневого<svg>).inspect_imageнамеренно отказывается его обрабатывать: это векторный ассет, а не растровое изображение.Используйте возвращённый
revision_idв рецепте:
{ "op": "svg_overlay", "svg_revision_id": "rev_...",
"x": 24, "y": 24, "width": 320, "opacity": 0.25, "blend_mode": "normal" }x/y — это левый верхний угол оверлея в координатах изображения на этом этапе конвейера (поэтому размещайте оверлей после изменения размера/кадрирования); отрицательные значения допустимы, а выходящее за границы обрезается. Если опустить width и height, растеризация выполняется в собственном размере SVG; укажите одно значение, чтобы масштабировать с сохранением пропорций, или оба, чтобы растянуть до точного прямоугольника — SVG без собственного размера является структурированной ошибкой, если не заданы оба. Композитинг использует ту же формулу W3C и те же 16 значений blend_mode, что и слои.
Текст никогда не отрисовывается. atx не загружает системные шрифты, потому что установленные шрифты отличаются от машины к машине и нарушили бы побайтовую воспроизводимость. SVG, содержащий
<text>, отображает его фигуры, но не глифы, и выдаёт предупреждение — преобразуйте текст в кривые (контуры) в своём векторном редакторе перед импортом, и результат будет идентичным на любой машине.
Маски (локальные корректировки)
Маска — это ревизия изображения в градациях серого: её яркость BT.709 является весом, поэтому белый означает «применить эту операцию в полную силу», а чёрный — «оставить пиксель без изменений». Любая из 14 операций тона/фильтра (adjust, color_matrix, curves, levels, hsl, lut, white_balance, blur, median, unsharp_mask, convolve, grain, gradient_map, auto_levels) принимает её.
generate_maskдетерминированно создаёт её на основе эталонного изображения, с точностью до размеров этого изображения:
| Параметры | Что выбирает |
|
| Градиентный фильтр (небо, передний план) |
|
| Виньетка или пятно-акцент на объекте |
|
| Света, средние тона или тени |
|
| Одно семейство оттенков (голубое небо, зелёная листва) |
Вместо этого вы также можете импортировать собственное изображение в градациях серого через import_asset.
Прикрепите возвращённый
revision_idк операции:
{ "op": "curves", "master": [[0,0],[128,168],[255,255]],
"mask": { "revision_id": "rev_...", "invert": false, "feather_px": 8.0 } }invert (по умолчанию false) инвертирует вес в 1-w; feather_px (по умолчанию 0.0) размывает край маски на эту сигму гауссова размытия в пикселях текущего изображения.
render_previewсoverlay:"mask"иmask_revision_idокрашивает предпросмотр в красный там, где вес превышает 0.5, и затемняет его в остальных местах, чтобы покрытие можно было проверить до фиксации.
Маски, как и LUT, ссылаются на идентификатор ревизии, поэтому действует та же оговорка: хэш рецепта включает идентификатор, и рецепт воспроизводится только внутри рабочего пространства, содержащего эту маску.
Слои
Рецепт может содержать стек layers вместо плоского списка operations (или в дополнение к нему). Слои компонуются снизу вверх: ops каждого слоя выполняются над его собственным источником, прежде чем слой будет смешан с текущим композитом:
{
"layers": [
{ "source": "base", "ops": [] },
{
"source": { "revision_id": "rev_..." },
"ops": [{ "op": "blur", "sigma": 8 }],
"blend_mode": "multiply",
"opacity": 0.6
}
],
"operations": [
{ "op": "resize", "width": 1600 },
{ "op": "encode", "format": "webp", "quality": 82 }
]
}source— это либо"base"(входная ревизия, переданная вapply_transform/render_preview), либо{"revision_id": "rev_..."}(любая другая ревизия, уже находящаяся в рабочем пространстве). Источник каждого слоя должен точно совпадать по размерам с базовым изображением, иначе рецепт завершается структурированной ошибкой до начала работы с пикселями.ops— обычный список операций, применяемый только к источнику этого слоя.mask,blend_mode(по умолчанию"normal") иopacity(по умолчанию1.0) управляют тем, как слой компонуется со слоями под ним.Режим наложения — один из 16 режимов W3C: 12 разделимых режимов
normal,multiply,screen,overlay,darken,lighten,color_dodge,color_burn,hard_light,soft_light,difference,exclusion, плюс 4 неразделимых режимаhue,saturation,color,luminosity.Когда присутствует
layers, верхнеуровневыйoperationsстановится финишным проходом, применяемым один раз к результату композитинга — именно сюда относятсяresizeи финальныйencode(encodeпо-прежнему должен быть последним и встречаться не более одного раза).Вызовите
explain_operation {"operation":"layers"}для получения полного справочника.
Пресеты
apply_transform и render_preview принимают либо recipe (непосредственно DSL), либо preset (встроенный именованный рецепт из presets/) — ровно одно из двух:
Набор | Пресет | Что делает |
basics |
| Кадрирование по центру до 16:9, изменение размера до 1600px в ширину, WebP q82 |
basics |
| Мягкий плёночный вид: мягкая S-кривая плюс подтяжка к яркости на 15% |
basics |
| Чистое предметное фото: почти нейтральный баланс белого, подъём уровней, лёгкое повышение резкости |
basics |
| Кадрирование по центру до 1:1, изменение размера до 800x800, WebP q80 |
basics |
| Вписать в 2000x2000 без увеличения, WebP q80 |
basics |
| Чёрно-белое через |
basics |
| Классический сепийный тон через |
film |
| Тёплая плёнка: янтарный баланс белого, мягкая S-кривая, лёгкое зерно |
film |
| Холодная плёнка: баланс белого с уходом в синий, мягкая S-кривая, лёгкое зерно |
film |
| Выцветший матовый эффект: поднятые чёрные через |
film |
| Сильное крупное зерно поверх мягкой S-кривой (вид с форсированной/высокой ISO) |
film |
| Кинематографический бирюзово-оранжевый грейд через точечные сдвиги |
mono |
| Нейтральное чёрно-белое через |
mono |
| Высококонтрастное чёрно-белое: преобразование в яркость плюс сильная S-кривая |
mono |
| Ч/б через имитацию красного фильтра (классическое затемнение неба) |
mono |
| Мягкое малоконтрастное чёрно-белое (матовая кривая) |
mono |
| Дуотон «тёмно-синий — кремовый» через |
editorial |
| Растяжка автоуровней, нейтральный баланс белого, финальное повышение резкости |
editorial |
| Усиление насыщенности тёплых оранжевых/жёлтых тонов плюс подъём контраста |
editorial |
| Мягкая матовая кривая, лёгкая десатурация, тонкая виньетка |
editorial |
| Подъём контраста и насыщенности плюс лёгкая виньетка |
editorial |
| Автоуровни, повышение резкости, лёгкая десатурация (в паре с ручной операцией |
social |
| Изображение для шаринга Open Graph: кадрирование 1200:630, изменение размера до 1200 в ширину, WebP q82 |
social |
| Широкая карточка X (Twitter): кадрирование 16:9, изменение размера до 1600 в ширину, WebP q82 |
social |
| Квадратный пост Instagram: кадрирование 1:1, изменение размера до 1080x1080, WebP q85 |
social |
| Вертикальный пост Instagram: кадрирование 4:5, изменение размера до 1080x1350, WebP q85 |
social |
| Миниатюра YouTube: кадрирование 16:9, изменение размера до 1280x720, WebP q85 |
social |
| Большое hero/баннерное изображение: вписать в 2400px, WebP q85 |
building block |
| Лёгкая виньетка сама по себе для наложения поверх других эффектов |
building block |
| Лёгкое, мелкое, детерминированное зерно само по себе, для наложения |
Пресет — это просто синтаксический сахар: он разворачивается в свой рецепт и проходит обычный конвейер, а recipe_hash (ключ идемпотентности) вычисляется от разрешённого рецепта — поэтому вызов пресета и эквивалентный «сырой» рецепт приводят к одной и той же ревизии.
Гарантии
Детерминированность: один и тот же вход + один и тот же рецепт всегда дают побайтово идентичный результат (проверяется регрессионными golden-тестами)
Идемпотентность: рецепты нормализуются (ключи сортируются, значения
f64квантуются до сетки 1e-6) и хэшируются с помощью sha256. Если пара(входная ревизия, хэш рецепта)совпадает с существующей, возвращается существующая ревизия, а не новаяОригиналы защищены:
objects/— это хранилище, доступное только для добавления и адресуемое по содержимому: API удаления или перезаписи не существует
Разработка
cargo test --workspace # unit + integration + property (proptest) tests
cargo clippy --workspace --all-targets -- -D warningsСтруктура крейтов: atx-core (движок рецептов/трансформаций) / atx-geometry (обнаружение наклона) / atx-store (неизменяемое хранилище ресурсов) / atx-mcp (rmcp stdio-сервер).
Процесс релиза описан в RELEASING.md.
Название
«atx» расшифровывается как Asset Transform; завершающая x следует привычному сокращению для «transform» (как в xform / tx). Это имя было выбрано как короткое и удобное для ввода имя бинарного файла и префикс крейтов (atx-core и т.д.), и оно не связано ни с форм-фактором PC ATX, ни с ATX-заголовками в стиле Markdown.
Лицензия
MIT. См. LICENSE.
Если atx-mcp экономит ваше время, вы можете угостить меня кофе ☕
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Image processing for AI agents: resize, convert, compress, crop, and web-ready AI-generated images.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
Design, save, and run outcome-aligned AI workflows and verifiers, with reliable image output.
AI-native digital asset management: semantic search, generative image edits, and CDN delivery.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables comprehensive image editing operations including resizing, format conversion, cropping, compression, rotation, flipping, and batch processing. Supports JPEG, PNG, WebP, and AVIF formats with quality control and metadata extraction.83118MIT
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with tools to convert images between formats and inspect image metadata, enabling seamless image processing within agent workflows.113MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform image processing tasks such as sprite sheet splitting, resizing, cropping, and batch operations on local images.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to read images with metadata, OCR text, regions, and citeable evidence without relying on generative LLMs.282MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gridhra/atx-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server