Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentation and API references via MCP server. --- name: adobe-express-dev description: 'Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentat Published capability contract available. No trust telemetry is available yet. 2 GitHub stars reported by the source. Last updated 4/14/2026.
Freshness
Last checked 4/14/2026
Best For
Contract is available with explicit auth and schema references.
Not Ideal For
adobe-express-dev is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.
Evidence Sources Checked
editorial-content, capability-contract, runtime-metrics, public facts pack
Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentation and API references via MCP server. --- name: adobe-express-dev description: 'Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentat
Public facts
7
Change events
1
Artifacts
0
Freshness
Apr 14, 2026
Published capability contract available. No trust telemetry is available yet. 2 GitHub stars reported by the source. Last updated 4/14/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Apr 14, 2026
Vendor
Sandgrouse
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Published capability contract available. No trust telemetry is available yet. 2 GitHub stars reported by the source. Last updated 4/14/2026.
Setup snapshot
git clone https://github.com/Sandgrouse/adobe-express-dev-skill.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Sandgrouse
Protocol compatibility
MCP
Auth modes
mcp, api_key, oauth
Machine-readable schemas
OpenAPI or schema references published
Adoption signal
2 GitHub stars
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
javascript
// Iframe Runtime (index.html, index.js, ui/ folder)
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
// Document Sandbox (code.js, sandbox/code.js)
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
import { editor, colorUtils, constants, fonts, viewport } from "express-document-sdk";text
my-addon/ ├── src/ │ ├── index.html # UI entry point │ ├── manifest.json # Add-on config │ ├── ui/ │ │ ├── index.js # UI logic │ │ └── styles.css # Styles │ └── sandbox/ │ └── code.js # Document manipulation ├── webpack.config.js # Build config (if using build templates) └── package.json
javascript
// Text
import { editor, text } from "express-document-sdk";
const textNode = text.createText({content: "Hello", fontSize: 24});
editor.context.insertionParent.children.append(textNode);
// Shapes
import { editor, RectangleNode } from "express-document-sdk";
const rect = editor.createRectangle();
rect.width = 100;
rect.height = 50;
// Images
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
const blob = await fetch(imageUrl).then(r => r.blob());
await addOnUISdk.app.document.addImage(blob);
// Audio (title is MANDATORY)
await addOnUISdk.app.document.addAudio(audioBlob, {
title: "Audio Title"
});
// Video (title is OPTIONAL)
await addOnUISdk.app.document.addVideo(videoBlob, {
title: "Video Title"
});html
<sp-theme theme="express" scale="medium" color="light">
<sp-button variant="primary" onclick="handleClick()">
Click Me
</sp-button>
<sp-textfield placeholder="Enter text..."></sp-textfield>
</sp-theme>json
{
"permissions": {
"oauth": ["www.dropbox.com", "login.microsoftonline.com"]
}
}javascript
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
// Import OAuthUtils helper (copy from sample)
// Generate PKCE challenge
const challenge = await oauthUtils.generateChallenge();
// Authorize with provider
const { id, code, redirectUri, result } = await addOnUISdk.app.oauth.authorize({
authorizationUrl: "https://www.dropbox.com/oauth2/authorize",
clientId: "YOUR_CLIENT_ID",
scope: "files.content.read",
codeChallenge: challenge.codeChallenge
});
// Exchange for access token
await oauthUtils.generateAccessToken({
id, clientId: "YOUR_CLIENT_ID",
codeVerifier: challenge.codeVerifier,
code, tokenUrl: "https://api.dropboxapi.com/oauth2/token",
redirectUri
});
// Get token (always valid - handles refresh)
const accessToken = await oauthUtils.getAccessToken(id);Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentation and API references via MCP server. --- name: adobe-express-dev description: 'Expert guidance for Adobe Express add-on development using Document APIs, Add-on UI SDK, and Document Sandbox. Use when building Adobe Express extensions, creating add-ons, working with express-document-sdk, implementing document manipulation, designing add-on UIs with Spectrum Web Components, troubleshooting iframe/sandbox communication, or accessing Adobe Express documentat
Expert knowledge and tooling for developing Adobe Express add-ons. This skill leverages the Adobe Express MCP server to provide accurate, up-to-date API references, documentation, and best practices.
Use this skill when:
npm install -g @adobe/express-developer-mcp@latest - Core SDK & API docsnpm install -g community-express-dev-mcp - Live Spectrum Web Components UI docsAdobe Express add-ons run in two separate environments:
Iframe Runtime
addOnUISdk)Document Sandbox (optional)
editor, colorUtils, constants, etc.)Communication: Use Document Sandbox SDK (runtime.exposeApi(), runtime.apiProxy()) to bridge between the two.
Always follow these patterns:
// Iframe Runtime (index.html, index.js, ui/ folder)
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
// Document Sandbox (code.js, sandbox/code.js)
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
import { editor, colorUtils, constants, fonts, viewport } from "express-document-sdk";
Critical:
When you need: API references, type definitions, or documentation for Adobe Express add-on development.
Steps:
mcp_adobe-express_get_relevant_documentations tool with your querymcp_adobeexpressd_queryDocumentation with target_source: "spectrum_web_components"mcp_adobe-express_get_typedefinitions with appropriate api_type:
express-document-sdk - Document manipulation APIsadd-on-sdk-document-sandbox - Communication between runtimesiframe-ui - UI SDK and iframe runtime APIsExample queries:
When you need: To organize files, understand folder structure, or set up a new add-on.
Key principles:
src/index.html, src/ui/)src/sandbox/code.js)Typical structure:
my-addon/
├── src/
│ ├── index.html # UI entry point
│ ├── manifest.json # Add-on config
│ ├── ui/
│ │ ├── index.js # UI logic
│ │ └── styles.css # Styles
│ └── sandbox/
│ └── code.js # Document manipulation
├── webpack.config.js # Build config (if using build templates)
└── package.json
Manifest configuration:
"main": "index.html""documentSandbox": "code.js" (build) or "sandbox/code.js" (no-build)When you need: To add shapes, text, images, audio, or video to Adobe Express documents.
Steps:
express-document-sdkeditor singleton for document operationsCommon APIs:
// Text
import { editor, text } from "express-document-sdk";
const textNode = text.createText({content: "Hello", fontSize: 24});
editor.context.insertionParent.children.append(textNode);
// Shapes
import { editor, RectangleNode } from "express-document-sdk";
const rect = editor.createRectangle();
rect.width = 100;
rect.height = 50;
// Images
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
const blob = await fetch(imageUrl).then(r => r.blob());
await addOnUISdk.app.document.addImage(blob);
// Audio (title is MANDATORY)
await addOnUISdk.app.document.addAudio(audioBlob, {
title: "Audio Title"
});
// Video (title is OPTIONAL)
await addOnUISdk.app.document.addVideo(videoBlob, {
title: "Video Title"
});
When you need: To create user interfaces that match Adobe Express design language.
Steps:
Common components:
<sp-button> - Buttons<sp-textfield> - Input fields<sp-dropdown> - Dropdowns<sp-divider> - Dividers<sp-progress-circle> - Loading indicatorsExample:
<sp-theme theme="express" scale="medium" color="light">
<sp-button variant="primary" onclick="handleClick()">
Click Me
</sp-button>
<sp-textfield placeholder="Enter text..."></sp-textfield>
</sp-theme>
When you need: To connect to cloud storage services (Dropbox, OneDrive, Google Drive) or authenticate users.
Quick start:
references/oauth-implementation.md for complete guidereferences/code-samples.md → "import-images-using-oauth" for full exampleSteps:
Configure OAuth provider (e.g., Dropbox Developer Console)
https://express.adobe.com/static/oauth-redirect.html AND https://new.express.adobe.com/static/oauth-redirect.htmlUpdate manifest.json:
{
"permissions": {
"oauth": ["www.dropbox.com", "login.microsoftonline.com"]
}
}
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
// Import OAuthUtils helper (copy from sample)
// Generate PKCE challenge
const challenge = await oauthUtils.generateChallenge();
// Authorize with provider
const { id, code, redirectUri, result } = await addOnUISdk.app.oauth.authorize({
authorizationUrl: "https://www.dropbox.com/oauth2/authorize",
clientId: "YOUR_CLIENT_ID",
scope: "files.content.read",
codeChallenge: challenge.codeChallenge
});
// Exchange for access token
await oauthUtils.generateAccessToken({
id, clientId: "YOUR_CLIENT_ID",
codeVerifier: challenge.codeVerifier,
code, tokenUrl: "https://api.dropboxapi.com/oauth2/token",
redirectUri
});
// Get token (always valid - handles refresh)
const accessToken = await oauthUtils.getAccessToken(id);
await addOnUISdk.instance.clientStorage.setItem("oauth_token", accessToken);
Reference: See references/oauth-implementation.md for provider configs, error handling, and logout patterns.
When you need: To pass data between UI and document manipulation code.
Pattern:
In Document Sandbox (code.js):
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
const api = {
async addTextToDocument(text) {
// Document manipulation logic
}
};
addOnSandboxSdk.instance.runtime.exposeApi(api);
In Iframe Runtime (index.js):
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
const sandboxApi = await addOnUISdk.instance.runtime.apiProxy("documentSandbox");
await sandboxApi.addTextToDocument("Hello World");
When you need: To pass data between UI and document manipulation code.
Pattern:
In Document Sandbox (code.js):
import addOnSandboxSdk from "add-on-sdk-document-sandbox";
const api = {
async addTextToDocument(text) {
// Document manipulation logic
}
};
addOnSandboxSdk.instance.runtime.exposeApi(api);
In Iframe Runtime (index.js):
import addOnUISdk from "https://express.adobe.com/static/add-on-sdk/sdk.js";
const sandboxApi = await addOnUISdk.instance.runtime.apiProxy("documentSandbox");
await sandboxApi.addTextToDocument("Hello World");
When you need: Implementation examples, starter code, or best practices.
Steps:
references/code-samples.md to find relevant samplegit clone https://github.com/AdobeDocs/express-add-on-samples.gitcd express-add-on-samples/samples/<sample-name>npm install && npm run build && npm run startRecommended samples:
import-images-using-oauth (copy OAuthUtils.js!)use-client-storageexport-sampleaudio-recording-addonswc-react-theme-samplerswcIssue: undefined when accessing SDK properties
Issue: "Cannot access DOM" in document sandbox
Issue: API not working as expected
Issue: Manifest errors
"documentSandbox" path matches your build setup"sandbox/code.js" (full path)"code.js" (webpack output)| Tool | Purpose | Example Query |
|------|---------|---------------|
| get_relevant_documentations | Search Adobe Express SDK docs | "How to create rectangles" |
| get_typedefinitions | Get TypeScript definitions | api_type: "express-document-sdk" |
| Tool | Purpose | Example Query |
|------|---------|---------------|
| mcp_adobeexpressd_queryDocumentation | Search Spectrum Web Components docs for UI building | query_text: "sp-button" with target_source: "spectrum_web_components" |
| mcp_adobeexpressd_get-code-example | Get code examples for common features | feature: "dialog-api" |
| mcp_adobeexpressd_implement-feature | Get implementation guidance | feature: "authentication" |
Recommended: Use community MCP for all Spectrum Web Components queries—it provides live documentation access.
src/manifest.jsonsrc/index.html, src/ui/index.jssrc/sandbox/code.jssrc/ui/styles.css (never in sandbox)webpack.config.js, tsconfig.json| Problem | Solution |
|---------|----------|
| MCP server not responding | Check .vscode/mcp.json configuration |
| Import errors | Verify default vs named import patterns |
| Runtime errors | Ensure code runs in correct environment (iframe vs sandbox) |
| API not found | Query MCP server for latest documentation |
| Build errors | Check webpack config and Node.js version (18+) |
This skill includes detailed reference documentation in the references/ folder:
File: references/oauth-implementation.md
Complete OAuth 2.0 implementation guide with:
Use when: Implementing OAuth authentication, cloud storage integration, or user authentication.
File: references/code-samples.md
Comprehensive catalog of 13 official Adobe Express add-on samples:
Use when: Looking for implementation examples, starter code, or best practices.
npx @adobe/create-express-add-on for scaffolding projectsmanifest.json permissions before usingtitle parameter is MANDATORYtitle parameter is OPTIONALMachine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
ready
Auth
mcp, api_key, oauth
Streaming
No
Data region
global
Protocol support
Requires: mcp, lang:typescript
Forbidden: high_risk
Guardrails
Operational confidence: medium
curl -s "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/snapshot"
curl -s "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract"
curl -s "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "ready",
"authModes": [
"mcp",
"api_key",
"oauth"
],
"requires": [
"mcp",
"lang:typescript"
],
"forbidden": [
"high_risk"
],
"supportsMcp": true,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": "https://github.com/Sandgrouse/adobe-express-dev-skill#input",
"outputSchemaRef": "https://github.com/Sandgrouse/adobe-express-dev-skill#output",
"dataRegion": "global",
"contractUpdatedAt": "2026-02-24T19:43:58.374Z",
"sourceUpdatedAt": "2026-02-24T19:43:58.374Z",
"freshnessSeconds": 4423854
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-04-17T00:34:53.283Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "supported",
"confidenceSource": "contract",
"notes": "Confirmed by capability contract"
},
{
"key": "use",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "and",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "jsx",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:MCP|supported|contract capability:use|supported|profile capability:and|supported|profile capability:jsx|supported|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Sandgrouse",
"href": "https://github.com/Sandgrouse/adobe-express-dev-skill",
"sourceUrl": "https://github.com/Sandgrouse/adobe-express-dev-skill",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-14T22:26:21.857Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2 GitHub stars",
"href": "https://github.com/Sandgrouse/adobe-express-dev-skill",
"sourceUrl": "https://github.com/Sandgrouse/adobe-express-dev-skill",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-14T22:26:21.857Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:43:58.374Z",
"isPublic": true
},
{
"factKey": "auth_modes",
"category": "compatibility",
"label": "Auth modes",
"value": "mcp, api_key, oauth",
"href": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:43:58.374Z",
"isPublic": true
},
{
"factKey": "schema_refs",
"category": "artifact",
"label": "Machine-readable schemas",
"value": "OpenAPI or schema references published",
"href": "https://github.com/Sandgrouse/adobe-express-dev-skill#input",
"sourceUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:43:58.374Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/sandgrouse-adobe-express-dev-skill/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to adobe-express-dev and adjacent AI workflows.