iccdev-mcp
MCP server for ICC color profile tools from the International Color Consortium's RefIccMAX (iccDEV) library.
Exposes tools to AI assistants (Claude, Copilot, Cursor) via the Model Context Protocol, covering profile inspection, color transforms, and format conversion for ICC v2/v4 and iccMAX v5 profiles.
The static MCP inventory lists supported tools; health_check reports the
tools available in the running environment. Optional native capabilities can differ
between container variants, so clients and CI must inspect capability flags and
the discovered CLI inventory rather than assume a fixed health-tool total.
The response includes the available native, CLI, and service inventories so
clients can derive its dynamic total_tools value without numeric assumptions.
Install
For the lowest-friction setup, use the unified iccDEV Docker image. It includes
the MCP server, REST dependencies, CLI tools, runtime libraries, maintainer
utilities, and Testing/ profiles, so no local iccDEV build is required.
docker run --rm -i ghcr.io/internationalcolorconsortium/iccdev:latest \
iccdev-mcp-entrypoint mcp
Use pip install when integrating with a local source checkout or a locally
built iccDEV toolchain. iccdev-mcp is published on PyPI:
python -m pip install "iccdev-mcp[rest]"
The universal wheel from a successful rolling Latest Build remains available for exact-tag installation:
# Replace <release-tag> with the Git tag for the intended release.
python -m pip install "git+https://github.com/InternationalColorConsortium/iccDEV.git@<release-tag>#subdirectory=iccdev-mcp"
# Prebuilt GitHub release wheel; copy its exact tag-specific asset URL.
python -m pip install "<iccdev_mcp-wheel-asset-URL>"
# Optional REST server dependencies:
python -m pip install "iccdev-mcp[rest] @ <iccdev_mcp-wheel-asset-URL>"
Release assets include one iccdev_mcp-*-py3-none-any.whl and a matching
source distribution for Python 3.10+. Verify their published checksums and
provenance before installation. The release workflow tests source imports,
isolated wheel and sdist installations, console entry points, stdio tool calls,
and REST health on Windows and Linux. It includes no native binaries or
compiled transform bindings. See the
package release guide
for maintainer validation and the PyPI publication boundary.
For an isolated MCP client, use the public package directly:
{
"mcpServers": {
"iccdev": {
"command": "uvx",
"args": ["iccdev-mcp"]
}
}
}
Use uvx --from "<iccdev_mcp-wheel-asset-URL>" iccdev-mcp when an exact
GitHub release asset is required instead of the PyPI package.
The wheel ships only the iccdev_mcp namespace, so it can share an environment
with the separate Cython iccdev bindings. Header inspection and signature
helpers are included. Pixel transforms require installing the native bindings
from python/ in the same environment. The validate_profile tool dynamically
loads the public C validation ABI, so it also needs a shared IccProfLib build.
CLI-backed tools require iccDEV CLI binaries. Build iccDEV locally or
set ICCDEV_TOOLS_DIR and ICCDEV_BUILD_DIR to an existing build. The REST
health endpoint reports the bundled Python API and CLI discovery separately, so
incomplete local builds are visible at startup.
# Point to compiled iccDEV tools
export ICCDEV_TOOLS_DIR=/path/to/iccDEV/Build/Tools
export ICCDEV_BUILD_DIR=/path/to/iccDEV/Build
Usage
Docker
The unified image uses a shell default. Start an MCP transport explicitly:
# MCP stdio mode
docker run --rm -i ghcr.io/internationalcolorconsortium/iccdev:latest \
iccdev-mcp-entrypoint mcp
# REST API mode on http://127.0.0.1:8080
docker run --rm -p 127.0.0.1:8080:8080 \
ghcr.io/internationalcolorconsortium/iccdev:latest \
iccdev-mcp-entrypoint rest
Open http://127.0.0.1:8080/ for the bundled REST dashboard. The dashboard groups MCP-backed API routes, shows REST-only utility routes such as file browsing and upload, and runs tools without requiring a separate client.
Supported container modes are mcp/stdio, rest/api, sse, and
streamable-http/http.
Useful runtime defaults are already configured:
| Variable | Default |
|---|---|
ICCDEV_TOOLS_DIR |
/workspace/build/Tools |
ICCDEV_TESTING_DIR |
/workspace/iccDEV/Testing |
ICCDEV_VALIDATION_LIBRARY |
/opt/iccdev-validation/lib/libIccProfLib2.so |
The unified image keeps sanitizer CLI tools, but loads the validation ABI from
an isolated non-sanitized shared build. An explicit validation library overrides
ICCDEV_BUILD_DIR, including the image default above. To select a custom build,
override this library path or unset it before starting the server. Empty,
missing, and unloadable explicit library paths fail closed without silently
falling back. Pip-only installations retain optional validation behavior.
Mount additional profiles read-only and list them through
ICCDEV_PROFILE_DIRS:
docker run --rm -p 127.0.0.1:8080:8080 \
-v "$PWD/profiles:/profiles:ro" \
-e ICCDEV_PROFILE_DIRS=/profiles \
ghcr.io/internationalcolorconsortium/iccdev:latest \
iccdev-mcp-entrypoint rest
Local build and smoke test:
docker build -t iccdev:mcp-local -f Dockerfile .
docker run --rm -p 127.0.0.1:8080:8080 \
iccdev:mcp-local iccdev-mcp-entrypoint rest
curl -fsS http://127.0.0.1:8080/api/health
curl -fsS http://127.0.0.1:8080/api/tools
python3 .github/scripts/iccdev-container-smoke.py iccdev:mcp-local
# Optional REST dashboard in a browser
xdg-open http://127.0.0.1:8080/ # or open the URL manually
Claude Desktop
For a container-only local client, use this unified image configuration. Keep
-i (open stdin), omit -t, and do not close stdin until requested tool
responses arrive:
{
"mcpServers": {
"iccdev": {
"command": "docker",
"args": ["run", "--rm", "-i",
"ghcr.io/internationalcolorconsortium/iccdev:latest",
"iccdev-mcp-entrypoint", "mcp"]
}
}
}
Add to claude_desktop_config.json:
{
"mcpServers": {
"iccdev": {
"command": "iccdev-mcp",
"env": {
"ICCDEV_TOOLS_DIR": "/path/to/iccDEV/Build/Tools"
}
}
}
}
VS Code (Copilot)
Add to .vscode/mcp.json:
{
"servers": {
"iccdev": {
"command": "iccdev-mcp"
}
}
}
GitHub Copilot coding agent
Add this repository MCP configuration under
Settings -> Copilot -> MCP servers. GitHub requires explicit type,
args, and tools fields for repository MCP settings.
{
"mcpServers": {
"iccdev": {
"type": "local",
"command": "iccdev-mcp",
"args": [],
"env": {
"ICCDEV_TOOLS_DIR": "Build/Tools"
},
"tools": [
"inspect_header",
"profile_summary",
"validate_profile",
"color_transform",
"roundtrip_delta",
"icc_sig_to_str",
"enum_spaces",
"list_available_profiles",
"health_check",
"dump_profile",
"profile_to_xml",
"xml_to_profile",
"profile_to_json",
"json_to_profile",
"tiff_dump",
"jpeg_dump",
"png_dump",
"heif_dump",
"from_cube",
"apply_profiles",
"apply_named_cmm",
"create_link",
"v5_to_v4",
"spec_sep_to_tiff",
"apply_search",
"round_trip_test",
"pawg_report"
]
}
}
}
Remote (SSE transport)
iccdev-mcp --transport sse --port 8080
Tools
Python-Native
| Tool | Description |
|---|---|
inspect_header |
ICC profile header (22 fields + 6 computed names) |
profile_summary |
Compact profile classification and routing metadata |
validate_profile |
In-memory validation status and report from the native C API; requires a shared IccProfLib build |
color_transform |
Multi-profile CMM transform; requires the native iccdev bindings |
roundtrip_delta |
Device-channel round-trip Euclidean distance, not CIE Delta E; requires native bindings |
icc_sig_to_str |
4-byte ICC signature to string |
enum_spaces |
List all 32 ICC color space identifiers |
CLI-Backed -- require iccDEV tools
| Tool | CLI Binary | Description |
|---|---|---|
dump_profile |
iccDumpProfile | Full profile text dump |
pawg_report |
iccPawgReport | PAWG security, conformance, and quality checklist |
profile_to_xml |
iccToXml | ICC to XML conversion |
xml_to_profile |
iccFromXml | XML to ICC conversion |
profile_to_json |
iccToJson | ICC to JSON conversion |
json_to_profile |
iccFromJson | JSON to ICC conversion |
round_trip_test |
iccRoundTrip | Round-trip transform fidelity |
tiff_dump |
iccTiffDump | TIFF metadata + embedded ICC |
jpeg_dump |
iccJpegDump | JPEG metadata + embedded ICC |
png_dump |
iccPngDump | PNG metadata + embedded ICC |
heif_dump |
iccHeifDump | HEIF, HEIC, and AVIF metadata + embedded ICC |
from_cube |
iccFromCube | .cube LUT to ICC profile |
apply_profiles |
iccApplyProfiles | Multi-profile TIFF transform |
apply_named_cmm |
iccApplyNamedCmm | Named color CMM |
create_link |
iccApplyToLink | Device link creation |
v5_to_v4 |
iccV5DspObsToV4Dsp | v5 display to v4 conversion |
spec_sep_to_tiff |
iccSpecSepToTiff | Spectral separation |
apply_search |
iccApplySearch | Search-based transform |
CLI-Only Tools (Not MCP-Exposed)
The following built iccDEV executables do not have MCP wrappers and must not
be added to an MCP server tools allowlist: iccBenchApply, iccProfilePlot,
iccProfileVisualize, and iccProfileVisualizePlot. Use them directly from
the command line; see the repository
CLI tool reference for their interfaces.
Utility (2)
| Tool | Description |
|---|---|
health_check |
Server status and tool availability |
list_available_profiles |
Browse ICC test profiles |
The REST dashboard at / and /ui provides Testing/ directory and filename
selectors for ICC, XML, JSON, TIFF, JPEG, PNG, HEIF, HEIC, AVIF, and cube inputs. /api/tools
returns the stable MCP inventory and separately lists REST-only utility
routes (/api/tools, /api/files, and /api/upload). Core CLI-backed forms
expose documented options for iccDumpProfile validation/verbosity/tag
selection, iccPawgReport profile assessment, iccRoundTrip intent/MPE
selection, and iccApplyProfiles structured or raw -cfg argument mode.
Environment Variables
| Variable | Description |
|---|---|
ICCDEV_TOOLS_DIR |
Path to iccDEV CLI tool binaries |
ICCDEV_BUILD_DIR |
CMake build root containing the shared IccProfLib validation ABI |
ICCDEV_VALIDATION_LIBRARY |
Explicit shared IccProfLib path; overrides ICCDEV_BUILD_DIR |
ICCDEV_TESTING_DIR |
Path to iccDEV Testing/ profiles directory |
ICCDEV_PROFILE_DIRS |
Additional profile search directories (colon-separated) |
Development
# Install for development
cd iccdev-mcp
pip install -e ".[dev,rest]"
# Run tests
pytest tests/ -v
# Run server (stdio)
python -m iccdev_mcp.server
License
BSD 3-Clause. See LICENSE.md.
Metadata
Release files for iccdev-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iccdev_mcp-0.1.0.tar.gz | 68.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iccdev_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.6 kB
Release files / iccdev_mcp-0.1.0.tar.gz
| Download URL | iccdev_mcp-0.1.0.tar.gz |
|---|---|
| Size | 68.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
72bf55cdc2d2bdf8bec0fbe0787d56c9984c217f98f90f1e4d470a38719c4ce9
|
|
BLAKE2b-256 checksum How to use checksums |
2011ec7ead12ca0f675f83efeb7e862f0b4357596c570b9285e6c5b4fcf3208c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / iccdev_mcp-0.1.0-py3-none-any.whl
| Download URL | iccdev_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 40.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a5cfabcc8ac3acf84bd86d7dd937ead3bc8b3c5f3db58076ceeb180066317d78
|
|
BLAKE2b-256 checksum How to use checksums |
997abdc978fe34035021d481ddad4dd74c165bb20b3d0e92ec483df616a052c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log