Codex Computer Run MCP server
2026년 11월 14일 커밋스크린샷, 마우스 이동, 클릭, 스크롤 및 키보드 입력을 통해 AI agent가 데스크톱 세션을 제어할 수 있도록 합니다.
다른 이름 ChrisPulman/CodexComputerRunMCPServer
- 스타
- 4
- Tools
- 4
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 14일
- 라이선스
- MIT
Codex Computer Run MCP란?
Codex Computer Run은(는) MCP server입니다. 스크린샷, 마우스 이동, 클릭, 스크롤 및 키보드 입력을 통해 AI agent가 데스크톱 세션을 제어할 수 있도록 합니다. 4개 도구를 제공합니다. 예: key, keys, text.
프로젝트 README에서 생성된 요약
Codex Computer Run MCP server 정보
Codex Computer Run MCP Server는 AI agent에게 로그인된 데스크톱 세션에 대한 직접적인 제어 권한을 제공합니다. 이 server는 시각적 및 대화형 데스크톱 자동화가 필요한 Codex 또는 기타 MCP 지원 client를 사용하는 개발자를 위해 설계되었습니다. server는 stdio를 통해 작동하며, 제어하려는 활성 로그인 그래픽 세션에서 실행해야 합니다. Windows는 native Win32 API를 사용하는 주요 플랫폼이지만, Linux와 macOS에서도 xdotool, wdotool, osascript와 같은 명령 기반 어댑터를 통해 지원됩니다.
Agent는 PNG 스크린샷을 통해 데스크톱을 관찰할 수 있으며, Windows의 경우 가시성을 높이기 위해 선택적으로 빨간색 커서 후광이 표시됩니다. 도구 세트에는 마우스를 절대 좌표로 이동하거나, 왼쪽, 오른쪽 또는 가운데 클릭을 수행하고, 휠을 스크롤하는 특정 명령이 포함되어 있습니다. 또한 단일 키 입력, 복잡한 hotkey 및 Unicode 텍스트 입력을 통해 키보드 입력을 처리합니다. 이를 통해 AI는 메뉴를 탐색하고, 애플리케이션과 상호작용하며, 라이브 데스크톱 환경 내에서 로컬 Git 워크플로우나 파일 시스템 정리를 관리할 수 있습니다.
활용 사례
- 1시각적 데스크톱 관찰Agent가 작업을 수행하기 전 현재 화면의 스크린샷을 캡처하여 시각적 문맥을 파악할 수 있습니다.
- 2자동화된 UI 상호작용개발자가 AI에게 커서를 이동하고 버튼을 클릭하여 특정 애플리케이션을 탐색하도록 지시할 수 있습니다.
- 3윈도우 관리AI가 모든 가시적인 최상위 윈도우 목록을 확인하여 특정 애플리케이션을 식별하고 대상으로 지정할 수 있습니다.
- 4텍스트 입력 자동화Agent가 native 플랫폼 텍스트 입력 경로를 사용하여 양식이나 에디터에 텍스트를 입력할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Codex Computer Run MCP 도구 4
README에서 감지됨keykeystexthandle
| key | — | |
| keys | — | |
| text | — | |
| handle | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능chrispulman/codexcomputerrunmcpserver is public and reachablegithub.com/chrispulman/codexcomputerrunmcpserver ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-12github.com/chrispulman/codexcomputerrunmcpserver ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음4 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Codex Computer Run MCP Server
Codex Computer Run MCP Server gives Codex and other MCP-capable agents direct control over a signed-in desktop session. It exposes focused tools for screenshots, mouse movement, clicks, scrolling, keyboard shortcuts, Unicode text entry, metadata-based window targeting, bounded filesystem organization, and local Git workflows, plus a bundled Codex Skill for safe desktop-use workflows.
It is implemented in C# on net10.0 using ModelContextProtocol 2.2.0.
Package versions are calculated by MinVer from v-prefixed Git tags, with a 1.2 minimum major/minor version. Release builds stamp the MCP manifest with the package version.
The package targets plain net10.0 so it can be distributed as a .NET tool. Windows uses native Win32 APIs; Linux and macOS use best-effort command-backed adapters.
Quick Install
Click to install in your preferred environment:
Note:
- These install links are prepared for the intended NuGet package identity
CP.CodexComputerRun.Mcp.Server. - If the latest package has not been published yet, use the manual source-build or published-executable configuration below.
- Run the server from the signed-in desktop session you want to control. Windows desktop automation must be launched from Windows, not WSL.
- Linux X11 sessions use
xdotoolandwmctrlwhere available. Wayland sessions usewdotoolfor pointer, keyboard, and window actions, plus a compositor-compatible screenshot command such asgrim,gnome-screenshot, or KDE'sspectacle. Install the command-line tools in the same signed-in graphical session as the MCP server. - macOS support uses
screencapture,pbcopy, andosascript; pointer actions requirecliclick. Screen Recording and Accessibility permissions may be required by macOS.
What Codex Computer Run Helps With
Codex Computer Run gives an agent a minimal, fast desktop-control layer for:
- Observe the full desktop via PNG screenshots with an optional red cursor halo on Windows.
- Point the real cursor at absolute virtual-screen coordinates, instantly or along a visible timed path.
- Click left, right, or middle mouse buttons where supported, including repeated clicks. The built-in macOS adapter supports left and right clicks.
- Scroll the wheel at the current cursor position or supplied coordinates.
- Press single keys and keyboard shortcuts such as
ctrl+lorctrl+shift+escape. - Enter Unicode text through the platform's preferred text-entry path.
- Inspect cursor position and visible top-level windows.
The server is designed for Codex computer-use workflows where the MCP client controls the active desktop.
Platform Support
Windows remains the primary implementation. Linux and macOS support keeps the same MCP tool surface but depends on external desktop commands that must be available inside the active graphical session.
| Area | Current behavior |
|---|---|
| Version | MinVer from Git tags (minimum major/minor 1.2) |
| Target framework | net10.0 |
| Windows | Native Win32 implementation with virtual-screen capture, a red cursor halo in screenshots, direct Unicode SendInput, cursor position, and visible top-level window enumeration |
| Linux | Command-backed adapter using xdotool/wmctrl on X11 or wdotool on Wayland, with compositor-compatible screenshot commands |
| macOS | Command-backed adapter using screencapture, pbcopy, osascript, and cliclick; macOS middle-click automation is not supported by the built-in adapter |
| Unsupported OS | Deterministic unsupported-platform errors instead of silent no-ops |
| Session requirement | Signed-in interactive desktop session |
| Transport | MCP stdio |
Do not run this server from WSL to control a Windows desktop. Building from WSL through Windows dotnet.exe can work, but the MCP server itself must be launched by a Windows MCP client or Windows PowerShell session.
Linux Wayland
Wayland sessions are detected from XDG_SESSION_TYPE=wayland or WAYLAND_DISPLAY. Install wdotool for desktop input and window actions, and install a screenshot utility supported by the compositor (for example, grim on wlroots compositors, gnome-screenshot on GNOME, or spectacle on KDE Plasma). The MCP server must inherit the graphical session environment.
Compositors control which desktop information they expose. cursor_position reports an actionable unsupported error when the compositor does not provide the global pointer position; move_mouse still moves to its target and falls back to a direct move when it cannot query a starting point. On GNOME, wdotool window discovery and other window controls require its companion Shell extension; its portal input backend may show a first-use permission prompt. Screenshot bounds are derived from the captured PNG when compositor geometry is unavailable. Exact rectangular screenshots require grim; GNOME Screenshot and Spectacle are used for full-desktop capture. Multi-monitor Wayland coordinate layouts have not been verified; screenshot bounds are currently reported from image size at origin (0, 0).
Some Wayland backends do not expose a process ID for each window. In that case, window discovery, title matching, activation, and closing still work; process-name filters cannot match those windows.
Codex Protocol
When this server is active, agents should follow this operating protocol:
- Call
screenshotfirst when visual context matters. - Use
cursor_positionbefore relative manual reasoning about the current pointer location. - Use
list_windowsto identify visible applications before focusing or interacting with them. - Use
move_mouse,click,scroll,press_key,hotkey, andtype_textonly when the intended foreground application is known. - Prefer
type_textfor text entry because Windows uses direct Unicode input without changing the clipboard; Linux/macOS use their available native text-entry fallback. - Keep screenshots small in conversation by setting
include_imagetofalsewhen only dimensions, platform metadata, or a saved path are needed.
Codex Skill
The repository and NuGet package include a Codex Skill at skills/codex-computer-run. The skill teaches Codex the observation-first workflow, safety rules, and exact MCP tool names for this server.
When the packaged server starts, it installs or refreshes the bundled skill in CODEX_HOME/skills/codex-computer-run, or %USERPROFILE%\.codex\skills\codex-computer-run when CODEX_HOME is unset. Automatic installation requires the Codex home directory to exist. Files supplied by the package are refreshed when their contents change, so updating the MCP server and starting it also updates the skill. Keep personal customizations in a separate skill because bundled files are managed by the server. Installation diagnostics go to standard error, and installation failures do not prevent MCP startup.
Manual install from a globally installed tool:
dotnet tool install --global CP.CodexComputerRun.Mcp.Server --version 1.*
codex-computer-run-mcp-server --install-codex-skill
Manual install from source:
dotnet run --project .\src\CodexComputerRunMCPServer\CodexComputerRunMCPServer.csproj -- --install-codex-skill
Set CODEX_HOME first if Codex uses a non-default location:
$env:CODEX_HOME = "C:\Users\you\.codex"
codex-computer-run-mcp-server --install-codex-skill
The explicit installer preserves existing files unless you add --force. Normal MCP startup automatically refreshes the bundled files.
Use the skill in Codex by asking for it explicitly, for example:
Use $codex-computer-run to list visible windows, take a screenshot, and confirm the active desktop state.
Available MCP Tools
screenshot
Captures the current desktop as PNG.
Parameters:
path(optional) - output PNG path. If omitted, the image is returned in memory and no temporary file is created.include_image(default:true) - include PNG image data in the MCP tool result.left,top,width,height(optional) - capture only a screen-space region. Provide all four values together;widthandheightmust be greater than zero.highlight_cursor(default:true) - draw a red halo at the live cursor position in the captured image on Windows. Set tofalsefor an unmarked capture.
Response: The first content block is JSON metadata with message, path, mimeType, platform, left, top, width, and height. When include_image is true, a PNG image block is also returned.
When a region is supplied, the metadata bounds describe that region instead of the full virtual desktop. Region coordinates use the same virtual-desktop screen space as window bounds returned by list_windows.
When to use: Use before interacting with the desktop, after UI changes, or when the agent needs visual confirmation.
move_mouse
Moves the cursor to absolute desktop coordinates.
Parameters:
x- absolute X coordinate.y- absolute Y coordinate.duration_ms(default:350) - move along the path over 0–10000 milliseconds. Use0for an instant move.delay(optional) - seconds to wait after the action.
When to use: Use before a click or hover-sensitive action.
click
Clicks at the current cursor position or at supplied absolute coordinates.
Parameters:
x(optional) - absolute X coordinate.y(optional) - absolute Y coordinate.button(default:left) -left,right, ormiddle;middleis not supported by the built-in macOS adapter.clicks(default:1) - number of clicks.interval(default:0.08) - seconds between repeated clicks.delay(optional) - seconds to wait after the action.
When to use: Use for buttons, menus, tabs, context menus, and desktop UI selection.
scroll
Scrolls the mouse wheel.
Parameters:
amount(default:-3) - wheel notches. Positive scrolls up, negative scrolls down.x(optional) - absolute X coordinate to move to before scrolling.y(optional) - absolute Y coordinate to move to before scrolling.delay(optional) - seconds to wait after the action.
When to use: Use for lists, pages, combo boxes, and scrollable application panes.
press_key
Presses one keyboard key. On Windows and Linux, named system media and volume keys can control the active media session without focusing its window.
Parameters:
key- key name or single character, for exampleenter,tab,escape,f5,a,A,?, or1. Media keys:media_play_pause,media_next_track,media_previous_track, andmedia_stop. Volume keys:volume_mute,volume_down, andvolume_up.duration(default:0.03) - seconds to hold the key.delay(optional) - seconds to wait after the action.
When to use: Use for navigation keys, function keys, confirm/cancel actions, and single-character shortcuts. For global media and volume controls, omit target_handle; Windows sends the system media key and Linux maps it to the corresponding XF86Audio* key. The built-in macOS adapter reports an explicit unsupported-platform error for these keys.
hotkey
Presses a keyboard shortcut.
Parameters:
keys- shortcut text using+, comma, or space separators, for examplectrl+l,ctrl+shift+escape, oralt+tab.delay(optional) - seconds to wait after the action.
When to use: Use for application shortcuts, browser address bar focus, task switching, command palettes, and system shortcuts.
type_text
Enters Unicode text into the focused application. On Windows it emits Unicode keyboard events directly and does not modify the clipboard; other platforms use their available native fallback.
Parameters:
text- text to enter.delay(optional) - seconds to wait after the action.
When to use: Use for text fields, editors, terminals, and any non-trivial text entry.
cursor_position
Returns the current desktop cursor position as JSON.
When to use: Use before or after mouse actions when the agent needs exact coordinates.
list_windows
Lists visible top-level desktop windows as JSON.
Parameters:
limit(default:50) - maximum number of windows to return.
When to use: Use to identify visible applications and window titles before interacting with the desktop.
Each window entry also includes isForeground, isMinimized, and bounds when the platform can provide them. bounds contains left, top, width, and height in virtual-desktop screen coordinates. Use these fields to confirm the intended process and target window before relying on coordinates; a title match alone is not sufficient when multiple windows are open.
find_windows
Finds visible top-level windows by optional process name, title substring, foreground state, and minimized state. Matching is case-insensitive for process names and title text.
Parameters:
process_name(optional) - process name such asNotepadormsedge.title_contains(optional) - case-insensitive substring of the window title.foreground_only(optional) - return only windows reported as foreground.include_minimized(optional) - include minimized windows; defaults totrue.limit(optional) - maximum number of matches; defaults to 50.
When to use: Prefer this when several windows are open and a process/title predicate is more reliable than choosing by screen coordinates. Re-check the returned handle immediately before a data-bearing action because window handles can become stale.
screenshot_window
Captures the screen-space bounds of a visible window selected by native handle. It uses the bounds returned by list_windows or find_windows; it does not reveal pixels hidden behind another window.
Parameters:
handle- native window handle returned bylist_windowsorfind_windows.path(optional) - output PNG path.include_image(optional) - include PNG bytes in the MCP result; defaults totrue.highlight_cursor(default:true) - draw the red cursor halo on Windows; set tofalseto omit it.
When to use: Use after targeting a window when the agent needs a focused visual observation or wants to avoid capturing the entire multi-monitor desktop.
verify_window
Checks whether a native window handle still identifies the expected process, title, foreground state, and minimized state. It is observation-only and returns JSON with ok, reason, and current metadata.
Parameters:
handle- native window handle returned bylist_windowsorfind_windows.process_name(optional) - expected process name.title_contains(optional) - expected title substring.require_foreground(optional) - require current foreground focus.allow_minimized(optional) - allow a minimized match; defaults totrue.
When to use: Call immediately before an input-changing action when a handle may have become stale, and after a meaningful transition when you need a machine-readable postcondition.
wait_for_window
Waits for a visible window matching optional process, title, foreground, and minimized-state filters. It never sends input and is bounded to 30 seconds; a single failed window enumeration is retried because the query is idempotent.
Parameters:
process_name,title_contains,foreground_only,include_minimized- same targeting filters asfind_windows.timeout_ms(optional) - maximum wait from 0 to 30000 milliseconds; defaults to 5000.poll_ms(optional) - polling interval from 25 to 1000 milliseconds; defaults to 100.
When to use: Use after launching an identified application or waiting for a known window to return after a crash. Do not use a retry loop around clicks, keystrokes, or text entry because repeating those could duplicate a user action.
activate_window
Brings a previously enumerated window to the foreground by its native handle.
Parameters:
handle- native window handle returned bylist_windows.restore(default:true) - restore the window first when it is minimized.
When to use: Call list_windows first, verify the process and title, then activate the exact handle before sending input. Windows uses the native window handle and waits until the OS reports that handle as foreground; Linux uses wmctrl or xdotool; the current macOS adapter reports a clear unsupported error because its window listing does not expose stable native handles.
close_window
Requests a graceful close for one exact top-level window handle. The operation posts the platform's normal close request and then checks whether that handle disappeared. It never terminates the owning process. If the application presents a save dialog or rejects the request, the result contains closed:false and explains that the window is still present.
Parameters:
handle- native window handle returned bylist_windowsorfind_windows.timeout_ms(optional) - bounded wait from 0 to 5000 milliseconds; defaults to 1000.
When to use: Use only after identifying the exact window and confirming that closing it is intended. Prefer this over sending alt+f4, because a stale foreground can route a global shortcut to another application.
Targeted desktop input
move_mouse, click, scroll, press_key, hotkey, and type_text accept an optional target_handle. When supplied, the server re-enumerates that exact window immediately before input and sends nothing if it is missing or minimized; clicks, scrolling, and keyboard input additionally require it to be foreground. This turns a focus race into a safe, actionable error. The recommended sequence is find_windows → activate_window → input with target_handle. Global media and volume keys intentionally act on the system's media session, so leave target_handle unset for those.
Filesystem operations
The filesystem tools make the server useful for general desktop work such as organizing folders. list_directory is observation-only, uses an entry limit, and does not follow reparse points during recursive scans. read_text_file reads bounded UTF-8 content without changing the file. create_directory, copy_path, move_path, delete_path, and write_text_file default to dry_run:true, returning a normalized plan without changing anything. To apply a mutation, the caller must explicitly pass dry_run:false for the exact path that was inspected.
copy_path and move_path use an exact destination rather than silently treating it as a parent directory. Existing destination directories are never merged, and directories cannot be moved or copied into themselves. delete_path is permanent and requires dry_run:false; non-empty directories also require recursive:true. Dry-run plans do not claim the desktop-control lease, so several safe inspections/plans can run concurrently; the lease is acquired only when a mutation is actually applied. The skill still requires confirmation immediately before destructive deletion when the surrounding user task has not explicitly authorized that exact deletion.
Semantic UI controls
find_ui_elements inspects one exact native window through Windows UI Automation and searches by accessible name, role, or AutomationId. It returns a runtime element id, accessible metadata, bounds, and supported patterns such as invoke, toggle, select, value, and expandCollapse. invoke_ui_element and set_ui_value re-resolve the element inside the same window immediately before acting, so a stale element id fails instead of being redirected to a different control. The adapter currently requires Windows UI Automation; non-Windows builds return an explicit unsupported-platform error.
Browser-targeted controls
When a Chromium browser is started with a local --remote-debugging-port, list_browser_tabs returns exact page target ids, titles, URLs, and debugger endpoints. wait_for_browser_navigation waits for one target or URL/title condition with a bounded timeout. inspect_browser_accessibility uses CDP's accessibility tree and returns ax:<nodeId> ids with roles, names, values, relationships, and DOM mappings. click_browser_element and set_browser_value re-inspect the same target immediately before acting; setting a value dispatches input/change but does not press Enter or submit a form. open_browser_devtools returns the exact inspector URL and only opens it when open:true is supplied. The server accepts only loopback DevTools endpoints and refuses remote WebSocket URLs. Normal browser tabs that were not started with remote debugging remain available to the existing desktop/window tools but are not silently attached through CDP.
Local Git operations
git_status, git_init, git_clone, git_create_branch, and git_commit provide bounded local repository workflows. git_status is observation-only. The other four default to dry_run:true; they return the exact repository, branch, destination, or commit plan and do not contact a remote until a caller explicitly applies the operation. Git arguments are passed directly to the process runner rather than through a shell, so spaces and punctuation in paths or commit messages stay data instead of becoming commands. There is intentionally no automatic push or remote repository deletion in this layer.
Processes and browser entry points
list_processes and wait_for_process provide bounded observation for recovery workflows. launch_application accepts an executable plus an argument list without shell parsing and defaults to dry_run:true. When applied, its returned PID is best-effort: GUI launchers and browsers may reuse an existing process or hand work to another process. Use wait_for_window plus a specific title/process identity to find the window the user actually sees. open_url accepts only absolute http or https URLs and also defaults to dry_run:true; when explicitly applied, the operating system's default browser handles the URL and any returned PID is likewise best-effort. These tools do not terminate processes and do not implement a force-kill fallback.
Codex Computer Run MCP 질문
Codex Computer Run MCP는 어떤 도구를 제공하나요?
4개 도구를 제공합니다. 예: key, keys, text, handle.
WSL에서 이 server를 실행하여 Windows 데스크톱을 제어할 수 있나요?
아니요, MCP server는 WSL이 아닌 Windows MCP client 또는 Windows PowerShell 세션에서 직접 실행해야 합니다.
지원되는 운영체제는 무엇인가요?
Windows는 native Win32 API를 사용하는 주요 구현체이며, Linux와 macOS는 xdotool, wdotool, osascript와 같은 명령 기반 어댑터를 사용합니다.