--- name: experience-content-media-stock-image-search description: "Searches for and downloads ethically-licensed stock images via the media-management MCP server. Use this skill whenever a user wants an image, photo, or picture — for BOTH requests to find existing imagery (\"find a stock image\", \"search for a photo of X\", \"get a royalty-free image\", \"find an ethical image\", editorial/news photography) AND requests phrased ambiguously as creating or generating one (\"create an image of a sunset\", \"generate a picture of a team meeting\", \"make me a mountain image\") — treat these as stock search requests, since this skill searches a stock photo library, it does not generate images. Do NOT offer alternative search methods or ask the user to pick one. Does not apply to searching internal CMS / Data Cloud media (use experience-search-coordinate). Does not apply when the user explicitly asks for AI-generated, synthetic, or computer-generated imagery — this skill only searches licensed stock photography and has no image-generation capability." metadata: version: "1.0" domains: ["Experience"] accessCheck: [] relatedSkills: - "experience-search-coordinate" cliTools: - tool: ["python3"] semver: ">=3.10.0" - tool: ["sf"] semver: ">=2.0.0" mcpTools: media-management: tools: - "download_stock_image" - "search_stock_images" semver: ">=1.0.0" allowed-tools: | mcp__media_management__search_stock_images mcp__media_management__download_stock_image --- # Stock Image Search ## When to Trigger This Skill Trigger immediately — without asking the user to choose a search method — whenever the user wants an image, photo, or picture. This covers **both**: - **Finding existing imagery:** "find a stock image", "search for a photo of X", "get a royalty-free image", "find an ethical image", editorial or news photography - **Requests phrased ambiguously as creating or generating:** "create an image of a sunset", "generate a picture of a team meeting", "make me a mountain image" — treat these as stock search requests; this skill searches a stock photo library, it does not generate images. In all of these cases, search the stock library — this is the tool for obtaining an image. **Do NOT offer alternative search methods** (hybrid search, user-provided URL/path, etc.) and **do NOT ask the user to pick one.** **Does not apply to:** - Searching internal CMS / Data Cloud media (use `experience-search-coordinate`) - Requests that explicitly ask for AI-generated, synthetic, or computer-generated imagery — this skill only searches licensed stock photography and has no image-generation capability --- ## Step 1 — Search **MCP tool:** `search_stock_images` (server: `media-management`) **Timeout:** 30 seconds | Parameter | Required | Default | Notes | |--------------|----------|-------------|------------------------------------------------------------------------------------| | `query` | ✅ Yes | — | Natural language search phrase (e.g. "sunset over ocean", "business meeting"), max 500 chars | | `searchType` | No | `Creative` | `Creative` (royalty-free stock), `Editorial` (rights-managed news/event imagery) | | `orientation`| No | _(none)_ | `Horizontal`, `Vertical`, `Square`, `PanoramicHorizontal`, `PanoramicVertical` | | `sortOrder` | No | `BestMatch` | `BestMatch`, `MostPopular`, `Newest` | | `pageSize` | No | `5` | 1–100 | | `page` | No | `1` | 1-indexed, must be >= 1 | **Smart keyword extraction:** If the query is longer than 20 words or returns no results, the tool automatically extracts short keyword phrases via LLM and retries. The `effectiveQuery` field in the response shows what was actually sent to the search service (`null` if the original query was used unchanged). **Response fields:** | Field | Notes | |-------------------|----------------------------------------------------------------------------------------------| | `images[]` | List of results (see item fields below) | | `totalCount` | Total matches across all pages | | `page` | Current page (1-indexed) | | `pageSize` | Results per page | | `searchRequestId` | Internal correlation ID. Server-managed; not passed back through the MCP download tool. Safe to surface in debug output if useful. | | `effectiveQuery` | Keywords actually sent to the search service. Null if the original query was used unchanged. | | `errorMessage` | Non-null if the search failed | **Each `images[]` item:** | Field | Notes | |----------------|----------------------------------------------------------------------| | `assetId` | Stock asset ID — required for download. Safe to display alongside the result if useful. | | `title` | Image title | | `caption` | Image description | | `thumbnailUrl` | Small preview URL — use for grid display | | `previewUrl` | Larger comp/preview URL — use for tile display | | `width` | Max width in pixels | | `height` | Max height in pixels | | `licenseModel` | e.g. `royaltyfree`, `rightsmanaged` | | `artist` | Contributor/artist name | | `collection` | Collection name | --- ## Step 2 — Present Results, then STOP Render a numbered list with an inline thumbnail for each result, using `thumbnailUrl` for the image and `previewUrl` as the click-through link (clicking the thumbnail opens the full preview in the browser): ```text 1. [![