Skip to main content
Glama

White Hat Thumbnails — MCPサーバー

AIアシスタントがチャットウィンドウからRobloxサムネイルを最初から最後まで運用できるようにします。パフォーマンスの確認、新規生成、公開、公開中の選択、自動ローテーション、Discordチームとの連携まで。

"how are the thumbnails doing on +1 dumpling escape?"
"what am I actually allowed to do on magnet simulator?"
"generate three variants from this reference and put the best one live"
"drop the worst performer and promote the next one from the queue"
"go notify the thumbnail team on +1 dumpling escape walls to pay this link,
 with two options approve and disapprove"

すべてはあなた自身のアカウントに対して動作します。キーはサイト上で既にアクセス権を持つプロジェクトにのみ到達でき、保存された認証情報を読み戻すことは決してできません。認証情報があるかどうかと、それが機能するかどうかのみを伝えます。


セットアップ

1. キーを取得する

https://whitehatthumbnails.vercel.app にサインインし、Keys を開いて作成します。キーは一度だけ表示されるので、その場でコピーしてください。

2. インストール

git clone https://github.com/Haydebug/whitehat-thumbnails-mcp.git
cd whitehat-thumbnails-mcp
npm install
npm run build

3. アシスタントに設定する

claude mcp add whitehat-thumbnails \
  --env WHT_API_KEY=wht_your_key_here \
  -- node /absolute/path/to/whitehat-thumbnails-mcp/dist/index.js

claude_desktop_config.json に追加します:

{
  "mcpServers": {
    "whitehat-thumbnails": {
      "command": "node",
      "args": ["/absolute/path/to/whitehat-thumbnails-mcp/dist/index.js"],
      "env": { "WHT_API_KEY": "wht_your_key_here" }
    }
  }
}

設定ファイルの場所は次のとおりです:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

その後、Claude Desktopを再起動します。

絶対パスを使用してください。アシスタントはこのフォルダからは実行されません。


Related MCP server: GPT Image MCP Server

ツール

できることの把握

ツール

説明

check_permissions

1つのゲームを調査し、どのツールが機能して、なぜ他が機能しないのかを正確に報告します

set_project_credentials

ゲームにOpen CloudキーやRoblox Cookieを保存します。レポートが求める2つの情報です

プロジェクト

ツール

説明

list_projects

あなたのゲームとユニバースIDの一覧

get_game_info

リンク、プレイスID、ユニバースIDでRobloxゲームを検索します。あなたのものである必要はありません

search_roblox_games

名前やキーワードでRobloxを検索します

add_project

ゲームをあなたのアカウントに追加します。編集できるRobloxアカウントに固定されます

list_collaborators / invite_collaborator

プロジェクトにアクセスできる他のユーザーと、一度きりの招待リンク

サムネイル

ツール

説明

get_thumbnails

QPTR、インプレッション、再生回数、平均再生時間を含む、公開中・非公開のサムネイル

set_active_thumbnails

Robloxが実際に表示するサムネイルを選択します。置き換え、追加、削除が可能です

upload_thumbnail

ローカル画像をゲームサムネイルとして公開します

delete_thumbnail

ゲームからサムネイルを完全に削除します

get_qptr_trend

7日、14日、30日間の日次クリック率とインプレッション

get_thumbnail_momentum

上昇中、下降中、横ばいの個々のサムネイルを確認します

export_thumbnail_report

QPTR順に並べた全セットをPDFとしてディスクに書き出します

サムネイルの作成

ツール

説明

generate_thumbnail

プロンプトと参照画像から画像を生成し、ディスクに書き出します。オプションで公開も可能です

list_generations

ゲーム用に生成されたすべての画像と、それぞれのプロンプトを表示します

upload_generation

再アップロードせずに、その履歴から画像を公開します

list_style_profiles

生成で参照できる名前付きスタイルガイドの一覧

ローテーション

ツール

説明

get_auto_swap

ゲームが自動ローテーションするか、そのルール、最近の実行結果を表示します

configure_auto_swap

ローテーションのオン/オフとしきい値の設定

run_auto_swap

スケジュールを待たずに、今すぐローテーションを実行します

get_queue

次に公開される予定のものを表示します

queue_thumbnail / unqueue_thumbnail

キューに追加・削除します

Discord

ツール

説明

list_discord_roles

通知可能なロールの一覧

notify_team

ロールにDMを送信します。画像と2つの回答ボタン付きにできます

get_notification_history

送信済みの通知と、ユーザーごとの回答、支払い状況を表示します

create_ticket

チケットを開きます。ゲームのチャンネルに承認/拒否ボタン付きの埋め込みを投稿します

list_tickets

ゲームのチケットのうち、未回答または未払いのものを表示します

list_artist_channels

スタジオサーバー内のテキストチャンネルとIDの一覧

create_channel / link_channel

チャンネルを作成し、ゲームのチケットをそのチャンネルに向けます

get_channel_messages

チャンネルを読み取ります。作成者、時刻、テキスト、添付URLなど

send_channel_message

ボットとしてチャンネルに投稿します。プレーンテキストまたは埋め込み、画像付きも可能です

ゲーム名は曖昧に一致するため、「dumpling escape」と入力すると「+1 Dumpling SMASH Walls」が見つかります。名前が曖昧な場合は、推測せずに候補をリストアップします。

何ができるかの把握

Robloxゲームへの権限は、単一の権限ではありません。.ROBLOSECURITY Cookie(アップロード、削除、公開セットの入れ替え)、Open Cloudキー(分析)、Robloxがゲームに複数のサムネイルがある場合にのみ作成するパーソナライズ設定(入れ替え可能なライブセットがあるかどうか)、Discordボット(チケットと通知)に分散しています。どれかが欠けている可能性があり、その場合のエラーはどれも同じように見えます。

check_permissions はこれらすべてを一度に調査し、2つのリストで回答します:

MAGNET SIMULATOR LEGENDS — universeId 7592711723
You own this project.
Open Cloud key: stored (••••YkpR), encrypted at rest
Roblox account: WH_AIbot (the shared default account)

WORKS (6)
  get_thumbnails
      2 active, 124 inactive
  analytics (QPTR, impressions, playtime)
      figures came back for 16 of 126 thumbnails via the Open Cloud key ••••YkpR
  set_active_thumbnails
      a personalization config was resolved, so the live set can be changed
  …

DOES NOT WORK (2)
  upload_thumbnail, delete_thumbnail
      WH_AIbot (the shared default account) is signed in but Roblox refuses it
      edit access to this game
      Fix: give that account permission on the experience, or store a cookie for
      one that already has it with set_project_credentials.
  ticket posting to a channel
      this game is not linked to a Discord channel, so tickets only go out as DMs
      Fix: call create_channel with this game, or link_channel with an id.

「いいえ」には理由と修正方法が含まれます。「いいえ」だけでは、また同じループに陥るからです。重要な書き込みの前、または失敗した後に実行して、どの認証情報が欠けていたかを確認してください。

要求される2つの認証情報は、set_project_credentials で設定します。これらは暗号化されて保存され、読み戻されることはありません。レポートは、キーが存在するかどうかと、機能するかどうかのみを伝えることができます。

公開するものの選択

サムネイルをアップロードしても、誰にも表示されません。Robloxはゲームがこれまでに持っていたすべての画像を保持し、選択されたサブセットを配信します。set_active_thumbnails はそのサブセットを変更するもので、即座に反映されます。

set_active_thumbnails(game: "magnet simulator", ids: ["108286870859415"], mode: "add")
set_active_thumbnails(game: "magnet simulator", ids: ["112922133257215"], mode: "remove")

addremove は既に公開されているものを調整するもので、通常はこちらを使用します。replace はリストされたセットだけを公開し、他はすべて非公開にします。add のつもりで誤って実行しがちです。IDは、レポートの先頭にあるアセットIDまたは内部サムネイルIDのどちらでも指定できます。

ここで何かを削除することはありません。非アクティブ化されたサムネイルは履歴を保持し、復元できます。delete_thumbnail だけは元に戻せず、ゲームの最後の公開中画像を削除することは拒否されます。

生成

generate_thumbnail は、サイトのジェネレーターページと同じパイプラインを実行します。プロンプトはスタイルガイドに基づいて書き直され、1つ以上の参照画像に対してレンダリングされます。結果は、ゲームにアップロードされる前に実際に確認できるように、ローカルマシンのファイルに書き込まれます。

generate_thumbnail(
  game: "magnet simulator",
  prompt: "character yanking a giant magnet out of a pile of loot",
  referencePaths: ["ref.png"],
  profile: "Simulator"
)

参照はローカルパスまたは公開URLを指定できます。モデルはゼロからではなく画像から作業するため、少なくとも1つは必須です。profile は、list_style_profiles が一覧表示するスタイルガイドの1つを選択します。画像がすでに承認されている場合にのみ publish: true を渡してください。それ以外の場合は、生成してファイルを確認してから upload_thumbnail を実行してください。

自動ローテーション

自動スワップは、QPTRが最も低い公開中サムネイルをドロップし、キューから置き換えを昇格させます。

queue_thumbnail(game: "magnet simulator", id: "108286870859415")
configure_auto_swap(game: "magnet simulator", enabled: true, dropCount: 1,
                    frequencyMinutes: 1440, qptrThreshold: 2)
run_auto_swap(game: "magnet simulator")

qptrThreshold はパーセンテージです。2 は2%を意味します。キューが空のゲームは実行しても何も起こらないため、有効にする前に get_queue で確認してください。get_auto_swap は、ルール、スケジュール、最近の実行で実際に何が変わったかを表示します。ローテーションがオフになっている場合は、その理由が修正すべき点です。

回答ボタン

notify_team は2つのボタンを添付して、ユーザーが回答できるようにします:

notify_team(
  game: "+1 dumpling escape",
  role: "Thumbnail Team",
  message: "Pay here please: https://…",
  askForAnswer: true,
  approveLabel: "Paid",
  declineLabel: "Cancel"
)

クリックした人は、その決定がそのロールを持つ全員にDMで送信されます。各ユーザーは1回だけ回答できます。

get_notification_history は、各回答をユーザーのDiscord IDとクリックした時刻とともに行ごとに報告するため、自動化はカウントではなく、特定の2人が承認したことを条件にできます:

2026-08-20T03:42:31.704Z — Hayden S → "Thumbnail Team" (2/2 delivered) · ticket clx…
  Dumpling concept art from lamy
  payment: $10 · https://paypal.me/asianlamy · PAID by Bug at 2026-08-20T03:45:02.118Z
  answers:
    Bug (4207…) = Paid at 2026-08-20T03:45:02.118Z
    ang (9931…) = Deny at 2026-08-20T03:46:44.500Z

委託作業の支払い

paymentAmount を渡すと、チケットは請求書になります。DMには金額と支払いボタンが表示され、ボタンはデフォルトで Paid / Cancel になり、Paidをクリックするとチケットが支払い済みとしてマークされます:

notify_team(
  game: "+1 dumpling escape",
  role: "Thumbnail Team",
  message: "Dumpling concept art from lamy",
  paymentAmount: 10,
  paypalLink: "paypal.me/asianlamy"
)

paid はラッチされます。誰かが支払い済みとしてマークした後に拒否しても、回答としては記録されますが、チケットの支払い済みは解除されません。送金されたお金をボタンで取り消すことはできません。

チケット

チケットは、チーム通知と同じレコードです。同じテーブル、同じユーザーごとの回答、同じ支払い済みフラグを持ち、タイトル、タイプ、配置されるチャンネルがあります。3つの方法で開くことができ、その後は区別できません:

  • Discordの /ticket create(任意のチャンネルまたはボットとのDMから)

  • 自動化用の create_ticket

  • サイトの通知ツール

create_ticket(
  game: "+1 dumpling escape",
  type: "concept_review",
  title: "Dumpling wall smash — first pass",
  description: "Three angles from lamy. Picking one for the A/B.",
  imagePaths: ["pass1.png", "pass2.png"]
)

タイプは concept_reviewfinal_reviewpaymentstatus です。status 以外には承認/拒否ボタンが付きます。支払いチケットには、金額とタップ可能なPayPalリンクに加えて、Paid / Cancel ボタンが表示され、最初にPaidをクリックすると支払い済みフラグが設定されます。回答は、DMのボタン回答と同様に get_notification_history に記録され、チャンネルの埋め込みはユーザーが回答するたびに書き換えられ、全員が見ているメッセージに現在の状態が表示されます。

各ゲームのチケットは、Discordから一度設定された1つのチャンネルに投稿されます:

/ticket config game:<game> channel:#lammyta

これがない場合でも、チケットは作成され、読み取り可能です。ただし、表示される場所がないだけです。ツールは配信されたふりをするのではなく、その旨を伝えます。

アーティストとの連携

各アーティストには、スタジオサーバーに独自のテキストチャンネルがあります。3つのチャンネルツールは、ライブフィードではなくポーリングループです。前回受け取った lastMessageIdsince に設定して読み取ると、それ以降に届いたものだけが表示されます。

list_artist_channels()                              → #lammyta — id 1539…
get_channel_messages(channelId: "1539…", since: "…") → replies + art
send_channel_message(channelId: "1539…", text: "…", imagePaths: ["brief.png"])

Discordの添付URLは署名されており、約1日で期限切れになるため、アートワークは後でリンクを保存するのではなく、最初に見たときにダウンロードしてください。

埋め込み

チャンネルの投稿は、テキスト行ではなく埋め込み(embed)にできます。通知 DM に使われる、側面に色付きバーのあるカードです。text の代わりに、あるいは text に加えて、embed を渡してください:

send_channel_message(
  channelId: "1539…",
  embed: {
    author: "White Hat Thumbnails · MCP",
    title: "+1 Dumpling SMASH Walls",
    url: "https://whitehatthumbnails.vercel.app/projects/10307670587",
    color: "#facc15",
    description: "Five thumbnails live. **0.41% QPTR** on 1.95M impressions.",
    fields: [
      { name: "Top QPTR", value: "0.41%", inline: true },
      { name: "Impressions", value: "1,947,283", inline: true }
    ],
    thumbnailUrl: "https://tr.rbxcdn.com/…",
    imageUrl: "https://tr.rbxcdn.com/…",
    footer: "Sent by the MCP",
    buttons: [{ label: "View project", url: "https://whitehatthumbnails.vercel.app/…" }]
  }
)

この形は意図的にフラットになっています。Discord はフッター、画像、すべてのボタンをラッパーの内側にネストしており、メッセージを送信するうえではその構造を理解する必要はありません。フィールドは、Discord が強制する長さに切り詰めて送信されます。フィールドが 1 つ大きすぎるだけで、メッセージ全体が拒否されるためです。

このボタンはリンクを開くだけです。質問をして回答を記録するボタンは、回答を書き留める場所を持つ notify_teamcreate_ticket に属します。

ボットがチャンネルを見るには、そのチャンネルでチャンネルの表示メッセージ履歴の読み取りメッセージの送信ファイルの添付が必要です。次のように招待します:

https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot%20applications.commands&permissions=117760

どちらのスコープも重要です。bot はボットをサーバーに入れ、applications.commands/ticket をそのサーバーに表示させます。2 番目のスコープなしで招待されたボットは、DM とチャンネルメッセージでは問題なく動作しますが、スラッシュコマンドは黙って表示されないままです。


設定

変数

必須

説明

WHT_API_KEY

必須

Keys ページで取得する自分のキー

WHT_BASE_URL

任意

サイトの自分のコピーを動かしている場合のみ


注記

Discord の DM は拒否されることがあり、それはバグではありません。 Discord は、ボットをブロックしているユーザー、サーバーメンバーからの DM を無効にしているユーザー、またはボットと共通のサーバーを持つユーザーが当たらないこと、ボットからのメッセージを許可しません。notify_team は、成功数としてまとめるのではなく、ユーザーごとにどのような状況が発生したかを報告します。

Roblox はアップロードを非同期に審査します。 upload_thumbnailPending を返すのは、受け付けられ、審査中にあることを意味します。通常は数分です。

一部のゲームは読み取り専用です。 アップロードと入れ替えには、そのエクスペリエンスへの編集権限を持つ Roblox アカウントが必要で、Open Cloud キーはどちらもできません。サイトには各プロジェクトが Full Edit、View Only、Public View のいずれかで表示され、ツールは何かが利用できないときに沈黙して失敗するのではなく、その旨を伝えます。check_permissions は、その中のどのケースかを最も早く調べられる方法です。

プレイヤーが実際に見るものを変えるツールが 3 つあり、それらは戻った瞬間に変更します:set_active_thumbnailsrun_auto_swap、および enabled: true を指定した configure_auto_swap。一方、アップロードと生成は変更しません。アップロードされたサムネイルは、何かが非表示にするまでアクティブになりません。

元にできないツールが 1 つあります。 delete_thumbnail は、画像を分析履歴と一緒に Roblox から削除します。set_active_thumbnails(mode: "remove") による非アクティブ化は元に戻せるバージョンであり、ほぼ常に本来の意図です。

check_permissions は生成まで調べません。 誠実な検査方法は画像を作成することだけですが、それには費用がかかり、記録が残ります。generate_thumbnail が失敗する場合、最初の呼び出しで、その理由と共に失敗します。

ライセンス

MIT

Install Server
F
license - not found
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Haydebug/whitehat-thumbnails-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server