pet-tools-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pet_session_listA | List running emulated PET sessions (name, model, pid, monitor port). |
| pet_session_startA | Boot a fresh emulated PET (headless, warp). Models: pet2001-4k, pet2001, pet3032, pet4032, pet8032, pet8296. Optionally attach a d64/d80/d82 disk image. |
| pet_session_ensureA | Attach to a running PET session, or boot one (headless, warp) if none exists. Idempotent; "started" reports which happened. |
| pet_session_stopC | Stop a running PET session (the only one if name is omitted). |
| pet_session_resetC | Reset the PET (soft, or hard power-cycle). Leaves the machine running. |
| pet_statusB | The session and whether the machine is running or stopped right now. state is answered by the session daemon's own tracking (no emulator traffic); "unknown" without a daemon. Also reports the loaded program and any source files changed since it was loaded (stale binary!). |
| pet_screen_textA | Read the PET screen as plain text. This is the PREFERRED way to see program output — faster and more reliable than screenshots for AI use. Graphics decode to Unicode glyphs; style="ascii" restores the legacy conservative mapping. |
| pet_screen_codesA | Read the raw screen-code matrix (rows x cols of ints) — exact values for checking glyphs without decoding ambiguity. |
| pet_screenshotA | Save a PNG screenshot. Prefer pet_screen_text for reading output; use this only when pixel-level appearance matters. scale gives an integer nearest-neighbour upscale (small PET screens read better at 2-3x). |
| pet_mem_readA | Read emulated memory. addr accepts $hex, 0xhex, decimal, or a symbol from the loaded label file. Returns hex-encoded bytes plus "bytes" as a decimal int array. |
| pet_mem_findB | Search memory for a byte pattern (values: one or more $hex/decimal
bytes). Returns match addresses; "truncated" is true when |
| pet_mem_writeB | Write bytes to emulated memory. addr accepts $hex/0xhex/decimal/symbol. |
| pet_reg_getB | Read CPU registers. PC is annotated with the nearest symbol when a label file is loaded. |
| pet_reg_setC | Set a CPU register (e.g. PC, A, X, Y). value accepts $hex/0xhex/decimal. |
| pet_break_addA | Set a breakpoint at an address or symbol. Machine keeps running; use pet_wait_break to block until it fires. |
| pet_break_listB | List breakpoints/watchpoints with hit counts. |
| pet_break_removeC | Remove a breakpoint/watchpoint by id. |
| pet_break_clearA | Remove ALL breakpoints (exec checkpoints); watchpoints are kept. Checkpoints persist across pet_run/rebuilds — clear stale ones or duplicates accumulate. |
| pet_watch_clearA | Remove ALL watchpoints (load/store checkpoints); breakpoints are kept. |
| pet_watch_addC | Set a watchpoint on a memory range (default: both load and store). |
| pet_stepA | Execute N instructions. The machine STAYS STOPPED afterwards; use pet_continue to resume. |
| pet_finishC | Run until the current subroutine returns. Machine stays stopped. |
| pet_continueA | Resume execution after a breakpoint/step. |
| pet_untilB | Run until an address/symbol is executed count times; machine stays stopped there. count>1 = deterministic frame stepping on a loop label. On timeout: raises with the machine LEFT RUNNING and the checkpoint removed. |
| pet_wait_textA | Block until TEXT appears on the screen. A timeout returns {"fired": null, "screen": ...} (not an error) so you can inspect what the program actually displayed. |
| pet_wait_memB | Block until the byte at addr equals the value ($hex/decimal accepted). |
| pet_callA | JSR one routine in isolation (fake return address on the stack, optional A/X/Y on entry) and stop at its RTS — the unit-test primitive: poke inputs, call, then assert registers/memory. Machine ends STOPPED on success, RUNNING on timeout. |
| pet_wait_breakA | Block until a breakpoint/watchpoint fires; reports checkpoint id, PC, and registers. Machine is left stopped when it fires. On timeout the machine is LEFT RUNNING (your checkpoints remain set) and the result is {"fired": null, "machine": "running", ...} — data, not an error. |
| pet_buildB | Assemble 6502 source (ca65 syntax) to a .prg + VICE label file. |
| pet_packageA | Package a .s/.bas/.prg into an artifact any VICE user can run: a .prg,
or (when output ends in .d64/.d80/.d82) a disk image whose first file is
the program so |
| pet_runA | Build/tokenize a .bas/.s/.prg as needed, then load and RUN it on the running PET. Registers assembly symbols on the session automatically. |
| pet_loadA | Load a .prg via autostart (optionally without RUN); optionally register a VICE label file for symbolic debugging. |
| pet_basic_typeA | Type BASIC program text into the running PET via the keyboard (keywords may be upper or lower case; each line ends with \n). Set run=true to type RUN afterwards. |
| pet_key_typeA | Type text into the running PET's keyboard buffer (\n = RETURN). Buffered keys never touch the live key-down state — games reading $97 need pet_key_hold. |
| pet_key_holdA | Hold KEY down for N game ticks by re-poking $97 before each one,
running to the frame anchor |
| pet_disk_createC | Create a blank d64/d80/d82 disk image. |
| pet_disk_lsC | List the directory of a disk image. |
| pet_disk_putC | Copy a host file onto a disk image. |
| pet_disk_getC | Copy a file off a disk image to the host. |
| pet_disk_bootB | Attach a disk image to the running PET and LOAD+RUN its first file. |
| pet_rom_infoC | Identify the loaded ROM set (names + content hashes). |
| pet_rom_disasmB | Disassemble live memory with ROM + session symbol annotations. start accepts $hex/0xhex/decimal or a symbol (e.g. CHROUT). |
| pet_test_runC | Run a declarative YAML test (boots its own fresh PET; see spec §8). |
| pet_test_programsA | Run every example-program directory (program + expect.txt) as a test. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nschneir/PET-Project'
If you have feedback or need assistance with the MCP directory API, please join our Discord server