Eden MCP
Game Launch & Control: Start and stop games with base and optional updates; wait for specific launch states (process/control/game ready) with retryable timeouts; pre-flight validate launch parameters, environment (executable, profiles, keys, paths), and title compatibility; retrieve status and the emulator capabilities contract.
Session Management: Create isolated sessions with cloned portable profiles for parallel testing; list, stop, inventory, and clean up managed sessions; apply dry‑run retention policies.
Input Simulation: Send keyboard keys, Nintendo Switch buttons, and multi‑touch gestures (tap, swipe, long press, multi‑finger); run scripted input sequences with visual‑change checkpoints; get screen coordinates.
Content Management: Atomically stage RomFS/ExeFS/cheat patches and inject title keys into stopped sessions.
Screenshots & Visual Analysis: Capture PNG screenshots; sequence 2–12 frames to classify the screen as frozen, periodic, or moving using perceptual hashes.
Logs: Read and incrementally poll Eden logs, filter by level and content.
Diagnostics: Collect structured gameplay failure reports with heuristic hints; export redacted ZIP bundles; list and clean diagnostic artifacts.
Performance & Metrics: Sample FPS, frame‑time, shader, and video signals; get ranked, reversible compatibility experiment suggestions.
Disk Management: Inventory session storage (active, reclaimable, protected) and clean up stopped sessions and artifacts with dry‑run support.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Eden MCPPress the A button and take a screenshot."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Eden MCP
Eden Nintendo Switch 에뮬레이터를 로컬에서 자동화하기 위한 Model Context Protocol(MCP) 서버입니다. 게임 실행과 종료, 독립 세션, 키보드 및 Switch 버튼 입력, 터치, 네이티브 스크린샷, 로그 조회, base+update 실행을 하나의 MCP 인터페이스로 제공합니다.
MCP 릴리즈: https://github.com/Leuconoe/eden-mcp/releases/tag/v0.5.0
control-enabled Eden 릴리즈: https://github.com/Leuconoe/eden/releases/tag/eden-mcp-v0.5.0
대응 Eden 소스: https://github.com/Leuconoe/eden/tree/eden-mcp-v0.5.0
기준 Eden 커밋:
a43664c0fd9bb56d2bb4ef3b4f1943a19b767066
반드시 커스텀 Eden 빌드를 사용해야 하는 이유
Eden MCP의 전체 기능을 사용하려면eden-control protocol 2가 포함된 커스텀 Eden
빌드가 필요합니다. 가장 간단한 방법은 올바른 eden.exe가 이미 포함된
Windows x64 포터블 번들을
사용하는 것입니다.
공식 또는 미패치 Eden은 Windows 데스크톱 자동화 폴백으로만 동작합니다. 이 폴백은 화면에
보이는 창에 키와 단일 포인터 입력을 보내는 방식이므로 전체 MCP 기능을 대체할 수 없습니다.
eden-mcp.toml의 require_control=true를 유지하면 잘못된 eden.exe로 교체됐을 때 조용히
기능이 축소되지 않고 명확한 오류가 발생합니다.
기능 | 공식/미패치 Eden 폴백 | 커스텀 |
Base 게임 실행 | 가능 | 가능 |
별도 update 설치 후 실행 | 불가 | 가능 |
호스트 키보드 입력 | 가능 | 가능 |
Switch 버튼 직접 입력 | 불가 | 가능 |
단일 터치 | 가능 | 가능 |
멀티터치 | 불가 | 가능, finger ID 0-15 |
창이 가려진 상태의 네이티브 스크린샷 | 불가 | 가능 |
첫 프레임 준비 완료 확인 | 불가 | 가능 |
명시적 로그 flush | 불가 | 가능 |
인증된 정상 종료 | 불가 | 가능 |
커스텀 빌드만 별도로 필요한 경우
Eden control build를
받을 수 있습니다. 해당 빌드의 전체 업스트림 히스토리는 master에 보존되어 있고,
eden-mcp-control 브랜치는 기준 커밋보다 control endpoint 커밋 하나만 앞서 있습니다.
Related MCP server: adb-mcp
주요 기능
포터블 폴더를 이동해도 유지되는 상대 경로 기반 설정
기본 세션과 복제된 독립 프로필을 사용하는 병렬 관리 세션
프로세스별 랜덤 토큰으로 인증되는
127.0.0.1전용 JSONL endpointEden 입력 서브시스템을 통한 키보드 및 Switch virtual gamepad 입력
16개 finger ID를 지원하는 터치, long press, swipe 및 down/move/up
렌더러가 직접 저장하는 PNG 스크린샷
별도 update NSP를 세션 NAND에 설치한 후 base 게임 실행
타임아웃 후 프로세스를 유지하고 다시 기다릴 수 있는 실행 상태 머신
base/update title ID 정규화, sampled fingerprint 및 LayeredFS 배치 사전검증
정지된 관리 세션에만 허용되는 원자적 patch staging
시간차 프레임의 frozen/periodic loop 판정과 결정적 입력 스크립트
크기 제한, 줄 수 제한 및 문자열 필터를 지원하는 로그 조회
회전·truncate를 감지하는 불투명 증분 로그 cursor와 redacted evidence ZIP
Eden/RyuBing 공통 capability contract, runtime 지표 및 호환성 실험 advisor
실행 파일, 프로필, 키, NAND, 허용 경로, 저장 공간 및 protocol을 검사하는 진단 도구
프로필 복사 전 저장 공간 검사와 실패한 세션 생성의 제한적 롤백
MCP가 시작한 Eden만 종료하고 사용자가 별도로 실행한 Eden은 건드리지 않는 프로세스 소유권
요구 사항
포터블 Eden 실행 파일은 Windows x64용입니다.
MCP 서버는 Python 3.11 이상과
uv를 사용합니다.Vulkan/OpenGL 및 Eden의 일반 런타임 요구 사항이 필요합니다.
사용자는 자신이 합법적으로 확보한 키와 펌웨어를 Eden에 직접 설치해야 합니다.
릴리즈에는 console key, firmware, NAND 데이터, 게임, update, save, screenshot이 포함되지 않습니다. 이러한 파일은 저장소나 릴리즈 자산에 업로드하지 마십시오.
포터블 설치
Eden MCP v0.5.0에서
eden-mcp-portable-win-x64-v0.5.0.zip을 받습니다.쓰기 가능한 폴더에 압축을 풉니다.
필요하면
eden.exe를 직접 한 번 실행해user/구조를 초기화합니다.Eden의 일반 UI를 통해 사용자 소유 키와 펌웨어를 설치합니다.
run-eden-mcp.cmd를 MCP 클라이언트의 실행 명령으로 등록합니다.게임 실행 전
eden_check_environment(probe_control=true)를 호출합니다.
정상 포터블 레이아웃은 다음과 같습니다.
eden-mcp-release-v0.5.0/
|-- eden-mcp.toml
|-- eden.exe
|-- eden_mcp-0.5.0-py3-none-any.whl
|-- run-eden-mcp.cmd
|-- README.txt
|-- LICENSE-MCP-MIT.txt
|-- LICENSE-Eden-GPL-3.0.txt
|-- user/
| |-- config/qt-config.ini
| |-- keys/ # 사용자가 직접 준비
| `-- nand/ # 사용자가 직접 준비
`-- sessions/ # 관리 세션 생성 시 자동 생성run-eden-mcp.cmd는 번들 폴더를 현재 디렉터리로 사용하므로 정상 포터블 실행에는 환경변수가
필요하지 않습니다.
MCP 클라이언트 설정
포터블 번들은 실행 스크립트 하나만 등록하면 됩니다. 다음 경로는 압축을 푼 실제 위치로 바꾸십시오.
[mcp_servers.eden]
command = "D:\\Apps\\eden-mcp-release-v0.5.0\\run-eden-mcp.cmd"소스 체크아웃에서 실행하려면 다음과 같이 등록할 수 있습니다.
[mcp_servers.eden]
command = "uv"
args = ["--directory", "D:\\src\\eden-mcp", "run", "eden-mcp"]기기별 경로나 정책을 MCP 저장소 밖에 두려면 외부 TOML 경로 하나만 주입하는 방식을 권장합니다.
[mcp_servers.eden.env]
EDEN_CONFIG_FILE = "D:\\private-config\\eden-mcp.toml"환경변수는 서버 시작 시 읽는 외부 override일 뿐이며 MCP가 자신의 프로세스 환경을
수정하지 않습니다. Eden 자식 프로세스에는 MCP 설정 변수를 전달하지 않고, endpoint에 필요한
일회성 EDEN_MCP_PORT와 랜덤 EDEN_MCP_TOKEN만 추가합니다.
제공 도구
모든 일반 제어 도구는 선택적 session_id를 받습니다. 생략하거나 default를 전달하면 기본
세션을 사용하고, eden_create_session이 반환한 ID를 전달하면 해당 독립 세션을 사용합니다.
도구 | 설명 |
| Base 게임을 실행하고 선택적으로 별도 update를 먼저 적용합니다. |
| 타임아웃된 기존 프로세스에서 control/game-ready 대기를 계속합니다. |
| base/update/title ID/fingerprint/patch layout을 읽기 전용으로 검사합니다. |
| 이 MCP가 시작한 기본 Eden 프로세스를 종료합니다. |
| 타이틀별 canonical 세션을 재사용하고, 없을 때만 기본 설정 프로필에서 복제합니다. |
| 기본/관리 세션의 상태, PID 및 프로필 경로를 조회합니다. |
| 실행 파일, 프로필, 저장 공간 및 endpoint 호환성을 검사합니다. |
| 관리 세션을 종료하고 선택적으로 복제 프로필을 제거합니다. |
| 세션 폴더별 소유권 분류와 사용 용량을 삭제 없이 조회합니다. |
| 종료된 MCP 소유 세션에만 dry-run 우선 보존 정책을 적용합니다. |
| 정지된 관리 세션의 격리된 |
| 정지된 관리 세션의 |
| backend, 프로세스, 게임, 화면, readiness 및 capability를 반환합니다. |
| 공통 capability contract 1.0을 세션별로 반환합니다. |
| 터치와 스크린샷에 사용할 현재 좌표 공간을 반환합니다. |
| 호스트 키보드의 down/up/tap 입력을 보냅니다. |
| 플레이어 0-9에 Switch 버튼을 직접 보냅니다. |
| chord, wait, touch, visual checkpoint를 검증 후 순서대로 실행합니다. |
| tap, long press, swipe 또는 down/move/up 터치를 보냅니다. |
| 현재 렌더 화면을 PNG로 반환하고 선택적으로 파일에 저장합니다. |
| 2-12개 프레임을 비교해 frozen/periodic/moving을 판정합니다. |
| 제한된 로그와 구조화 entry 및 다음 호출용 opaque cursor를 반환합니다. |
| 상태·상세 로그·반복 패턴을 묶어 플레이 실패 원인 후보를 보고합니다. |
| 경로를 가린 report/log/선택적 screenshot evidence ZIP을 만듭니다. |
| status와 로그에서 FPS/frame-time/shader/video 신호를 요약합니다. |
| 설정을 바꾸지 않고 가역적인 호환성 실험을 제안합니다. |
| MCP가 생성한 진단 번들의 크기와 시각을 조회합니다. |
| 기본 dry-run으로 진단 번들에만 보존 정책을 적용합니다. |
지원 입력
키보드: A-Z, 0-9, F1-F24, 방향키, Enter, Escape, Space, Tab, Backspace, Delete, Home, End, PageUp/PageDown, Shift, Ctrl, Alt, Meta
Switch 버튼: A/B/X/Y, L/R/ZL/ZR, Plus/Minus, D-pad, LStick/RStick, SL/SR, Home, Capture
키와 버튼 action:
tap,down,up터치 action:
tap,long_press,swipe,down,move,up
터치 좌표는 최신 스크린샷 또는 eden_get_screen_size가 반환한 픽셀 공간을 기준으로 합니다.
크기가 변경된 이미지를 기준으로 좌표를 재사용할 때는 source_width와 source_height를 함께
전달해야 합니다.
권장 사용 흐름
단일 게임
eden_check_environment(probe_control=true)eden_validate_launch(base_path=...)eden_start_game(base_path=..., wait_until="game_ready")launch.target_reached=true를 확인합니다. 타임아웃이면 같은launch_id로eden_wait_for_state를 호출합니다.eden_take_screenshot또는eden_capture_sequence입력/터치 또는
eden_run_input_script문제가 있으면
eden_export_diagnostics(focus="all")eden_stop
느린 시작과 재시도
eden_start_game의 기본 wait_until은 game_ready입니다. 반환되는 launch에는
launch_id, 현재 phase, 목표, 단계별 UTC 시각, timed_out, last_error,
retryable이 들어갑니다.
eden_start_game(
base_path="E:/NSW/_titles/_waitng/Example [0100000000000000].nsp",
wait_until="game_ready",
timeout_s=20,
keep_running_on_timeout=true
)20초 안에 shader compilation이 끝나지 않아도 프로세스는 종료되지 않습니다. 새 프로세스를 시작하지 말고 응답의 ID로 이어서 기다립니다.
eden_wait_for_state(
target="game_ready",
timeout_s=120,
launch_id="<start 응답의 launch_id>"
)단계는 process_started → control_ready → update가 있으면 load_requested →
game_ready 순서입니다. update load 요청은 재시도 중 중복 전송되지 않습니다. 기존처럼
타임아웃 즉시 중단해야 하는 호출만 keep_running_on_timeout=false를 사용하십시오.
실행 전 content 및 patch 검사
eden_validate_launch는 파일 전체를 해시하지 않고 앞/뒤 각 64 KiB와 크기로 sampled SHA-256을
만듭니다. 파일명에서 16자리 title ID와 [v숫자]를 찾고, 일반적인 update ID
base + 0x800을 base application ID로 정규화합니다. 따라서 정상적인
0100071022110000 base와 0100071022110800 update는 같은 application으로 판정됩니다.
eden_validate_launch(
base_path="E:/Games/Game [0100071022110000][v0].nsp",
update_path="E:/Games/Game [0100071022110800][v131072].nsp",
application_id="0100071022110000",
patch_path="E:/Patches/Game-Korean",
expect_patch=true
)지원하지 않는 확장자, 빈 파일, 같은 파일을 base/update로 중복 지정한 경우, 정규화된
application ID가 다른 경우는 overall="error"이며 실제 launch도 차단됩니다. 파일명에
metadata가 없는 경우와 흔한 romfs/exefs/cheats marker가 없는 경우는 warning입니다.
암호화 content 내부 metadata를 복호화하지 않으므로 최종 판정은 Eden loader 로그와 함께
확인해야 합니다.
결과에는 Eden이 실제로 사용할 것으로 추정한 effective_profile_root와
effective_load_root도 포함됩니다. 관리 세션은 세션 옆의 user/를 우선하고, 기본
비포터블 실행은 EDEN_USER_DIR 또는 Windows의 %APPDATA%\eden fallback을 사용합니다.
따라서 expect_patch=true가 실행 파일 옆의 존재하지 않는 user/load를 잘못 검사하는
문제를 피할 수 있습니다.
Base + update
eden_start_game(
base_path="D:/games/title-base.nsp",
update_path="D:/games/title-update.nsp"
)별도 update는 커스텀 endpoint가 반드시 필요합니다. 현재 구현은 Eden의 기존 Install NSP 동작을 사용하므로 선택한 프로필 NAND에 update가 지속적으로 설치됩니다. 원본 base/update 파일은 수정하지 않습니다. 일회성 테스트에는 독립 관리 세션을 권장합니다.
외부 update의 session-local 사용은 관리 세션에서 실행하면 됩니다. 복제된 NAND에만
설치되며 eden_stop_session(remove_profile=true) 전까지 증거가 보존됩니다. DLC를 임의로
mount하는 control API는 아직 없으므로 capability contract에서 지원되는 것으로 광고하지
않습니다.
격리 patch staging
기본 프로필에는 patch를 자동 복사하지 않습니다. 먼저 관리 세션을 만들고 정지 상태에서 unpacked patch를 staging합니다.
eden_stage_patch(
session_id="qa-ko",
application_id="0100071022110000",
patch_path="E:/Patches/Game-Korean",
label="korean-v1"
)대상은 sessions/qa-ko/user/load/0100071022110000/korean-v1입니다. 임시 폴더에 복사를
끝낸 뒤 rename하며, 실패하면 그 시도가 만든 임시/대상만 롤백합니다. 같은 application ID와
동일한 파일 트리 SHA-256이 이미 staging되어 있으면 기존 경로를 반환하고 reused=true로
표시하므로 label만 달리해 같은 patch를 중복 복사하지 않습니다. default 세션, 실행 중인
세션, source와 session 경로가 겹치는 경우, link/junction 탈출, key/NAND/firmware/save형
루트는 거부됩니다. patch_path는 romfs, exefs, cheats 중 하나 이상을 직접 포함하는
상위 디렉터리여야 하며 romfs 자체를 넘기면 복사 전에 거부됩니다.
기본적으로 타이틀당 서로 다른 활성 patch도 하나만 허용합니다. 기존 patch와 나란히 비교할
특별한 사유가 있을 때만 allow_multiple=true와 비어 있지 않은 reason을 같이 전달합니다.
기존 patch를 덮어쓰거나 암묵적으로 폐기하지 않으며, 동일 내용은 이 예외 없이도 기존 staging을
재사용합니다.
패치 매니페스트는 디렉터리 publish 전에 원자적으로 기록됩니다. MCP가 중단되어도 다음
호출에서 존재하지 않는 대상은 재사용하지 않고, 대상 트리가 변조된 경우에도 저장된
SHA-256만 믿고 재사용하지 않습니다. Windows에서 목적지 경로가 너무 길면 복사 전에
짧은 session ID/label 또는 더 짧은 session_root를 사용하라는 오류를 반환하며, 일시적인
rename 공유 위반은 제한된 횟수로 재시도합니다.
응답에는 active_patch_count와 restart_required도 포함되어 static injection과 실제
런타임 적용을 구분할 수 있습니다. 관리 세션은 정지 상태에서만 stage되므로 반환된 patch는
다음 시작에 적용되며, 이미 실행 중인 타이틀에 hot-reload되었다고 간주하지 않습니다.
격리 title key 주입
자신이 합법적으로 확보한 ROM의 title key가 관리 세션에 없을 때, 128-bit rights ID와 128-bit title key를 각각 32자리 hexadecimal 문자열로 전달할 수 있습니다.
eden_inject_title_key(
session_id="qa-ko",
rights_id="<32-hex-rights-id>",
title_key="<32-hex-title-key>"
)이 도구는 정지된 관리 세션의 user/keys/title.keys만 원자적으로 갱신합니다. ROM, profile
template, default 프로필, prod.keys는 수정하지 않습니다. 같은 매핑은 파일을 다시 쓰지
않으며, 같은 rights ID에 다른 키가 있으면 기본적으로 거부합니다. 기존 매핑을 의도적으로
교체할 때만 overwrite_existing=true를 사용하십시오.
응답에는 title key 원문이나 digest가 포함되지 않습니다. 다만 title key는 MCP 도구의 입력
인자이므로 호출 기록을 보존하는 클라이언트에서는 민감한 값으로 취급해야 합니다. 현재
eden-control에는 key reload endpoint가 없으므로 실행 중 세션은 거부되며, 주입한 매핑은
다음 eden_start_game에서 읽힙니다. 이 도구는 ROM에서 rights ID 또는 키를 추출하거나
다운로드하지 않습니다.
타이틀별 세션 재사용
일반적인 관리 세션은 application ID를 지정해 얻습니다.
eden_create_session(application_id="0100071022110000")첫 호출은 title-0100071022110000 canonical 세션을 만들고, 이후 같은 base 또는 update
application ID 호출은 새 디렉터리를 만들지 않고 같은 session_id와 reused=true를
반환합니다. eden_stop_session(remove_profile=false)로 정지한 뒤나 MCP 서버가 재시작된
뒤에도 유효한 매니페스트와 프로필이 남아 있으면 reuse_source="persisted"로 다시 연결합니다.
관리 세션에서 다른 타이틀을 시작하려 하면 프로세스 실행 전에 거부됩니다.
idle 상태도 현재 MCP PID로 claim하므로 다른 MCP 서버가 같은 canonical 프로필을 동시에
복원하거나 정리하지 못합니다. 소유 MCP가 종료되면 다음 서버가 안전하게 claim합니다.
새 canonical 세션은 설정된 profile_template 전체를 복제합니다. template이 없으면 Eden이
실제로 사용하는 기본 프로필을 fallback으로 사용합니다. 복제에는 config, keys, nand
및 등록 firmware가 포함되므로 기존에 설정한 prod.keys와 firmware를 세션마다 다시
주입할 필요가 없습니다. 기본 프로필에 non-empty keys/prod.keys 또는
nand/system/Contents/registered firmware가 없으면 불완전한 세션을 만들지 않고 즉시
설정 오류를 반환합니다. 키 내용은 읽거나 응답하지 않습니다.
동일 타이틀에 정말 별도 프로필이 필요한 clean-room 비교나 동시 실행만 예외로 둡니다.
eden_create_session(
application_id="0100071022110000",
force_new=true,
reason="parallel clean-room comparison"
)force_new=true는 비어 있지 않은 사유가 필수이며 매니페스트에 session_role="exception"과
함께 기록됩니다. application ID와 session ID를 모두 생략하는 무작위 세션 생성은 거부됩니다.
이전 클라이언트가 명시적 session_id만 주는 호환 경로는 유지되지만, 첫 managed launch에서
타이틀에 바인딩되며 이미 canonical 세션이 있으면 재사용 안내와 함께 거부됩니다.
관리 세션은 실행 파일을 hardlink하거나 복사하고, 기본 user/ 프로필을 복제한 뒤 NAND,
SDMC, load, dump, TAS, screenshot 경로를 세션 내부로 다시 씁니다. save, update, screenshot,
log가 세션별로 분리됩니다. 종료 시 기본값 remove_profile=false를 사용해야 다음 호출에서
재사용됩니다. 즉시 폐기가 필요한 예외 세션만 remove_profile=true를 사용하십시오. 장기
보존할 실패 증거는 protect_profile=true로 종료합니다.
기본 보존 정책은 최신 종료 세션 3개를 남기고, 7일보다 오래됐거나 개수 제한을 넘은 종료 세션을 정리 후보로 계산합니다. 생성 전과 종료 후에는 이 후보의 dry-run 미리보기만 반환하며 어떤 프로필도 암묵적으로 삭제하지 않습니다. 기존 중복/legacy 폴더도 아래 storage dry-run으로 별도 확인해야 합니다.
세션 저장 공간과 중복 방지
eden_get_session_storage는 session_root 바로 아래 폴더만 읽어 active, reclaimable,
protected, unconfirmed, legacy로 분류하고 각 폴더의 byte 수를 반환합니다. 삭제 전에는
eden_cleanup_sessions(dry_run=true)로 정확한 후보를 확인할 수 있으며, 실제 적용은
dry_run=false일 때만 수행됩니다.
보존 후보 계산과 명시적 정리는 유효한 .eden-mcp-session.json 소유권 매니페스트가 있고 상태가
stopped이거나, 비정상 종료로 running으로 남았지만 PID가 더 이상 존재하지 않는
프로필만 삭제합니다. 실행 중인 세션, 보호 세션, 생성 도중 상태가 불명확한 세션, 매니페스트가
없는 이전 버전 폴더는 건드리지 않습니다. 따라서
기존 설치를 처음 업그레이드했을 때 오래된 폴더가 자동 삭제되지는 않으며, 필요하면 사용자가
내용을 확인한 후 별도로 정리해야 합니다.
eden_list_sessions는 현재 MCP 프로세스가 소유한 세션뿐 아니라 유효한 매니페스트가 남은
이전 프로세스의 세션도 ownership="persisted_unowned"로 읽기 전용 표시합니다. 다른 MCP
프로세스가 살아 있는 세션에는 attach/stop하지 않으며, 실제 정리는 먼저 storage dry-run으로
확인해야 합니다.
생성/종료 응답의 보존 후보 미리보기를 끄려면 auto_prune_sessions=false로 설정합니다.
이 설정이 true여도 실제 삭제는 발생하지 않으며, 실제 적용은 반드시
eden_cleanup_sessions(dry_run=false)로 명시해야 합니다. session_retention_days=0은 종료된 프로필을
나이 기준으로 즉시 후보화하므로, 실패 증거를 남겨야 하는 테스트에는
protect_profile=true를 사용하십시오.
플레이 실패 상세 진단
eden_get_logs는 사람이 빠르게 tail을 읽을 때 사용하고, 재현 실패를 MCP에 전달할 때는
eden_diagnose_game_issue를 사용합니다. 이 도구는 에뮬레이터를 중지하거나 설정을 변경하지
않으며 다음 자료를 한 JSON 응답으로 묶습니다.
현재 또는 마지막 실행의 PID, 종료 코드, backend, base/update 경로와 시작 오류
현재
eden_log.txt또는 비어 있을 때의 회전 로그원문 로그, 파싱된 severity/category/source/message, warning/error 주변 문맥
severity 개수와 숫자·주소를 정규화한 반복 메시지
네 가지 주요 장애 유형의 confidence, 근거 및 다음 확인 작업
화면만으로 확인할 수 있는 사항과 로그 판정의 한계
일반적인 수집 호출:
eden_diagnose_game_issue(
focus="all",
tail_lines=2000,
context_lines=2,
max_events=100,
max_bytes=2000000,
session_id="qa-01"
)session_id는 문제를 재현한 세션과 같아야 합니다. 장애 직후, 다른 게임을 실행하거나 관리
프로필을 삭제하기 전에 호출하는 것이 좋습니다. 상태 조회나 control endpoint의 flush_logs가
실패해도 읽을 수 있는 로그와 실행 문맥은 그대로 반환하고, 실패한 부분만 errors에 기록합니다.
화면 loop 증거
로그 반복만으로 화면 반복을 확정하지 않습니다. eden_capture_sequence(count=4, interval_ms=1000)는 각 PNG의 SHA-256과 64×64 grayscale perceptual hash, 이전 프레임 대비
정규화 차이를 반환합니다.
frozen: 모든 인접 차이가 threshold 이하periodic: 2 이상 주기로 같은 프레임 패턴이 반복moving: 위 두 조건에 해당하지 않음
기본 threshold는 0.01이며 결과는 원인 판정이 아니라 시각 증거입니다. 이미지 합계가 24
MiB를 넘으면 metadata만 반환합니다. include_images=false로 처음부터 image block을 생략할
수 있습니다.
시퀀스 도중 control endpoint가 사라지면 이미 수집한 frame/hash와 부분 분석을 버리지 않고
complete=false 및 terminal_failure로 반환합니다. 단일 screenshot이나 runtime metrics도
원시 WinError 대신 PID, 종료 코드, 종료 귀속 상태, 재시도 권고를 구조화합니다. 종료 주체를
증명할 수 없으면 shutdown_attribution="unresolved"로 남기며 임의로 정상 종료로 간주하지
않습니다.
결정적 입력 스크립트
최대 100 step, 선언된 wait/hold/timeout 합계 5분까지 허용합니다. 모든 step을 먼저 검증한 후
실행하며, 실패하거나 기본 release_at_end=true이면 explicit down 입력을 역순으로
해제합니다.
eden_run_input_script(steps=[
{"op":"button_chord","buttons":["L","R"],"hold_ms":120},
{"op":"button","button":"A","action":"tap","hold_ms":80},
{"op":"wait_visual_change","timeout_ms":10000,"poll_ms":500,"threshold":0.01},
{"op":"touch","x":640,"y":620,"action":"tap",
"source_width":1280,"source_height":720}
])지원 op는 wait, button, button_chord, key, touch,
wait_visual_change입니다. 각 step의 성공/실패와 소요 시간이 반환됩니다. analog는
eden-control protocol 2에 없어 사전검증 단계에서 명확히 거부합니다.
증분 로그와 evidence ZIP
eden_get_logs 응답의 next_cursor를 다음 호출의 cursor로 전달하면 새 로그만 받습니다.
cursor는 file identity와 byte offset을 감춘 문자열이며 log rotation 또는 truncate를 감지하면
cursor_reset=true와 이유를 반환합니다. minimum_level과 contains를 함께 사용할 수
있습니다.
eden_export_diagnostics는 .eden-mcp/diagnostics 아래에 directory와 ZIP을 만들며 다음
생성 파일만 허용합니다.
경로와 secret assignment를 가린
report.jsonreport의 제한된 entry로 만든
logs.ndjson명시적으로
include_screenshot=true일 때만screenshot.png크기, SHA-256, 제외 항목을 기록한
manifest.json
key, firmware, NAND, game/update/DLC, patch, save, config, 환경변수와 endpoint token은 탐색하거나
복사하지 않습니다. screenshot 자체에 민감한 화면이 있을 수 있으므로 기본값은 false입니다.
eden_cleanup_artifacts는 이 naming convention의 생성물만 대상으로 하며 기본값이
dry_run=true입니다.
공통 capability와 운영 관측
eden_get_capabilities와 emulator://eden/capabilities resource는
emulator-mcp-capabilities 1.0 계약을 반환합니다. 각 기능은 available, conditional,
unavailable 중 하나이며 같은 구조를 RyuBing MCP에서도 사용합니다. 클라이언트는 이 응답을
보고 analog, multi-touch, update 같은 backend 조건을 호출 전에 분기할 수 있습니다.
eden_get_runtime_metrics는 control status의 frame counter가 있을 때 관측 FPS를 계산하고,
최근 로그에서 FPS/frame-time sample, shader event와 video failure를 요약합니다. 없는 값은
추정하지 않고 null 또는 빈 sample로 남깁니다. eden_advise_compatibility는 이 증거와 진단
hint로 가역적인 비교 실험을 제안할 뿐 설정을 자동 변경하지 않습니다.
네 가지 focus
| 주로 찾는 신호 | 해석 및 추가 확인 |
| loader/boot/NCA/NSP/XCI/key/firmware 관련 warning·error, 비정상 종료, 시작 오류 | base/update title ID, keys와 firmware, 파일 무결성을 확인합니다. |
| patch/mod/RomFS/ExeFS/LayeredFS의 실패·retry·reload·loop가 3회 이상 반복 | 같은 화면이 반복되는지는 시간차 스크린샷으로 별도 확인합니다. |
| video/movie/NVDEC/FFmpeg/codec/decoder/demux 오류 또는 반복 | decoder/backend 설정을 확인하고 여러 프레임이 실제로 같은지 비교합니다. |
| patch가 missing/skipped/disabled/invalid/failed이거나, 지정한 update의 성공 적용 기록이 없음 | mount 성공 후에도 한글 출력은 스크린샷, 언어 설정, font glyph와 patch 우선순위로 확인합니다. |
| 위 네 유형을 모두 평가 | 원인을 모를 때 사용하는 기본값입니다. |
focus="patch_not_applied"는 “패치는 있는데 한글이 나오지 않음”을 조사할 때도 사용합니다.
로그에 PatchRomFS ... applied successfully가 있으면 패치 적용 자체는 성공 근거로 남기되,
화면의 한국어 문자열과 글리프가 정상이라는 뜻으로 단정하지 않습니다. 이 경우 low-confidence
hint와 함께 최신 스크린샷/OCR, 게임 내 언어, 폰트 범위, 중복 mod 우선순위 확인을 권고합니다.
반복 메시지도 그 자체로 장애는 아닙니다. 예를 들어 여러 update에 대한 정상
applied successfully 기록은 repeatedMessages에는 남지만 patch_loop로 분류하지 않습니다.
실패·retry·invalid 같은 부정 신호가 함께 반복될 때만 loop 후보가 됩니다.
응답 읽기
주요 필드는 다음과 같습니다.
필드 | 의미 |
| 보고서 계약, 수집 시각과 대상 |
| 현재 및 마지막 launch/process 문맥 |
| 실제 읽은 로그와 회전 로그 사용 여부 |
| 제한된 원문과 구조화된 전체 line |
| severity 개수, truncation, 3회 이상 반복 메시지 |
| warning/error/실패 신호 및 앞뒤 문맥 |
| 장애 분류, confidence, evidence, summary, recommendations |
| 일부 수집 단계만 실패했을 때의 상세 오류 |
| 로그만으로 확정할 수 없는 화면 기반 증상 |
기본 제한은 tail 2,000줄/2MB이며 tail_lines는 1-10,000, max_bytes는
1,024-20,000,000, context_lines는 0-10, max_events는 1-500 범위입니다. 원문에는
로컬 경로, 하드웨어/드라이버 정보가 포함될 수 있습니다. MCP는 외부로 업로드하지 않습니다.
원본 JSON을 직접 공유할 때는 logs.text, logs.entries, 경로를 검토하고, 기본 경로
redaction과 allowlist ZIP이 필요한 경우 eden_export_diagnostics를 사용하십시오.
분류명과 상위 응답 구조는 RyuBing MCP의
ryubing_get_diagnostics와 맞췄습니다. 두 서버를 함께 쓰는 QA 도구는 같은 네 focus를 사용할 수
있고, Eden은 원문 주변 문맥과 종료 후 launch 정보를 추가로 제공합니다.
포터블 설정
기본 eden-mcp.toml:
[portable]
root = "."
executable = "eden.exe"
profile_template = "user"
session_root = "sessions"
allowed_game_dirs = []
require_control = true
session_min_free_mb = 512
max_sessions = 4
session_retention_keep_latest = 3
session_retention_days = 7
auto_prune_sessions = true
startup_timeout = 20.0
control_timeout = 20.0
request_timeout = 30.0
update_timeout = 600.0상대 경로는 portable.root 기준으로 해석됩니다. 설정 우선순위는 다음과 같습니다.
MCP 클라이언트가 외부에서 주입한 개별 환경변수
eden-mcp.toml의[portable]값내장 포터블 기본값
allowed_game_dirs=[]는 게임 경로 제한이 없다는 뜻입니다. 무인 자동화나 공유 시스템에서는
허용할 루트만 명시하는 것을 권장합니다.
allowed_game_dirs = ["D:/Games/Switch", "E:/TestTitles"]허용 경로가 설정되면 canonical path가 해당 루트 밖에 있는 base/update 파일은 실행 전에 거부됩니다.
외부 override 환경변수
변수 | 의미 | 포터블 기본값 |
| 명시적 TOML 경로 |
|
| TOML 탐색 및 내장 기본값의 루트 | frozen executable 폴더 또는 CWD |
|
|
|
| 명시적 로그 경로 | 자동 검색 |
| 기본 Eden이 실제로 사용할 user/profile 경로 |
|
| 세션별로 복제할 포터블 프로필 |
|
| 관리 세션 상위 폴더 |
|
| Windows에서 | 제한 없음 |
| 동시 관리 세션 제한, 최대 32 |
|
| 프로필 복제 후 유지할 여유 공간 |
|
| 자동 정리에서 보존할 최신 종료 세션 수 |
|
| 이 일수보다 오래된 종료 세션 정리 |
|
| 생성 전·종료 후 안전한 자동 정리 실행 |
|
| 미패치/비호환 Eden 거부 여부 |
|
| 창 및 game-ready 대기 시간(초) |
|
| endpoint 탐지 시간(초) |
|
| 일반 endpoint 요청 시간(초) |
|
| update 설치/실행 시간(초) |
|
TOML에서 알 수 없는 설정명이나 잘못된 타입을 사용하면 오타를 무시하지 않고 시작 오류를 반환합니다.
환경 진단
eden_check_environment(probe_control=false)는 다음 정적 항목을 검사합니다.
TOML 및 포터블 루트
eden.exe존재와 접근 가능 여부profile template과
qt-config.inikey 파일 및 NAND 폴더 힌트
허용 게임 루트
session root 쓰기 가능 여부와 남은 공간
probe_control=true는 별도의 진단 Eden 프로세스를 시작해 인증된 protocol 2 ping을
보낸 뒤 종료합니다. 시작 직후 endpoint가 늦게 나타나는 경우를 위해 최대 2회까지 bounded
retry하며, 각 시도의 detail/return code를 control.attempts에 남깁니다. MCP가 관리 중인
세션이 실행 중이면 이 active probe는 거부됩니다.
커스텀 포터블 설치의 정상 기준은 다음과 같습니다.
overall = ok
control.available = true
control.protocol = 2
control.return_code = 0키 또는 firmware가 아직 없으면 Eden이 endpoint 준비 단계까지 도달하지 못할 수 있습니다. 사용자 소유 키와 firmware를 먼저 설치한 뒤 active probe를 실행하십시오.
보안 및 데이터 안전
endpoint는
127.0.0.1에만 bind합니다.각 프로세스는 예측하기 어려운 랜덤 토큰을 받고 모든 JSONL 요청에서 인증합니다.
EDEN_MCP_PORT와EDEN_MCP_TOKEN이 모두 없으면 endpoint는 활성화되지 않습니다.임의 shell 명령이나 범용 파일 API를 노출하지 않습니다.
서버는 자신이 시작한 PID만 종료하며 기존 사용자 실행 Eden에는 attach하지 않습니다.
게임과 update는 읽기 대상으로 검증되며 복사하거나 재배포하지 않습니다.
세션 생성 실패 시 그 시도가 새로 만든 세션 폴더만 롤백합니다.
세션 root와 profile template이 서로를 포함하면 재귀 복사를 막기 위해 거부합니다.
세션 삭제는 canonical path가 설정된 session root 바로 아래인지 다시 확인합니다.
자동 정리는 유효한 MCP 소유권 매니페스트, 종료 상태, 비활성 PID를 모두 재검증하며 보호, legacy, 불명확 상태를 삭제하지 않습니다.
patch staging은 정지된 관리 세션에만 새 고유 destination을 만들며 기존 patch를 덮어쓰지 않습니다.
artifact cleanup은
.eden-mcp/diagnostics바로 아래의 생성 규칙 일치 항목만 삭제합니다.
자동화 종료는 응답과 로그를 flush한 뒤 성공 코드로 프로세스를 종료합니다. 반복 자동화에서 Eden의 일반 Qt teardown이 간헐적으로 hang 또는 access violation을 일으킨 사례를 피하기 위한 endpoint 전용 동작이며, 일반 Eden 실행에는 적용되지 않습니다.
현재 제약 사항
커스텀 endpoint는 아직 upstream Eden에 포함되지 않은 downstream 기능입니다.
공식 Eden 폴백은 Windows에서만 지원하며 창 focus와 occlusion의 영향을 받습니다.
update는 session-only 등록이 아니라 선택한 프로필 NAND에 설치됩니다.
analog stick과 임의 DLC mount는 현재 control protocol에 없습니다.
버튼 chord는 순서가 보장된 down/up 묶음이지만 emulator 내부의 단일 atomic packet은 아닙니다.
filename title ID 검사는 복호화된 NCA metadata의 대체물이 아닙니다.
JPEG/resize screenshot은 지원하지 않으며 현재 native PNG를 사용합니다.
포터블 번들의 MCP 실행에는 Python 3.11+와
uv가 필요합니다.
소스에서 개발 및 실행
git clone https://github.com/Leuconoe/eden-mcp.git
cd eden-mcp
uv sync --extra dev
uv run pytest -q
uv run ruff check .
uv run eden-mcpPython wheel과 source distribution 생성:
uv buildcontrol-enabled Eden은 전체 업스트림 히스토리를 보존한
Leuconoe/eden 저장소에서 빌드할 수 있습니다.
git clone --branch eden-mcp-control https://github.com/Leuconoe/eden.git
cd eden
cmake --build build-mcp-clang --target eden.exe --parallel 8endpoint는 Qt frontend에만 추가되어 있으며 ordinary launch에서는 비활성 상태입니다. 빌드와 소스는 Eden의 GPL-3.0-or-later 조건을 따릅니다.
검증 상태
현재 소스의 MCP 도구 등록 수는 28개이며, v0.5.0 안정 릴리즈 자산에 모두 포함됩니다. Python 테스트/Ruff 및 실제 Eden 런타임 결과는 실행 환경과 커스텀 control-enabled 바이너리의 조합에 따라 달라지므로, 릴리즈 전에 별도 검증 로그와 커밋/바이너리 hash를 함께 기록해야 합니다. 이 문서는 검증하지 않은 테스트를 통과했다고 주장하지 않습니다.
라이선스
eden-mcp: MITEden 및 배포
eden.exe: GPL-3.0-or-later
이 프로젝트는 emulator automation 도구만 제공합니다. console key, firmware, NAND, 게임, update, save 또는 screenshot 데이터는 사용자가 직접 관리해야 하며 이 저장소에서 배포하지 않습니다.
Available Tools
27 toolseden_advise_compatibilityAdvise Eden CompatibilityARead-onlyIdempotent
Return ranked, reversible compatibility experiments from current diagnostics and metrics. This tool never changes emulator settings.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | all | |
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description reinforces these with 'reversible' and 'never changes emulator settings.' It adds context about the input source ('current diagnostics and metrics') without contradicting annotations, providing a clear safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver the core functionality and safety guarantee without any unnecessary words. The key information is front-loaded and clearly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple advisory nature, good annotations, and presence of an output schema, the description is largely complete. The only gap is the absent parameter explanation, which prevents a perfect score, but the overall context is sufficient for a low-risk advisory tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the parameters 'focus' or 'session_id.' While the enum and nullable type provide some structure, the description fails to compensate for the lack of parameter documentation, leaving the agent to infer meaning from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Return') and resource ('ranked, reversible compatibility experiments'), and distinguishes itself from sibling tools by explicitly noting it never changes emulator settings. This makes its advisory role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is a read-only advice tool that generates experiments from current diagnostics. The phrase 'never changes emulator settings' implicitly tells the agent to use this when recommendations are needed without side effects, though it does not name specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_capture_sequenceCapture Eden Frame SequenceARead-only
Capture 2-12 native frames over time and report perceptual differences, sampled frame hashes, and frozen/periodic/moving classification for visual loop evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| threshold | No | ||
| session_id | No | ||
| interval_ms | No | ||
| include_images | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description complements this by explaining the temporal capture behavior and the classification output, which goes beyond the annotation. It doesn't contradict the readonly hint, and adds context that this involves multiple frames over time, not a single operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently packs the core action, parameters range, and output types without redundancy. Every phrase contributes meaning, and there is no filler or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 5 optional parameters with zero descriptions, the description provides a good high-level summary but omits return format specifics and does not clarify the meaning of threshold, session_id, or include_images. It covers the main purpose and output categories, but leaves room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only vaguely references count and interval via '2-12 frames over time', leaving threshold, session_id, and include_images completely unexplained. This is a clear gap for agents to use the tool effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action (capture 2-12 native frames over time) and the analytical outputs (perceptual differences, sampled frame hashes, classification), which distinguishes it from sibling tools like eden_take_screenshot. The verb 'capture' plus the resource 'frames' and scope make the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use ('for visual loop evidence') which directly implies when to use this tool. It does not explicitly list alternative tools or exclusions, but the purpose statement is specific enough to guide selection. A bit more direct comparison to eden_take_screenshot would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_check_environmentCheck Eden Standalone EnvironmentA
Check standalone executable, profile, keys/NAND hints, allowed paths, session storage, and optionally launch a short authenticated endpoint probe.
| Name | Required | Description | Default |
|---|---|---|---|
| probe_control | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only the title, so the description carries the transparency burden. It discloses the optional 'authenticated endpoint probe' and characterizes it as short, but does not explain potential side effects, required permissions, or whether it modifies any state beyond reading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and efficiently lists the many checked elements. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value explanation is not needed. However, the description lacks parameter-probe linkage and usage guidance relative to siblings, leaving some gap in context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (probe_control) with 0% description coverage. The description mentions an optional probe but never connects it to the parameter, leaving the agent to guess that probe_control=true triggers it. This fails to compensate for the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Check') and enumerates concrete resources checked: standalone executable, profile, keys/NAND hints, allowed paths, session storage. It also mentions an optional probe, making it distinct from sibling tools like eden_status or eden_get_capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as a comprehensive environment check before running a game or session, but no explicit alternatives or exclusions are provided. The description clarifies what is checked but not when to choose this over eden_status or eden_get_capabilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_cleanup_artifactsClean Eden Diagnostic ArtifactsADestructive
Apply retention only to Eden MCP diagnostic bundle names. Defaults to dry-run; game, profile, patch, save, key, firmware, and arbitrary user files are outside scope.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| session_id | No | ||
| keep_latest | No | ||
| older_than_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the tool defaults to dry-run, meaning it is non-destructive by default, and that it only affects diagnostic bundles, not user files. This adds valuable safety context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary purpose, then adds the dry-run default and scope exclusions. Every word contributes meaning without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, scope, and safety default. Given the output schema exists and destructiveHint is annotated, return values and destructive nature are covered. However, the parameter semantics remain under-specified, and the description could briefly mention how keep_latest and older_than_days define the retention policy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only mentions 'dry-run' indirectly. The meanings of session_id, keep_latest, and older_than_days are not explicitly explained, relying on parameter names and defaults. This is a significant gap given the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Apply retention' and clearly identifies the resource as 'Eden MCP diagnostic bundle names'. It explicitly lists what is outside scope (game, profile, patch, save, key, firmware, arbitrary user files), distinguishing it from cleanup of other file types and from sibling tools like eden_cleanup_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit scope: it only applies to diagnostic bundle names, and lists what is outside scope. It also mentions the default dry-run, informing the agent that preview is the default behavior. This gives clear when-to-use and when-not-to-use guidance, even without naming alternative tools directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_cleanup_sessionsClean Eden SessionsADestructive
Apply retention only to valid, stopped, unprotected Eden MCP session profiles. Defaults to dry-run and never removes active, protected, unconfirmed, or legacy paths.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| keep_latest | No | ||
| older_than_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds valuable behavioral context: it defaults to dry-run, only touches 'valid, stopped, unprotected' profiles, and never removes certain categories. This gives the agent clear guardrails and safety expectations. There is no contradiction with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and then the safety qualifier. Every sentence adds value, with no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and moderate complexity. The description covers purpose and safety well, but the lack of parameter explanations (especially keep_latest and older_than_days) leaves a significant gap. Given the 0% schema coverage, the description should have compensated but didn't, making it minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the parameters (dry_run, keep_latest, older_than_days). While 'dry-run' is mentioned in the description, the retention criteria parameters (keep_latest, older_than_days) are not described. This leaves the agent without essential semantics for how retention is configured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: applying retention to valid, stopped, unprotected Eden MCP session profiles. It uses a specific verb ('apply retention') and resource, and distinguishes itself from sibling tools like eden_cleanup_artifacts by focusing on sessions. It also conveys the safety scope ('never removes active, protected, unconfirmed, or legacy paths').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool (on valid, stopped, unprotected sessions) and explicit when-not behavior (never removes active, protected, unconfirmed, or legacy paths). It also mentions the dry-run default, guiding safe usage. However, it does not explicitly name alternative tools for comparison, so it falls slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_create_sessionCreate Isolated Eden SessionADestructive
Create an idle Eden session with a cloned portable profile and independent executable. Pass the returned session_id to all normal control tools.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the destructiveHint annotation by specifying the session is 'idle' and has a 'cloned portable profile and independent executable'. This helps the agent understand the nature of the action and its side effects, without contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The first sentence defines the action and key attributes; the second explains how to use the result. Every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with an output schema, the description covers the core purpose and the workflow well. However, the optional input parameter is left unexplained, and the destructive hint is not elaborated on, which leaves some gaps for an agent deciding how to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter (session_id) with 0% coverage in the description. The description only mentions session_id as a return value ('Pass the returned session_id'), leaving the meaning of the input parameter completely unexplained—whether it is used to clone from an existing session, reference a parent, or something else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Create' and clearly identifies the resource (Eden session) with valuable qualifiers: 'idle', 'cloned portable profile', and 'independent executable'. This distinguishes it from sibling tools like eden_list_sessions and eden_stop_session, which manage or list existing sessions rather than create new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction to 'Pass the returned session_id to all normal control tools' provides clear workflow context: this is the entry point for using other control tools. It implies the tool should be used before session control tools, though it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_diagnose_game_issueDiagnose Eden Gameplay IssueARead-onlyIdempotent
Collect a bounded, shareable gameplay failure report with process context, detailed logs, repeated-message analysis, surrounding event context, and heuristic hints for game load, patch loop, video loop, or missing patch/localization output. Partial results are returned when status or log flushing fails.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | all | |
| max_bytes | No | ||
| max_events | No | ||
| session_id | No | ||
| tail_lines | No | ||
| context_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds value by disclosing that the report is bounded (size limits) and shareable, and that partial results are returned if flushing fails. This error behavior and bounded nature are not derivable from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core collection purpose and then stating partial-failure behavior. The first sentence is dense but each element is informative; no wasted words. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 optional parameters and no schema descriptions, the description is adequate in conveying the report's purpose and failure behavior, but it lacks parameter semantics and alternative-tool guidance. The presence of an output schema is helpful but not visible; overall, the description is not fully sufficient for precise invocation without deeper schema inspection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it doesn't. While it mentions 'bounded' (hinting at max_bytes/max_events) and lists the focus enum values in prose, it never names or explains any parameter (e.g., max_bytes, session_id, tail_lines, context_lines) or their defaults. The mapping from description to parameters is only implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool collects a bounded, shareable gameplay failure report with specific components (process context, logs, repeated-message analysis, event context, heuristic hints) for distinct failure categories (game load, patch loop, video loop, missing patch/localization). This distinguishes it from siblings like eden_get_logs or eden_export_diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for the listed failure types through its enumeration, but it does not explicitly state when to use this tool versus alternatives (e.g., when simple logs are enough, use eden_get_logs) or provide exclusions. The failure-type list gives some context, but no clear 'when-not-to-use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_export_diagnosticsExport Eden DiagnosticsA
Export a bounded, path-redacted ZIP containing a diagnostic report, structured log entries, manifest hashes, and an optional screenshot. Keys, firmware, game content, patches, saves, configuration, environment variables, and tokens are excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | all | |
| max_bytes | No | ||
| max_events | No | ||
| session_id | No | ||
| tail_lines | No | ||
| redact_paths | No | ||
| context_lines | No | ||
| include_screenshot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no readOnly/destructive annotations carrying the safety profile, the description discloses important behavioral traits: the output is bounded, path-redacted, and explicitly excludes keys, firmware, game content, patches, saves, configuration, environment variables, and tokens. This adds significant context beyond what the schema provides, though it omits details like authentication requirements or where the ZIP is stored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tightly packed sentence that front-loads the core output (ZIP) and follows with useful constraints and exclusions. Every phrase adds value, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (reducing the need to explain return values), the description covers the essential content of the ZIP and its boundaries. It lacks usage context and parameter mapping, but the explicit exclusions and bounded nature provide enough context for a moderately complex export tool. Missing guidance on when to use it is a notable gap, but overall it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the 8 parameters. While terms like 'bounded', 'path-redacted', and 'optional screenshot' loosely map to max_bytes, redact_paths, and include_screenshot, there is no explicit parameter-level guidance, leaving the agent to infer semantics from names and defaults alone. The description fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a bounded, path-redacted ZIP containing a diagnostic report, structured log entries, manifest hashes, and an optional screenshot. This specific deliverable distinguishes it from siblings like eden_get_logs or eden_diagnose_game_issue, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not contrast with eden_get_logs or eden_diagnose_game_issue, nor does it mention any prerequisites or exclusions for usage, leaving the agent to infer context from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_get_capabilitiesGet Eden CapabilitiesARead-onlyIdempotent
Return emulator-mcp-capabilities contract 1.0 for the selected session, including available, conditional, and unavailable launch/input/capture/diagnostic operations.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, lowering the bar. The description adds valuable behavioral context by specifying that the contract includes not just available but also conditional and unavailable operations, and that it follows 'contract 1.0'. This goes beyond a simple 'returns capabilities' statement, though it doesn't discuss error cases or session lifecycle nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and resource, then packs in relevant detail about the contract's contents. No wasted words; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description doesn't need to enumerate return fields. It covers the core purpose, the session context, and the semantic classes of operations. With only one optional parameter and strong annotations, the description is sufficient for an agent to understand what the tool does and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does mention 'selected session', which implicitly ties to the session_id parameter, but it does not clarify the meaning of null or the default behavior. For a single optional parameter, this is adequate but not thorough; the parameter name is self-explanatory, but the null semantics remain ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Return' and identifies a clear resource: 'emulator-mcp-capabilities contract 1.0 for the selected session'. It also distinguishes the tool by detailing what the contract includes (available/conditional/unavailable operations across launch/input/capture/diagnostic), setting it apart from sibling tools like eden_get_logs or eden_get_runtime_metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it returns capabilities for a selected session, implying use when you need to know which operations are possible for that session. However, it lacks explicit exclusions or alternatives, such as saying 'use eden_validate_launch to check launch-specific status', so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_get_logsGet Eden LogsARead-only
Read the tail of Eden's eden_log.txt. Optionally return only lines containing a case-insensitive substring. This also works after Eden exits.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| contains | No | ||
| max_bytes | No | ||
| session_id | No | ||
| tail_lines | No | ||
| minimum_level | No | trace |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds extra behavior: it reads only the tail, supports case-insensitive substring filtering, and works after Eden exits. This goes beyond the minimal safety disclosure and provides useful context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core function is front-loaded, and optional behavior is stated efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. However, with six parameters and zero schema descriptions, the description should clarify more of them. It covers the main use case but leaves pagination, session filtering, and level filtering unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It alludes to 'tail' and 'contains' but does not explain cursor, max_bytes, session_id, tail_lines, or minimum_level. With six optional parameters, this is insufficient for an agent to understand their purpose and valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the tail of Eden's eden_log.txt, with an optional case-insensitive substring filter. This specific verb+resource combination distinguishes it from sibling tools like get_runtime_metrics or get_session_storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading logs and notes it works after Eden exits, but it does not explicitly compare to alternatives or state when not to use it. Sibling tools like export_diagnostics might be relevant, but no guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_get_runtime_metricsGet Eden Runtime MetricsBRead-onlyIdempotent
Sample control status and summarize bounded FPS, frame-time, shader, and video signals from current runtime evidence. Unavailable counters are returned as null.
| Name | Required | Description | Default |
|---|---|---|---|
| sample_ms | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds that unavailable counters return null, which is useful, but does not disclose other behavioral traits like rate limits, invalid session handling, or the meaning of 'bounded'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core action and includes an important edge case (null counters). Every word earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity with two optional parameters and an output schema. The description covers the core purpose and a behavioral nuance, but lacks parameter explanation and usage context. The output schema helps, but the description remains minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain sample_ms or session_id. The parameter names offer some intuition, but the description adds no semantics beyond the schema's raw property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool samples and summarizes runtime metrics (FPS, frame-time, shader, video signals) with a specific verb ('sample and summarize') and resource ('current runtime evidence'). This differentiates it from siblings like eden_get_screen_size or eden_get_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. It is a plain statement of function without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_get_screen_sizeEden Screen SizeARead-only
Get the current Eden render coordinate space in pixels. Use these dimensions for touch coordinates when no screenshot has just been taken.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint: true already communicates the read-only nature. The description adds that the value is 'current' and refers to the render coordinate space, but doesn't disclose additional behavioral traits beyond what annotations provide. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every word adds value. It efficiently states what the tool does and when to use it without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema, and the description covers purpose and usage. The only missing element is the session_id parameter semantics, which is a minor gap given its optionality and default null.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0% and the tool description does not explain the session_id parameter at all. With only one optional parameter, the gap is moderate but still leaves the agent guessing about whether and how to provide a session_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the current Eden render coordinate space in pixels.' This distinguishes it from siblings like eden_get_capabilities or eden_get_runtime_metrics by focusing specifically on screen dimensions, and the mention of touch coordinates reinforces its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use these dimensions: 'Use these dimensions for touch coordinates when no screenshot has just been taken.' This provides a clear context and a conditional exclusion, though it doesn't name an alternative tool explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_get_session_storageGet Eden Session StorageARead-onlyIdempotent
Inventory managed-session disk usage and classify active, reclaimable, protected, unconfirmed, and legacy directories. This tool never deletes files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds value by explicitly stating 'never deletes files' and detailing the classification categories. This reinforces the safety profile and gives richer behavioral context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and a clear safety note. Every sentence earns its place with no repetition of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (no parameters) and presence of an output schema, the description fully covers what the tool does and its safety behavior. It is complete for an agent to select and invoke the tool appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema covers all (none) with 100% coverage, so the baseline is 4. The description adds no parameter-specific details, but none are needed since there are no inputs to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Inventory managed-session disk usage and classify active, reclaimable, protected, unconfirmed, and legacy directories.' This specifies a concrete verb and resource, and distinguishes it from cleanup-oriented siblings like eden_cleanup_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'This tool never deletes files,' which implies it should be used for inspection rather than cleanup. It does not explicitly name alternative tools for deletion, so it stops short of full when/when-not guidance, but the non-destructive implication is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_list_artifactsList Eden Diagnostic ArtifactsARead-onlyIdempotent
List only diagnostic artifacts generated by Eden MCP and their bounded sizes.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the agent knows it is a safe read operation. The description adds the scope of the listing (only Eden MCP artifacts) and the inclusion of size information, which provides context beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and includes all necessary scope details without any redundant text or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return values are handled elsewhere. However, the description is minimal and does not explain the purpose or effect of the session_id parameter, and it vaguely refers to 'diagnostic artifacts' without further detail, leaving some gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema includes one parameter (session_id) with no description and 0% schema description coverage. The description does not mention session_id at all, failing to compensate for the lack of parameter documentation, leaving the agent without guidance on how to use the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and clearly identifies the resource as 'diagnostic artifacts generated by Eden MCP' while also noting size detail. This distinguishes it from sibling tools like eden_export_diagnostics and eden_cleanup_artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool lists artifacts only from Eden MCP, implying when it would be used. However, it does not explicitly mention when to use this tool over alternatives like eden_export_diagnostics or eden_cleanup_artifacts, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_list_sessionsList Eden SessionsARead-only
List the default and managed Eden sessions with state, PID, and profile path.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds value by specifying the output contents (state, PID, profile path) and the distinction between default and managed sessions, giving useful context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the action ('List') and immediately details the resource and output fields. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no parameters and an output schema, the description is adequate. It states what is listed and the included fields. A slightly more explicit explanation of 'default and managed' would enhance completeness, but it's not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There are no parameter semantics to explain, and the description appropriately focuses on the tool's purpose rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource as 'Eden sessions' with the exact scope ('default and managed') and returned fields (state, PID, profile path). This clearly distinguishes it from sibling tools like eden_create_session or eden_stop_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need to see sessions), but it does not explicitly state when to use this tool over alternatives, nor does it provide any exclusions or prerequisites. The context is clear but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_press_buttonPress Eden Switch ButtonADestructive
Send a Nintendo Switch button directly to a player through Eden's virtual gamepad. Supported buttons are A/B/X/Y, L/R/ZL/ZR, Plus/Minus, D-pad directions, LStick/RStick, SL/SR, Home, and Capture. Requires the Eden control endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | tap | |
| button | Yes | ||
| player | No | ||
| hold_ms | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true already flags the tool as destructive. The description adds the prerequisite of the Eden control endpoint and the list of supported buttons, but does not elaborate on side effects (e.g., affecting game state) or any other behavioral nuances. It does not contradict the annotation, but the additional context is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and followed by a concise list of supported buttons and a prerequisite. Every sentence earns its place, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, return values need not be described. However, the description is incomplete for a 5-parameter tool: it does not explain action semantics, hold_ms behavior, or how player/session_id are used. It covers the core purpose and button list, but lacks the depth needed for an agent to fully understand invocation nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It only partially clarifies the 'button' parameter by listing supported values, but it does not explain 'action' (tap/down/up), 'hold_ms', 'player', or 'session_id'. The enum for 'action' is in the schema but not echoed in the description, leaving most parameters semantically unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a Nintendo Switch button directly to a player via Eden's virtual gamepad, and enumerates supported buttons. This specific verb+resource combination ('Send... button') and the explicit reference to 'Nintendo Switch' and 'virtual gamepad' distinguishes it from siblings like eden_press_key (likely keyboard) and eden_touch_screen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by focusing on Switch buttons and the virtual gamepad, and mentions a prerequisite ('Requires the Eden control endpoint'). However, it does not explicitly state when to prefer this tool over alternatives (e.g., eden_press_key for keyboard input, eden_touch_screen for touch), nor does it name exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_press_keyPress Eden KeyADestructive
Send a host keyboard key to Eden. The key is resolved through Eden's active input profile. Supported names include A-Z, 0-9, F1-F24, arrows, Enter, Escape, Space, Tab, Backspace, Delete, Home, End, PageUp/PageDown, Shift, Ctrl, Alt, and Meta.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| action | No | tap | |
| hold_ms | No | ||
| modifiers | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds that keys are resolved through Eden's active input profile and lists supported names. However, it does not disclose side effects, behavior on invalid keys, or rate limits, so it only partially goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence leads with the action, and the second enumerates supported key names efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool has 5 parameters and no schema-level descriptions. The description omits guidance on modifiers, hold duration, session_id usage, and alternative tools, leaving significant gaps for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate by explaining parameters. It only documents valid values for the 'key' parameter, leaving 'action', 'hold_ms', 'modifiers', and 'session_id' unexplained beyond the schema's structural defaults and enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a host keyboard key to Eden, using specific verbs and resource framing. It distinguishes from siblings like eden_press_button and eden_touch_screen by specifying "host keyboard key" and listing supported keyboard keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for keyboard input, but does not explicitly state when to use it versus alternatives such as eden_press_button or eden_run_input_script. It lacks explicit exclusions or alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_run_input_scriptRun Eden Input ScriptADestructive
Run a validated sequence of waits, key/button actions, Switch button chords, touches, and visual-change checkpoints. Held inputs are released after failures and by default at normal completion. Analog steps are rejected until the control protocol supports them.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| session_id | No | ||
| release_at_end | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses important behavioral traits: held inputs are released after failures and by default at normal completion, and analog steps are rejected until supported. This adds useful context about side effects and limitations without contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with a clear action statement, and contains no filler. Every sentence contributes meaning, and the structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—a validated sequence with an array of steps, session handling, and a release flag—the description is incomplete. It does not explain what constitutes a valid step, how session_id is used, or the expected behavior of release_at_end in enough detail. The output schema exists, but the input schema leaves steps as loosely-typed objects, and the description offers no guidance on how to construct them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not explain the structure of the 'steps' array, the purpose of 'session_id', or the behavior of 'release_at_end' beyond a tangential mention of releasing held inputs. The description provides almost no parameter-level semantics, leaving the agent to guess how to construct valid steps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and clearly identifies the resource ('a validated sequence of waits, key/button actions, Switch button chords, touches, and visual-change checkpoints'). It distinguishes this tool from sibling single-action tools like eden_press_key, eden_press_button, and eden_touch_screen by focusing on running a sequence rather than a single action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for multi-step automation sequences but does not explicitly state when to use this tool versus individual input tools. It provides a usage constraint by noting analog steps are rejected until protocol support, but does not name alternatives or provide exclusion criteria. This is clear context but lacks explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_stage_patchStage Eden Session PatchADestructive
Atomically copy an unpacked RomFS/ExeFS/cheat patch into a stopped managed session's isolated user/load directory. The default profile cannot be targeted; links and key, firmware, NAND, or save-like roots are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| patch_path | Yes | ||
| session_id | Yes | ||
| application_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the destructiveHint annotation: it discloses atomicity ('Atomically copy'), prerequisite (stopped session), and safety constraints (rejected roots). It does not contradict annotations and provides useful operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two clear, front-loaded sentences with no wasted words. The primary action is stated first, followed by critical restrictions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description is reasonably complete: it covers the action, destination, prerequisites, and safety constraints. It does not detail failure behaviors or overwrite semantics, but these are not essential with the available structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It explains the semantics of patch_path ('unpacked RomFS/ExeFS/cheat patch') and session_id ('stopped managed session'), but it does not describe application_id or the optional label parameter, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Atomically copy an unpacked RomFS/ExeFS/cheat patch into a stopped managed session's isolated user/load directory.' This specific verb+resource+destination distinguishes it from sibling session management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: it targets a stopped managed session and specifies rejected target types ('default profile cannot be targeted; links and key, firmware, NAND, or save-like roots are rejected'). It does not explicitly name alternatives, but the restrictions give practical usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_start_gameStart Eden GameB
Start Eden and open a base game file. Optionally install/apply a separate update before booting when the Eden control endpoint is available.
| Name | Required | Description | Default |
|---|---|---|---|
| base_path | Yes | ||
| eden_path | No | ||
| timeout_s | No | ||
| fullscreen | No | ||
| session_id | No | ||
| wait_until | No | game_ready | |
| update_path | No | ||
| expect_patch | No | ||
| application_id | No | ||
| keep_running_on_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the full burden of behavioral disclosure. It mentions the main action ('Start Eden and open a base game file') and an optional update installation, which implies file mutation. However, it does not disclose side effects, permissions, dependencies, or what happens when the update is applied. The lack of detail on how the update modifies the game makes transparency minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary purpose ('Start Eden and open a base game file') and then covers the optional update behavior succinctly. Every word contributes essential information without fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a 10-parameter launch tool, this description is incomplete. It does not mention the wait_until stages (process_started, control_ready, game_ready) which are central to the tool's behavior, nor does it address session_id or how it relates to session management siblings like eden_create_session. The output schema may cover returns, but the description misses key contextual workflow details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 10 parameters. It only implicitly explains base_path ('base game file') and update_path ('separate update'), leaving eden_path, timeout_s, fullscreen, wait_until, expect_patch, application_id, and keep_running_on_timeout unexplained. This provides minimal value beyond the raw schema for the majority of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start Eden and open a base game file.' This clearly distinguishes it from stopping or validating tools like eden_stop and eden_validate_launch. However, it does not explicitly name alternatives or contrast with sibling tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool for starting the game, but it does not provide explicit when-to-use or when-not-to-use guidance. It mentions an optional update step 'when the Eden control endpoint is available', which is a usage condition, but it does not exclude cases or mention alternatives. This makes usage guidance merely implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_statusEden StatusCRead-only
Get the managed Eden process, backend, screen, game paths, and capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation, lowering the bar. The description adds the scope of what status aspects are returned, but does not discuss parameter effects, output format, or potential caveats. It provides some value beyond the annotation but not deeply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and lists the key content areas without unnecessary words. It is concise and readable, though slightly dense due to the list of items.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only status tool with an output schema, the description covers the broad scope of returned information. However, it lacks parameter semantics and usage guidance, making it only minimally complete for an agent that needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional session_id parameter with zero description coverage, and the description never mentions session_id or how it influences the results. With 0% schema coverage, the description carries full responsibility for parameter explanation but fails completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves the managed Eden process, backend, screen, game paths, and capabilities. The verb 'Get' is specific and the resource scope is well defined, distinguishing it from sibling tools that target individual aspects like screen size or capabilities alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as eden_get_screen_size or eden_get_capabilities. No mention of prerequisites, exclusions, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_stopStop EdenBDestructive
Stop the Eden process started by this MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, so the description adds some value by scoping the operation to the process started by this MCP server. However, it does not disclose side effects, relationship to sessions, or what happens to active processes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single eight-word sentence that is front-loaded and contains no filler. It is appropriately concise for a straightforward stop action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks critical context for a destructive operation: what exactly is terminated, whether session_id narrows the scope, and what the expected outcome is. Sibling tools indicate related cleanup operations, but the description does not clarify the boundaries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention session_id or explain its meaning. With an optional parameter, the description should clarify whether and how it modifies the stop behavior, but it offers no such information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stop') and the specific resource ('the Eden process started by this MCP server'). It distinguishes itself from sibling tools like eden_stop_session by explicitly targeting the process, not a session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like eden_stop_session or eden_cleanup_sessions. The description implies usage but does not explain contexts, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_stop_sessionStop Managed Eden SessionADestructive
Stop and forget one managed Eden session. Its isolated files are retained unless remove_profile is true.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| remove_profile | No | ||
| protect_profile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that files are retained unless remove_profile is true, and that the session is 'forgotten'—adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description adequately covers the core action and safety details; the missing protect_profile explanation is the only notable gap, but the tool's purpose is clear for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
It clarifies remove_profile's effect on file retention and identifies session_id as the target, but does not explain protect_profile, leaving a gap given 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Stop and forget') and resource ('one managed Eden session'), clearly distinguishing it from broader session tools like eden_stop or eden_cleanup_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage for a single managed session but doesn't explicitly contrast with sibling tools or state when to prefer this over eden_stop or cleanup_sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_take_screenshotTake Eden ScreenshotA
Capture the current Eden render surface and return it as a PNG image. Optionally save a copy to an absolute or relative .png path. Use the returned image's pixel dimensions for subsequent touch coordinates. Do not cache screenshots.
| Name | Required | Description | Default |
|---|---|---|---|
| save_to | No | ||
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only title in annotations, the description carries the full behavioral burden. It discloses the optional save side effect and explicitly warns 'Do not cache screenshots.' However, it does not mention overwrite behavior when saving, whether the operation is read-only, or any error handling. It adds some value but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with four short sentences. It front-loads the primary action and each sentence adds distinct information: what is captured, optional saving, usage guidance, and a caching constraint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity of a screenshot tool and the absence of an output schema, the description covers the essential context: return value (PNG image), pixel dimensions for touch coordinates, and the optional save_path. Missing session_id explanation and edge cases like overwrite prevention, but overall sufficient for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 2 parameters with 0% description coverage. The description explains save_to as 'Optionally save a copy to an absolute or relative .png path', adding useful format details. However, session_id is not mentioned at all, leaving its purpose implied from sibling tools. Partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Capture' with the resource 'current Eden render surface' and clearly states the output is a PNG image. It also distinguishes from siblings like eden_get_screen_size (which returns dimensions, not an image) and eden_capture_sequence (which likely captures multiple images) by focusing on a single current render surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: when you need a screenshot and specifically to use the returned image's pixel dimensions for subsequent touch coordinates. It also advises against caching. However, it does not explicitly mention alternatives or when *not* to use it, such as when only dimensions are needed (which would be eden_get_screen_size).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_touch_screenTouch Eden ScreenADestructive
Touch Eden at screenshot pixel coordinates. Supports tap, long_press, swipe, down, move, and up. For swipe, provide end_x and end_y. source_width/source_height should match the screenshot used to choose coordinates; if omitted, the current render size is used.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| end_x | No | ||
| end_y | No | ||
| action | No | tap | |
| finger_id | No | ||
| session_id | No | ||
| duration_ms | No | ||
| source_width | No | ||
| source_height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the destructiveHint annotation by explaining that coordinates are in screenshot pixel space and that source_width/source_height, if omitted, default to the current render size. This informs the agent about scaling behavior. It does not contradict the annotation, and the annotation already signals potential destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, then lists actions, and finally provides parameter nuance. Each sentence adds value without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, output schema, destructive annotation), the description covers the core interaction, action types, and important coordinate scaling behavior. It omits details on multi-touch or duration semantics, but the output schema likely covers return values, and the essential usage is clear enough for an agent to invoke the tool correctly in common scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It explains end_x/end_y for swipes and clarifies the meaning of source_width/source_height. Other parameters (finger_id, session_id, duration_ms) remain unexplained, and while x/y are self-evident, the partial coverage leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's function clearly: 'Touch Eden at screenshot pixel coordinates.' It lists supported actions (tap, long_press, swipe, down, move, up), which distinguishes it from sibling input tools like eden_press_key or eden_run_input_script. The verb 'Touch' combined with the resource and coordinate system makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit usage context: it handles touch gestures with coordinates, and gives specific guidance for swipe (end_x/end_y) and source dimensions. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, leaving the when-to-use mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_validate_launchValidate Eden LaunchBRead-onlyIdempotent
Perform a bounded read-only preflight for base/update paths, sampled fingerprints, normalized title-ID compatibility, version hints, and optional LayeredFS patch layout.
| Name | Required | Description | Default |
|---|---|---|---|
| base_path | Yes | ||
| patch_path | No | ||
| session_id | No | ||
| update_path | No | ||
| expect_patch | No | ||
| application_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description reinforces these with 'read-only preflight'. It adds value by detailing exactly what is validated (fingerprints, title-ID compatibility, patch layout), which goes beyond the safety flags while remaining consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that leads with the action and packs in all relevant details without redundancy. Every phrase contributes to understanding the tool's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good annotations and an output schema, the description lacks parameter semantics and usage context. With six parameters having zero schema descriptions and a large sibling set, the one-sentence overview is insufficient for confident tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention any of the six parameters by name or explain their role (e.g., base_path, update_path, expect_patch). It offers only a high-level summary of validation areas, leaving the agent without essential input guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Perform a bounded read-only preflight' and enumerates concrete checks (base/update paths, sampled fingerprints, normalized title-ID compatibility, version hints, optional LayeredFS patch layout). This clearly distinguishes it from sibling tools like eden_start_game or eden_check_environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives such as eden_check_environment or eden_advise_compatibility. The phrase 'preflight' implies a pre-launch validation role, but there are no conditions, prerequisites, or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eden_wait_for_stateWait for Eden Launch StateARead-only
Continue waiting for a previously started Eden process to expose control or produce its first frame. Use this after a retryable eden_start_game timeout; no second process is started and a separate update load request is never duplicated.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | game_ready | |
| launch_id | No | ||
| timeout_s | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds behavioral context: it continues an existing wait, does not launch a second process, and never duplicates a load request. This addresses side-effect concerns beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose first, then usage guidance. No filler words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover read-only, the description provides the key purpose, usage context, and a crucial behavioral guarantee. It doesn't explain timeout behavior or parameter mapping, but the enum and defaults are self-explanatory. Good coverage for a wait tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 4 parameters with 0% description coverage. The description does not explain the role of launch_id/session_id or how target enum maps to the described states, leaving the agent to infer from schema defaults. It does not compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'wait' and identifies the resource 'Eden launch state,' explaining it continues a previously started Eden process until it exposes control or produces its first frame. It distinguishes itself from eden_start_game by explicitly stating it does not start a second process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: after a retryable eden_start_game timeout. Also gives exclusions: no second process started and no duplicated update load request. While it doesn't name alternative tools, it clearly differentiates from start_game.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
v0.4.0- First observed
eden_advise_compatibility - First observed
eden_capture_sequence - First observed
eden_check_environment - First observed
eden_cleanup_artifacts - First observed
eden_cleanup_sessions - First observed
eden_create_session - First observed
eden_diagnose_game_issue - First observed
eden_export_diagnostics - First observed
eden_get_capabilities - First observed
eden_get_logs - First observed
eden_get_runtime_metrics - First observed
eden_get_screen_size - First observed
eden_get_session_storage - First observed
eden_list_artifacts - First observed
eden_list_sessions - First observed
eden_press_button - First observed
eden_press_key - First observed
eden_run_input_script - First observed
eden_stage_patch - First observed
eden_start_game - First observed
eden_status - First observed
eden_stop - First observed
eden_stop_session - First observed
eden_take_screenshot - First observed
eden_touch_screen - First observed
eden_validate_launch - First observed
eden_wait_for_state
TDQS
Scored across 27 tools
Most tools have distinct purposes, but the cluster of diagnostics tools (eden_get_logs, eden_diagnose_game_issue, eden_export_diagnostics, eden_get_runtime_metrics, eden_capture_sequence) overlaps in intent and could confuse agents choosing between log reading, issue diagnosis, and metrics sampling.
All tool names follow a consistent eden_<verb>_<noun> pattern with snake_case, and verbs are chosen to reflect the action (get, list, start, stop, press, take, etc.). The few short forms like eden_stop and eden_status are clear exceptions that don't break the overall convention.
At 27 tools, the surface is too large for the apparent scope. Many diagnostic and cleanup tools (e.g., eden_export_diagnostics, eden_list_artifacts, eden_cleanup_artifacts) are highly specialized and could be consolidated, making the set feel bloated.
The toolset covers the main emulator lifecycle: sessions, launching, input, capture, diagnostics, and compatibility advice. Minor gaps exist, such as no direct configuration mutation or save management, but agents can work around these.
Maintenance
Related MCP Connectors
The official MCP Server for the Mux API
MCP server to assist with JxBrowser development.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceLocal MCP server for Android and iOS mobile automation and performance telemetry, enabling device control (screenshot, tap, swipe, input, app launch) and metric collection (CPU, memory, launch time) via ADB, simctl, and WebDriverAgent with SQLite session history.7 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for controlling Android devices over ADB, using direct commands and semantic accessibility selectors with a Kotlin helper APK.73 npmMIT
- AlicenseBqualityAmaintenanceMCP server for Android emulator automation via ADB.1761 npm4MIT
- AlicenseAqualityBmaintenanceLocal MCP server for automating the Ryubing Nintendo Switch emulator, providing tools for controller input, touch, screenshots, logs, game launch, and session management.10MIT