Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

178,596 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MCP Server (AI Agent Integration)

Watch the demo on YouTube

MCP Demo

This fork adds an MCP (Model Context Protocol) server that exposes SCUMM engine game state and controls to AI agents. It enables large language models to play classic LucasArts adventure games by observing game state and issuing actions via a standard TCP interface.

Compatibility: Monkey Island 1 (including the demo) is the primary supported game and has been tested end-to-end. Other SCUMM engine games (MI2, Indiana Jones, Day of the Tentacle, Sam & Max, etc.) are partially supported — the core state/act/answer tools work but have not been thoroughly tested. Curse of Monkey Island (CMI) is experimental due to its different verb/UI system.

Setup

Enable the server by adding mcp=true to the game's section in scummvm.ini:

[monkey1]
mcp=true

Then launch ScummVM normally (add --debuglevel=1 for verbose MCP logs):

scummvm --debuglevel=1 monkey1

To use a custom port (default is 23456), add mcp_port to the same section:

[monkey1]
mcp=true
mcp_port=12345

The server listens on TCP port 23456 and speaks the MCP Streamable HTTP protocol (2025-03-26).

MCP Tools

state — Read game state

Returns a snapshot of the current game state:

{
  "room": 3,
  "room_name": "The Scumm Bar",
  "position": { "x": 320, "y": 140 },
  "verbs": ["open", "close", "give", "pick_up", "look_at", "talk_to", "walk_to", "push", "pull", "use"],
  "inventory": ["sword", "idol"],
  "objects": [
    { "id": 42, "name": "mug", "state": 1, "visible": true, "pathway": false, "compatible_verbs": ["look_at", "pick_up"] }
  ],
  "actors": ["guybrush", "pirate"],
  "messages": [{ "text": "You found it!", "actor": "guybrush" }],
  "question": {
    "choices": [
      { "id": 1, "label": "But I want to be a pirate!" },
      { "id": 2, "label": "Why not?" }
    ]
  }
}

messages contains dialog lines spoken since the last state call and is cleared on read. question is only present when a dialog choice is pending.

act — Perform an action

Executes a verb on an object or actor and blocks (via SSE streaming) until the action completes, then returns what changed:

{ "verb": "look_at", "target1": "mug" }
{ "verb": "use", "target1": "key", "target2": "door" }
{ "verb": "walk_to", "target1": "archway" }
{ "verb": "talk_to", "target1": "pirate" }
{
  "messages": [{ "text": "It's a wooden mug.", "actor": "guybrush" }],
  "inventory_added": ["mug"],
  "room_changed": 5,
  "position": { "x": 100, "y": 130 },
  "question": { "choices": [{ "id": 1, "label": "I want to be a pirate!" }] }
}

Verb names are case-insensitive and accept common aliases: walkwalk_to, looklook_at, pick / pickuppick_up, talktalk_to. Object and actor names (and numeric IDs) come from state. To walk to explicit pixel coordinates, use the walk tool.

walk — Walk to pixel coordinates

Walks the player character to an explicit screen position and blocks until the walk completes:

{ "x": 200, "y": 150 }

Out-of-bounds values are automatically clamped to the current room dimensions. Returns the same state-change structure as act.

answer — Select a dialog choice

Selects a dialog option by 1-based index and blocks until the conversation completes:

{ "id": 1 }

Returns the same state-change structure as act. Only valid when state.question is present.

What It Can Do

  • Read full game state: room, position, inventory, visible objects, actors, available verbs
  • Execute any verb on any named object or actor (by name or numeric ID from state)
  • Walk to named objects, actors, or explicit pixel coordinates
  • Select dialog choices during conversations
  • Block until an action fully completes — walk, cutscene, and dialog are all awaited
  • Stream dialog lines as SSE notifications during long-running actions

What It Cannot Do

  • Save or load games — no save/restore tools are exposed
  • Read arbitrary game variables — only the state fields listed above are available
  • See off-screen objects — only objects present in the current room are listed
  • Control the camera directly
  • Work reliably outside MI1 — other SCUMM games receive limited support; action completion detection and dialog heuristics are tuned for MI1
  • Work well with CMI — Curse of Monkey Island's right-click UI means verbs[] is empty and verb resolution is unreliable
  • Guarantee completion detection — unusual scripts may cause actions to time out (20 s hard limit) or close slightly early

Architecture

The server is split across two modules:

  • backends/networking/mcp/mcp_server.cpp — engine-agnostic transport layer (TCP listener, HTTP parser, JSON-RPC dispatch, SSE streaming, session management). Runs inside the ScummVM game loop on port 23456.
  • engines/scumm/mcp.cpp — SCUMM bridge (tool implementations, entity resolution, verb lookup, action-completion detection, dialog message capture). Integrates with the SCUMM engine's verb, object, actor, and script systems directly.

About ScummVM

ScummVM allows you to play classic graphic point-and-click adventure games, text adventure games, and RPGs, as long as you already have the game data files. ScummVM replaces the executable files shipped with the games, which means you can now play your favorite games on all your favorite devices.

So how did ScummVM get its name? Many of the famous LucasArts adventure games, such as Maniac Mansion and the Monkey Island series, were created using a utility called SCUMM (Script Creation Utility for Maniac Mansion). The ‘VM’ in ScummVM stands for Virtual Machine.

While ScummVM was originally designed to run LucasArts’ SCUMM games, over time support has been added for many other games: see the full list on our wiki. Noteworthy titles include Broken Sword, Myst and Blade Runner, although there are countless other hidden gems to explore.

For more information, compatibility lists, details on donating, the latest release, progress reports and more, please visit the ScummVM home page.

Quickstart

For the impatient among you, here is how to get ScummVM running in five simple steps.

  1. Download ScummVM from our website and install it.

  2. Create a directory on your hard drive and copy the game datafiles from the original media to this directory. Repeat this for every game you want to play.

  3. Start ScummVM, choose 'Add game', select the directory containing the game datafiles (do not try to select the datafiles themselves!) and press Choose.

  4. The Game Options dialog opens to allow configuration of various settings for the game. These can be reconfigured at any time, but for now everything should be OK at the default settings.

  5. Select the game you want to play in the list, and press Start. To play a game next time, skip to step 5, unless you want to add more games.

Hint:

To add multiple games in one go, click the small arrow on the 'Add game' button and choose 'Mass Add'. You are again asked to select a directory, only this time ScummVM will search through all subdirectories for supported games.

Reporting a bug

To report a bug, go to the ScummVM Issue Tracker and log in with your GitHub account.

Please make sure the bug is reproducible, and still occurs in the latest git/Daily build version. Also check the compatibility list for that game, to ensure the issue is not already known. Please do not report bugs for games that are not listed as completable on the Supported Games wiki page, or on the compatibility list. We already know those games have bugs!

Please include the following information in the bug report:

  • ScummVM version (test the latest git/Daily build)
  • Bug details, including instructions for how to reproduce the bug. If possible, include log files, screenshots, and any other relevant information.
  • Game language
  • Game version (for example, talkie or floppy)
  • Platform and Compiler (for example, Win32, Linux or FreeBSD)
  • An attached saved game, if possible.
  • If this bug only occurred recently, include the last version without the bug, and the first version with the bug. That way we can fix it quicker by looking at the changes made.

Finally, please report each issue separately; do not file multiple issues on the same ticket. It is difficult to track the status of each individual bug when they aren't on their own tickets.

Documentation

User documentation

For everything you need to know about how to use ScummVM, see our user documentation.

The ScummVM Wiki

The wiki is the place to go for information about every game supported by ScummVM. If you're a developer, there's also some very handy information in the Developer section.

Changelog

Our extensive change log is available here.

SAST Tools

PVS-Studio - static analyzer for C, C++, C#, and Java code.

Credits

A massive thank you to the entire team for making the ScummVM project possible. See the credits here!


Good Luck and Happy Adventuring! The ScummVM team. https://www.scummvm.org/

About

Fork to ScummVM main repository including an MCP server to play games on the Scumm engine only.

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages