프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Electron Viewer

제작자: acertijosapps버전 1.1.0i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.acertijosapps/electron-viewer

설치

개요

제작자가 쓴 설명(영어 원문)

Drive Electron apps over CDP: screenshots, clicks, drags, keys, JS in renderer and main, logs.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 기타

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: ELECTRON_VIEWER_URL, ELECTRON_VIEWER_PROJECT

필요한 것

  • npmNode.js 설치(npx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "electron-viewer": {
      "command": "npx",
      "args": [
        "-y",
        "@acertijosapps/electron-viewer",
        "mcp"
      ],
      "env": {
        "ELECTRON_VIEWER_URL": "your-value",
        "ELECTRON_VIEWER_PROJECT": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add electron-viewer --env ELECTRON_VIEWER_URL=your-value --env ELECTRON_VIEWER_PROJECT=your-value -- npx -y @acertijosapps/electron-viewer mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "electron-viewer": {
      "command": "npx",
      "args": [
        "-y",
        "@acertijosapps/electron-viewer",
        "mcp"
      ],
      "env": {
        "ELECTRON_VIEWER_URL": "your-value",
        "ELECTRON_VIEWER_PROJECT": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "electron-viewer": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@acertijosapps/electron-viewer",
        "mcp"
      ],
      "env": {
        "ELECTRON_VIEWER_URL": "your-value",
        "ELECTRON_VIEWER_PROJECT": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • ELECTRON_VIEWER_URL env
    Viewer to show actions live (default http://localhost:8094); without it, CDP is used directly
  • ELECTRON_VIEWER_PROJECT env
    Electron project folder that launch_app starts with `electron .` (default: the current folder)

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 acertijosapps 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 32484개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 32484개 중 93%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 32484개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Electron Viewer, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.1.0)은 그저께 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Recta

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Spec Driven Development

제작자: formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

내 컴퓨터에서 실행★ 440MIT14개월 전 업데이트
설치

Remote Desktop Commander

제작자: desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

클라우드에서 실행★ 211어제 업데이트
설치

Recta

제작자: RectaBuild

Cheaper cross-chain stablecoin routes for AI agents; 5 % of the verified saving, nothing if none.

컴퓨터 또는 클라우드오늘 업데이트
설치

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

@acertijosapps/electron-viewer

Live viewer for Electron apps in the browser, plus an MCP server so an AI agent can drive them. Built for the browser pane of AI coding tools (such as Claude Code): you and the agent watch and control the same app window, in real time.

  • Live video: Page.startScreencast from the Chrome DevTools Protocol (CDP) over WebSocket. It keeps streaming while the app window is covered or minimized.
  • Real input: mouse move and hover, click, double click, right click, drag, wheel and full keyboard passthrough (including ⌘C/⌘V/⌘A on macOS, IME and dictation).
  • Touch: a touch mode in the viewer turns the pointer into a finger, and the agent can tap, swipe, long press and pinch, for touch-first and kiosk apps.
  • Every app and window: launch your project with electron . from the viewer, or attach to any app started with --remote-debugging-port. Apps on ports 9222–9231 are found automatically.
  • Main process too: launched apps also expose their main process (Node inspector), so the agent can run code there, resize the real window and open DevTools.
  • MCP server: the same actions as tools, plus JavaScript in the renderer and main process, the accessibility tree with click-ready coordinates, and console logs.
  • Nothing to add to your app: no preload, no dependency, no code changes.

Requirements

  • Node.js 18 or later.
  • An Electron app. To launch it from the viewer, the project must have electron in its node_modules (npm install --save-dev electron); if its binary hasn't been downloaded yet, the viewer downloads it on the first launch.
  • Works on macOS, Linux and Windows.

Quick start

From your Electron project folder:

npx @acertijosapps/electron-viewer@1.1.1

Open http://localhost:8094 and click Launch. The viewer runs electron . on free debugging ports (CDP from 9222, Node inspector from 9229). Deep link to a window: ?window= .

If your app is started by another tool (electron-vite, Electron Forge, a custom script), give the viewer your own start command. {cdpPort} and {inspectPort} are replaced with free debugging ports, and the Launch button (and launch_app) runs it in the project folder:

npx @acertijosapps/electron-viewer@1.1.1 --launch-cmd "yarn dev --remoteDebuggingPort {cdpPort} --inspect {inspectPort}"

That line is for electron-vite; for an npm script that ends in electron ., pass the flags after --: --launch-cmd "npm start -- --remote-debugging-port={cdpPort} --inspect={inspectPort}". The command is only read from the command line or ELECTRON_VIEWER_LAUNCH_CMD, never from the HTTP API or the MCP.

Or start the app yourself with the flags and the viewer finds it:

electron --remote-debugging-port=9222 --inspect=9229 .

Apps on CDP ports 9222–9231 are found automatically, and so is their main process when its inspector is on 9229–9238. --inspect is optional; without it you get everything except the main-process features (evaluate_main, real window resizing and in-app DevTools). To attach on other ports, use the form in the viewer or --attach and --inspect.

electron-viewer [options]        Start the viewer

electron-viewer mcp [options] Start the MCP server on stdio

--project Project to launch with "electron ." (default: current folder) --launch-cmd Launch with this shell command instead; {cdpPort} and {inspectPort} are replaced with the debugging ports -p, --port Viewer port (default 8094, env PORT) --host Interface to bind (default 127.0.0.1, env HOST) --attach Attach at startup to an app on this CDP port --inspect With --attach: the app's main process inspector port --viewer-url Viewer the MCP talks to (default http://localhost:8094)

Other environment variables: MAX_DIM (longest side of the streamed frames, default 1920), QUALITY (JPEG quality, default 80), SCREENSHOT_MAX (longest side of MCP screenshots, default 1024), CDP_PORT / INSPECT_PORT (first ports to scan and launch on, default 9222 / 9229) and ELECTRON_VIEWER_STATE_DIR (where launched and attached apps are remembered, default ~/.cache/electron-viewer).

Use it with an AI agent (MCP)

Claude Code:

claude mcp add electron-viewer -- npx -y @acertijosapps/electron-viewer@1.1.1 mcp

Any other MCP client:

{

"mcpServers": { "electron-viewer": { "command": "npx", "args": ["-y", "@acertijosapps/electron-viewer@1.1.1", "mcp"] } } }

Also listed in the official MCP Registry as io.github.acertijosapps/electron-viewer.

The examples pin an exact version. The viewer and the MCP can run code in your app, so pin the version you reviewed instead of letting npx fetch whatever was published last, and update it on purpose.

Keep the viewer running (npx @acertijosapps/electron-viewer@1.1.1) to watch what the agent does. Without it, the MCP drives the app over CDP directly. Apps launched by either one are visible to the other.

ToolWhat it does
list_windowsRunning apps (with main when the main process is reachable) and their windows
launch_appRun electron . in the project on free debugging ports and wait for the first window
attachAttach to an app on a CDP port, optionally with its inspector port
screenshotPNG of the window content, longest side ≤ 1024 px
clickLeft, right or middle click; count: 2 for a double click; optional modifiers
dragPress, move in steps and release: a real drag
hoverMove the mouse without clicking
tapOne-finger tap (touch events, pointerType: "touch")
swipeOne-finger swipe: scrolls touch lists and drives swipe gestures
long_pressHold one finger down for a while, 800 ms by default
pinchTwo-finger pinch around a point; scale > 1 zooms in, < 1 zooms out
scrollMouse wheel at a point, deltas in CSS px
type_textInsert text into the focused element (any Unicode)
press_keyEnter, Tab, Escape, arrows, F1–F12… or any character, with modifiers
resize_windowResize the content area: the real window with the main process, an emulated viewport when the window can't reach the size (or with emulate: true)
reloadReload the window's page
evaluateRun JavaScript in the window's page and return the value
evaluate_mainRun JavaScript in the main process, with require('electron') available
get_accessibility_treeRoles, names, values and states; interactive elements carry their normalized center
get_console_logsConsole messages and exceptions from renderer windows and the main process, or the raw stdout

Coordinates are normalized to 0–1 over the content screenshot (x = pixel_x / image_width), so they hold at any window size. window is optional when only one window is open; it takes the target id from list_windows or part of the window title.

In the Claude Code browser pane

Add the viewer to .claude/launch.json and open it with preview_start electron-viewer:

{

"version": "0.0.1", "configurations": [ { "name": "electron-viewer", "runtimeExecutable": "npx", "runtimeArgs": ["-y", "@acertijosapps/electron-viewer@1.1.1"], "port": 8094, "autoPort": false } ] }

HTTP API

The MCP uses the viewer's API; you can call it too. window (target id or part of the title) goes in the query string or the body and is optional with a single window. The server only listens on 127.0.0.1, only accepts a local Host and origin, and POST requests require content-type: application/json, so other websites can't drive your apps.

Parameters are validated with the same limits as the MCP tools. A missing, unknown or out-of-range field gets a 400 that names it, e.g. {"error": "POST /api/swipe: missing x1, y1, x2, y2; unknown fromX, fromY, toX, toY (fields: window, x1, y1, x2, y2, ms)"}. Coordinates are normalized 0–1 and query string values are converted to numbers and booleans.

Endpoint
GET /api/windows[{ id, name, cdpPort, inspectPort, main, windows: [{ id, title, url }] }]
GET /api/projectThe project the viewer launches and whether it has Electron installed
GET /api/screenshot?max= PNG; viewport size in X-Viewport-Width / X-Viewport-Height
GET /api/ax-tree?interactiveOnly=true{ tree }
GET /api/logs?level=&source=&limit={ logs } or { stdout }
POST /api/launch{ project? }
POST /api/attach{ port, inspectPort? }
POST /api/click{ x, y, button?, count?, modifiers? }
POST /api/drag{ x1, y1, x2, y2, ms? }
POST /api/hover{ x, y }
POST /api/tap{ x, y }
POST /api/swipe{ x1, y1, x2, y2, ms? }
POST /api/long-press{ x, y, ms? }
POST /api/pinch{ x?, y?, scale, ms? }
POST /api/scroll{ x, y, dx, dy }
POST /api/text{ text }
POST /api/key{ key, modifiers? }
POST /api/resize{ width, height, emulate? } (0 × 0 restores the window size)
POST /api/reload{ ignoreCache? }
POST /api/evaluate{ expression }
POST /api/evaluate-main{ expression, app? }
POST /api/devtoolsToggles DevTools; without the main process returns the DevTools url

How it works

  • Everything goes through CDP with ws: no Playwright, no Puppeteer, nothing injected into the app. The renderer is reached through --remote-debugging-port (one page target per window) and the main process through the Node inspector (--inspect), where the console API provides require.
  • One screencast session per window, shared by every viewer tab and stopped when the last one closes. The last frame is kept for late joiners. Focus and page lifecycle are emulated while someone is watching, so a covered or minimized window keeps painting.
  • Viewer input is queued in order and mouse moves are coalesced to one per animation frame. A hidden textarea holds the focus: keys are sent with Input.dispatchKeyEvent, and text that arrives without key events (IME, dictation) with Input.insertText. On macOS, ⌘A, ⌘C, ⌘V, ⌘X and ⌘Z are sent as editing commands, because the native menu that normally handles them never sees CDP events.
  • Touch goes through Input.dispatchTouchEvent. The first touch action on a window also turns on touch emulation (navigator.maxTouchPoints 5, pointer: coarse) until the viewer or MCP that sent it exits.
  • Each process keeps one connection per window and per main process, which also collects console messages and exceptions (the last 1000 per app).
  • For an app with no known inspector, each Node inspector on ports 9229–9238 is asked once, read only, whether it is Electron and which CDP port its app listens on. Any other Node process started with --inspect in that range gets one short connection (it logs Debugger attached.) and is left alone.
  • Launched and attached apps are remembered in ~/.cache/electron-viewer, so the viewer and the MCP see the same apps. Launched apps write their output to a log file there and keep running if the viewer or MCP exits.

Limitations

  • CDP only sees web content. Native UI (title bar, menus, dialogs, tray, notifications) isn't shown or clickable; use evaluate_main to drive it from the main process. Capturing it would mean capturing the screen, and with it any

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기