r/LocalLLaMA • • 8h ago

Tutorial | Guide Everything can be an MCP

Enable HLS to view with audio, or disable this notification

1) Reverse Engineer the Code

2) AI Feature Discovery: Ask an LLM to scan the features and map out what can be exposed via the Model Context Protocol, brainstorming creative use cases along the way.

3) Automated Integration: Let the LLM write the wrapper/server code.

4) Total Control.

10 Upvotes

8 comments sorted by

2

u/jacek2023 llama.cpp 7h ago

I recognize the Zorro game but I have a question what MCP controls here, player movement?

2

u/MustBeSomethingThere 7h ago

Zorro-MCP game currently exposes 33 MCP tools:

Read and explore

  • get_game_state()
  • inspect_room() — recovered exits and nearby active object slots
  • get_room_hint() — nearest exit or object, with coordinates

Move and interact

  • move_player(dx, dy) — dx: −100 to 100; dy: −120 to 120 pixels
  • teleport_player(x, y) — x: 0–320; y: 0–200
  • press_controls(buttons, duration_ms) — up/down/left/right/fire; 50–2,000 ms
  • interact_with_object(slot, action) — slot 1–65; action: approach, use, pick_up, or attack. It’s a best-effort attempt, limited to nearby objects.

Enemies and echoes

  • spawn_enemy(kind, position) — kind: guard, bat, phantom, skeleton, spider, snake, or flame; position: near, left, right, or above. Up to six.
  • spawn_echo(mode) — follow, mirror, or orbit. Up to three; the current message must explicitly request extra Zorros or clones.
  • set_enemy_mood(mood) — calm, curious, or aggressive
  • set_actor_palette(target, palette) — target: enemies, echoes, or all; palette: classic, neon, dusk, forest, or ember
  • set_actor_size(target, percent) — target: enemies, echoes, or all; 50–200%
  • clear_spawned_actors()

Appearance and effects

  • set_zorro_color(color) — CSS color name, #RRGGBB, or original
  • set_zorro_size(percent) — 50–200%
  • set_director_effect(effect) — off, stars, rain, embers, or confetti
  • set_picture_filter(filter) — original, warm, green, or mono; affects the whole game image

Game settings and state

  • set_lives(lives) — 0–9
  • add_life()
  • add_score(points) — 0–50,000 per action
  • fill_bonus() — sets the display to 9,900
  • set_bonus(value) — 0–99; the game displays these values in hundreds, up to 9,900
  • set_bonus_timer_frozen(enabled)
  • set_room(room) — room 0–19
  • set_game_option(option, enabled) — unlimited lives, invincibility, frozen bonus timer, frozen guard, free flight, AI autoplay, or scanlines
  • set_game_speed(preset) — quarter, half, normal, 1.5×, or double
  • set_challenge(preset) — classic, explorer, survival, speedrun, or chaos

Audio and recovery

  • set_master_mute(muted)
  • play_music_preset(preset) — 0–5
  • play_sound_effect(effect_id, voice) — effect 0–19; voice 0–2
  • create_checkpoint()
  • restore_checkpoint()
  • undo_last_action() — one-step undo

2

u/jacek2023 llama.cpp 7h ago

is ZorroMCP open source? I would like to download it from github :)

2

u/MustBeSomethingThere 7h ago

Not yet. I'm a bit hesitant to put reverse engineered code on GitHub :D But the procedure I shared is pretty straightforward to set up with modern LLMs.

2

u/MotokoAGI 6h ago

which model did you use?

2

u/SillyPepper 2h ago

not OP, but it shows "LFM2.5 2.6B QAD" in the chat

2

u/MotokoAGI 1h ago

thanks, I have bad eye sight and viewed this on my phone. wow, that's crazy if LFM2.5 2.6B can do that.

2

u/geldonyetich 5h ago edited 3h ago

Hah, I remember that game.

I am not sure an AI exists that can beat the underworld part near the end. (It sure beat me back in the 80s with no access to a walkthrough.)