From e206c80e7c6338f064acf11ac15a5955904fb5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Bola=C3=B1os?= Date: Thu, 6 Aug 2026 16:04:27 +0200 Subject: [PATCH 1/5] feat(creative-cloud): add adobe-fonts skill Adds a new adobe-fonts plugin wrapping the Adobe Fonts MCP server's get_font_recommendations tool, covering parameter mapping, response shape, and common mistakes for font/typeface recommendation requests. --- .claude-plugin/marketplace.json | 21 ++++ .../adobe-fonts/.claude-plugin/plugin.json | 12 ++ plugins/creative-cloud/adobe-fonts/.mcp.json | 8 ++ .../adobe-fonts/skills/adobe-fonts/SKILL.md | 118 ++++++++++++++++++ 4 files changed, 159 insertions(+) create mode 100644 plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json create mode 100644 plugins/creative-cloud/adobe-fonts/.mcp.json create mode 100644 plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 2f876492..46509a0c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -165,6 +165,27 @@ "homepage": "https://github.com/adobe/skills", "repository": "https://github.com/adobe/skills", "license": "Apache-2.0" + }, + { + "name": "adobe-fonts", + "source": "./plugins/creative-cloud/adobe-fonts", + "description": "Font discovery and recommendations from the licensed Adobe Fonts catalog through the Adobe Fonts MCP server — find fonts by design context, mood, style, or similarity to a font you already like.", + "version": "1.0.0", + "category": "creative-cloud", + "keywords": [ + "adobe", + "fonts", + "typography", + "typekit", + "creative-cloud", + "mcp" + ], + "author": { + "name": "Adobe" + }, + "homepage": "https://github.com/adobe/skills", + "repository": "https://github.com/adobe/skills", + "license": "Apache-2.0" } ] } diff --git a/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json b/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json new file mode 100644 index 00000000..d10ba0d4 --- /dev/null +++ b/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "adobe-fonts", + "description": "Font discovery and recommendations from the licensed Adobe Fonts catalog through the Adobe Fonts MCP server — find fonts by design context, mood, style, or similarity to a font you already like.", + "version": "1.0.0", + "author": { + "name": "Adobe" + }, + "repository": "https://github.com/adobe/skills", + "license": "Apache-2.0", + "keywords": ["adobe", "fonts", "typography", "typekit", "creative-cloud", "mcp"], + "skills": "./skills" +} diff --git a/plugins/creative-cloud/adobe-fonts/.mcp.json b/plugins/creative-cloud/adobe-fonts/.mcp.json new file mode 100644 index 00000000..41d9efa0 --- /dev/null +++ b/plugins/creative-cloud/adobe-fonts/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "adobe-fonts": { + "type": "http", + "url": "https://af-fonts-mcp-server.adobe.io/mcp" + } + } +} diff --git a/plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md b/plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md new file mode 100644 index 00000000..6135b3a6 --- /dev/null +++ b/plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md @@ -0,0 +1,118 @@ +--- +name: adobe-fonts +description: > + Use when the user needs font or typeface recommendations, is choosing type + for a design (poster, invitation, packaging, social post, brand, website, + presentation), wants fonts similar to one they already like, or needs + licensed Adobe Fonts for a document. Triggers include "what font should I + use for...", "recommend a typeface for...", "find fonts like [name]", + "suggest fonts for a [mood] [doc type]", or "pair fonts for headings and + body". +license: Apache-2.0 +metadata: + version: 1.0.0 +--- + +# Adobe Fonts + +Wraps the Adobe Fonts MCP server's `get_font_recommendations` tool, which +queries the Font Discovery API for real, licensable fonts from the Adobe +Fonts catalog based on document type, mood, style, topic, text hierarchy, or +similarity to a font the user already likes. + +**Hard constraint:** every font returned is a real, licensable Adobe Fonts +family. Never recommend a font that didn't come back in the tool's results — +prior knowledge of "similar" fonts outside the catalog is not licensable +here and must not be substituted. + +## Tool Reference + +| Tool | Purpose | +| --- | --- | +| `get_font_recommendations` | Query Font Discovery API for contextual font recommendations | + +## Mapping a request to parameters + +**Context parameters** — describe the design and intent: + +| Param | Type | Notes | +| --- | --- | --- | +| `doc_type` | string | Document type, e.g. `"postcard"`, `"Instagram post"`, `"movie poster"` | +| `styles` | string | Comma-separated styles | +| `moods` | string | Comma-separated moods | +| `topics` | string | Comma-separated design topics | +| `user_query` | string | Free-form text, max 150 chars | +| `font_query` | bool | Set `true` when `user_query` is literally a font-name search rather than a design brief | +| `text_hierarchy` | `"heading"` \| `"body"` | Text focus, when the user cares about one specifically | +| `selected_font` | string | A `postscript_name` for "more like this" similarity search | + +**`selected_font` must be a `postscript_name` already returned by a prior +`get_font_recommendations` call** (from `font_identifier.postscript_name` or +a bare `postscript_name`) — never a guessed or display name. If the user +names a font casually (e.g. "something like Futura") and you don't yet have +its PostScript name, run a search first with `user_query` + `font_query: +true` to resolve it before using `selected_font`. + +**Metadata parameters** — narrow the catalog: + +| Param | Type | Default | Notes | +| --- | --- | --- | --- | +| `library` | `"full"` \| `"trial"` | `"full"` | | +| `writing_systems` | string | `"latn"` | comma-separated, e.g. `"latn,jpan"` | +| `font_technology` | string | — | `"vf"` variable, `"colr"` color | +| `font_group` | string | — | e.g. `"Sans Serif,Display"` | +| `locale` | string | `"en"` | e.g. `"ja_JP"` | +| `per_page` | int, 1–100 | 10 | | +| `debug` | bool | `false` | disables caching | + +If the request involves multiple intended uses (e.g. a poster needing both +display and body text) or multiple documents, call the tool once per +`text_hierarchy` / doc rather than trying to get one call to cover everything. + +## Response shape + +```json +{ + "results": [ + { + "id": "trending_fonts", + "name": "Trending Fonts", + "results": [ + { "font_identifier": { "postscript_name": "MyriadPro-Regular", "font_id": "TkD-1-abc123" }, + "family_name": "Myriad Pro", "style_name": "Regular", "designers": ["..."], + "foundry": "...", "detail_url": "https://fonts.adobe.com/fonts/myriad-pro" } + ] + } + ], + "total": 1, + "instructions": "..." +} +``` + +`total` counts modules, not fonts — iterate each module's own nested +`results[]` for the fonts. Each font carries either a resolved +`font_identifier` (`postscript_name` + `font_id`) or a bare `postscript_name` +when the id couldn't be resolved, plus enrichment fields when available: +`family_name`, `style_name`, `full_name`, `designers`, `foundry`, +`detail_url`. + +**The response's `instructions` field is authoritative for how to present +results** (formatting, linking to `detail_url`, crediting designers, writing +tone) — it's generated fresh on every call, so follow it over anything else, +including this skill, if the two ever diverge. Never infer a family name, +designer, or URL yourself when a field is present; omit the detail rather +than guessing when a field is absent. + +**Errors are returned as a JSON body, not a transport failure** — check the +parsed result for an `"error"` key (e.g. `{"error": "...", "status_code": +400}`) rather than relying on the call throwing. + +## Common Mistakes + +| Mistake | Fix | +| --- | --- | +| Recommending a font not present in the tool's results | Only use fonts from `get_font_recommendations` output — never from prior knowledge | +| Guessing family name, style, designer, or foundry from the `postscript_name` | Use the enriched fields verbatim; omit the detail if the field is absent | +| Constructing a fonts.adobe.com URL by hand | Use the exact `detail_url` field, or omit the link entirely | +| Passing a guessed or display name as `selected_font` | Only pass a `postscript_name` already returned by a prior call | +| `per_page` above 100 or `user_query` over 150 chars | Tool returns a 400-shaped error body — validate before calling | From ca945157fe3c1d7dffcda158a70c055f04f54890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Bola=C3=B1os?= Date: Thu, 6 Aug 2026 16:43:25 +0200 Subject: [PATCH 2/5] refactor(creative-cloud): serve adobe-fonts through adobe-for-creativity MCP Moves the adobe-fonts skill into the adobe-for-creativity plugin instead of standing up a separate plugin and MCP server registration, since font recommendations are served through the same Adobe for Creativity MCP endpoint rather than a standalone one. --- .claude-plugin/marketplace.json | 21 ------------------- .../adobe-fonts/.claude-plugin/plugin.json | 12 ----------- plugins/creative-cloud/adobe-fonts/.mcp.json | 8 ------- .../.claude-plugin/plugin.json | 6 +++--- .../skills/adobe-fonts/SKILL.md | 9 ++++---- 5 files changed, 8 insertions(+), 48 deletions(-) delete mode 100644 plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json delete mode 100644 plugins/creative-cloud/adobe-fonts/.mcp.json rename plugins/creative-cloud/{adobe-fonts => adobe-for-creativity}/skills/adobe-fonts/SKILL.md (94%) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 46509a0c..2f876492 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -165,27 +165,6 @@ "homepage": "https://github.com/adobe/skills", "repository": "https://github.com/adobe/skills", "license": "Apache-2.0" - }, - { - "name": "adobe-fonts", - "source": "./plugins/creative-cloud/adobe-fonts", - "description": "Font discovery and recommendations from the licensed Adobe Fonts catalog through the Adobe Fonts MCP server — find fonts by design context, mood, style, or similarity to a font you already like.", - "version": "1.0.0", - "category": "creative-cloud", - "keywords": [ - "adobe", - "fonts", - "typography", - "typekit", - "creative-cloud", - "mcp" - ], - "author": { - "name": "Adobe" - }, - "homepage": "https://github.com/adobe/skills", - "repository": "https://github.com/adobe/skills", - "license": "Apache-2.0" } ] } diff --git a/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json b/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json deleted file mode 100644 index d10ba0d4..00000000 --- a/plugins/creative-cloud/adobe-fonts/.claude-plugin/plugin.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "adobe-fonts", - "description": "Font discovery and recommendations from the licensed Adobe Fonts catalog through the Adobe Fonts MCP server — find fonts by design context, mood, style, or similarity to a font you already like.", - "version": "1.0.0", - "author": { - "name": "Adobe" - }, - "repository": "https://github.com/adobe/skills", - "license": "Apache-2.0", - "keywords": ["adobe", "fonts", "typography", "typekit", "creative-cloud", "mcp"], - "skills": "./skills" -} diff --git a/plugins/creative-cloud/adobe-fonts/.mcp.json b/plugins/creative-cloud/adobe-fonts/.mcp.json deleted file mode 100644 index 41d9efa0..00000000 --- a/plugins/creative-cloud/adobe-fonts/.mcp.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mcpServers": { - "adobe-fonts": { - "type": "http", - "url": "https://af-fonts-mcp-server.adobe.io/mcp" - } - } -} diff --git a/plugins/creative-cloud/adobe-for-creativity/.claude-plugin/plugin.json b/plugins/creative-cloud/adobe-for-creativity/.claude-plugin/plugin.json index a956a6ca..ead5281f 100644 --- a/plugins/creative-cloud/adobe-for-creativity/.claude-plugin/plugin.json +++ b/plugins/creative-cloud/adobe-for-creativity/.claude-plugin/plugin.json @@ -1,12 +1,12 @@ { "name": "adobe-for-creativity", - "description": "Brings together Adobe Creative Cloud tools for images, vectors, design, and video. Edit multiple assets at once, adapt for different platforms, and complete multi-step creative workflows for polished results.", - "version": "1.1.0", + "description": "Brings together Adobe Creative Cloud tools for images, vectors, design, video, and fonts. Edit multiple assets at once, adapt for different platforms, find licensed Adobe fonts, and complete multi-step creative workflows for polished results.", + "version": "1.2.0", "author": { "name": "Adobe" }, "repository": "https://github.com/adobe/skills", "license": "Apache-2.0", - "keywords": ["adobe", "creative-cloud", "image-editing", "design"], + "keywords": ["adobe", "creative-cloud", "image-editing", "design", "fonts", "typography"], "skills": "./skills" } diff --git a/plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md similarity index 94% rename from plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md rename to plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md index 6135b3a6..c08e4cbe 100644 --- a/plugins/creative-cloud/adobe-fonts/skills/adobe-fonts/SKILL.md +++ b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md @@ -15,10 +15,11 @@ metadata: # Adobe Fonts -Wraps the Adobe Fonts MCP server's `get_font_recommendations` tool, which -queries the Font Discovery API for real, licensable fonts from the Adobe -Fonts catalog based on document type, mood, style, topic, text hierarchy, or -similarity to a font the user already likes. +Wraps the `get_font_recommendations` tool exposed through the Adobe for +Creativity MCP server, which queries the Font Discovery API for real, +licensable fonts from the Adobe Fonts catalog based on document type, mood, +style, topic, text hierarchy, or similarity to a font the user already +likes. **Hard constraint:** every font returned is a real, licensable Adobe Fonts family. Never recommend a font that didn't come back in the tool's results — From 6b74161554cbc12fe59dec6952b16098b45e7c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Bola=C3=B1os?= Date: Thu, 6 Aug 2026 16:53:23 +0200 Subject: [PATCH 3/5] docs(adobe-fonts): clarify writing_systems uses ISO 15924 script codes The Font Discovery API takes writing_systems as an unvalidated string, so a wrong or guessed script code silently returns no results instead of erroring. Naming the standard and mapping common languages to codes gives the agent a way to get this right instead of guessing. --- .../adobe-for-creativity/skills/adobe-fonts/SKILL.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md index c08e4cbe..0a69593c 100644 --- a/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md +++ b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md @@ -59,13 +59,19 @@ true` to resolve it before using `selected_font`. | Param | Type | Default | Notes | | --- | --- | --- | --- | | `library` | `"full"` \| `"trial"` | `"full"` | | -| `writing_systems` | string | `"latn"` | comma-separated, e.g. `"latn,jpan"` | +| `writing_systems` | string | `"latn"` | comma-separated ISO 15924 script codes, lowercase, e.g. `"latn,jpan"`, `"cyrl"`, `"hang"` | | `font_technology` | string | — | `"vf"` variable, `"colr"` color | | `font_group` | string | — | e.g. `"Sans Serif,Display"` | | `locale` | string | `"en"` | e.g. `"ja_JP"` | | `per_page` | int, 1–100 | 10 | | | `debug` | bool | `false` | disables caching | +`writing_systems` is passed straight through to the Font Discovery API with +no validation on the server — an invalid or mismatched script code silently +returns no results rather than erroring. Map the user's target language(s) +to the correct ISO 15924 code (e.g. Korean → `hang`, Chinese → `hans`/`hant`, +Cyrillic → `cyrl`, Arabic → `arab`) rather than guessing. + If the request involves multiple intended uses (e.g. a poster needing both display and body text) or multiple documents, call the tool once per `text_hierarchy` / doc rather than trying to get one call to cover everything. From fda6ab04669657fcd44580864513dcd7556e0ad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Bola=C3=B1os?= Date: Thu, 6 Aug 2026 16:55:00 +0200 Subject: [PATCH 4/5] docs(adobe-fonts): drop internal Font Discovery API naming The skill describes the get_font_recommendations tool contract as exposed through the Adobe for Creativity MCP server; naming the upstream backend API it happens to call is an implementation detail agents don't need and that can drift independently of this doc. --- .../skills/adobe-fonts/SKILL.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md index 0a69593c..b6c8f9f4 100644 --- a/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md +++ b/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/SKILL.md @@ -16,10 +16,9 @@ metadata: # Adobe Fonts Wraps the `get_font_recommendations` tool exposed through the Adobe for -Creativity MCP server, which queries the Font Discovery API for real, -licensable fonts from the Adobe Fonts catalog based on document type, mood, -style, topic, text hierarchy, or similarity to a font the user already -likes. +Creativity MCP server, which returns real, licensable fonts from the Adobe +Fonts catalog based on document type, mood, style, topic, text hierarchy, or +similarity to a font the user already likes. **Hard constraint:** every font returned is a real, licensable Adobe Fonts family. Never recommend a font that didn't come back in the tool's results — @@ -30,7 +29,7 @@ here and must not be substituted. | Tool | Purpose | | --- | --- | -| `get_font_recommendations` | Query Font Discovery API for contextual font recommendations | +| `get_font_recommendations` | Return contextual font recommendations from the Adobe Fonts catalog | ## Mapping a request to parameters @@ -66,9 +65,9 @@ true` to resolve it before using `selected_font`. | `per_page` | int, 1–100 | 10 | | | `debug` | bool | `false` | disables caching | -`writing_systems` is passed straight through to the Font Discovery API with -no validation on the server — an invalid or mismatched script code silently -returns no results rather than erroring. Map the user's target language(s) +`writing_systems` is passed straight through with no validation on the +server — an invalid or mismatched script code silently returns no results +rather than erroring. Map the user's target language(s) to the correct ISO 15924 code (e.g. Korean → `hang`, Chinese → `hans`/`hant`, Cyrillic → `cyrl`, Arabic → `arab`) rather than guessing. From 4a94b3ca0d0510e6e1989a4d1ec4641b149531ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Bola=C3=B1os?= Date: Fri, 7 Aug 2026 11:44:06 +0200 Subject: [PATCH 5/5] chore(adobe-fonts): add joekukish as code owner for adobe-fonts skill Addresses review feedback on PR #298 requesting the author be added as code owner so they're looped in on future reviews. --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ac269a5e..73bd529c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -42,6 +42,9 @@ # Adobe for creativity /plugins/creative-cloud/adobe-for-creativity @bossjones @njampani123 @solimant +# Adobe Fonts skill +/plugins/creative-cloud/adobe-for-creativity/skills/adobe-fonts/ @joekukish + # Run Workflow (Adobe Firefly workflows via MCP) /plugins/creative-cloud/run-workflow @thagarwal-sjc