White Hat Thumbnails
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 build3. アシスタントに設定する
claude mcp add whitehat-thumbnails \
--env WHT_API_KEY=wht_your_key_here \
-- node /absolute/path/to/whitehat-thumbnails-mcp/dist/index.jsclaude_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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
その後、Claude Desktopを再起動します。
絶対パスを使用してください。アシスタントはこのフォルダからは実行されません。
Related MCP server: GPT Image MCP Server
ツール
できることの把握
ツール | 説明 |
| 1つのゲームを調査し、どのツールが機能して、なぜ他が機能しないのかを正確に報告します |
| ゲームにOpen CloudキーやRoblox Cookieを保存します。レポートが求める2つの情報です |
プロジェクト
ツール | 説明 |
| あなたのゲームとユニバースIDの一覧 |
| リンク、プレイスID、ユニバースIDでRobloxゲームを検索します。あなたのものである必要はありません |
| 名前やキーワードでRobloxを検索します |
| ゲームをあなたのアカウントに追加します。編集できるRobloxアカウントに固定されます |
| プロジェクトにアクセスできる他のユーザーと、一度きりの招待リンク |
サムネイル
ツール | 説明 |
| QPTR、インプレッション、再生回数、平均再生時間を含む、公開中・非公開のサムネイル |
| Robloxが実際に表示するサムネイルを選択します。置き換え、追加、削除が可能です |
| ローカル画像をゲームサムネイルとして公開します |
| ゲームからサムネイルを完全に削除します |
| 7日、14日、30日間の日次クリック率とインプレッション |
| 上昇中、下降中、横ばいの個々のサムネイルを確認します |
| QPTR順に並べた全セットをPDFとしてディスクに書き出します |
サムネイルの作成
ツール | 説明 |
| プロンプトと参照画像から画像を生成し、ディスクに書き出します。オプションで公開も可能です |
| ゲーム用に生成されたすべての画像と、それぞれのプロンプトを表示します |
| 再アップロードせずに、その履歴から画像を公開します |
| 生成で参照できる名前付きスタイルガイドの一覧 |
ローテーション
ツール | 説明 |
| ゲームが自動ローテーションするか、そのルール、最近の実行結果を表示します |
| ローテーションのオン/オフとしきい値の設定 |
| スケジュールを待たずに、今すぐローテーションを実行します |
| 次に公開される予定のものを表示します |
| キューに追加・削除します |
Discord
ツール | 説明 |
| 通知可能なロールの一覧 |
| ロールにDMを送信します。画像と2つの回答ボタン付きにできます |
| 送信済みの通知と、ユーザーごとの回答、支払い状況を表示します |
| チケットを開きます。ゲームのチャンネルに承認/拒否ボタン付きの埋め込みを投稿します |
| ゲームのチケットのうち、未回答または未払いのものを表示します |
| スタジオサーバー内のテキストチャンネルとIDの一覧 |
| チャンネルを作成し、ゲームのチケットをそのチャンネルに向けます |
| チャンネルを読み取ります。作成者、時刻、テキスト、添付URLなど |
| ボットとしてチャンネルに投稿します。プレーンテキストまたは埋め込み、画像付きも可能です |
ゲーム名は曖昧に一致するため、「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")add と remove は既に公開されているものを調整するもので、通常はこちらを使用します。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_review、final_review、payment、status です。status 以外には承認/拒否ボタンが付きます。支払いチケットには、金額とタップ可能なPayPalリンクに加えて、Paid / Cancel ボタンが表示され、最初にPaidをクリックすると支払い済みフラグが設定されます。回答は、DMのボタン回答と同様に get_notification_history に記録され、チャンネルの埋め込みはユーザーが回答するたびに書き換えられ、全員が見ているメッセージに現在の状態が表示されます。
各ゲームのチケットは、Discordから一度設定された1つのチャンネルに投稿されます:
/ticket config game:<game> channel:#lammytaこれがない場合でも、チケットは作成され、読み取り可能です。ただし、表示される場所がないだけです。ツールは配信されたふりをするのではなく、その旨を伝えます。
アーティストとの連携
各アーティストには、スタジオサーバーに独自のテキストチャンネルがあります。3つのチャンネルツールは、ライブフィードではなくポーリングループです。前回受け取った lastMessageId を since に設定して読み取ると、それ以降に届いたものだけが表示されます。
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_team や create_ticket に属します。
ボットがチャンネルを見るには、そのチャンネルでチャンネルの表示、メッセージ履歴の読み取り、メッセージの送信、ファイルの添付が必要です。次のように招待します:
https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot%20applications.commands&permissions=117760どちらのスコープも重要です。bot はボットをサーバーに入れ、applications.commands は /ticket をそのサーバーに表示させます。2 番目のスコープなしで招待されたボットは、DM とチャンネルメッセージでは問題なく動作しますが、スラッシュコマンドは黙って表示されないままです。
設定
変数 | 必須 | 説明 |
| 必須 | Keys ページで取得する自分のキー |
| 任意 | サイトの自分のコピーを動かしている場合のみ |
注記
Discord の DM は拒否されることがあり、それはバグではありません。 Discord は、ボットをブロックしているユーザー、サーバーメンバーからの DM を無効にしているユーザー、またはボットと共通のサーバーを持つユーザーが当たらないこと、ボットからのメッセージを許可しません。notify_team は、成功数としてまとめるのではなく、ユーザーごとにどのような状況が発生したかを報告します。
Roblox はアップロードを非同期に審査します。 upload_thumbnail が Pending を返すのは、受け付けられ、審査中にあることを意味します。通常は数分です。
一部のゲームは読み取り専用です。 アップロードと入れ替えには、そのエクスペリエンスへの編集権限を持つ Roblox アカウントが必要で、Open Cloud キーはどちらもできません。サイトには各プロジェクトが Full Edit、View Only、Public View のいずれかで表示され、ツールは何かが利用できないときに沈黙して失敗するのではなく、その旨を伝えます。check_permissions は、その中のどのケースかを最も早く調べられる方法です。
プレイヤーが実際に見るものを変えるツールが 3 つあり、それらは戻った瞬間に変更します:set_active_thumbnails、run_auto_swap、および enabled: true を指定した configure_auto_swap。一方、アップロードと生成は変更しません。アップロードされたサムネイルは、何かが非表示にするまでアクティブになりません。
元にできないツールが 1 つあります。 delete_thumbnail は、画像を分析履歴と一緒に Roblox から削除します。set_active_thumbnails(mode: "remove") による非アクティブ化は元に戻せるバージョンであり、ほぼ常に本来の意図です。
check_permissions は生成まで調べません。 誠実な検査方法は画像を作成することだけですが、それには費用がかかり、記録が残ります。generate_thumbnail が失敗する場合、最初の呼び出しで、その理由と共に失敗します。
ライセンス
MIT
Maintenance
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
- AlicenseAqualityBmaintenanceMCP server for YouTube creator-ops — video metadata, comments, playlists, channel analytics, plus a ComfyUI bridge for AI thumbnail generation.15431MIT
- AlicenseAqualityDmaintenanceAn MCP server for image generation, editing, and analysis using OpenAI's gpt-image-1 model, with specialized templates for YouTube thumbnails, blog headers, social media, and more.7MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that lets AI assistants manage an art catalogue — find paintings, post to social media, upload to galleries, schedule posts, and update metadata.
- AlicenseNot gradedqualityAmaintenanceAn MCP server that gives an AI coding agent real control of Roblox Studio and Roblox Open Cloud, with a test-and-security layer no other Studio MCP has.223MIT
Related MCP Connectors
MCP server for NanoBanana AI image generation and editing
MCP server for Flux AI image generation
An MCP server that integrates with Discord to provide AI-powered features.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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