White Hat Thumbnails
White Hat Thumbnails — MCP-Server
Lässt einen KI-Assistenten Ihre Roblox-Thumbnails von einem Chatfenster aus Ende-zu-Ende verwalten: lesen, wie sie abschneiden, neue generieren, veröffentlichen, auswählen, welche live sind, sie automatisch rotieren und mit Ihrem Discord-Team darüber sprechen.
"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"Alles läuft gegen Ihr eigenes Konto. Ein Schlüssel erreicht nur die Projekte, auf die Sie auf der Website bereits Zugriff haben, und er kann niemals eine gespeicherte Anmeldeinformation zurücklesen – er kann nur sagen, ob eine vorhanden ist und ob sie funktioniert.
Einrichtung
1. Einen Schlüssel erhalten
Melden Sie sich unter https://whitehatthumbnails.vercel.app an, öffnen Sie Keys und erstellen Sie einen. Er wird nur einmal angezeigt – kopieren Sie ihn dann.
2. Installieren
git clone https://github.com/Haydebug/whitehat-thumbnails-mcp.git
cd whitehat-thumbnails-mcp
npm install
npm run build3. Richten Sie Ihren Assistenten darauf aus
claude mcp add whitehat-thumbnails \
--env WHT_API_KEY=wht_your_key_here \
-- node /absolute/path/to/whitehat-thumbnails-mcp/dist/index.jsFügen Sie zu claude_desktop_config.json hinzu:
{
"mcpServers": {
"whitehat-thumbnails": {
"command": "node",
"args": ["/absolute/path/to/whitehat-thumbnails-mcp/dist/index.js"],
"env": { "WHT_API_KEY": "wht_your_key_here" }
}
}
}Die Konfigurationsdatei befindet sich unter:
macOS
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows
%APPDATA%\Claude\claude_desktop_config.json
Starten Sie Claude Desktop danach neu.
Verwenden Sie einen absoluten Pfad – der Assistent wird nicht aus diesem Ordner ausgeführt.
Related MCP server: GPT Image MCP Server
Werkzeuge
Wissen, was Sie tun können
Werkzeug | Was es tut |
| Testet ein Spiel und berichtet genau, welche Werkzeuge darauf funktionieren und warum die anderen nicht. |
| Speichert einen Open-Cloud-Schlüssel und/oder ein Roblox-Cookie für ein Spiel – die beiden Dinge, die der Bericht anfordert. |
Projekte
Werkzeug | Was es tut |
| Ihre Spiele und ihre Universe-IDs |
| Jedes Roblox-Spiel per Link, Place-ID oder Universe-ID nachschlagen – es muss nicht Ihres sein. |
| Roblox nach Name oder Stichwort durchsuchen. |
| Ein Spiel zu Ihrem Konto hinzufügen, das an das Roblox-Konto gebunden ist, das es bearbeiten kann. |
| Wer sonst noch Zugriff auf ein Projekt hat, und ein einmaliger Einladungslink. |
Thumbnails
Werkzeug | Was es tut |
| Live- und inaktive Thumbnails mit QPTR, Impressionen, qualifizierten Spielen, durchschnittlicher Spielzeit. |
| Wählen Sie aus, welche Thumbnails Roblox tatsächlich anzeigt – ersetzen, hinzufügen oder entfernen. |
| Veröffentlichen Sie ein lokales Bild als Spiel-Thumbnail. |
| Entfernen Sie ein Thumbnail dauerhaft aus dem Spiel. |
| Tägliche Klickrate und Impressionen über 7, 14 oder 30 Tage. |
| Welche einzelnen Thumbnails steigen, fallen oder stagnieren. |
| Die gesamte Sammlung, nach QPTR geordnet, als PDF auf die Festplatte geschrieben. |
Thumbnails erstellen
Werkzeug | Was es tut |
| Generieren Sie ein Bild aus einem Prompt und Referenzen, schreiben Sie es auf die Festplatte, optional veröffentlichen Sie es. |
| Alles, was für ein Spiel generiert wurde, mit den Prompts hinter jedem einzelnen. |
| Veröffentlichen Sie etwas aus diesem Verlauf, ohne es erneut hochzuladen. |
| Die benannten Stilvorlagen, auf die die Generierung ausgerichtet werden kann. |
Rotation
Werkzeug | Was es tut |
| Ob ein Spiel sich selbst rotiert, nach welchen Regeln und was letzte Läufe bewirkt haben. |
| Rotation ein- oder ausschalten und Schwellenwerte festlegen. |
| Jetzt eine Rotation auslösen, ohne auf den Zeitplan zu warten. |
| Was als Nächstes live gehen soll. |
| Zur Warteschlange hinzufügen oder daraus entfernen. |
Discord
Werkzeug | Was es tut |
| Rollen, die benachrichtigt werden können. |
| Eine Rolle per DM benachrichtigen, optional mit Bildern und zwei Antwortschaltflächen. |
| Was bereits gesendet wurde, mit Antworten pro Person und Zahlungsstatus. |
| Ein Ticket eröffnen – postet ein Embed mit Genehmigen/Ablehnen im Kanal des Spiels. |
| Nur die Tickets eines Spiels, mit dem, was noch unbeantwortet oder unbezahlt ist. |
| Textkanäle im Studio-Server, mit IDs. |
| Einen Kanal erstellen und die Tickets eines Spiels darauf ausrichten. |
| Einen Kanal lesen – Autor, Zeit, Text, Anhang-URLs. |
| Im Kanal als Bot posten, als Klartext oder Embed, optional mit Bildern. |
Spielnamen werden locker abgeglichen, sodass „dumpling escape“ „+1 Dumpling SMASH Walls“ findet. Wenn ein Name mehrdeutig ist, sagt das Werkzeug dies und listet die Kandidaten auf, anstatt zu raten.
Wissen, was Sie tun dürfen
Die Berechtigung für ein Roblox-Spiel ist nicht eine einzelne Erlaubnis. Sie verteilt sich auf ein .ROBLOSECURITY-Cookie (Uploads, Löschungen, Austausch des Live-Sets), einen Open-Cloud-Schlüssel (Analysen), eine Personalisierungskonfiguration, die Roblox nur erstellt, sobald ein Spiel mehrere Thumbnails hat (ob es überhaupt ein austauschbares Live-Set gibt), und einen Discord-Bot (Tickets und Benachrichtigungen). Jede davon kann einzeln fehlen, und der Fehler, den Sie sehen, ist in beiden Fällen dasselbe Achselzucken.
check_permissions testet alle gleichzeitig und antwortet in zwei Listen:
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.Jedes „Nein“ enthält den Grund und die Lösung, denn ein „Nein“ allein schickt Sie wieder in dieselbe Schleife. Führen Sie es vor einem Schreibvorgang aus, der Ihnen wichtig ist, oder nachdem einer fehlgeschlagen ist und nicht offensichtlich ist, welche Anmeldeinformation fehlte.
Die beiden Anmeldeinformationen, die es anfordert, werden mit set_project_credentials eingegeben. Sie werden verschlüsselt gespeichert und nie zurückgelesen – der Bericht kann sagen, dass ein Schlüssel vorhanden ist und ob er funktioniert, und nichts weiter.
Auswählen, was live ist
Das Hochladen eines Thumbnails zeigt es niemandem. Roblox behält jedes Bild, das ein Spiel je hatte, und liefert eine ausgewählte Teilmenge; set_active_thumbnails ändert diese Teilmenge und wirkt sofort.
set_active_thumbnails(game: "magnet simulator", ids: ["108286870859415"], mode: "add")
set_active_thumbnails(game: "magnet simulator", ids: ["112922133257215"], mode: "remove")add und remove passen an, was bereits live ist, und sind das, was Sie normalerweise möchten. replace macht genau die aufgelistete Menge live und alles andere inaktiv – leicht versehentlich auszulösen, wenn Sie add meinten. IDs können die Asset-IDs sein, mit denen die Berichte beginnen, oder die internen Thumbnail-IDs; beide werden akzeptiert.
Hier wird nichts gelöscht. Ein deaktiviertes Thumbnail behält seinen Verlauf und kann zurückgeholt werden. delete_thumbnail ist dasjenige, das nicht rückgängig gemacht werden kann, und es weigert sich, das letzte Live-Bild eines Spiels zu entfernen.
Generieren
generate_thumbnail führt dieselbe Pipeline aus wie die Generatorseite der Website: Ihr Prompt wird anhand einer Stilvorlage umgeschrieben und dann gegen ein oder mehrere Referenzbilder gerendert. Das Ergebnis wird in eine Datei auf Ihrem Rechner geschrieben, sodass es tatsächlich angesehen werden kann, bevor es in die Nähe eines Spiels gelangt.
generate_thumbnail(
game: "magnet simulator",
prompt: "character yanking a giant magnet out of a pile of loot",
referencePaths: ["ref.png"],
profile: "Simulator"
)Referenzen können lokale Pfade oder öffentliche URLs sein; mindestens eine ist erforderlich, da das Modell von einem Bild ausgeht und nicht von nichts. profile wählt eine der Stilvorlagen aus, die list_style_profiles auflistet. Übergeben Sie publish: true nur, wenn das Bild bereits vereinbart wurde – andernfalls generieren Sie, schauen Sie sich die Datei an und laden Sie dann upload_thumbnail hoch.
Automatisches Rotieren
Auto-Swap entfernt die am schlechtesten abschneidenden Live-Thumbnails nach QPTR und befördert Ersatz aus einer Warteschlange, nach einem Zeitplan.
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 ist ein Prozentsatz, kein Bruchteil: 2 bedeutet 2%. Ein Spiel mit leerer Warteschlange wird ausgeführt und tut nichts, also prüfen Sie get_queue, bevor Sie es aktivieren. get_auto_swap zeigt die Regeln, den Zeitplan und was letzte Läufe tatsächlich bewegt haben – und wenn sich die Rotation selbst deaktiviert hat, ist der Grund, den es angibt, das, was zu beheben ist.
Antwortschaltflächen
notify_team kann zwei Schaltflächen anhängen und Personen antworten lassen:
notify_team(
game: "+1 dumpling escape",
role: "Thumbnail Team",
message: "Pay here please: https://…",
askForAnswer: true,
approveLabel: "Paid",
declineLabel: "Cancel"
)Wer klickt, dessen Entscheidung wird allen mit dieser Rolle per DM zugesandt, einschließlich sich selbst. Jede Person kann einmal antworten.
get_notification_history meldet jede Antwort in einer eigenen Zeile mit der Discord-ID der Person und dem Zeitpunkt des Klicks, sodass eine Automatisierung auf ein bestimmtes Paar von Personen warten kann, die beide genehmigt haben, anstatt auf eine Anzahl:
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.500ZBezahlung für Auftragsarbeiten
Übergeben Sie paymentAmount und das Ticket wird zu einer Rechnung – die DM zeigt den Betrag und einen Bezahlen-Button, die Schaltflächen sind standardmäßig Bezahlt / Abbrechen, und der erste Klick auf Bezahlt markiert das Ticket als bezahlt:
notify_team(
game: "+1 dumpling escape",
role: "Thumbnail Team",
message: "Dumpling concept art from lamy",
paymentAmount: 10,
paypalLink: "paypal.me/asianlamy"
)paid verriegelt. Eine Ablehnung, nachdem jemand es bereits als bezahlt markiert hat, wird als Antwort aufgezeichnet, zahlt das Ticket aber nicht zurück – Geld, das ausgegangen ist, kann nicht durch einen Button zurückgerufen werden.
Tickets
Ein Ticket ist derselbe Datensatz wie eine Team-Benachrichtigung – dieselbe Tabelle, dieselben Antworten pro Person, dasselbe Bezahlt-Flag – mit einem Titel, einem Typ und einem Kanal, in dem es lebt. Es kann auf drei Arten geöffnet werden, und danach sind sie nicht unterscheidbar:
/ticket createin Discord, von jedem Kanal oder einer DM mit dem Botcreate_tickethier, für Automatisierungendie Benachrichtigungswerkzeuge auf der Website
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"]
)Typen sind concept_review, final_review, payment und status. Alles außer status erhält Genehmigen/Ablehnen-Schaltflächen; ein Zahlungsticket erhält Bezahlt/Abbrechen plus den Betrag und einen antippbaren PayPal-Link, und der erste Klick auf Bezahlt setzt das Bezahlt-Flag. Antworten landen in get_notification_history genau wie Schaltflächenantworten auf einer DM, und das Embed im Kanal wird neu geschrieben, während Personen antworten, sodass die Nachricht, die alle ansehen, den aktuellen Zustand zeigt.
Jedes Spiel postet seine Tickets in einen Kanal, der einmal von Discord aus festgelegt wird:
/ticket config game:<game> channel:#lammytaOhne das wird ein Ticket trotzdem erstellt und ist trotzdem lesbar – es hat nur keinen Ort, an dem es erscheint, und das Werkzeug sagt dies, anstatt vorzutäuschen, dass es zugestellt wurde.
Mit Künstlern sprechen
Jeder Künstler hat seinen eigenen Textkanal im Studio-Server. Die drei Kanalwerkzeuge sind eine Abrufschleife, kein Live-Feed: Lesen Sie mit since, das auf die lastMessageId gesetzt ist, die Sie beim letzten Mal erhalten haben, und Sie sehen nur, was seitdem angekommen ist.
list_artist_channels() → #lammyta — id 1539…
get_channel_messages(channelId: "1539…", since: "…") → replies + art
send_channel_message(channelId: "1539…", text: "…", imagePaths: ["brief.png"])Anhang-URLs von Discord sind signiert und verfallen in etwa einem Tag. Laden Sie Kunst also herunter, wenn Sie sie zum ersten Mal sehen, anstatt den Link für später zu speichern.
Embeds
Ein Kanalbeitrag kann ein Embed sein statt einer Textzeile — die Karte mit dem farbigen Balken an der Seite, dieselbe, die auch die Benachrichtigungs-DMs verwenden. Übergib embed statt text oder zusätzlich dazu:
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/…" }]
}
)Die Form ist bewusst flach — Discord verschachtelt die Fußzeile, das Bild und jeden Button in Wrappern, und nichts davon ist wichtig, um eine Nachricht zu senden. Felder werden auf die Längen gekürzt, die Discord erzwingt, statt lang gesendet zu werden, weil es die gesamte Nachricht wegen eines einzigen überlangen Felds ablehnt.
Buttons hier öffnen nur Links. Ein Button, der eine Frage stellt und die Antwort aufzeichnet, gehört zu notify_team oder create_ticket, die einen Ort haben, um die Antwort zu speichern.
Damit der Bot einen Kanal sehen kann, braucht er dort View Channel, Read Message History, Send Messages und Attach Files. Lade ihn ein mit:
https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot%20applications.commands&permissions=117760Beide Scopes sind wichtig. bot bringt ihn in den Server; applications.commands macht /ticket dort sichtbar. Ein Bot, der ohne den zweiten eingeladen wurde, funktioniert für DMs und Kanalbeiträge einwandfrei, während seine Slash-Commands stillschweigend nie erscheinen.
Konfiguration
Variable | Erforderlich | Bedeutung |
| ja | Dein Schlüssel von der Keys-Seite |
| nein | Nur wenn du deine eigene Kopie der Website betreibst |
Hinweise
Discord-DMs können abgelehnt werden, und das ist kein Fehler. Discord lässt einen Bot niemanden anschreiben, der ihn blockiert hat, der DMs von Servermitgliedern deaktiviert hat oder der keinen Server mit dem Bot teilt. notify_team meldet pro Person, welcher dieser Fälle eingetreten ist, statt einer einzigen Erfolgszahl.
Roblox moderiert Uploads asynchron. Wenn upload_thumbnail Pending zurückgibt, bedeutet das, dass der Upload angenommen wurde und geprüft wird — normalerweise ein paar Minuten.
Einige Spiele sind schreibgeschützt. Hochladen und Austauschen erfordern ein Roblox-Konto mit Bearbeitungszugriff auf diese Erfahrung; ein Open-Cloud-Schlüssel kann keines von beiden. Die Website zeigt jedes Projekt als Full Edit, View Only oder Public View, und die Tools melden, wenn etwas nicht verfügbar ist, statt still zu scheitern. check_permissions ist der schnellste Weg, um herauszufinden, in welchem Fall sich ein Spiel befindet.
Drei Tools ändern, was Spieler tatsächlich sehen, und zwar in dem Moment, in dem sie zurückkehren: set_active_thumbnails, run_auto_swap und configure_auto_swap mit enabled: true. Hochladen und Generieren tun das nicht — ein hochgeladenes Thumbnail bleibt inaktiv, bis etwas es live schaltet.
Ein Tool kann nicht rückgängig gemacht werden. delete_thumbnail entfernt das Bild von Roblox zusammen mit seiner Analysestatistik. Das Deaktivieren mit set_active_thumbnails(mode: "remove") ist die umkehrbare Version und ist fast immer das, was gemeint war.
check_permissions testet die Generierung nicht. Die einzige ehrliche Prüfung wäre, ein Bild zu generieren, was Geld kostet und eine Spur hinterlässt. Wenn generate_thumbnail scheitern wird, scheitert es beim ersten Aufruf, mit dem Grund.
Lizenz
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