experience-content-media-stock-image-search
experience-content-media-stock-image-search について
画像や写真を求める依頼に応じ、ライセンス付きストック写真を検索するスキルです。media-management MCP サーバーで結果を探して選択用に提示し、選ばれた素材をローカルのクライアントへダウンロードできます。
主な機能
- 01自然言語によるストック写真検索
- 02クリエイティブ・報道向け素材の選択
- 03向きや並び順による絞り込み
- 04画像プレビューとライセンス情報の表示
- 05選択した画像のクライアントへのダウンロード
活用シーン
- 01デザインやページ用のストック写真探し
- 02イベントに関する報道写真の検索
- 03選択した素材のローカル利用
MCP 対応
media-management MCP サーバーの search_stock_images と download_stock_image ツールを使い、ストック画像を検索・取得します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill experience-content-media-stock-image-searchインストール後、Claude Code で/experience-content-media-stock-image-searchを入力して読み込まれたか確認します。
同梱ファイルscripts/download-stock-image.py
詳細
ストック画像検索
このスキルを起動するタイミング
ユーザーが画像、写真、または絵を求めた場合は、検索方法をユーザーに選ばせず、すぐに起動してください。以下の両方が対象です。
- 既存の画像を探す場合:「ストック画像を探して」「X の写真を検索して」「ロイヤリティフリー画像を入手して」「倫理的な画像を探して」、編集用または報道用の写真
- 作成や生成として曖昧に表現されたリクエスト:「夕焼けの画像を作って」「チーム会議の画像を生成して」「山の画像を作って」など。これらはストック検索のリクエストとして扱ってください。このスキルはストックフォトライブラリを検索するものであり、画像を生成するものではありません。
これらすべての場合に、ストックライブラリを検索してください。画像を入手するためのツールです。別の検索方法(ハイブリッド検索、ユーザーが提供する URL/パスなど)を提案せず、ユーザーに選択を求めないでください。
対象外:
- 内部の CMS/Data Cloud メディアの検索(
experience-search-coordinateを使用してください) - AI 生成、合成、またはコンピューター生成の画像を明示的に求めるリクエスト。このスキルはライセンス済みのストック写真のみを検索し、画像生成機能はありません
ステップ 1 — 検索
MCP ツール: search_stock_images(サーバー:media-management)
タイムアウト: 30 秒
| パラメーター | 必須 | デフォルト | 備考 |
|---|---|---|---|
query | ✅ はい | — | 自然言語による検索フレーズ(例:「海に沈む夕日」、「ビジネス会議」)。最大 500 文字 |
searchType | いいえ | Creative | Creative(ロイヤリティフリーのストック画像)、Editorial(権利管理されたニュース/イベント画像) |
orientation | いいえ | (none) | Horizontal、Vertical、Square、PanoramicHorizontal、PanoramicVertical |
sortOrder | いいえ | BestMatch | BestMatch、MostPopular、Newest |
pageSize | いいえ | 5 | 1~100 |
page | いいえ | 1 | 1 始まり。1 以上である必要があります |
スマートなキーワード抽出: クエリが 20 語を超える場合、または結果が返されない場合、ツールは LLM を使用して短いキーワードフレーズを自動抽出し、再試行します。応答の effectiveQuery フィールドには、検索サービスに実際に送信された内容が表示されます(元のクエリが変更されずに使われた場合は null)。
応答フィールド:
| フィールド | 備考 |
|---|---|
images[] | 検索結果のリスト(下記の各項目のフィールドを参照) |
totalCount | 全ページの合計一致件数 |
page | 現在のページ(1 始まり) |
pageSize | 1 ページあたりの検索結果数 |
searchRequestId | 内部相関 ID。サーバーが管理します。MCP ダウンロードツールには引き継がれません。必要に応じて、デバッグ出力に表示しても問題ありません。 |
effectiveQuery | 検索サービスに実際に送信されたキーワード。元のクエリが変更されずに使われた場合は Null です。 |
errorMessage | 検索に失敗した場合は null 以外になります |
各 images[] 項目:
| フィールド | 備考 |
|---|---|
assetId | ストック画像のアセット ID。ダウンロードに必要です。必要に応じて、検索結果とともに表示しても問題ありません。 |
title | 画像のタイトル |
caption | 画像の説明 |
thumbnailUrl | 小さなプレビュー URL。グリッド表示に使用します |
previewUrl | 大きめのコンプ/プレビュー URL。タイル表示に使用します |
width | 最大幅(ピクセル) |
height | 最大高さ(ピクセル) |
licenseModel | 例:royaltyfree、rightsmanaged |
artist | 提供者/アーティスト名 |
collection | コレクション名 |
ステップ 2 — 結果を提示してから終了
各結果について、画像には thumbnailUrl を使用し、クリック時のリンク先には previewUrl を使用して、サムネイル付きの番号付きリストを表示します(サムネイルをクリックすると、ブラウザーで全体プレビューが開きます)。
1. [](<previewUrl>)
**<title>** — <artist>, <width>×<height>, <licenseModel>
2. ...
これは標準的な Markdown の画像リンク構文([](previewUrl))です。テキストリンクではなく実際のサムネイルが表示され、クリックすると previewUrl に移動します。クライアントが Markdown 画像を表示できない場合は、リンク付きのタイトルとして表示されます。
effectiveQuery が null ではなく、ユーザーの元のクエリと異なる場合に限り、リストの前に Searched for: <effectiveQuery> を付けます。
ここでターンを終了してください。自動ダウンロードしたり、ファイルを書き込んだり、追加の質問をしたりしないでください。 Agentforce は独自の選択 UI を表示します。質問したり自動選択したりすると、選択を重ねて尋ねることになります。ユーザーに代わって結果を選ばないでください。
非対話モード(スケジュール実行/ヘッドレスで、ユーザーがいない場合):結果から images[0] を選択し、レポートに自動選択したことを記載します。その後、ステップ 3 に進みます。
ステップ 3 — ダウンロード(課金対象)
⚠️ 呼び出すたびに画像のライセンスが付与され、ストック画像のダウンロードクレジットが消費されます。ユーザーが画像を明示的に選択した後に限り(または上記のとおり非対話モードの場合に限り)呼び出してください。
download_stock_image を呼び出す前に、以下を確認してください:
- ユーザーが希望する画像を明示的に指定している(または非対話モードであることが確認されている)
- 前回のダウンロードに対する自動再試行ではない
MCP ツール: download_stock_image(サーバー:media-management)
タイムアウト: 60 秒
| パラメーター | 必須 | デフォルト | 備考 |
|---|---|---|---|
assetId | ✅ はい | — | 先行する search_stock_images の結果に含まれるストックアセット ID。最大 50 文字 |
size | いいえ | comp | comp(Web 品質の合成画像、デフォルト)、medium_jpg、largest(フル解像度。100 MB を超える場合があります)。最大 50 文字 |
ユーザーがフル解像度またはオリジナル解像度を明示的に要求した場合に限り、largest を使用してください。
レスポンスフィールド:
| フィールド | 備考 |
|---|---|
assetId | ダウンロードしたストックアセット ID |
managedContentBodyId | 画像データが保存されている Salesforce レコード ID |
parentContentGenAiOutputId | ダウンロードリクエストを追跡するレコード |
childContentGenAiOutputId | リクエストと保存済みの本文を関連付けるレコード |
byteCount | 保存された画像のバイト単位のサイズ |
format | 解決された画像形式(例:jpg、png、eps、tiff、svg) |
url | 保存された画像の URL — ダウンロードまたはプレビューに使用します |
ステップ 4 — クライアントへのダウンロードとプレビュー
download_stock_image の呼び出しが成功したら、画像をローカルにダウンロードして VS Code で開きます。
必ず download-stock-image.py を使用してください。curl、wget、その他のツールは使用しないでください。
python3 scripts/download-stock-image.py \
--url "<url from download response>" \
--id "<assetId>" \
--format "<format from download response>" \
--preview
このスクリプトは sf CLI(sf config get target-org と sf org auth show-access-token)を使用して組織の認証情報を取得し、Authorization: Bearer <accessToken> を使って画像を stockimages/<assetId>.<format> にダウンロードします。また、--preview が指定されている場合は VS Code で開きます。
デフォルトの stockimages/ ディレクトリを変更するには、--output-dir <path> を指定します。
画像のサイズ変更や後処理は絶対に行わないでください。 表示サイズは CSS(width、height、object-fit)で調整してください。
ベクター/バイナリ形式(eps、tiff): ダウンロードレスポンスで返された format を必ずそのまま指定してください。検証エラーを回避するために jpg などの別形式に置き換えないでください。ファイルのバイト列と拡張子が一致せず、ファイルが破損しているように見えます。VS Code では eps/tiff のプレビューを表示できないため、スクリプトはこれらの形式では自動的に --preview をスキップし、保存先のパスは引き続き報告します。
ステップ 5 — 結果の報告
ダウンロードが成功したら、ユーザーに以下を伝えます。
- 画像のタイトルとアーティスト
- 保存した画像のローカルパス(スクリプトが出力したもの)
managedContentBodyId- クレジット表記:
{artist} · {collection}(ダウンロードレスポンスにクレジット表記が含まれている場合は、その文字列を使用します)
フォールバックとエラー
| 状況 | 対応 |
|---|---|
検索で errorMessage が null 以外 | エラーを表示し、より簡単なクエリ、または別の searchType/orientation を提案します |
images が空 | より広いキーワードを提案し、Editorial と Creative の切り替えを試します |
effectiveQuery が異なる | 検索サービスが実際に受け取った内容をユーザーに伝えます |
| MCP ツールを利用できない | 以下のプレースホルダー URL を使用します。ダウンロードや保存はしないでください |
| ダウンロードに失敗 | エラーを表示し、自動的に再試行しないでください。まずユーザーに確認します(再試行のたびに課金されます) |
プレースホルダー
search_stock_images と download_stock_image の両方を利用できない場合は、この URL を src または CSS の url() として直接使用します。
https://cdn.scs.static.lightning.force.com/content/assets/d5222d4a11e6c2b735152d7eea824ce4/placeholder.svg
プレースホルダーのポリシー: プレースホルダー URL は 1 つだけです。ダウンロード、変更、または Python、ImageMagick などのツールを使用した別のプレースホルダーの生成はしないでください。特定のサイズや形式のプレースホルダーをユーザーが求めた場合は、利用できるのはこの URL のみであることを伝え、使用箇所で CSS を使って拡大縮小するよう案内してください。