mcpField
S
Suno Upload

Suno Upload

github.com/nwpクリエイティブ・メディア4343 回インストール41 週間前に更新
リポジトリ

Suno Upload について

Suno Uploadは、Chromeの自動操作で構造化された`prompt.md`の曲プロンプトをSunoの作成画面に入力するスキルです。プロンプトファイルからSunoの曲を作る際に、フォーム入力やモデル設定、生成状況の確認を行います。

主な機能

  1. 01タイトル、歌詞、スタイル、パラメーターの解析
  2. 02Sunoの作成画面をカスタムモードで開く
  3. 03曲の項目と詳細設定の入力
  4. 04座標ドラッグによるスライダー設定
  5. 05作成の送信と生成状況の確認

活用シーン

  1. 01準備済みの`prompt.md`をSunoに送信
  2. 02複数のプロンプトファイルから曲を作成
  3. 03手作業でコピーせず歌詞や設定を入力

MCP 対応

有効なChrome MCP サーバーが必要です。ブラウザー操作ツールを使ってSunoの画面を移動し、項目を入力します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nwp/suno-song-creator-plugin --skill suno-upload

インストール後、Claude Code で/suno-uploadを入力して読み込まれたか確認します。

詳細

Suno のアップロード

Chrome の自動操作を使用して、Suno のプロンプトファイルを suno.com に自動でアップロードします。このスキルは prompt.md ファイルを解析し、Suno Create のインターフェースに必要なすべての項目を入力します。

✅ 完全自動化 — 人の手による操作は不要です

このスキルを使うと、Suno の楽曲作成プロセスを最初から最後まで完全に自動化できます。

  • ✅ prompt.md ファイルを解析 — タイトル、歌詞、スタイル、モデル、すべてのパラメーターを抽出します
  • ✅ Suno に自動で移動 — suno.com/create を開き、Custom モードに切り替えます
  • ✅ フォームのすべての項目に入力 — 複雑な React スライダーコンポーネントも含みます
  • ✅ スライダーの自動操作に対応 — 座標ベースのドラッグを使い、正確に調整します
  • ✅ 送信して進捗を監視 — Create ボタンをクリックし、生成状況を追跡します
  • ✅ 検証・テスト済み — すべてのパラメーターを制御して、楽曲の生成に成功しています

手動での操作は不要です — prompt.md ファイルを指定するだけで実行できます。

前提条件

  • Chrome MCP サーバーがインストールされ、アクティブであること
  • 利用可能なクレジットがあるSuno アカウント
  • Suno の標準的な楽曲作成形式のprompt.md ファイル

使用する場面

このスキルは、次の用途に使用できます。

  • 生成した prompt.md ファイルを Suno にアップロードする
  • suno.com での楽曲作成プロセスを自動化する
  • 複数のプロンプトを効率よく送信する
  • 歌詞や設定を手動でコピー&ペーストする手間を省く

ワークフロー

ステップ 1:プロンプトファイルを探す

現在のディレクトリとそのサブディレクトリで prompt.md ファイルを検索します。

複数のファイルが見つかった場合:

  • 次の情報を含む一覧を表示します。
    • ファイルパス
    • 楽曲タイトル(YAML フロントマターから取得)
    • プロジェクト名(YAML フロントマターから取得)
    • 最終更新日
  • AskUserQuestion を使用して、対話形式で選択します
  • すべての情報を含む選択肢を明確に提示します

ファイルが 1 つ見つかった場合:

  • 自動で選択します
  • 選択したファイルを表示します
  • 基本情報(タイトル、プロジェクト)を表示します

ファイルが見つからない場合:

  • エラーメッセージ:「現在のディレクトリまたはサブディレクトリに prompt.md ファイルが見つかりません。」
  • 案内:「Suno のプロンプトファイルがあるディレクトリに移動するか、先に suno-song-creator スキルを使ってプロンプトを作成してください。」
  • 安全に終了します

使用するツール:

  • Glob — **/prompt.md パターンで検索
  • Read — ファイル一覧表示用に YAML フロントマターを抽出
  • AskUserQuestion — 対話形式でファイルを選択
Step 2: プロンプトファイルを解析する

選択した prompt.md ファイルを読み取り、データを抽出します。

解析方法:

1. YAML フロントマター(1~12 行目):

---
title: "Song Title Here"
project: "Project Name"
---
  • title: の値を抽出します
  • 囲む引用符があれば削除します
  • これを「曲名」フィールドとして使用します

2. 構造化プロンプト(「### Structured Prompt」見出しの下):

見出し ### Structured Prompt を探し、3 つのバッククォートの間にある内容をすべて抽出します。

genre: "bubblegum pop, synth-pop, disco-influenced pop..."
vocal: "bright female pop vocals, playful delivery..."
instrumentation: "synth bass, disco-inspired drums..."
production: "polished modern pop, wide stereo mix..."
mood: "playful, sarcastic, witty, upbeat..."

重要:

  • ブロック全体をそのままコピーします(5 行すべて)
  • 個々のフィールドは解析しないでください
  • このブロック全体を Suno の「Styles」フィールドに入力します
  • 引用符と書式はすべて保持します

3. 歌詞セクション(「## Lyrics」見出しの後):

## Lyrics を探し、3 つのバッククォートの間にある内容をすべて抽出します。

///*****///

[Verse 1 | playful | bright production]
Lyrics text here...

[Chorus | upbeat | full production]
Chorus lyrics here...

解析に関する重要なルール:

  • 区切り線を削除する:冒頭の ///*****/// はスキップします(ファイル内の区切りにすぎません)
  • すべてのメタタグを保持する:[Verse 1 | playful | bright production] — Suno が使用します!
  • セクションマーカーを保持する:[Verse]、[Chorus]、[Bridge] など
  • すべての空行を保持する:書式を正確に維持します
  • 最初の実際の歌詞から開始する:区切り線を削除した後、最初の [Verse...] タグから始めます

抽出例:

File contains:
///*****///

[Verse 1 | playful | bright production]
You showed up late...

Extract as:
[Verse 1 | playful | bright production]
You showed up late...

4. モデルの選択(「### Model and Parameters」セクションから):

このセクションの先頭付近にあるモデル指定を探します。

**Model:** v5 (cleanest audio, most natural vocals - best for modern pop)

抽出ルール:

  • モデル:**Model:** の後から開き括弧の前までの値を抽出します
    • 想定される値:「v5」、「v4.5」、「v4.5+」、「v4」
    • 空白をトリミングします:「v5」
    • 指定がない場合は「v5」をデフォルトとして使用します

5. パラメーター(「### Model and Parameters」セクションから):

この見出しの下にある箇条書きを探します。

- Weirdness: 40%
- Style Influence: 60%
- Vocal Gender: Female
- Exclude Styles: Rock, Metal, Country

抽出ルール:

  • Weirdness:「%」の前にある数値を抽出します(例:「40%」から「40」)
    • 「30-40%」のような範囲の場合は、中間値(35)を使用します
    • スライダー値に変換します:そのまま使用します(0~100 のスケール)
  • Style Influence:「%」の前にある数値を抽出します(例:「60%」から「60」)
    • 「60-70%」のような範囲の場合は、中間値(65)を使用します
    • スライダー値に変換します:そのまま使用します(0~100 のスケール)
  • Vocal Gender:「:」の後の値を抽出し、空白をトリミングします
    • 想定される値:「Female」、「Male」、または未指定
    • Suno の性別ボタンに対応付けます
  • Exclude Styles:「:」の後にあるカンマ区切りのリストを抽出します
    • 空白をトリミングします:「Rock, Metal, Country」
    • カンマ区切りの文字列として保持します

柔軟な処理:

  • フィールドがない場合:妥当なデフォルト値を使用するか、省略します
  • YAML の形式が不正な場合:代替手段として正規表現による抽出を試みます
  • 歌詞セクションが空の場合:エラーとします(Suno には歌詞が必要です)
  • パラメーターがない場合:Suno のデフォルト値を使用します(スライダーは 50%)

使用するツール:

  • Read — prompt.md ファイルを読み取ります
  • 正規表現/文字列解析 — 構造化データを抽出します

検証:

  • タイトルが存在し、空でないこと
  • 歌詞が存在し、空でないこと
  • 構造化プロンプトが存在し、空でないこと
  • パラメーターが有効な範囲内(スライダーは 0~100)であること
Step 3: 解析したデータを表示する

ファイルから抽出した内容をユーザーに表示し、確認してもらいます。

形式:

📋 Parsed Prompt Data:

Title: "Fixer-Upper"
Project: "Pop Songs I Love"
Model: v5

Lyrics Preview (first 200 chars):
[Verse 1 | playful | bright production]
You showed up late with pizza stains
On that shirt you wore last Tuesday
Asked me if I'd do your laundry
While you played your gam...

(Note: Divider line removed for Suno upload)

Style/Genre (from structured prompt):
genre: "bubblegum pop, synth-pop, disco-influenced pop..."
[Full 5-line structured prompt shown]

Parameters:
- Weirdness: 40%
- Style Influence: 60%
- Vocal Gender: Female
- Exclude Styles: Rock, Metal, Country

Ready to upload to Suno!

目的:

  • ユーザーが解析結果の正しさを確認できます
  • 自動処理の開始前に問題を検出できます
  • プロセスへの信頼性が高まります
ステップ 4:Chrome セッションを初期化する

ブラウザー自動化環境をセットアップします。

手順:

  1. tabs_context_mcp を呼び出して現在のタブ状態を取得します
    • MCP タブグループが存在するか確認します
    • 利用可能なタブ ID を取得します
  2. MCP タブグループがない場合:createIfEmpty: true を指定して tabs_context_mcp を呼び出します
  3. 新しいタブを作成します:tabs_create_mcp
    • Suno の自動化には新しいタブを使用します
    • ユーザーの既存のタブへの干渉を防ぎます
  4. suno.com に移動します:navigate(url: "https://suno.com")
  5. ページの読み込みを待ちます:computer(action: wait, duration: 3)

エラー処理:

  • 移動に失敗した場合:1 回再試行し、その後、接続を確認するようユーザーに依頼します
  • タブの作成に失敗した場合:ユーザーに通知して終了します
  • すでに suno.com を表示している場合:新しいタブを作成するか、既存のタブを使うかユーザーに確認します

使用するツール:

  • tabs_context_mcp - タブのコンテキストを取得します
  • tabs_create_mcp - 新しいタブを作成します
  • navigate - URL に移動します
  • computer (wait) - ページの読み込みを待ちます
ステップ 5:作成画面に移動する

ホームページからカスタムモードの作成ページに移動します。

手順:

  1. 作成ページに移動します:

    - Use navigate tool: "https://suno.com/create"
    - OR use find + computer tools to click "Create" button
    - Wait 2 seconds for page load
    
  2. カスタムモードに切り替えます:

    - Use find tool: query="Custom tab button"
    - Use computer tool: left_click on the Custom button ref
    - Wait 1 second for mode switch
    
  3. カスタムモードが読み込まれたことを確認します:

    - Take screenshot for debugging (optional)
    - Use read_page to verify "Lyrics" field is present
    

見つける UI 要素:

  • 作成ボタン/リンク(参照 ID は異なるため、find ツールを使用します)
  • カスタムタブのボタン(「シンプル」モードとの切り替え)
  • 歌詞のテキストエリア(カスタムモードが読み込まれたことを確認します)

エラー処理:

  • 作成ページが読み込まれない場合:移動を 1 回再試行します
  • カスタムボタンが見つからない場合:スクリーンショットを撮り、ユーザーに通知します
  • タイムアウトした場合:Suno のステータスを確認するようユーザーに依頼します

使用するツール:

  • navigate - URL に直接移動します
  • find - 説明に基づいて UI 要素を特定します
  • computer - ボタンをクリックします
  • read_page - ページが正しく読み込まれたことを確認します
ステップ 6:フォームの各フィールドに入力する

解析したデータを各フォームフィールドに入力します。

フィールドごとの手順:

a. モデルセレクター(Create エリアの上部)

- Use find: query="v5" or "model selector dropdown"
- Location: Top of create area, near Simple/Custom tabs
- Current default: v5
- Click to open dropdown if not already showing target model
- Select the parsed model (v5, v4.5, v4.5+, or v4)

データ: ステップ 2 のモデル(例:「v5」) 注記: UI の調査に基づくと、モデルセレクターは上部に表示されています。 実装:

  • モデルが「v5」(デフォルト)の場合:すでに選択されているため、スキップしてもかまいません
  • モデルが異なる場合:ドロップダウンをクリックし、適切なオプションを選択します
  • find を使って特定のモデルオプションを見つけます
  • computer.left_click を使って選択します

b. 歌詞のテキストエリア

- Use find: query="lyrics textarea"
- Use form_input: ref=<lyrics_ref>, value=<full_lyrics_text>
- Or use computer.type if form_input fails

データ: ステップ 2 の歌詞全文(区切り行 ///*****/// は削除しますが、[Verse 1 | ...] のようなすべてのメタタグは保持します)

c. スタイルフィールド(構造化プロンプト)

- Use find: query="styles textbox" or "style of music"
- Use form_input: ref=<styles_ref>, value=<structured_prompt_block>

データ: 5 行の構造化プロンプトブロック全体

d. 曲名(任意)

- Use find: query="song title optional"
- Use form_input: ref=<title_ref>, value=<song_title>

データ: YAML フロントマターのタイトル

e. 詳細オプションを展開する

- Use find: query="Advanced Options"
- Use computer: left_click on Advanced Options button
- Wait 1 second for expansion

f. 除外するスタイル

- Use find: query="exclude styles"
- Use form_input: ref=<exclude_ref>, value=<exclude_styles_list>

データ: カンマ区切りの除外リスト(例:「Rock, Metal, Country」)

g. ボーカルの性別

- Use find: query="Female" (or "Male" based on parsed data)
- Use computer: left_click on the appropriate gender button

データ: パラメーターの「Female」または「Male」 注記: 指定がない場合は、このフィールドをスキップします(Suno のデフォルトを使用します)。

h. Weirdness スライダー

データ: 解析した Weirdness の値(0~100)

操作方法(座標ベースのドラッグ):

Suno のスライダーは標準 HTML 入力ではなく、カスタム React コンポーネント(ARIA ロールを持つ DIV)です。値を設定するには、座標ベースのマウスドラッグが必要です。

実装手順:

  1. スライダー要素を見つける:

    Use find: query="Weirdness slider"
    This returns a ref to the slider with role="slider"
    
  2. JavaScript で目標位置を計算する:

    const slider = document.querySelector('[role="slider"][aria-label*="Weirdness"]');
    const thumb = slider.children[slider.children.length - 1];
    const sliderRect = slider.getBoundingClientRect();
    const thumbRect = thumb.getBoundingClientRect();
    
    // Current thumb center position
    const startX = thumbRect.left + thumbRect.width / 2;
    const startY = thumbRect.top + thumbRect.height / 2;
    
    // Target position (e.g., 40% along slider width)
    const targetPercent = 40;  // Use parsed value
    const targetX = sliderRect.left + (sliderRect.width * (targetPercent / 100));
    const targetY = sliderRect.top + sliderRect.height / 2;
    

    javascript_tool を使って実行し、座標を返します

  3. つまみを目標位置までドラッグする:

    Use computer: left_click_drag
    - start_coordinate: [startX, startY] (from JavaScript)
    - coordinate: [targetX, targetY] (from JavaScript)
    

この方法が機能する理由:

  • マウスのドラッグイベントが完了すると React の状態が更新されます
  • 座標計算により、正確な位置に設定できます
  • getBoundingClientRect() により、正確なピクセル位置を取得できます
  • つまみ(最後の子要素)をドラッグすると、React の onChange ハンドラーが呼び出されます

i. Style Influence スライダー

データ: 解析した Style Influence の値(0~100)

操作方法(Weirdness と同じ):

同じ座標ベースのドラッグ方法を使用します。

  1. スライダーを見つける:

    Use find: query="Style Influence slider"
    
  2. JavaScript で座標を計算する:

    const slider = document.querySelector('[role="slider"][aria-label*="Style Influence"]');
    const thumb = slider.children[slider.children.length - 1];
    const sliderRect = slider.getBoundingClientRect();
    const thumbRect = thumb.getBoundingClientRect();
    
    const startX = thumbRect.left + thumbRect.width / 2;
    const startY = thumbRect.top + thumbRect.height / 2;
    
    const targetPercent = 60;  // Use parsed value
    const targetX = sliderRect.left + (sliderRect.width * (targetPercent / 100));
    const targetY = sliderRect.top + sliderRect.height / 2;
    
  3. 目標位置までドラッグする:

    Use computer: left_click_drag from [startX, startY] to [targetX, targetY]
    

両方のスライダーに関する重要な注意事項:

  • form_input は使用しないでください(「Element type 'DIV' is not a supported form input」エラーで失敗します)
  • ARIA 属性を直接設定しないでください(React の状態が更新されません)
  • キーボードイベントは使用しないでください(矢印キーでは状態が更新されません)
  • 計算した座標で left_click_drag を使用してください
  • 精度:通常は ±1% 以内で、許容範囲です

実装上の注意事項:

  • フィールドは並列ではなく、順番に入力します
  • UI の安定性を保つため、フィールドへの入力ごとに 0.5 秒待ちます
  • デバッグのため、重要なフィールドの入力後にスクリーンショットを撮影します
  • フィールドが見つからない場合は、警告を記録して続行します(任意フィールドの場合)
  • 必須フィールドへの入力に失敗した場合は、エラーを出して終了します

使用するツール:

  • find - フォーム要素を見つける
  • form_input - テキストフィールドに入力する
  • computer(left_click) - ボタンのクリックやスライダーの操作
  • computer(type) - テキスト入力の代替手段
  • computer(wait) - 安定性を保つための待機
ステップ 7:確認とレビュー

送信する前に、送信内容をユーザーに提示し、確認を求めます。

手順:

  1. 入力済みフォームのスクリーンショットを撮影する:

    - Use computer: screenshot action
    - Capture the entire Create form area
    - User can visually verify all fields
    
  2. 概要をユーザーに表示する:

    ✅ Suno Form Ready for Submission:
    
    Title: "Fixer-Upper"
    Lyrics: 140 lines (with meta tags preserved)
    Style: bubblegum pop, synth-pop, disco-influenced pop...
    Weirdness: 40%
    Style Influence: 60%
    Vocal Gender: Female
    Exclude Styles: Rock, Metal, Country
    
    [Screenshot of filled form displayed above]
    
  3. 確認を求める:

    Use AskUserQuestion:
    - Question: "Submit this song to Suno for generation?"
    - Options:
      * "Yes, create the song" (proceed to submit)
      * "No, cancel" (exit without submitting)
    - Wait for explicit user response
    
  4. 回答に応じて処理する:

    • 「Yes」の場合:ステップ 8 に進みます
    • 「No」の場合:ユーザーに伝え、問題なく終了します
      • メッセージ:「アップロードをキャンセルしました。フォームには入力済みですが、送信されていません。必要に応じて、ブラウザーで手動で内容を確認し、送信できます。」

重要な理由:

  • クレジットを消費する前に、ユーザーが最終決定できます
  • 送信前に解析エラーを発見できます
  • 画面上で確認することで、信頼性が高まります
  • 誤送信を防ぎます

使用するツール:

  • computer(screenshot) - フォームを撮影する
  • AskUserQuestion - 明示的な確認を得る
ステップ 8:送信と監視

フォームを送信し、曲の URL を監視します。

送信:

  1. Create ボタンを見つけます:

    - Use find: query="Create song button" or "Create button"
    - Expected ref like: ref_943 (based on exploration)
    
  2. Create ボタンをクリックします:

    - Use computer: left_click on Create button ref
    - Wait 3 seconds for submission processing
    
  3. 応答を監視します:

    - Page may redirect or update with song generation status
    - Look for success indicators or error messages
    - Wait up to 10 seconds for initial response
    

URL の抽出(生成が開始された場合):

  1. 曲の URL を確認します:

    - Suno typically generates 2 songs per creation
    - URLs may appear immediately or after processing
    - Format: https://suno.com/song/[song-id]
    
  2. URL を抽出します:

    - Use read_page to get page content
    - Look for song URLs in the recent creations area
    - OR check the workspace/library section
    
  3. 結果をユーザーに表示します:

    ✅ Song submitted to Suno!
    
    Generation started. Suno is creating your song(s).
    
    URLs (check these for your songs):
    - https://suno.com/song/abc123-def456-...
    - https://suno.com/song/xyz789-uvw012-...
    
    Note: Songs may take 1-2 minutes to generate.
    Visit the URLs above to listen once ready.
    

エラー処理:

  • 送信ボタンが見つからない場合:

    • スクリーンショットを撮影します
    • エラー:「Create ボタンが見つかりませんでした。Suno の UI が変更された可能性があります。」
    • 手動で完了できるよう、スクリーンショットをユーザーに表示することを提案します
  • Suno から検証エラーが返された場合:

    • ページからエラーメッセージを読み取ります
    • ユーザーに表示します:「Suno の検証エラー:[エラーメッセージ]」
    • 判別できる場合は修正方法を提案します(例:「歌詞が短すぎます」)
  • ネットワークエラー/タイムアウトの場合:

    • エラー:「送信がタイムアウトしました。Suno を手動で確認してください。」
    • フォームの状態を伝えます:「フォームへの入力と Create ボタンのクリックは完了しましたが、応答を受信できませんでした。」
  • クレジットが不足している場合:

    • クレジットに関するエラーメッセージが表示された場合
    • ユーザーに伝えます:「Suno のクレジットが不足しています。クレジットを追加購入してから再試行してください。」

URL 抽出のフォールバック:

URL を自動的に抽出できない場合:

  • ユーザーに伝えます:「曲は正常に送信されましたが、URL を自動的に抽出できませんでした。」
  • 次のように案内します:「新しく作成された曲を確認するには、https://suno.com/me の Suno ワークスペースを確認してください。」

使用するツール:

  • find - Create ボタンを見つけます
  • computer (left_click) - フォームを送信します
  • computer (wait) - 処理を待ちます
  • read_page - URL とエラーを抽出します
  • computer (screenshot) - デバッグに使用します
ステップ 9:完了

自動化を終了し、最終的な状態を伝えます。

成功した場合:

✅ Suno Upload Complete!

Song: "Fixer-Upper"
Status: Submitted and generating
URLs:
- [Song URL 1]
- [Song URL 2]

Songs typically generate in 1-2 minutes. Visit the URLs above to listen!

一部成功した場合:

✅ Suno Upload Submitted!

Song: "Fixer-Upper"
Status: Form submitted, URLs not yet available

Check your Suno workspace for the generated songs:
https://suno.com/me

失敗した場合:

❌ Suno Upload Failed

Error: [Specific error message]

The form was partially filled. You can:
1. Complete manually in the browser (tab is still open)
2. Try running /suno-upload again
3. Check the error message above for guidance

エラー処理のパターン

ファイルが見つからない場合:

  • 問題の内容を明確に伝えます
  • 修正方法を案内します(正しいディレクトリに移動する、先にプロンプトを作成する)
  • スタックトレースや専門用語は表示しません

解析エラー:

  • 解析に失敗したフィールドを示します
  • 必要に応じて問題のある内容を示します
  • prompt.md ファイルの修正を提案します
  • 重要でないフィールドの場合は、デフォルト値で続行することを提案します

Chrome の自動化に失敗した場合:

  • 失敗した時点でスクリーンショットを撮影します
  • スクリーンショットをユーザーに表示します(視覚的なデバッグ)
  • 実行しようとしていた内容を説明します
  • 一時的な障害の可能性が高い場合は、再試行を提案します

Suno の UI が変更された場合:

  • 妥当な回数試しても要素が見つからない場合
  • エラー:「Suno の UI が変更された可能性があります。このスキルの更新が必要です。」
  • フォールバックとして手動アップロードを推奨します
  • 問題を報告するようユーザーに依頼します

ネットワークの問題:

  • ローカルネットワークと Suno サーバーの問題を区別します
  • インターネット接続の確認を提案します
  • 再試行を提案します
  • タイムアウト値には十分な余裕を持たせます(送信には 10 秒以上)

使用例

例 1:単一のプロンプトファイル

User: "Upload this to Suno"
Skill:
- Finds single prompt.md in current directory
- Parses: "Fixer-Upper" pop song
- Displays parsed data
- Navigates to Suno, fills form
- Asks confirmation
- User: "Yes"
- Submits and returns URLs

例 2:複数のプロンプトファイル

User: "/suno-upload"
Skill:
- Finds 5 prompt.md files in subdirectories
- Lists all 5 with titles and projects
- Asks which to upload
- User selects #3
- Proceeds with upload workflow

例 3:suno-song-creator から呼び出す場合

User: Creates song with suno-song-creator
Skill (suno-song-creator):
- Generates prompt, saves to prompt.md
- Asks: "Upload to Suno now?"
- User: "Yes"
- Invokes suno-upload skill with file path
- suno-upload proceeds automatically

ツールのリファレンス

検出と解析:

  • Glob - prompt.md ファイルを見つけます
  • Read - ファイルの内容を読み取ります
  • AskUserQuestion - ファイルの選択と確認を行います

Chrome の自動化:

  • tabs_context_mcp - タブの状態を取得します
  • tabs_create_mcp - 新しいタブを作成します
  • navigate - URL に移動します
  • computer (screenshot) - スクリーンショットを撮影します
  • computer (wait) - 安定化のために待機します
  • computer (left_click) - ボタンをクリックします
  • computer (type) - テキストを入力します(フォールバック)
  • find - 説明に基づいて UI 要素を見つけます
  • form_input - フォームフィールドに入力します
  • read_page - ページ構造を取得します

成功基準

✅ prompt.md ファイルを正しく見つけて解析する ✅ データを失うことなくすべてのフィールドを抽出する ✅ 歌詞のメタタグと書式を保持する ✅ Suno Create インターフェースに移動する ✅ すべてのフォームフィールドに正確に入力する ✅ スライダーや特殊な入力を処理する ✅ 送信前に確認を表示する ✅ 正常に送信し、URL を抽出する ✅ 明確なメッセージでエラーを適切に処理する ✅ 他のスキルから呼び出された場合も動作する

既知の制限事項

スライダーの精度:

  • 座標ベースのドラッグ操作では、±1%以内の精度を実現します
  • この誤差はごくわずかで、クリエイティブなパラメーターには許容範囲です
  • ブラウザーの描画やビューポートサイズは計算に影響しません(getBoundingClientRect を使用)

URL の抽出:

  • Suno の生成処理は非同期です
  • URL がすぐに表示されない場合があります
  • フォールバック:ユーザーをワークスペースに誘導します

UI の変更:

  • Suno が UI を更新する場合があります
  • UI が変更された場合、スキルの更新が必要になることがあります
  • 参照セレクターが動作しなくなる可能性があります

クレジット要件:

  • スキルは事前にクレジット残高を確認しません
  • 送信を成功させるには、ユーザーにクレジットが必要です
  • エラーは送信時にのみ表示されます

メンテナンスに関する注意事項

Suno の UI が変更された場合は、次のセクションを更新してください:

  1. ステップ 5:ナビゲーション経路とボタン参照
  2. ステップ 6:フォームフィールドのセレクターと名前
  3. ステップ 8:作成ボタンのセレクター
  4. URL 抽出パターン

解析の精度を保つため、実際の prompt.md ファイルを使って定期的にテストしてください。


バージョン: 2.0.0 - 完全な自動化を実現 最終更新日: 2026-01-01 依存関係: Chrome MCP サーバー、クレジットのある Suno アカウント

v2.0 の主な改善点:

  • ✅ 座標ベースのドラッグ操作によるスライダーの自動化が完全に動作
  • ✅ 人による介入が一切不要な、エンドツーエンドの完全な自動化
  • ✅ マウスイベントによる、信頼性の高い React コンポーネント操作
  • ✅ 楽曲生成の成功(「Fixer-Upper」のテストケース)で検証済み

コメント