dosbox-x-mcp
dosbox-x-mcp
데스크톱을 건드리지 않고 DOSBox-X 게스트를 구동하는 MCP 서버입니다. 포커스를 가로채지 않고, 호스트 키 입력을 합성하지 않으며, 포인터를 움직이지 않습니다. 모델은 DOS 프로그램을 처음부터 끝까지 실행할 수 있고, 그동안 여러분은 화면 앞에서 계속 작업할 수 있습니다.
이 도구는 하나의 리버스 엔지니어링 프로젝트를 위한 캡처 워크플로로 시작했고, 이제는 일반적인 보조 도구가 되었습니다. 실행 중인 DOS 게스트가 주어지면 아무 사전 지식 없이도 그 게스트를 찾아낼 수 있고, 어떤 프로그램이 어디에 로드되어 있는지, 어떤 세그먼트를 읽고 패치할 수 있는지, 시간에 따른 값 변화, 비디오 메모리에서 화면을 읽기, 에뮬레이터 자체 레코더 사용, 코드 실행 중 관찰까지 가능합니다. 디버거도, 디스크의 바이트 하나를 변경할 필요도 없습니다.
할 수 있는 것
게스트 찾기 | BIOS 불변식만으로 DOS 게스트를 찾아냅니다. 프로필도, 표식도, 사전 지식도 필요 없습니다. DOS 메모리 체인을 따라가며 로드된 각 프로그램, 그 세그먼트, 출처 경로를 이름으로 표시합니다. |
모든 세그먼트 주소 지정 | 런처 체인의 다른 프로그램, TSR, 오버레이, 인터럽트 벡터 테이블, EMS 페이지까지. 읽기, 패치, 덤프, 검색이 모두 가능합니다. |
조종하기 | BIOS 키보드 링에 키를 넣습니다. 게임 자체의 INT 33h 이후 마우스 단어에 클릭을 넣습니다. 둘 다 호스트 입력 큐에 닿지 않습니다. |
보기 | 에뮬레이터의 비디오 메모리에서 프레임버퍼를 직접 읽습니다. 창도, 스케일링도 없고, 게스트에 아무런 부담도 주지 않습니다. 참조 프레임으로 확인됩니다. 필요한 경우 창을 캡처할 수도 있습니다. |
측정하기 | 메모리 조건에서 대기하거나, 감시 목록을 최대 200Hz로 TSV로 샘플링합니다. 모든 열이 단일 스냅샷에서 비롯되어 서로 어긋나지 않습니다. 고유한 프레임마다 비디오 메모리를 감시하여 등장 시각을 기록합니다. |
녹음/녹화 | 에뮬레이터 자체의 OPL, MIDI, WAVE 캡처를 포커스 없이, 호스트 매퍼 없이 실행합니다. |
계측하기 | 실행 중인 |
Related MCP server: dosbox-mcp
동작 원리
여기에는 호스트의 입력 큐나 화면이 전혀 관여하지 않습니다.
게스트 탐지. 모든 DOS 게스트에는
0040:0080에 BIOS 키보드 링의 범위 워드0x001E/0x003E가 있고, 그 범위 안에 헤드와 테일이 위치하며, 살아있는INT 21h벡터를 갖습니다. 에뮬레이터 메모리에서 이 세 가지를 찾으면 게스트의 물리적 주소 0을 찾을 수 있고, 그 지점에서 모든 세그먼트에 주소를 지정할 수 있습니다. 이것은 프로필이 필요 없습니다. 새 프로젝트가 처음 시작할 때 맞닥뜨리는 닭과 달걀 문제를 풀어줍니다.키는 실제 키보드 인터럽트처럼 게스트의 BIOS 키보드 링에 추가됩니다.
클릭는 게임 자체 INT 33h 핸들러가 기록하는 워드에 기록됩니다. 게임이 실제로 읽는 상태입니다. 게임의 핸들러가 계속 그 값을 덮어쓰기 때문에, 단일 쓰기로는 따라잡을 수 없으므로 잠시 동안 계속 다시 기록됩니다.
프레임은 비디오 메모리에서 나옵니다. DOSBox는 하드웨어와 동일한 방식으로 chain-4 페이지를 저장합니다. CPU 오프셋
o는 선형 주소4 * (o & ~3) + (o & 3)에 있고, 각 4바이트 그룹의 열여섯 번째 그룹 하나를 취하면 영역이 화면으로 되살아납니다. 화면의 어떤 바이트가 화면인지 찾아내는 일은 참조 프레임이 있어야 합니다. 에뮬레이터 메모리에는 화면이 아닌, 화면과 비슷해 보이는 이미지류 데이터가 가득하기 때문에, 페이지는 참조 프레임과 바이트 단위로 확인되거나 확인 불가능 상태로 보고됩니다. 화면 읽기을 참조하세요.추적은 근거리
CALL을 0으로 채워진 연속 영역을 가리키도록 패치합니다. 그 케이브는 대체된 대상을 호출하고 플래그를 보존한 뒤, 요청한 것들을 케이브 코드 뒤의 슬롯에 복사하고 복귀합니다. 에뮬레이터가 실행과 함께 종료되면 패치도 함께 사라집니다.
설치
pip install "dosbox-x-mcp[all] @ git+https://github.com/md0-code/dosbox-x-mcp"추가 기능은 모두 선택 사항이며, 이름이 그 용도를 나타냅니다:
Extra | 용도 |
| Pillow. 에뮬레이터 창을 캡처할 때 사용 |
| numpy. 더 빠른 chain-4 디인터리빙 (순수 Python 대체 구현도 있음) |
| python-xlib. Linux에서 창 목록 표시및 캡처용 |
MCP 클라이언트에 등록하세요. Claude Code에서는 프로젝트 루트에 .mcp.json 파일을 사용합니다:
{
"mcpServers": {
"dosbox": {
"command": "python",
"args": ["-m", "dosbox_mcp.server"],
"env": {
"DOSBOX_MCP_PROFILE_DIR": "dosbox-x/profiles",
"DOSBOX_MCP_EXECUTABLE": "dosbox-x/dosbox-x.exe"
}
}
}
}변수 | 의미 |
| 프로필이 있는 위치 (기본값: 패키지의 |
| 기본 프로필 이름; 프로필을 사용하지 않으려면 |
| 실행할 |
| 상대 출력 경로 또는 참조 경로를 해석할 기준 디렉터리 |
도구가 읽거나 쓰는 모든 경로는 하나의 규칙을 따릅니다: 절대 경로는 주어진 것을 그대로 사용, 상대 경로는 DOSBOX_MCP_OUTPUT_DIR 아래로 해석됩니다. 도구는 해석된 경로를 반환하므로, 파일이 어디로 저장되었는지 의심할 필요가 없습니다.
도구
도구 | 하는 일 |
| 이 호스트가 할 수 있션과 할 수 없는 것 |
| 프로필 목록; 특정 프로필의 명명된 오프셋 표시 |
| DOSBox-X를 시작하고 게스트가 제어 가능해질 때까지 대기 |
| 이미 실행 중인 에뮬레이터에 pid로 연결 |
| 연결된 세션 + 기타 DOSBox-X 윈도우들 |
| 세션 종료 |
| 게스트를 찾고 모든 로드된 프로그램 나열하기 — 프로필 없이 가능 |
| 바이트 패턴을 찾아 게스트 |
| BIOS 키보드 링에 키를 입력 |
| 게임 자체마우스 워드로 클릭 |
| 버튼을 누른 상태를 (선택적으로 메모리 테스트가 통과할 때까지) 유지 |
| 데이터 세그먼트 또는 임ⅰ이 segment 읽기 |
| 데이터 세그먼트 또는 임으의 segment 패치 |
| 64 KiB 세그먼트 전체를 파일로 쓰기 |
| 메모리 필드가 테스트를 만족할 때까지 대기 |
| 감시 목록을 시간에 따라 TSV로 샘플링 |
| 현재 프레임을 이미지로 반환 |
| 비디오 메모리나 창에서 정확한 프레임을 저장 |
| 비디오 메모리에서 페이지를 직접 읽습니다 |
| 일정 구간 동안의 모든 고유 프레임과 타임스탬프 |
| DOSBox-X 자체 메뉴 항목 하나를 실행 |
| OPL, MIDI 또는 WAVE 출력을 파일로 기록 |
| 추적에 충분한 빈 공간(0으로 채워진 연속 구간)을 찾기 |
| 실행 중인 |
| 추적에서 기록된 내용 읽기 |
| 호출 지점을 원래대로 복원하고 케이브를 비우기 |
오프셋이 허용되는 곳이면 어디든 프로필 심볼 이름도 쓸 수 있습니다 — 0x634A 대신 treasure. 유
아직 프로필이 없는 게임에서 시작하기
프로필이 선행 조건은 아닙니다. 이것이 첫 세션 전체입니다:
dosbox_launch(config="game.conf", profile="none") → pid
dosbox_find_guest()
→ 640 KiB, INT 21h live, and:
JP2D load segment 2456 1.1 MB C:\JP\JP2D.EXE
JP load segment 08A1 64 KB C:\JP\JP.EXE
COMMAND load segment 0801 16 KB C:\COMMAND.COM
dosbox_search_memory(text="sprites.dbt") → 2456:027A
dosbox_dump_segment(path="jp2d.bin", segment="0x2456")그 덤프가 프로필의 마커입니다. 실행할 때마다 변하지 않을 50~100바이트를 그 안에서 고르고, 값싼 검사를 두세 개 추가하면, 모든 DS-relative 도구가 이름만으로 동작하기 시작합니다.
화면 읽기
dosbox_read_framebuffer는 호출한 순간에 게스트가 기록한 팔레트 인덱스를 반환합니다. 정확하고, 중간에 그려지다 만 프레임을 잡을 수 없으며, 게스트에게 아무 실효가 걸리지 않습니다. 따라서 측정 대상이라면 이 경로를 우선 사용하는 것이 옳습니다.
이 방식은오수 프레임이 필요하며, 그 사실을 추측이 아닌 명시적으로 알려줍니다. 페이지를 찾는 일은 수백 메가바이트 중에서 64,000 바이트를 찾는 것과 같고, 단순한 일관성만으로는 부족합니다. 실제 실행 중인게임에서 blind scan을 수행해 보면 0.999 점수를 낸 페이지가 반환되지만, 이는 화면이 아니라 디코딩된 스프라이트 뱅크일 리 있습니다. 그래서 reference=에 지금 화면에 보이는 내용을 담은 64,000바이트 파일을 넘기면, 그 페이지가 바이트 단위로 확인됩니다:
dosbox_read_framebuffer(reference="credits_logo.bin", stem="shots/logo")
→ page_offset 16, confirmed true, pages [16, 64016, 128016, 192016]참조 프레임을 입수할 곳:
개발 중인 포트라면 무료로 가진다 — 동일한 화면을 자체 렌더링한 결과가 바로 그것이다. 이것 또한 비교할 만한 가치가 있다: 두 파일이 바이트 단위로 일치한다면, 그 포트의 렌더러가 올바른 것이다.
동일 화면을 이전에 확인한 캡처가 있다면 그걸로 다시 확인할 수 있습니다.
프로필에팔레트가 있다면 window 사진을 자동으로 사용하며, 별도 인자가 필요 없습니다.
확인이 끝난 위치(name)는 캐시되므로, 이후에 읽는 모든 것과 dosbox_watch_frames의 모든 프레임은 거의 즉시 사용할 수 있습니다. 직접 검증해 보고 싶다면 allow_unconfirmed=true로, 맹목 스캔이 뽑아낸 유력 후보를 받아볼 수도 있습니다.
페이지는 반드시 예상 위치에 있는 것은 아닙니다. CRTC 시작 주소가 가리키는 곳에서 시작하며, 이는 단지 4바이트 경계일 뿐이며 그보다 더 조악한 단위는 아닙니다. 실제로 측정한 한 사례는 오프셋 16에 있었다.
프로필
프로필은 하나의 게임을 설명하는 JSON 파일 하나입니다: 데이터 세그먼트를 어떤 특성으로 알아볼 것인지, 마우스 상태가 어디에 들어 있는지, 화면 크기와 팔레트, 명명된 오프셋, 감시 세트및 기지국 케이브 등을 정의합니다.
profiles/example.json은 주석이 있는 템플릿이며, OpenJP 저장소에는 1993년 출시된 실제 게임에 대해 만들어진 실제 프로필이 담겨 있습니다.
{
"name": "example",
"ds_segment": "0x1234",
"marker": { "bytes": "6578616d706c652e64617400", "offset": "0x0100" },
"checks": [ { "kind": "cstring_via_pointer", "pointer": "0x0200", "value": "game" } ],
"mouse": { "buttons": "0x00B2", "position": "0x00B6" },
"screen": { "width": 320, "height": 200 },
"symbols": { "lives": { "offset": "0x1234", "size": 1, "description": "Lives left." } },
"watch_sets": { "player": ["lives", "score", "level"] }
}마커는 직접 bytes hex 형식으로 넣거나, 참조 덤프에서 잘라낼 수 있습니다 (source_dump + offset + length). 사용할 수 있는 검사는 cstring_via_pointer, max, max_range, equals입니다. 오탐지 가능성을 사실상 배제하기에 충분합니다. 이것이 중요한 이유는, 그 대안이 무작위 할당 메모리를 수정하는 것이기 때문입니다.
플랫폼
Windows | Linux | macOS | |
게스트 메모리, 세그먼트 tracked, 키, 클릭 | 예 | 예 | 백엔드 없음 |
프레임버퍼, 샘플링, 추적 | 예 | 예 | 백엔드 없음 |
창 목록, 캡처, 크기 조절 | 예 | X11 지원 | — |
에뮬레이터 메뉴 명령 | 예 | 아니오 — 격리 디스플레이 사용 | — |
오프스크린 디스플레이 | — |
| — |
dosbox_capabilities는 실행 중인 호스트에 대해 이 모든 것을 보고하므로, 추측하지 말고 물어보세요.
Linux에서 kernel.yama.ptrace_scope는 Windows의 무결성 수준(integrity level)과 똑같이 다른 프로세스의 메모리에 대한 접근을 통제합니다.
값 | 영향을 줍니다 |
| 동일 uid 프로세스 모두 가능 — |
| 자손 프로세스만 возможен — |
|
|
| attach 자체가 불가능 |
일반적인 기본값에서는 attach보다 launch를 사용하세요. 서버는 sysctl을 읽고 그 사실을 알려 주므로, 필요한 안내 없이 EPERM만 내보내지 않습니다.
Linux는 컴포짓 매니저 없이 가려진 창을 촬영할 방법이 없고, Wayland에는 클라이언트 간 캡처가 전혀 없습니다. 해답은 PrintWindow를 흉내 내는 것이 아니라, 그 함수가 존재하는 이유인 제약을 제거하는 것입니다. dosbox_launch(isolated=true)는 에뮬레이터를 전용 Xvfb 디스플레이에 띄웁니다. 그렇게 하면 보호할 데스크톱이 없어지고, 에뮬레이터 자체의 키보드 단축키도 다른 누군가의 키 입력을 빼앗지 않고 사용할 수 있습니다.
macOS는 task_for_pid가 필요하므로, 루트 권한 또는 서명되고 entitlement가 있는 바이너리가 필요합니다. 이에 해당하는 백엔드는 없습니다.
주의사항
에뮬레이터에 접근할 수 있어야 합니다. Windows에서는 동일한 무결성 수준, Linux에서는 이를 허용하는
ptrace_scope가 필요합니다.프로필당 한 번에 하나의 에뮬레이터만 존재할 수 있습니다. 같은 게임을 실행하는 게스트가 둘 이상 있으면 세그먼트 스캔이 모호해지므로, 서버는 추측하는 대신 거부합니다.
dosbox_capture_screen에서source="window"를 사용하면 정확한 정수 배율을 얻기 위해 에뮬레이터 창 크기를 조정합니다. 이것이 이 서버가 데스크톱에 미치는 유일한 보이는 영향이며, 더 빠르고 반그려진 프레임을 잡지 못하는source="vram"을 선호하는 이유입니다.창을 촬영하는 것은 게스트의 실제 시간을 소모합니다. 촬영 루프는 게스트에게 보이는 단계를 약 1.6배로 늘립니다. 정량적인 작업이 필요하면 framebuffer를 사용하세요.
일부 게임에서는 클릭 한 번으로 “클릭하며 계속하기” 페이지를 두 장 넘길 수 있습니다. 목록을 넘길 때는 키를 보내세요.
h 실행 중인 게임에 쓰는 것은 되돌릴 수 없으며, 설정 직후에 게임이 그 필드를 다시 계산할 수 있습니다. 필드가 다시 계산되기 전에 읽힐 순간에 패치하세요.
트레이스 메모리 캡처는 케이브가 실행될 때
DS가 담고 있는 값을 통해 읽습니다. 데이터 세그먼트가 하나뿐인 게임에서는 이렇게 해도 완전히 정확합니다. 그러나DS를 전환하는 루틴의 경우에는ds도 함께 캡처하고 확인하세요.비디오 메모리에서 읽어내는 것은 chain-4 linear 모드 13h뿐입니다. 그 외에는
source="window"가 필요합니다.맹검(블라인드) framebuffer 스캔은 답이 아니라 힌트이며, 미확인 상태로 보고됩니다. 기준(reference) 프레임을 제공하세요.
개발
pip install -e ".[dev,all]"
pytest이 테스트 스위트는 완전히 오프라인입니다. DOS 게스트, 메모리 체인, chain-4 framebuffer, 추적 가능한 코드 세그먼트가 모두 bytearray 안에 구성되어 있어 에뮬레이터나 게임 없이도 가능한 모든 플랫폼에서 실행됩니다. 다루지 않는 것은 맨 아래의 두 시스템 호출입니다. 다른 프로세스의 읽기와 쓰기, 그리고 창 캡처가 그것입니다.
라이선스
MIT.
Available Tools
26 toolsdosbox_attachA
Attach to a DOSBox-X process that is already running, by process id, and locate the game's data segment inside it. Use dosbox_sessions to find candidate process ids.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | DOSBox-X process id. | |
| profile | 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 indicate this is not read-only and not destructive, so the description's added value is describing the stateful attach behavior and the goal of locating the game's data segment. It does not explain deeper behavioral consequences, such as what becomes attached or how this affects later memory operations, but it is not misleading.
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 the primary action front-loaded and the useful session-discovery hint included second. It contains no filler or repeated schema 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?
The description covers the key action and pid discovery, but the profile parameter is left unexplained and the exact state changed by attaching is not stated. An output schema exists, which reduces the need to describe return values, but the gaps around profile and attach semantics keep this from being fully 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?
The schema gives a clear description for pid, and the description usefully enriches it by pointing to dosbox_sessions as the way to find candidate pids. However, the profile parameter has no description in the schema and is not explained anywhere in the tool description, leaving its semantics unclear. With 50% schema coverage, the description needed to compensate but only partially does.
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: attach to a running DOSBox-X process by process ID and locate the game's data segment. It distinguishes itself from sibling tools like dosbox_launch and dosbox_sessions by focusing on an already-running process and by identifying a concrete resource (the game data segment).
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 that the target must already be running and explicitly tells the agent to use dosbox_sessions to find candidate process IDs. It does not explicitly say when not to use this tool or name alternatives, but the usage context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_capabilitiesARead-only
What this host can do, and what it cannot. Guest memory works everywhere there is a backend; window capture and the emulator's own menu commands do not. Call this when a tool refuses, or before planning a session that depends on frames or recordings.
| 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?
Though the readOnlyHint annotation already signals a safe read operation, the description adds meaningful behavioral detail beyond that: it openly discloses specific host limitations (window capture and emulator menu commands are unavailable) and frames/recordings dependency caveats. This is useful context an agent cannot infer from structured fields 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-loaded with the core purpose, then specific constraints, and then usage triggers. Every sentence carries information and there is 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?
With zero parameters, an output schema present, and readOnlyHint true, the description covers everything an agent needs: what this tool provides, what it does not provide, and when to invoke it. There are no missing contextual details that would prevent correct selection or 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 tool takes zero parameters and schema coverage is trivially 100%, so the baseline for this dimension is 4. The description adds context about the tool's purpose without discussing parameters, but none are needed. It does not compensate for absent parameters; it doesn't need to.
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 purpose: enumerating host capabilities and limitations, with concrete examples ('Guest memory works everywhere there is a backend; window capture and the emulator's own menu commands do not'). It is clearly distinct from the sibling tools, which are actionable operations (launch, capture, read memory, etc.) rather than a capabilities overview.
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?
Explicit usage guidance is provided: 'Call this when a tool refuses, or before planning a session that depends on frames or recordings.' This directly tells the agent when the tool should be consulted, which is exactly the kind of contextual advice the rubric rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_capture_screenA
Capture the current frame exactly and save it: .rgb (one byte per pixel), .png, and with with_segment also _ds.bin, the data segment from the same instant -- which is what makes a captured frame replayable as a fixture.
source='vram' reads the frame out of the emulator's video memory, which is exact, cheap, cannot catch a half-drawn frame and does not slow the guest. source='window' photographs the window instead, resizing it to an integer multiple of the guest resolution; that is the one visible effect this server has on the desktop, and it costs the guest real time. 'auto' takes video memory when the page has been CONFIRMED against a reference and falls back to the window otherwise, so it never quietly saves the wrong 64,000 bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| stem | Yes | Output path without a suffix; relative to DOSBOX_MCP_OUTPUT_DIR. | |
| exact | No | Require every pixel to be a palette colour. | |
| scale | No | Window scale to capture at, for source='window'. | |
| source | No | auto | |
| reference | No | Path to a 64,000-byte frame on screen now; confirms a vram capture. | |
| with_segment | No | Also dump the data segment from the same instant. | |
| settle_seconds | No | Wait for the window to finish resizing. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing writes to multiple files, vram vs window behavior, the desktop-visible resize effect, guest slowdown cost, and the auto source's confirmation fallback. This substantially enriches the sparse readOnly/destructive hints without contradicting 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 wording is dense but every sentence earns its place; the most important action is front-loaded, and the source-mode explanation is directly tied to real behavioral tradeoffs. Minor awkwardness around 'with with_segment' does not undermine actual clarity.
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 is complete for frame capture, source selection, output artifacts, and side effects, and an output schema exists for return values. It could be even more complete with an explicit note about when the optional pid would be needed and how capture differs from segment-only dumping, but nothing essential for calling it correctly is missing.
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 coverage is 75%, and the description adds real meaning beyond the schema, especially for source, where it explains exactly what each enum value means and how auto avoids saving incorrect data. It also clarifies with_segment and output naming. It does not explain pid, but that is optional and less central.
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 first sentence states a specific action ('Capture the current frame exactly and save it'), identifies the resource (the current frame), and lists the concrete output artifacts. The mention of a replayable fixture makes the tool's role distinct from view-only or memory-read 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 gives strong within-tool source guidance: when to use vram, window, or auto. However, it does not explicitly say when to choose this tool over siblings such as dosbox_view_screen or dosbox_record, so an agent must infer the boundary between capturing a saveable frame and other observation workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_clickA
Click at a guest screen coordinate by writing the game's own mouse state, the words its INT 33h handler normally fills in. The host pointer never moves. The state is rewritten continuously for duration because the game's handler keeps overwriting it; a single write usually loses that race. Beware: on 'click to continue' pages one click can advance two pages -- send a key instead when paging through lists.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Guest X, 0 to screen width - 1. | |
| y | Yes | Guest Y, 0 to screen height - 1. | |
| pid | No | ||
| button | No | 1 left, 2 right, 3 both. | |
| duration_seconds | No | How long to hold the click. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals multiple non-obvious behavioral details: the host pointer never moves, the mouse state must be rewritten continuously for duration, a single write usually loses to the game handler, and one click can advance two pages. These go well beyond the annotations and materially improve agent decision-making.
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 compact and front-loaded: purpose, mechanism, timing behavior, and a cautionary alternative all appear in a few dense sentences without filler 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 annotations cover safety and an output schema exists, the description provides the remaining critical context: what the tool actually alters, why duration is needed, and when to prefer a key. An agent has enough information to call this tool correctly in most DOS game 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?
Schema coverage is 80%, so the schema already documents most parameters. The description adds real semantic value for duration_seconds by explaining why the duration exists and why a single write is insufficient, and 'guest screen coordinate' reinforces x/y meaning.
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 starts with a specific verb and resource: 'Click at a guest screen coordinate' and clarifies the unusual mechanism by writing the game's own mouse state. It clearly separates this from the other input tools in the sibling list, such as dosbox_send_keys and dosbox_hold_buttons.
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 gives useful context for using the tool and explicitly recommends 'send a key instead' for the 'click to continue' paging case. It does not offer a full when-to-use vs. when-to-avoid comparison across all sibling tools, but the guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_dump_segmentARead-only
Write a whole 64 KiB guest segment to a file -- the state at one instant, for later analysis or as a test fixture. With no segment this is the profile's data segment; with segment=0x1234 it is any segment in the guest, which is how the marker for a new profile is captured.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| path | Yes | Output file; a relative path goes under DOSBOX_MCP_OUTPUT_DIR. | |
| segment | No | Guest segment; omit for the profile's data segment. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given readOnlyHint and openWorldHint are already present, the description adds useful behavioral detail: it always dumps the full 64 KiB segment, captures the state at one instant, defaults to the profile's data segment, and treats segment=0x1234 as the marker-capture mechanism. It does not describe overwrite/path-creation behavior, but it does not contradict the read-only annotation because it reads guest memory and writes an output file.
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 carry the full behavioral contract: the primary operation first, then the default segment behavior and special marker use. Every clause contributes semantics, so it is concise without being vague.
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 and readOnly/openWorld annotations, the description is nearly complete for selecting and invoking the tool: it covers the size, snapshot semantics, default segment, arbitrary segment values, and marker use. The main gap is pid, which the agent must infer refers to the target session/profile.
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 already documents path and segment, and the description adds useful segment semantics by explaining that segment=0x1234 targets any guest segment and is used for capturing a marker. The pid parameter remains undocumented in both the schema description and the tool description, keeping this from a perfect score.
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 names the operation precisely: 'Write a whole 64 KiB guest segment to a file' as a one-instant snapshot. This clearly distinguishes it from interactive memory tools like dosbox_read_memory or dosbox_write_memory by emphasizing the whole-segment file output and its analysis/fixture 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?
It provides concrete usage contexts: 'for later analysis or as a test fixture' and 'how the marker for a new profile is captured.' It does not explicitly name sibling alternatives or say when not to use it, but the intended use is easy to infer from the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_emulator_commandA
Fire one of DOSBox-X's own menu items without focus and without a keystroke: record_opl, record_midi, record_wave, record_video, screenshot, save_state, load_state. Firing a record action again stops that recording. Windows only -- DOSBox-X draws its own menu elsewhere; see dosbox_capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| action | Yes | record_opl, record_midi, record_wave, record_video, screenshot, save_state, load_state. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds genuinely useful behavior beyond what the schema and annotations expose: firing a record action again stops that recording, actions are fired without focus, and Windows is a required platform because DOSBox-X draws its own menu elsewhere. These details are non-obvious and not available in the structured fields. The annotation flags (readOnlyHint=false, destructiveHint=false) align with the described behavior, and the description contradicts nothing.
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 compact and efficient: the first sentence delivers the core purpose and action list, the second adds the important toggling behavior, and the third isolates platform restrictions and a pointer to a related tool. It front-loads the most important information and keeps total length short, although it duplicate the action list from the schema somewhat.
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 there is an output schema, the return format does not need to be explained, and the tool's complexity is modest—one required parameter plus an optional pid. The description is enough to perform the call correctly for the typical case, but it does omit pid semantics and does not describe whether pid must refer to a specific session or process, leaving a small but real gap.
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 description adds meaning to the 'action' parameter by explaining that these are DOSBox-X menu items and that record actions toggle on/off. However, it mostly restates the list already present in the action parameter's schema description. More importantly, the 'pid' parameter has no description in the schema and none in the tool description, and at 50% schema coverage the description fails to compensate for explaining how or when the optional pid should be provided.
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 identifies a specific action: firing DOSBox-X's own menu items, and enumerates all seven supported action values. It also distinguishes itself from keystroke or focus-based input by explicitly saying it acts 'without focus and without a keystroke.' However, it does not explicitly distinguish itself from overlapping siblings like dosbox_record or dosbox_capture_screen, so an agent must infer those boundaries.
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 context is clear: it is for menu actions when keyboard/focus simulation is not appropriate, and it even notes a Windows-only restriction with a pointer to dosbox_capabilities. That said, it never explicitly says 'use this instead of X when Y' or mentions alternatives like dosbox_send_keys, dosbox_record, or dosbox_capture_screen, leaving some selection inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_find_caveARead-only
Find runs of zero in a guest code segment long enough to hold a trace cave. Padding between routines is the usual supply. Longest first; pass one of these offsets to dosbox_install_trace.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| segment | Yes | Guest code segment, e.g. 0x1000. | |
| bytes_needed | No | How much room the cave needs. |
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 safe-read nature is covered. The description adds behavioral detail beyond that: it returns zero-run candidate gaps, orders them longest first, and indicates the guest segment context. It does not cover edge cases such as 'no suitable cave found', but the existing annotation and output schema partly mitigate that.
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?
Three short sentences, each signing significant value: what the tool does, where the supply is typically found, and how to use the result. The key behavioral constraint ('longest first') is front-loaded and the follow-up call is clearly mentioned. There is no redundant filler.
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 the task of finding and using a trace cave, the description is essentially complete: it explains the search target, ordering, and next action. The only missing nuance is handling the pid parameter and the absence of an explicit failure case, but these are minor because the schema and output schema clarify the interface.
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 67%, with segment and bytes_needed already described in the schema. The description reinforces that bytes_needed corresponds to the amount of room the cave needs, but it does not explain the pid parameter, which has no schema description. Overall, the description adds only modest parameter-level value beyond the 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 states the exact operation: 'Find runs of zero in a guest code segment long enough to hold a trace cave.' It clearly identifies the resource (guest code segment), the condition (runs long enough), and the intended purpose (a trace cave). It also references the downstream sibling tool dosbox_install_trace, so an agent can distinguish it from read/search/memory 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 actionable guidance: 'Padding between routines is the usual supply' tells where to look, and 'Longest first; pass one of these offsets to dosbox_install_trace' tells what to do with the result. It names the immediate sibling for the follow-up action, though it does not explicitly state when not to use this tool or describe alternative routes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_find_guestARead-only
Find the DOS guest inside an emulator process and report what is loaded in it -- with no profile and no prior knowledge. This is the way in for a game nobody has described yet: it locates guest physical zero from the BIOS data area, then walks the DOS memory chain and names every loaded program, its load segment and the path it was started from. Those segments are what dosbox_read_memory(segment=...) and dosbox_search_memory take, and what a new profile is written from.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | 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 say readOnlyHint=true and openWorldHint=true. The description adds real behavioral depth: it locates guest physical zero from the BIOS data area, walks the DOS memory chain, and reports every loaded program with segment and source path. Nothing about the description contradicts the read-only 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, purpose-first, and the key output (segments, paths) is front-loaded. However, it repeats the the same idea twice: 'with no profile and no prior knowledge' and 'a game nobody has described yet', plus the closing sentence adds useful context but could be trimmed.
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?
There is an output schema so return values are covered, and the description explains what to do with the results (read/search memory and seed the profile). However, it is silent about how the target emulator process is selected via pid and what happens when pid is omitted, and it does not mention the likely prerequisite of an existing launched/attached process.
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 single `pid` parameter has 0% schema description coverage, yet the description never explains what pid means, how to select the emulator process, or what happens when it is null. The phrase 'inside an emulator process' indirectly suggests pid is the OS process ID, but the agent is left to infer an important prerequisite in order to invoke the tool correctly.
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 + resource: find the DOS guest in an emulator process and report what is loaded in it. It further defines the output as loaded programs, load segments, and paths, and explicitly marks it as the entry point for games with no profile or prior knowledge, which differentiates it from the profile/session/launch tools in the sibling list.
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 gives a clear when-to-use scenario: a game nobody has described yet, with no profile and no prior knowledge, and says this is the way in. It also explains how the output feeds dosbox_read_memory, dosbox_search_memory, and profile creation. It stops short of 5 because it does not explicitly name alternative tools or say when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_hold_buttonsA
Hold mouse buttons down for a stretch of time by writing the guest's button word continuously -- the way to drive anything that reads a held button, such as an action sequence that only advances while a button is down. Sparse writes lose to the game's own interrupt handler, so this busy-writes. Give stop_when to release as soon as a memory field says the sequence is over, instead of holding for the full time.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| buttons | No | 1 left, 2 right, 3 both. | |
| seconds | Yes | Maximum time to hold. | |
| poll_seconds | No | ||
| stop_when_size | No | ||
| stop_when_any_of | No | ||
| stop_when_equals | No | ||
| stop_when_offset | No | Offset or symbol to watch while holding. | |
| stop_when_at_least | 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 annotations, it reveals the tool busy-writes, explains why ("sparse writes lose to the game's own interrupt handler"), and describes the early-release behavior via stop_when and memory fields. This gives strong behavioral insight that an agent needs to understand the tool's side effects.
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 tight and front-loaded: first states the primary action, then explains why busy-writing is necessary, then clarifies how to stop early. No sentence is filler, and the key information is delivered early.
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 9-parameter surface area, the description explains the important behaviors adequately: holding, busy-writing, and stop_when release. While some optional parameter details are only implicit, the required parameter and core usage are clear enough, and an output schema exists to cover return-value expectations.
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 only 33%, and the description does not compensate for the many undocumented parameters. It only broadly mentions stop_when, leaving poll_seconds, stop_when_size, stop_when_any_of, stop_when_equals, and other semantics to be inferred 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 opens with a specific verb and resource: "Hold mouse buttons down for a stretch of time." It also distinguishes this from related operations by explaining it is used for "anything that reads a held button" such as an action sequence, 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 gives clear context for when to use the tool: when the game or guest needs a continuous held-button signal and "sparse writes lose to the game's own interrupt handler." It does not explicitly name sibling tools like dosbox_click as alternatives, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_install_traceADestructive
Watch a running guest's code without a debugger. Redirects one near CALL in the live code segment through a zero-filled cave that calls the displaced target, preserves its flags, and records the registers and memory words you name -- then read them with dosbox_read_trace while the guest runs at full speed. Nothing on disk changes; the patch dies with the emulator. captures take: a register (ax bx cx dx si di bp sp), a segment register (ds es ss cs), flags, or memory -- word:0x9D10, byte:DS:0x7A0E, word:ES:0x0004. Memory is read through whatever DS holds when the cave runs; capture ds too if the routine changes it. Give expect_hex (the three bytes the call site should hold) so the trace refuses rather than landing on a moved target.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| handle | No | Name for this trace; defaults to segment_offset. | |
| call_at | Yes | Offset of the near CALL to displace. | |
| cave_at | Yes | Offset of a zero-filled run, from dosbox_find_cave. | |
| segment | Yes | Guest code segment. | |
| captures | Yes | What to record at each hit. | |
| expect_hex | No | The three bytes the call site must hold. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond the annotations: it patches only live memory, calls the displaced target, preserves flags, records at each hit, and says the patch dies with the emulator. It also warns about the DS-relative memory caveat and the safety behavior of expect_hex.
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 long, but every sentence carries essential information: purpose, mechanism, lifecycle, capture format, memory caveat, and safety check. It is front-loaded with the core intent and then layers technical details without filler.
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 code-injection tooling, the description covers the workflow, prerequisites, parameter semantics, and side effects thoroughly. The presence of an output schema removes the need to duplicate return-value details, and nothing critical for invoking the tool correctly appears missing.
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 only gives names and short labels, but the description adds real semantics: exact capture syntax for registers, segment registers, flags, and memory addresses, plus the contract for expect_hex. This significantly reduces ambiguity about how to construct valid calls.
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 names a specific verb and resource: it installs a trace/hook that displaces one near CALL in a running guest, routes it through a cave, and records targeted registers/memory. This clearly distinguishes it from related tools like dosbox_read_trace and dosbox_remove_trace.
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 gives clear context for when to use it — watching code in a running guest without a debugger, then reading captured data via dosbox_read_trace. It also explains prerequisites like using a zero-filled cave from dosbox_find_cave, but it does not explicitly list when-not-to-use conditions or compare against other trace/read alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_launchA
Start DOSBox-X with a config file and attach to it. Returns the process id every other tool takes. The config's [autoexec] section decides what runs; an AUTOTYPE line there is the reliable way past intro screens. Waits until the guest is findable, so a successful call means it is really up and drivable. On Linux, isolated=true puts the emulator on its own Xvfb display -- entirely off the user's desktop, and the only way the emulator's own keyboard shortcuts can be used without taking a keystroke from whatever the user is doing.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | Path to the DOSBox-X .conf file. | |
| profile | No | Profile name or path. | |
| isolated | No | Linux only: run on a private Xvfb display. | |
| executable | No | dosbox-x.exe to run; defaults to DOSBOX_MCP_EXECUTABLE. | |
| wait_seconds | No | How long to wait for the guest. | |
| working_directory | 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 goes well beyond annotations by disclosing that a successful call means the guest is genuinely up and drivable, and that on Linux isolated=true runs on Xvfb and avoids stealing keystrokes. It also explains the return value role and startup waiting behavior, providing valuable 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?
The description is a few sentences long but every sentence contributes practical information. The most important action and output are front-loaded, followed by config guidance and the isolated-mode caveat. It is slightly long but justified by the tool's launch 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?
The description explains the key behavioral outcome, return value, and a platform-specific nuance. With 6 parameters and an output schema present, the schema covers most parameter details and the description fills in the operational context. It is sufficiently complete for an agent to successfully use and interpret the result, though it does not dive into all parameter edge cases.
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 high (83%), so the baseline is 3. The description adds semantic value by explaining that the config's [autoexec] section controls execution and that AUTOTYPE is the reliable path past intro screens, which clarifies the primary parameter's use. It also reinforces isolated behavior, giving it above-baseline value.
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 starts DOSBox-X with a config file and attaches to it, a specific verb and resource. It differentiates from siblings by explaining that the returned process ID is the identifier other tools take, which positions it distinctly among the sibling toolset.
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 establishes when to use this tool: to launch and attach to a DOSBox-X session. It provides practical context such as the [autoexec] section and AUTOTYPE line for intro screens, but doesn't explicitly contrast with alternatives like dosbox_attach or dosbox_profiles. This is strong contextual guidance, but lacks explicit exclusions or when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_profilesARead-only
List the game profiles this server knows and, for one of them, every named memory offset it exposes. A profile says how to recognise the game's data segment, where the game keeps its mouse state, and what its screen looks like. Call this first: the symbol names it returns can be used anywhere an offset is accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | 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 readOnlyHint=true, so the safe/read-only nature is covered. The description adds useful context beyond the annotations by explaining what a profile represents and how the returned symbols integrate with other tools, without contradicting the read-only hint.
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?
Three concise sentences, each earning its place: the action, the profile concept, and the call-first guidance. No filler or repetition of schema details.
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 read-only purpose, the kind of data returned, and the key integration contract (symbols usable anywhere offsets are accepted). It does not spell out null/omitted behavior or unknown-profile handling, but an output schema exists and the tool is simple enough that the gap is minor.
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 coverage is 0%, so the description must carry the parameter meaning. It implies the optional 'profile' selects one game profile and exposes its named offsets, but it never explicitly states what happens when the parameter is omitted or null, or that 'profile' expects a profile name from the returned list.
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 identifies a specific verb ('List') and resource ('game profiles', 'named memory offsets'), and explains what a profile describes. This clearly separates it from the mutation and session-oriented sibling tools and makes its role as a discovery tool 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 explicitly says to call this tool first and notes that the returned symbol names can be reused anywhere an offset is accepted. It gives clear when-to-use guidance, though it does not state when not to use it or point to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_quitADestructive
Close a DOSBox-X session. By default only sessions this server launched may be killed; pass force to end one it merely attached to. The guest is not asked to save anything first.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | Process id; omit if only one is attached. | |
| force | No | Allow killing a process this server did not start. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses the critical behavioral detail that the guest is not prompted to save anything first, which is essential for an agent to evaluate risk. It also clarifies the forced relationship — that by default only server-launched sessions can be killed, and force is needed for attached sessions. These details go well beyond the readOnly/destructive hints.
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?
Three short, purposeful sentences cover the core action, the condition for force, and the critical consequence about unsaved guest state. There is no redundancy or fluff, and the most important information is front-loaded.
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 a simple, parameter-light operation with a clear safety profile; the description covers the destructive action, the force/ownership policy, and the unsaved-data consequence. Given the output schema exists and the input schema already documents both parameters, nothing else is needed for an agent to select and invoke this 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 already documents both pid with a clear description and force with a clear description, achieving full schema coverage. The description adds value by clarifying the force behavior in terms of sessions the server merely attached to, h but it adds no extra pid nuances. Given the schema's high coverage, a score above baseline is still justified.
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 opens with a specific verb+resource action, 'Close a DOSBox-X session,' which clearly identifies the tool's purpose among siblings like launch, attach, and emulator_command. The additional nuance about launched vs. attached sessions further disambiguates its operational scope.
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 operational context: the default applies to sessions the server launched, and the condition for using force is described directly. It does not explicitly name alternatives or state when not to use this tool, but the warning that the guest will not be asked to save implicitly tells agents to ensure saving happens elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_read_framebufferARead-only
Read the guest's screen straight out of the emulator's video memory: the palette indices the guest wrote, at the instant of the read, with no window, no scaling and no palette round trip. Prefer this over dosbox_capture_screen for anything quantitative -- photographing the window costs the guest real time and can catch a half-drawn frame.
FINDING THE PAGE NEEDS A REFERENCE. Give reference= a 64,000-byte frame of what is on screen and the page is confirmed byte for byte; without one this refuses, because a blind scan finds the most picture-like page in memory and on a real guest that is often a sprite bank or an offscreen buffer. Once confirmed the location is cached and every later read is free. allow_unconfirmed=true takes the guess anyway.
Writes .bin (one byte per pixel) and .png when stem is given. A page-flipping game has more than one page; pass page_offset from the pages list to read the other.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| stem | No | Output path without a suffix; omit to only report. | |
| relocate | No | Search for the page again rather than reusing the cached one. | |
| reference | No | Path to a 64,000-byte frame of what is on screen, to confirm the page. | |
| page_offset | No | Byte offset of the page, from a previous call's pages list. | |
| allow_unconfirmed | No | Accept an unconfirmed blind scan; check the result yourself. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint by explaining that a reference page is required for confirmation, that a blind scan otherwise occurs but is refused, that confirmed locations are cached, and that the tool writes <stem>.bin and <stem>.png when a stem is provided. These are consequential observable behaviors an agent needs to know.
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?
Three paragraphs, each with a distinct job: what it is, the reference/caching constraint, and the outputs/page-flip behavior. It is longer than the minimal examples but stays dense and front-loaded; the all-caps phrase is loud but not actually redundant.
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 6-parameter tool with no required arguments, this description supplies the essential decision context: when to use it, what the reference requirement is, why the cache exists, what files are written, and how page_offset relates to page-flipping. With the output schema present, the return values need not be re-explained.
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 coverage is high (83%), so the schema does much of the work. The description adds meaningful semantics to reference (64,000-byte frame, byte-for-byte confirmation), stem (writes .bin/.png), page_offset (page-flipping games), and allow_unconfirmed (takes the unsafe blind scan). It does not add nuance for pid or expose the 'relocate' parameter by name, though schema descriptions cover those.
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 opens with a specific, purposeful verb and resource: "Read the guest's screen straight out of the emulator's video memory." It then precisely characterizes the return (palette indices at the instant of the read) and calls out the sibling it is not, dosbox_capture_screen, making the tool 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?
Explicit usage guidance: 'Prefer this over dosbox_capture_screen for anything quantitative,' with reasoning about guest-time cost and half-drawn frames. It also states the reference requirement, the refusal to guess by default, and when allow_unconfirmed is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_read_memoryARead-only
Read bytes from the guest. With no segment this is the game's own data segment and offset may be a profile symbol name; with segment=0x1234 it is any segment in the guest -- another program in a launcher chain, a TSR, an overlay, or the interrupt vector table at segment 0. Choose a format: hex (raw bytes), u8/u16/u32 (little-endian numbers), or text (NUL-terminated string). This is how to read game state -- money, a unit's health, which screen is up -- without any of it being visible on screen.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| format | No | hex | |
| length | No | Bytes to read. | |
| offset | Yes | Offset, or a symbol name when no segment is given. | |
| segment | No | Guest segment; omit for the profile's data segment. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, so the non-mutating behavior is covered. The description adds useful behavioral context beyond the annotations, including segment semantics, profile symbol offsets, and format interpretations like little-endian numbers or NUL-terminated text. It does not mention authentication, side effects, or limits, but those are minor for a read-only memory tool.
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 with a clear front-loaded action, followed by concrete addressing behavior, formats, and a motivating use case. Every sentence earns its place, and nothing feels like filler or repeated schema 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 the output schema exists and annotations already cover read-only behavior, the description is nearly complete for calling the tool. It covers the required option, offset semantics, segment behavior, format enum, and maximum scope. The only meaningful missing context is an explicit statement about when pid needs to be set, but that does not block the common case.
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 already documents offset, segment, and length, but the description adds meaningful semantics: symbol-name offsets only apply when segment is omitted, segment values can address another program/TSR/interrupt vector table, and format values have precise meanings (little-endian integers, NUL-terminated text). This compensates well for the remaining 40% schema coverage gap, though performance on pid remains untouched.
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 bytes from guest memory and explains the two addressing modes (default data segment vs. an explicit segment). It frames the purpose as reading game state such as money or health, which makes the resource scope obvious. It does not explicitly distinguish itself from sibling read-style tools like dosbox_read_framebuffer or dosbox_dump_segment, but the action and resource are specific.
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 usage context: use it to read guest memory state, with offset-as-symbol when no segment is provided and any segment when segment is provided. It even calls out this is 'how to read game state.' However, it does not explicitly list alternatives or state when not to use it, such as pointing to dosbox_search_memory or dosbox_write_memory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_read_traceARead-only
Read what an installed trace has recorded: the values from its most recent hit, and how many times it has fired. A hit count of zero means the traced call has not run -- which is itself an answer.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| handle | No | Trace handle; omit if only one is installed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, covering the non-mutating nature. The description adds meaningful context beyond those hints by disclosing that only the most recent hit is visible and that a hit count of zero is itself a useful answer.
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, with no filler. The core action and output shape come first, and the actionable interpretation of a zero hit count follows immediately. This is efficient and front-loaded.
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 output schema exists, annotations cover safety, and the operation is a simple trace read, the description provides enough operating context. The main residual gap is the undocumented pid parameter, but it is optional and handle is already described in the schema.
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 coverage is only 50%, and the description does not compensate for the undocumented pid parameter. The handle parameter does have schema-level meaning ('omit if only one is installed'), but the description itself adds no parameter-level guidance. An agent would have to infer what pid refers to.
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-resource pair: 'Read what an installed trace has recorded' and specifies exactly the returned information (most recent hit values and hit count). It also differentiates itself from siblings like dosbox_install_trace and dosbox_remove_trace by describing a read of existing recorded state.
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 clearly implies when to use it: after a trace is installed, to see whether it fired and what values were captured. Interpreting a zero hit count is also explicitly explained, which guides acting on the result. It does not explicitly name alternatives or state when not to use this tool, so it does not earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_recordA
Record the guest's sound for a stretch of time and return the file that appeared: an OPL register log (.dro), the MIDI stream (.mid) or the mixer output (.wav). This is the only independent record of what a game's sound driver actually writes. Arm it EARLY -- DOSBox-X starts an OPL capture at the guest's first register write, so arming late does not truncate the capture, it starts it somewhere else entirely.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| kind | No | record_opl | |
| config | No | Config file, to find its captures= directory. | |
| seconds | Yes | How long to record. | |
| settle_seconds | No | ||
| captures_directory | 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 annotations, the description reveals a genuinely non-obvious behavior: DOSBox-X starts an OPL capture at the guest's first register write, so arming late moves the capture window rather than truncating it. This is valuable behavioral context and is consistent with the annotations' readOnlyHint=false and destructiveHint=false.
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 compact and front-loaded: the first sentence states the action and output, the second states the tool's unique value, and the third gives the most critical timing caution. Every sentence earns its place and there is no redundant repetition of the schema or annotations.
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?
Because an output schema exists, the description does not need to detail the return value, but the tool still has six parameters and one enum option (record_video) that are only partially or inconsistently covered by the description. The core 'provide a duration and record audio' flow is well explained, but the video capture and file-location parameters could leave an agent guessing in less common invocations.
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 only 33% schema description coverage, the description partially compensates by mapping record kinds to file formats (.dro, .mid, .wav), which helps with the kind parameter. However, it ignores pid, settle_seconds, captures_directory, config's full role, and the record_video enum alternative, leaving several parameters under-explained.
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 action ('Record the guest's sound...') and clearly names the produced artifacts (.dro, .mid, .wav), so an agent can tell this is an audio-capture tool. However, it does not differentiate it from related siblings like dosbox_capture_screen or dosbox_sample, and it omits the record_video kind that appears in the schema.
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 phrase 'This is the only independent record of what a game's sound driver actually writes' gives a strong, explicit reason to use this tool over alternatives for sound-driver investigation. The early-arming warning also adds context, though it does not explicitly name sibling tools or say when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_remove_traceBDestructive
Remove an installed trace: the call site is restored first so nothing new can enter the cave, then the cave is blanked.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| handle | No | Trace handle; omit if only one is installed. |
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 indicate destructive=true and readOnly=false. The description adds useful process context: the call site is restored first to prevent new entries, then the cave is blanked. This goes beyond the annotations by describing the sequence and the protective safety step.
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 with the main action front-loaded and no unnecessary repetition. The use of metaphorical terms like 'cave' introduces slight ambiguity but does not bloat the description.
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, and the description sufficiently exposes the destructive process and ordering. However, it does not clarify how pid relates to the target trace or what the caller should do when multiple trace handles exist, which is meaningful for a destructive 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?
The description does not explain pid or handle, and schema coverage is only 50% (handle is documented but pid is not). Since the description must compensate for that gap, the lack of any parameter-level meaning leaves an agent guessing about how to identify the trace to remove.
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 phrase 'Remove an installed trace' names a specific verb and resource and clearly states the core action. The additional call-site/cave detail describes what removal entails, though it does not explicitly differentiate the tool from siblings like dosbox_install_trace or dosbox_read_trace.
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 about when to prefer this tool over alternatives, no mention of prerequisites, and no exclusions such as 'use dosbox_read_trace instead to inspect a trace.' The usage context is only implicit in the action named by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_sampleA
Sample a set of memory fields repeatedly and write the series as a TSV. dosbox_read_memory answers what a value is and dosbox_wait_for answers when it becomes something; this answers how it MOVES, which is what most questions about a running program actually are. Every field in a row comes from one snapshot, so the columns do not drift against each other. watch takes symbol names, offsets, or the name of a watch set the profile defines. The whole segment at the entry instant is dumped beside the TSV, so a question nobody thought to put in the watch list can still be answered offline.
| Name | Required | Description | Default |
|---|---|---|---|
| hz | No | Samples per second. | |
| out | No | Write <out>.tsv and <out>_entry_ds.bin. | |
| pid | No | ||
| pokes | No | Written once after the entry sample, before the series. | |
| watch | Yes | Symbols, offsets, or a watch-set name. | |
| seconds | No | How long to sample. | |
| settle_seconds | No | Wait between the entry sample and the pokes. |
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 annotations by explaining that each row shares a coherent snapshot (no column drift), that the output is an on-disk TSV plus an entry-time segment dump, and that the dump allows offline investigation. It does not enumerate every side effect, such as pokes, but the schema already documents those and the annotations are consistent.
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 front-loaded with the core purpose and each major sentence contributes useful context: the semantics, the sibling contrast, the snapshot consistency guarantee, and the side outputs. The rhetorical phrase 'which is what most questions about a running program actually are' is slightly extraneous but not bloated or confusing.
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 7-parameter tool with high schema coverage and supporting annotations, the description covers the conceptual essentials: what it samples, how it differs from siblings, and what output artifacts are produced. It does not spell out duration, frequency, or pokes flow, but those are already described in the input schema and the description is strong enough for selection and initial 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?
With 86% schema description coverage, the schema does most of the parameter-documentation work, so a baseline of 3 is appropriate. The description adds a little extra meaning by clarifying that watches can be symbols, offsets, or profile-defined watch sets and that the dump lets unreported questions be answered later, but it does not redefine the parameter contracts.
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 opens with a specific verb and resource: 'Sample a set of memory fields repeatedly and write the series as a TSV.' It then immediately distinguishes itself from dosbox_read_memory and dosbox_wait_for by positioning this tool as answering 'how it MOVES,' so an agent can tell what the tool does without opening the schema.
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 gives an explicit routing rule: dosbox_read_memory answers what a value is, dosbox_wait_for answers when it becomes something, and this tool answers how it moves over time. This is a genuine when-to-use vs. alternative-tool comparison, not just a vague statement of behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_search_memoryARead-only
Search the guest's 640 KiB of conventional memory for a byte pattern and report every hit as a guest segment:offset. This is how a known string -- a file name the game opens, a message it prints -- becomes the segment that holds it, which is the first step in writing a profile. Give text, or hex for raw bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | No | Raw bytes as hex, instead of text. | |
| pid | No | ||
| text | No | Literal text to find (latin-1). | |
| limit | 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 readOnlyHint and openWorldHint annotations: it states the exact memory region searched, that every hit is reported, and the output form as segment:offset. There are no hidden side effects or contradictions.
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?
Three compact sentences each carry functional weight: the operation and result, the motivating scenario, and the input modes. No padding or repetition of schema fields.
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 gives enough context about how to call the tool, what it returns, and why it matters in the profiling workflow. The main omission is guidance on pid/limit, but since zero parameters are required, defaults plus the schema cover most invocation 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 description explains the key text-versus-hex choice and suggests raw bytes, while the schema describes text as latin-1. However, pid and limit are not documented anywhere, and with 50% schema coverage the description should have compensated a bit more for those two unexplained 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 clearly states a specific operation: searching the guest's 640 KiB conventional memory for a byte pattern and reporting each hit as a guest segment:offset. This distinguishes it from read/dump siblings by making both the resource and the hit-reporting behavior explicit.
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 gives a concrete use case: converting a known game string or message into the segment where it lives, as the first step in profiling. It does not explicitly list alternatives or exclusions, so it falls just short of a 5, but the context is clearly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_send_keysA
Type into the guest by appending to its BIOS keyboard ring buffer -- no window focus, no host keystrokes. Each item is a single character or a key name (space, enter, esc, tab, backspace, up, down, left, right, home, end, pgup, pgdn, plus, minus, f1..f10). Keys are paced apart so the game consumes them one screen at a time; the ring holds 15, so send small batches and let the game catch up. Fails cleanly if the ring is full, which means the game is waiting on the mouse, not the keyboard.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| keys | Yes | Keys to send, in order. | |
| pace_seconds | No | Delay between keys. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses rich behavior beyond the annotations: the buffered injection mechanism, no host keystrokes, paced delivery, ring capacity, and clean failure on a full ring. These facts are not visible in readOnlyHint/openWorldHint/destructiveHint and directly improve an agent's ability to use the tool safely.
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?
Three dense sentences, each earning its place: mechanism, key vocabulary, and pacing/capacity constraints. The most important fact is front-loaded, and there is no filler 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?
For a tool with an output schema, annotations, and only three parameters, the description covers the essential behaviors, constraints, key-format rules, and failure semantics. The agent has enough context to call it correctly without additional lookup.
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?
Adds meaning the schema leaves out: each array item is a single character or a named key, it enumerates valid key names, and it explains the purpose of pace_seconds. The optional pid is not explained, but since it is nullable and has a default it does not block correct use.
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?
Leads with a precise action: 'Type into the guest' by appending to its BIOS ring buffer. It also distinguishes itself from mouse/focus-dependent input tools by saying 'no window focus, no host keystrokes'.
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?
Provides clear operational guidance: send small batches, respect pacing, and interpret a full ring as the game waiting on the mouse rather than the keyboard. It does not explicitly name sibling alternatives like dosbox_click or dosbox_hold_buttons, so the guidance is strong but not fully exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_sessionsBRead-only
List attached sessions and any other visible DOSBox-X windows on the machine, with their process ids.
| Name | Required | Description | Default |
|---|---|---|---|
| window_title | 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 indicate read-only and open-world behavior, so the safety profile is covered. The description additionally clarifies scope by noting it returns both attached sessions and other visible DOSBox-X windows on the machine, but it does not describe how filtering or window-title affects results. No contradiction with annotations 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 a single focused sentence. It front-loads the main action and result, and every phrase ('attached sessions', 'other visible windows', 'process ids') adds value. No filler 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?
For a simple read-only listing tool, this is largely complete: it says what is listed, the scope, and an important output detail (process IDs). The output schema exists so return documentation is not needed. The main omission is that the optional window_title parameter is not mentioned, which is important for full standalone clarity.
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 the undocumented parameter. It does not mention `window_title` at all, leaving the agent to infer whether it is for filtering, matching, or returning output. The parameter name offers some minimal hint, but not sufficient guarantees.
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 ('List') and identifies the resource ('attached sessions and any other visible DOSBox-X windows on the machine'), including process IDs. This is clear and distinct from the sibling options, though it does not explicitly differentiate itself by naming an alternative tool.
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 intended use is implied: call this to enumerate sessions/windows and their process IDs. However, it does not state when to prefer this over sibling tools like dosbox_attach, dosbox_launch, or dosbox_profiles, nor does it provide explicit exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_view_screenARead-only
Look at the emulator's screen. Returns the current frame as an image, photographed from the window without activating it. Use this to see where the game actually is between steps; use dosbox_capture_screen when the frame has to be exact and saved.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| max_width | No | Downscale wider images to this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds meaningful behavioral context: capturing from a window photograph without activating it implies non-exact/approximate output, and clarifying the contrast with 'exact and saved' helps set expectations. It could additionally state output format details, but the annotations already cover the key safe-read behavior.
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?
Three sentences, all substantive, with the primary function and key differentiator front-loaded. No filler or redundant prose.
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 view tool with two optional parameters, defaults, and only an image return value, the description gives everything an agent needs to determine when to call it and what result to expect. It even routes to the exact-frame sibling.
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 coverage is 50%: max_width is thoroughly described in the schema, but pid is not. The description does not explain pid's role or when to provide it, though pid is optional with a null default and max_width is already documented. Since the missing parameter is optional and low-risk, baseline 3 is appropriate.
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 identifies the action ('look at/results in the current frame as an image') and the resource (the emulator screen). It also explicitly distinguishes the tool from dosbox_capture_screen by noting this view is photographed from the window and not guaranteed to be the exact saved frame.
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 states when to use this tool ('see where the game actually is between steps') and provides the alternative condition: use dosbox_capture_screen when the frame has to be exact and saved. This gives clear decision guidance to an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_wait_forARead-only
Block until a memory field satisfies a test, or the timeout runs out. Use it to wait for a screen transition, an animation to finish, or a state byte to settle, instead of guessing at sleeps. Returns whether the test was satisfied and the last value seen -- it does not raise on timeout, so a caller can decide what a timeout means.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| size | No | ||
| any_of | No | ||
| equals | No | ||
| offset | Yes | Data-segment offset or symbol name. | |
| at_most | No | ||
| at_least | No | ||
| not_equals | No | ||
| poll_seconds | No | ||
| timeout_seconds | 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 discloses important behavioral traits beyond the readOnlyHint annotation: it does not raise on timeout, it returns whether the test was satisfied and the last value seen, and it blocks. This is genuinely useful context beyond the annotations. It could add more detail about invalid offsets or poll behavior, but for a read-only operation this is solid.
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 concise two-sentence structure: first states the core behavioral guarantee, then gives use cases, then states the return policy and timeout behavior. Every sentence stands alone and adds value without padding or restating the tool name.
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 high-level operation, use cases, and timeout contract, and the existence of an output schema lessens the need to spell out return structure. However, the tool has 10 parameters and only 10% schema description coverage, so the description lacks essential detail on how to specify the test condition and how polling works. It is adequate for basic guidance but not fully complete for predictable 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 only 10%, and the description does not compensate. It says only 'satisfies a test' with a memory field, leaving equals, any_of, at_most, at_least, not_equals, size, pid, poll_seconds, and timeout_seconds semantics to inference. An agent has to guess how multiple conditions combine or whether they are exclusive. The description adds little meaning beyond what parameter titles already hint at.
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 and resource: 'Block until a memory field satisfies a test, or the timeout runs out.' It also gives concrete use examples like screen transitions, animations, and state bytes, which help distinguish it from memory reading or search tools. It does not explicitly name an alternative sibling, so it slightly under-delivers on full sibling differentiation.
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 explicitly says to use this when waiting for a screen transition, animation finish, or state byte to settle, and contrasts it with guessing at sleeps. It gives clear situational guidance, but it does not explicitly say when not to use it or how it compares to alternatives like watch_frames or read_memory polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_watch_framesA
Watch the guest's video memory and return every distinct frame it put up, with the moment each appeared. This is how to measure an animation, a fade or a transition -- reading video memory does not slow the guest the way filming the window does, so the timings are the guest's own. Frames are written as _NNN.png.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| stem | No | Where to write the frames; omit to only count them. | |
| seconds | Yes | How long to watch. | |
| reference | No | Path to a 64,000-byte frame on screen now, to confirm the page. | |
| max_frames | No | ||
| interval_seconds | No | ||
| allow_unconfirmed | No | Accept an unconfirmed blind scan. |
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 behavior beyond what annotations already state: it reads video memory rather than the GUI, does not slow the guest, captures distinct frames with the guest's own timings, and writes files as <stem>_NNN.png. This complements the readOnlyHint/destructiveHint flags well.
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 short, front-loaded, and has no fluff. Both the outcome and the distinctive behavior are introduced early, and each 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?
For a tool with seven parameters and an output schema, the description provides the core context: what it watches, when to use it, and where frames land. It does not explain the max_frames/interval cap fully, but those are already documented in the schema. It is nearly complete and trustworthy.
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 description adds a bit of parameter meaning, especially around stem by explaining the file naming convention. However, with 57% schema coverage, the description does not flesh out key parameters like pid, max_frames, or interval_seconds beyond their schema descriptions. It is adequate but not compensating significantly.
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 names a specific action and resource: watching the guest's video memory and returning distinct frames with their appearance timings. It also distinguishes itself from filming the screen by noting that reading video memory does not slow the guest, so it is clearly targetable among the many dosbox sibling 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 explicitly says this is how to measure animations, fades, and transitions, and explains why it should be preferred over filming the window. It does not formally name alternative tools or list exclusion conditions, so it is clear but not maximally prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dosbox_write_memoryADestructive
Patch the game's data segment. This is how to set up a state that would otherwise take hours of play -- a treasury, a rank, a flag -- so a particular screen or code path can be reached. Writes land in the running game and are not undoable; the game may recompute a field shortly after it is written, so patch at a moment where it will be read before it is recomputed.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| writes | Yes | ||
| segment | No | Guest segment for every write; omit for the profile's. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already signal a destructive, non-read-only operation, the description adds valuable behavioral detail: writes land in the running game, are not undoable, and the game may recompute a field shortly after it is written. This is exactly the kind of non-obvious runtime behavior an agent needs to know. No contradiction with 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?
Three sentences deliver the core purpose, a motivating use case, and the critical timing/durability caveat. There is no filler or repetition; 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?
For a destructive memory-mutation tool, the description is nearly complete: it says why to use it, what makes it dangerous, and what timing to respect. It does not explicitly state the requirement that a target session/game is already attached or running, nor mention targeting via pid. That is a minor gap and is mostly inferable from sibling tools and the schema.
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 nested schema already explains offset, size, value, and hex well, but the description adds little parameter-specific detail beyond casting writes as patches to game state. It does not clarify the top-level pid, writes, or segment semantics in prose, and top-level schema description coverage is only 33%. The description is behaviorally useful but does not fully compensate for that 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 opens with a specific verb and target: 'Patch the game's data segment.' It then clarifies the concrete use case—setting up a state like a treasury, rank, or flag to reach a particular screen or code path. This clearly distinguishes it from the sibling read/search/memory 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?
It gives clear context for when the tool should be used: when a state would otherwise take hours of gameplay. It also gives timing guidance: patch where the value will be read before the game recomputes it. It does not explicitly state when-not-to-use or name alternatives, so it stops just short of perfect.
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.
26 tool updates
v0.2.0- First observed
dosbox_attach - First observed
dosbox_capabilities - First observed
dosbox_capture_screen - First observed
dosbox_click - First observed
dosbox_dump_segment - First observed
dosbox_emulator_command - First observed
dosbox_find_cave - First observed
dosbox_find_guest - First observed
dosbox_hold_buttons - First observed
dosbox_install_trace - First observed
dosbox_launch - First observed
dosbox_profiles - First observed
dosbox_quit - First observed
dosbox_read_framebuffer - First observed
dosbox_read_memory - First observed
dosbox_read_trace - First observed
dosbox_record - First observed
dosbox_remove_trace - First observed
dosbox_sample - First observed
dosbox_search_memory - First observed
dosbox_send_keys - First observed
dosbox_sessions - First observed
dosbox_view_screen - First observed
dosbox_wait_for - First observed
dosbox_watch_frames - First observed
dosbox_write_memory
TDQS
Scored across 26 tools
The tools cluster into clear capability areas, but within some clusters the boundaries are narrow: view_screen, capture_screen, read_framebuffer, and watch_frames all provide screen-related output, and launch/attach/find_guest all establish a guest context in different ways. The detailed descriptions make the distinctions learnable, but an agent would need to read them carefully before selecting the right tool.
The dosbox_ prefix plus snake_case is used consistently, and most tools follow a clear verb_noun pattern such as send_keys, read_memory, and install_trace. A few resource/query names such as dosbox_profiles, dosbox_sessions, and dosbox_capabilities drop the verb form, which is a minor but noticeable inconsistency.
26 tools is large and heavier than the conventional well-scoped 3-15 range, but the tool set represents a genuinely broad and specialized domain: process management, input, memory inspection/editing, frame capture, tracing, and recording. The size feels deliberately broad rather than padded.
The set covers the full workflow of driving and inspecting a DOSBox-X guest: launch/attach/quit, keyboard/mouse input, read/write/search/dump memory, sample state over time, watch screen frames, and install/read/remove code traces. No major dead-end operations are apparent that would force the agent to leave the server to complete a task.
Maintenance
Related MCP Connectors
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
Eyes and hands on real Windows PCs — observe, click, type via Glasswarp API.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Remote shell and detached long-running jobs on your own machines — no SSH, open ports or VPN.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables headless debugging of Windows executables from Linux/macOS hosts by orchestrating winedbg's gdbserver and a GDB client, exposing 19 tools for launch, attach, breakpoints, stepping, register/memory access, and session lifecycle.MIT
- AlicenseBqualityBmaintenanceBridges AI agents to a DOSBox emulator, enabling control of DOS programs via MCP tools for typing, screen reading, video capture, Lua scripting, and memory access.473GPL 2.0
- FlicenseAqualityDmaintenanceEnables an MCP client to observe and control a text-mode DOS system via a Python bridge, supporting keyboard input and screen capture.8-
- FlicenseNot gradedqualityBmaintenanceThis MCP server enables AI agents to inspect and control the native DOSBox-X debugger through bounded MCP tools, including breakpoint management, execution control, register/memory inspection, and disassembly for DOS program debugging and reverse engineering.1-