OpenMMO Game Login
Automates the login flow for the OpenMMO online RPG against the dev server using browser automation.
Auth is Google Sign-In (GSI), not a password form — see [dc3e2467].
Browser surface: real Chrome only
Use the mcp__claude-in-chrome__* tools. The in-app Browser pane (mcp__Claude_Browser__*) cannot complete this login. GSI falls back to ux_mode=popup, and the pane returns null from window.open even with a real user gesture (navigator.userActivation.isActive: true), so the console fills with [GSI_LOGGER]: Failed to open popup window ... Maybe blocked by the browser? and auto_select retries forever.
The pane does expose FedCM (IdentityCredential), so the very first attempt can succeed through the native account chooser — but once FedCM enters its per-origin cooldown, every later attempt drops to the blocked popup path. Do not rely on it.
Steps
Open the game in Chrome —
tabs_context_mcp(createIfEmpty: true), thennavigatetohttps://localhost:10004/.httpsis the tunnelled dev server. A plain localnpm run devserveshttp://localhost:10004/; GSI accepts that too, since localhost is exempt from its HTTPS requirement.
Wait for sign-in —
auto_select: truemeans returning users are signed in automatically with no click. Screenshot and check whether the character select screen already appeared.Click the Google button if still on the login screen — the pill button reads "Sign in as " / "(으)로 로그인". Clicking it uses the existing Chrome Google session.
- If Google asks for a password or a new account, stop and hand back to the user. Never type credentials.
Wait for character select — ~3 seconds. The first character is selected automatically, so no manual selection is needed.
Click Start — enters the game with the default-selected character.
Confirm game loaded — wait ~5 seconds for the world to load.
Take screenshot — confirm entry.
Notes
- Login screen setup lives in LoginScreen.svelte (
googleId.initializewithauto_select/itp_support/use_fedcm_for_prompt, thenprompt()+renderButton). VITE_GOOGLE_CLIENT_IDmust be set, or the screen shows "VITE_GOOGLE_CLIENT_ID is not configured" instead of a button.- Character cards and models are rendered inside a WebGL canvas via Threlte (not DOM), so they can't be targeted by selectors. If a specific character must be picked, dispatch
pointermove/pointerdown/pointerupon the canvas with the correct client coordinates AND overrideoffsetX/offsetYon the synthetic event (Threlte's raycaster readsoffsetX/Y, which are 0 on synthetic events by default). Without this override, the raycast lands at the top-left and hits the wrong character.