{"_id":"@adobe/leonardo-mcp","_rev":"7-312f50aa2f4de26156f6a3727344c0dc","name":"@adobe/leonardo-mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@adobe/leonardo-mcp","version":"0.0.1","license":"Apache-2.0","_id":"@adobe/leonardo-mcp@0.0.1","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"shazron","email":"shazron@gmail.com"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/leonardo#readme","bugs":{"url":"https://github.com/adobe/leonardo/issues"},"bin":{"leonardo-mcp":"src/cli.js"},"dist":{"shasum":"a5480f4de4c03b78141a270d85f3d93cda85954c","tarball":"https://registry.npmjs.org/@adobe/leonardo-mcp/-/leonardo-mcp-0.0.1.tgz","fileCount":10,"integrity":"sha512-wZXKZAtZySH0niCKiSCY9dmu0RWbuDdCOOd18/Ly/JWRPN8f8Q/bidcdboadnVhNuHrfETair9qGRob+Quz2lQ==","signatures":[{"sig":"MEQCIANa23LVwrgxk/tF14kNKVTvIhR6PJ4UMfqFM6FvmLRZAiAc2LPpNNFGvRwmb2dMYgiDDw1tEUuUiFTURF81IeUvtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27218},"main":"./src/server.js","type":"module","_from":"file:adobe-leonardo-mcp-0.0.1.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test test/*.test.js","start":"node src/cli.js"},"_npmUser":{"name":"garthdb","email":"garthdb@gmail.com"},"_resolved":"/private/var/folders/lv/cnbsxznj0z3c_3r74g6xr0h40000gq/T/603539fa15afa7f165edd176305d151d/adobe-leonardo-mcp-0.0.1.tgz","_integrity":"sha512-wZXKZAtZySH0niCKiSCY9dmu0RWbuDdCOOd18/Ly/JWRPN8f8Q/bidcdboadnVhNuHrfETair9qGRob+Quz2lQ==","repository":{"url":"git+https://github.com/adobe/leonardo.git","type":"git"},"_npmVersion":"11.3.0","description":"MCP server for @adobe/leonardo-contrast-colors — generate themes, check contrast, convert colors","directories":{},"_nodeVersion":"24.0.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.26.0","@adobe/leonardo-contrast-colors":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/leonardo-mcp_0.0.1_1771628033555_0.0016070732034745294","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@adobe/leonardo-mcp","version":"0.1.0","license":"Apache-2.0","_id":"@adobe/leonardo-mcp@0.1.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"shazron","email":"shazron@gmail.com"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/leonardo#readme","bugs":{"url":"https://github.com/adobe/leonardo/issues"},"bin":{"leonardo-mcp":"src/cli.js"},"dist":{"shasum":"aade4aae20e2e1a2c8c858983a41cd1bb0b5573c","tarball":"https://registry.npmjs.org/@adobe/leonardo-mcp/-/leonardo-mcp-0.1.0.tgz","fileCount":12,"integrity":"sha512-3i3AYfEyctkXJKoMuMVuOXGBUulcIEHLTOLGaZejQG9+3n1LVWuRVzs+5kcJCzDI3dUCpwsL34kPbc7Tq8h96A==","signatures":[{"sig":"MEUCIQDW1if0bBaYuj72fD/OBjZaXUH0TgQenOiXfuoUY2zM5wIgIMdthzmAxIEj7cqmr699xTFs0WNUQZYIvXSYiSlc1Ws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adobe%2fleonardo-mcp@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34255},"main":"./src/server.js","type":"module","_from":"file:adobe-leonardo-mcp-0.1.0.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test test/*.test.js","start":"node src/cli.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:43c1848b-b5d5-4e0d-9922-5c88f8bd4546"}},"_resolved":"/tmp/d2995b8d5ce3fbe1db87a7a5a2f99487/adobe-leonardo-mcp-0.1.0.tgz","_integrity":"sha512-3i3AYfEyctkXJKoMuMVuOXGBUulcIEHLTOLGaZejQG9+3n1LVWuRVzs+5kcJCzDI3dUCpwsL34kPbc7Tq8h96A==","repository":{"url":"git+https://github.com/adobe/leonardo.git","type":"git"},"_npmVersion":"11.10.1","description":"MCP server for @adobe/leonardo-contrast-colors — generate themes, check contrast, convert colors","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.26.0","@adobe/leonardo-contrast-colors":"1.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/leonardo-mcp_0.1.0_1771636238008_0.47579329246446833","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-20T22:53:53.452Z","modified":"2026-10-01T01:34:30.613Z","0.0.1":"2026-02-20T22:53:53.705Z","0.1.0":"2026-02-21T01:10:38.172Z"},"bugs":{"url":"https://github.com/adobe/leonardo/issues"},"license":"Apache-2.0","homepage":"https://github.com/adobe/leonardo#readme","repository":{"url":"git+https://github.com/adobe/leonardo.git","type":"git"},"description":"MCP server for @adobe/leonardo-contrast-colors — generate themes, check contrast, convert colors","maintainers":[{"email":"mabecker@adobe.com","name":"marbec"},{"email":"tripod@bocanegra.ch","name":"tripod"},{"email":"garthdb@gmail.com","name":"garthdb"},{"email":"lazdnet@gmail.com","name":"lazd"},{"email":"grp-opensourceoffice@adobe.com","name":"adobe-admin"},{"email":"patrickfulton@gmail.com","name":"patrickfulton"},{"email":"lars@trieloff.net","name":"trieloff"},{"email":"krisnye@gmail.com","name":"krisnye"},{"email":"dcpfsdk@adobe.com","name":"dcpfsdk"},{"email":"natebaldwindesign@gmail.com","name":"natebaldwin"},{"email":"devongovett@gmail.com","name":"devongovett"},{"email":"danniintheus@gmail.com","name":"aspro83"},{"email":"symanovi@adobe.com","name":"symanovi"},{"email":"dominique.pfister@gmail.com","name":"dpfister"},{"email":"sg@adobe.com","name":"stefan-guggisberg"},{"email":"npm@rofe.com","name":"rofe"},{"email":"kptdobe@gmail.com","name":"kptdobe"},{"email":"halls@adobe.com","name":"adobehalls"},{"email":"bradjohn@adobe.com","name":"fullcolorcoder"},{"email":"djaeggi@adobe.com","name":"djaeggi"},{"email":"dylandepass@gmail.com","name":"dylandepass"},{"email":"mhaack@adobe.com","name":"mhaack"},{"email":"amol@adobe.com","name":"amol-anand"},{"email":"stopp@adobe.com","name":"stopp-adobe"},{"email":"namarora@adobe.com","name":"namarora"},{"email":"doten@adobe.com","name":"doten"},{"email":"schmidt@adobe.com","name":"duh_schmidt"},{"email":"astha.bhargava23@gmail.com","name":"asthabh23"},{"email":"aljoseph@adobe.com","name":"aljoseph"},{"email":"zouhir.dahbi@outlook.com","name":"zdahbi"},{"email":"tuicu@adobe.com","name":"tuicu"},{"email":"fmeschbe@adobe.com","name":"fmeschbe"}],"readme":"# `@adobe/leonardo-mcp`\n\n[![npm version](https://badge.fury.io/js/%40adobe%2Fleonardo-mcp.svg)](https://www.npmjs.com/package/@adobe/leonardo-mcp)\n[![license](https://img.shields.io/github/license/adobe/leonardo)](https://github.com/adobe/leonardo/blob/master/LICENSE)\n[![Pull requests welcome](https://img.shields.io/badge/PRs-welcome-blueviolet)](https://github.com/adobe/leonardo/blob/master/.github/CONTRIBUTING.md)\n\nAn [MCP](https://modelcontextprotocol.io/) (Model Context Protocol) server that exposes [@adobe/leonardo-contrast-colors](https://www.npmjs.com/package/@adobe/leonardo-contrast-colors) as tools. Use it from Cursor, Claude Desktop, or any MCP client to generate contrast-based themes, check WCAG contrast, convert colors, and create palettes without writing code.\n\n## Quick start\n\n**Run once (no install):**\n\n```bash\nnpx @adobe/leonardo-mcp\n```\n\n**Install and use as a binary:**\n\n```bash\nnpm i @adobe/leonardo-mcp\nleonardo-mcp\n```\n\nThe server runs over stdio. Configure your MCP client to start this command; see [Configuration](#configuration) below.\n\n## Tools\n\n### `generate-theme`\n\nGenerate a contrast-based color theme. Returns `theme.contrastColors`-style JSON ready for design tokens or CSS variables.\n\n| Parameter         | Type   | Required | Description                                                               |\n| ----------------- | ------ | -------- | ------------------------------------------------------------------------- |\n| `colors`          | array  | yes      | List of color definitions (name, colorKeys, ratios, optional colorspace). |\n| `backgroundColor` | object | yes      | Background color definition (same shape as a color in `colors`).          |\n| `lightness`       | number | yes      | 0–100; background lightness.                                              |\n| `contrast`        | number | no       | Multiplier for all ratios (default `1`).                                  |\n| `saturation`      | number | no       | 0–100 (default `100`).                                                    |\n| `output`          | string | no       | Output format: `HEX`, `RGB`, `HSL`, `LCH`, etc. (default `HEX`).          |\n| `formula`         | string | no       | `wcag2` (default) or `wcag3` (APCA).                                      |\n\nExample input:\n\n```json\n{\n  \"colors\": [{\"name\": \"blue\", \"colorKeys\": [\"#5CDBFF\", \"#0000FF\"], \"ratios\": [3, 4.5]}],\n  \"backgroundColor\": {\"name\": \"gray\", \"colorKeys\": [\"#cacaca\"], \"ratios\": [2, 3, 4.5, 8]},\n  \"lightness\": 97\n}\n```\n\n### `check-contrast`\n\nCheck contrast between a foreground and background color. Returns ratio and WCAG 2 AA/AAA (and large text) pass/fail, or APCA Lc when `method` is `wcag3`.\n\n| Parameter    | Type   | Required | Description                   |\n| ------------ | ------ | -------- | ----------------------------- |\n| `foreground` | string | yes      | CSS color (e.g. `#000000`).   |\n| `background` | string | yes      | CSS color (e.g. `#ffffff`).   |\n| `method`     | string | no       | `wcag2` (default) or `wcag3`. |\n\n### `convert-color`\n\nConvert a color value to another format (HEX, RGB, HSL, LCH, OKLCH, etc.).\n\n| Parameter | Type   | Required | Description                                                                                            |\n| --------- | ------ | -------- | ------------------------------------------------------------------------------------------------------ |\n| `color`   | string | yes      | Any valid CSS color string.                                                                            |\n| `format`  | string | yes      | Target format: `HEX`, `RGB`, `HSL`, `HSV`, `HSLuv`, `LAB`, `LCH`, `OKLAB`, `OKLCH`, `CAM02`, `CAM02p`. |\n\n### `create-palette`\n\nCreate an interpolated color scale from color keys (no contrast targeting).\n\n| Parameter             | Type    | Required | Description                                                                        |\n| --------------------- | ------- | -------- | ---------------------------------------------------------------------------------- |\n| `colorKeys`           | array   | yes      | Array of CSS color strings.                                                        |\n| `colorspace`          | string  | no       | Interpolation space (default `LAB`). Same options as interpolation in the library. |\n| `steps`               | number  | yes      | Number of swatches (min 2).                                                        |\n| `smooth`              | boolean | no       | Bezier smoothing (default `false`).                                                |\n| `shift`               | number  | no       | Shift factor (default `1`).                                                        |\n| `fullScale`           | boolean | no       | Use full scale (default `true`).                                                   |\n| `distributeLightness` | string  | no       | `linear` (default) or `polynomial`.                                                |\n| `sortColor`           | boolean | no       | Sort by lightness (default `true`).                                                |\n\n## Configuration\n\n### Cursor\n\nAdd to `.cursor/mcp.json` (or Cursor settings → MCP):\n\n**Using the published package (recommended):**\n\n```json\n{\n  \"mcpServers\": {\n    \"leonardo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@adobe/leonardo-mcp\"]\n    }\n  }\n}\n```\n\n**From repo (development):**\n\n```json\n{\n  \"mcpServers\": {\n    \"leonardo\": {\n      \"command\": \"node\",\n      \"args\": [\"packages/mcp/src/cli.js\"]\n    }\n  }\n}\n```\n\nSee the [repo’s example](https://github.com/adobe/leonardo/blob/main/.cursor/mcp.json) when working inside the Leonardo monorepo.\n\n### Claude Desktop\n\nIn `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"leonardo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@adobe/leonardo-mcp\"]\n    }\n  }\n}\n```\n\n## Related\n\n- **[@adobe/leonardo-contrast-colors](https://www.npmjs.com/package/@adobe/leonardo-contrast-colors)** — Core library; use directly in Node or the browser.\n- **[Leonardo web app](https://leonardocolor.io)** — Interactive theme and scale builder.\n- **Agent Skill** — `skills/leonardo-colors/` in this repo for Cursor/Codex; install with `npx skills add https://github.com/adobe/leonardo`.\n\n## Contributing\n\nContributions are welcomed! Read the [Contributing Guide](https://github.com/adobe/leonardo/blob/main/.github/CONTRIBUTING.md) for more information.\n\n## Development\n\nFrom the repo root (with pnpm):\n\n```sh\npnpm --filter @adobe/leonardo-mcp test\n```\n\nOr via moon:\n\n```sh\nmoon run mcp:test\n```\n\n## Licensing\n\nThis project is licensed under the Apache V2 License. See [LICENSE](https://github.com/adobe/leonardo/blob/main/LICENSE) for more information.\n","readmeFilename":"README.md"}