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

게임 하나를 검사하여 어떤 도구가 작동하고 그 이유를 정확히 보고합니다. 나머지가 작동하지 않는 이유도 함께 알려줍니다.

set_project_credentials

게임에 Open Cloud 키 및/또는 Roblox 쿠키를 저장합니다. 보고서가 요청하는 두 가지 항목입니다.

프로젝트

도구

기능

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을 보냅니다. 선택적으로 이미지와 두 개의 답변 버튼을 포함할 수 있습니다.

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 쿠키(업로드, 삭제, 라이브 세트 교체), Open Cloud 키(분석), Roblox가 게임에 썸네일이 여러 개 있을 때만 생성하는 개인화 구성(교체 가능한 라이브 세트가 있는지 여부), Discord 봇(티켓 및 알림)에 분산되어 있습니다. 이 중 어느 하나라도 없을 수 있으며, 표시되는 오류는 어느 쪽이든 동일하게 모호합니다.

check_permissions는 이 모든 것을 한 번에 검사하고 두 개의 목록으로 답변합니다:

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.

모든 "아니요"에는 이유와 해결 방법이 포함됩니다. "아니요"만으로는 같은 루프를 반복하게 되기 때문입니다. 중요한 쓰기 작업 전에 실행하거나, 실패한 후에 어떤 자격 증명이 누락되었는지 명확하지 않을 때 실행하세요.

요청하는 두 자격 증명은 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은 사이트의 생성기 페이지와 동일한 파이프라인을 실행합니다: 프롬프트가 스타일 가이드에 따라 다시 작성된 다음 하나 이상의 참조 이미지로 렌더링됩니다. 결과는 로컬 파일에 저장되므로 게임에 적용되기 전에 실제로 확인할 수 있습니다.

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

참조는 로컬 경로 또는 공개 URL일 수 있습니다. 모델이 빈 상태가 아닌 이미지에서 작업하므로 최소 하나는 필요합니다. profilelist_style_profiles가 나열하는 스타일 가이드 중 하나를 선택합니다. 이미지가 이미 합의된 경우에만 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은 두 개의 버튼을 첨부하고 사람들이 답변할 수 있게 합니다:

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

클릭하는 사람은 자신을 포함한 해당 역할의 모든 사람에게 결정이 DM으로 전송됩니다. 각 사람은 한 번만 답변할 수 있습니다.

get_notification_history는 각 답변을 개별 줄에 Discord ID와 클릭한 시각과 함께 보고하므로, 자동화는 단순한 수가 아닌 특정 두 사람이 모두 승인했는지에 따라 게이트할 수 있습니다:

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는 래치됩니다. 누군가가 결제됨으로 표시한 후 거부하면 답변으로 기록되지만 티켓의 결제 상태는 취소되지 않습니다. 나간 돈은 버튼으로 되돌릴 수 없기 때문입니다.

티켓

티켓은 팀 알림과 동일한 레코드입니다. 동일한 테이블, 동일한 개인별 답변, 동일한 결제 플래그에 제목, 유형 및 채널이 추가됩니다. 세 가지 방법으로 열 수 있으며 이후에는 구분할 수 없습니다:

  • 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, paymentstatus입니다. status를 제외한 모든 항목에는 승인/거부 버튼이 표시됩니다. 결제 티켓에는 Paid / Cancel 버튼과 금액, 탭 가능한 PayPal 링크가 표시되며, 첫 Paid 클릭 시 결제 플래그가 설정됩니다. 답변은 DM의 버튼 답변과 정확히 동일하게 get_notification_history에 기록되며, 사람들이 답변함에 따라 채널의 임베드가 다시 작성되어 모두가 보고 있는 메시지에 현재 상태가 표시됩니다.

각 게임은 Discord에서 한 번 설정한 단일 채널에 티켓을 게시합니다:

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

이것이 없어도 티켓은 계속 생성되고 읽을 수 있습니다. 다만 표시할 곳이 없을 뿐이며, 도구는 전달된 척하지 않고 그 사실을 알려줍니다.

아티스트와 소통하기

각 아티스트는 스튜디오 서버에 자신만의 텍스트 채널을 가지고 있습니다. 세 가지 채널 도구는 폴링 루프이지 라이브 피드가 아닙니다. 마지막에 받은 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은 서명되어 약 하루 후에 만료되므로, 링크를 저장해 두지 말고 아트를 처음 볼 때 다운로드하세요.

임베드

채널 게시물은 텍스트 한 줄 대신 임베드일 수 있습니다. 옆면에 색상 막대가 있는 카드로, 알림 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가 강제하는 길이로 잘립니다. 필드 하나가 너무 길면 메시지 전체를 거부하기 때문입니다.

여기서 버튼은 링크만 엽니다. 질문을 하고 답변을 기록하는 버튼은 답변을 적어둘 곳이 있는 notify_team 또는 create_ticket의 몫입니다.

봇이 채널을 보려면 그 채널에서 채널 보기, 메시지 기록 보기, 메시지 보내기, 파일 첨부 권한이 필요합니다. 다음으로 초대하세요:

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

두 스코프 모두 중요합니다. bot은 봇을 서버에 들여보내고, applications.commands/ticket을 그 서버에서 보이게 만듭니다. 두 번째 스코프 없이 초대된 봇은 DM과 채널 게시물에서는 정상 작동하지만, 슬래시 명령은 조용히 나타나지 않습니다.


구성

변수

필수

의미

WHT_API_KEY

Keys 페이지에서 받은 키

WHT_BASE_URL

아니요

사이트의 자체 복사본을 실행하는 경우에만


참고

Discord DM은 거부될 수 있으며, 이는 버그가 아닙니다. Discord는 봇을 차단한 사람, 서버 멤버의 DM을 꺼둔 사람, 또는 봇과 공유하는 서버가 없는 사람에게 봇이 메시지를 보내는 것을 허용하지 않습니다. notify_team은 단일 성공 횟수 대신 어떤 상황이 발생했는지 사람별로 보고합니다.

Roblox는 업로드를 비동기적으로 검토합니다. upload_thumbnailPending을 반환하면 업로드가 수락되었고 검토 중임을 의미합니다. 보통 몇 분이 걸립니다.

일부 게임은 읽기 전용입니다. 업로드와 교체에는 해당 경험에 대한 편집 권한이 있는 Roblox 계정이 필요하며, Open Cloud 키로는 둘 다 할 수 없습니다. 사이트는 각 프로젝트를 전체 편집, 보기 전용 또는 공개 보기로 표시하며, 도구는 조용히 실패하는 대신 무언가를 사용할 수 없을 때 알려줍니다. check_permissions는 게임이 어떤 경우에 해당하는지 알아내는 가장 빠른 방법입니다.

세 가지 도구는 플레이어가 실제로 보는 것을 변경하며, 반환되는 즉시 변경합니다: set_active_thumbnails, run_auto_swap, 그리고 enabled: true가 포함된 configure_auto_swap. 업로드와 생성은 그렇지 않습니다. 업로드된 썸네일은 무언가가 활성화하기 전까지 비활성 상태로 남아 있습니다.

하나의 도구는 되돌릴 수 없습니다. 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