Are you the author? Sign in to claim
A powerful, project-aware Model Context Protocol (MCP) server for GameMaker Studio with 190 tools, GML static analysis
A project-aware local MCP server for GameMaker Studio. It gives an MCP client structured access to a .yyp project: inspection, static analysis, guarded editing, object/room/shader operations, snapshots, validation, and official Igor builds.
The server uses the stable @modelcontextprotocol/sdk v1 line over stdio. It does not bind a network port. File operations stay inside one configured project, and existing text files use SHA-256 optimistic concurrency plus backups.
gamemaker-mcp install, doctor, connect) supporting 20 AI clients & IDEs (Amp, Antigravity, Claude, Cline, Codex, Copilot, Cursor, Factory, Gemini CLI, Goose, Grok, Junie, Kiro, LM Studio, opencode, Qodo, Qwen, VS Code, Warp, Windsurf);.yyp/.yy JSON-like files, including trailing commas;gm_gml_validate_snippet), Igor diagnostic compiler (gm_project_compile_errors), GML Unit Test suite runner (gm_test_runner_run), and Feather JSDoc generator (gm_gml_docgen);Igor.exe discovery;.yyp project;Connect gamemaker-mcp once globally for all your AI clients:
npx gamemaker-mcp@latest connect all
How it works:
Open any GameMaker project folder in any of the 20 supported AI clients (Claude Desktop, Google Antigravity, Cursor, VS Code, Windsurf, GitHub Copilot, Codex, Cline, etc.). The server automatically discovers and connects to your .yyp project file in the workspace directory dynamically at runtime without requiring a server restart!
Run the automated installer via npx, passing the path to your GameMaker .yyp project file or directory:
npx gamemaker-mcp@latest install "C:\Path\To\YourGame\YourGame.yyp"
What this command does automatically:
Igor.exe..yyp project structure.mcp-config.json in your project directory.Install gamemaker-mcp globally using npm:
npm install -g gamemaker-mcp
Then run commands from any terminal or PowerShell:
# Full automatic setup for a project:
gamemaker-mcp install "C:\Projects\MyGame\MyGame.yyp"
# Verify environment, runtime, and connection status for all 20 clients:
gamemaker-mcp doctor "C:\Projects\MyGame\MyGame.yyp"
# Connect a specific AI client (claude | antigravity | cursor | codex | qwen | vscode | windsurf | copilot | all):
gamemaker-mcp connect antigravity
gamemaker-mcp connect claude
gamemaker-mcp connect vscode
gamemaker-mcp connect cursor
gamemaker-mcp connect all
If you prefer adding the MCP server to your AI client's configuration file manually:
%APPDATA%\Claude\claude_desktop_config.json){
"mcpServers": {
"gamemaker": {
"command": "npx",
"args": ["-y", "gamemaker-mcp"],
"env": {
"GAMEMAKER_MCP_MODE": "workspace-write",
"GAMEMAKER_MCP_ALLOW_BUILD": "1"
}
}
}
}
~/.gemini/antigravity.json){
"mcpServers": {
"gamemaker": {
"command": "npx",
"args": ["-y", "gamemaker-mcp"],
"env": {
"GAMEMAKER_MCP_MODE": "workspace-write",
"GAMEMAKER_MCP_ALLOW_BUILD": "1"
}
}
}
}
%APPDATA%\Cursor\User\globalStorage\mcp.json){
"mcpServers": {
"gamemaker": {
"command": "npx",
"args": ["-y", "gamemaker-mcp"],
"env": {
"GAMEMAKER_MCP_MODE": "workspace-write",
"GAMEMAKER_MCP_ALLOW_BUILD": "1"
}
}
}
}
~/.qwen/mcp.json){
"mcpServers": {
"gamemaker": {
"command": "npx",
"args": ["-y", "gamemaker-mcp"],
"env": {
"GAMEMAKER_MCP_MODE": "workspace-write",
"GAMEMAKER_MCP_ALLOW_BUILD": "1"
}
}
}
}
| Variable | Default | Meaning |
|---|---|---|
GAMEMAKER_PROJECT | auto-detect | Project directory or exact .yyp file (auto-detects from workspace if omitted) |
GAMEMAKER_MCP_MODE | read-only | read-only or workspace-write |
GAMEMAKER_MCP_ALLOW_BUILD | 0 | Enable Igor compile/package operations |
GAMEMAKER_MCP_MAX_FILE_BYTES | 1048576 | Per-file text read/write limit |
GAMEMAKER_IGOR | auto-detect | Exact path to Igor.exe |
GAMEMAKER_RUNTIME | inferred | Runtime directory paired with Igor |
GAMEMAKER_USER_DIR | auto-detect | GameMaker user/configuration directory |
| Tool | Purpose |
|---|---|
gm_ide_preferences_inspect | Read user preferences file (preferences.json) from GameMaker Studio user directory |
gm_ide_feather_config | Create or update .featherconfig in project root to configure strict type checking and warnings |
gm_ide_cache_clear | Safely remove project .gm_cache directory to fix stale asset compilation issues |
gm_ide_recent_projects | Read recent_projects.json from GameMaker Studio user directory to list recently opened projects |
gm_ide_hotkeys_inspect | Read keybindings.json configuration from GameMaker Studio user directory to display IDE hotkeys |
| Tool | Purpose |
|---|---|
gm_project_info | Project identity, IDE/resource versions, asset counts, and room order |
gm_runtime_detect | Installed runtimes and selected Igor toolchain |
gm_asset_list | Filtered and paginated asset index |
gm_asset_read | Asset metadata plus related GML/shader sources and hashes |
gm_file_list | Filtered project file list with size/time and bounded hashing |
gm_file_read | Allowed text content plus SHA-256 |
gm_code_search | Literal or regex GML/GLSL search |
gm_project_validate | Structural YYP/YY/resource/event/shader validation |
gm_project_statistics | Resource, file, line, complexity, shader, and dependency statistics |
gm_project_autofix | Scan and automatically repair missing YYP references, missing shader files, and corrupted metadata |
| Tool | Purpose |
|---|---|
gm_gml_analyze | Functions, symbols, calls, complexity, delimiter errors, and risky patterns |
gm_shader_analyze | Entry points, declarations, varying compatibility, and portability diagnostics |
gm_symbol_references | Declarations, calls, writes, reads, and optional metadata references |
gm_dependency_graph | Asset dependencies, evidence, isolated nodes, and cycles |
gm_unused_assets | Scan project for unreferenced sprites, sounds, scripts, fonts, paths, and objects |
gm_gml_profile_check | Scan Step/Draw events & loops for CPU/memory anti-patterns |
gm_i18n_scan | Scan GML code for hardcoded string literals and suggest localization keys |
gm_draw_state_audit | Audit Draw events for GPU state leaks (blendmodes, alpha, shader state) |
gm_gml_validate_snippet | Preflight GML code for syntax delimiter balance and deprecated builtins |
gm_project_health_score | Calculate 0-100% health score, grade (A+ to F), and recommendations |
gm_object_hierarchy | Build object parent-child inheritance tree with inherited events |
gm_doc_export | Generate structured Markdown documentation for all project assets |
gm_gml_duplicate_find | Scan project GML files to detect identical contiguous code blocks across assets |
gm_macros_list | Scan all scripts and objects to extract and list GML #macro definitions |
gm_state_machine_visualize | Parse GML code to extract states and transitions, returning a Mermaid stateDiagram-v2 string |
gm_gml_dead_code_detect | Scan GML scripts and objects to detect declared functions that are never called anywhere in the project |
gm_gml_globalvars_list | Scan GML scripts and objects for global.variable usages, returning reads/writes breakdown |
gm_physics_audit | Scan objects to inspect enabled physics mode, shape, density, friction, and restitution parameters |
gm_asset_find_references | Scan project code files (.gml) and asset metadata (.yy/.yyp) for references to a given asset name |
gm_i18n_extract_strings | Scan project GML files for hardcoded string literals and generate datafiles/localization.json dictionary |
gm_project_architecture_audit | Comprehensive architecture audit reporting modularity score (0-100), grade (A+ to F), and design recommendations |
| Tool | Purpose |
|---|---|
gm_gml_patch_preview | Exact replacement count and changed-line preview without writing |
gm_gml_patch | Exact guarded replacement with expected match count |
gm_gml_write | Atomic guarded GML write |
gm_gml_docgen | Generate Feather-compliant JSDoc headers (/// @function, /// @param, /// @returns) |
gm_sprite_inspect | Inspect sprite origin (X/Y), collision mask mode, frames, speed, and texture group |
gm_sprite_create | Create a new GameMaker Sprite asset (.yy) with configurable dimensions, origin, and texture group |
gm_sound_inspect | Inspect sound audio group, compression type, sample rate, bit depth/rate, duration, and volume |
gm_sound_create | Create a new GameMaker Sound asset (.yy) linking sound audio files with compression and volume |
gm_sound_configure | Configure volume, preload flag, or audio group assignment of a sound asset |
gm_font_create | Create a new GameMaker Font asset (.yy metadata) with font size, bold, and italic parameters |
gm_font_inspect | Inspect a GameMaker Font asset and return font size, name, bold/italic options |
gm_font_configure | Configure font family, size, bold, or italic parameters of a font asset |
gm_tileset_create | Create a new GameMaker Tile Set asset (.yy metadata) linked to an existing Sprite |
gm_tileset_inspect | Inspect a GameMaker Tile Set asset and return tile size, border, and linked sprite |
gm_tileset_configure | Configure sprite assignment, tile size, or tile border/spacing of a tile set asset |
gm_folder_create | Create or repair an asset-browser folder/YPP entry |
gm_script_create | Create script metadata and GML source |
gm_state_machine_generate | Generate a clean, struct-based GML Finite State Machine controller script (scr_state_machine) |
gm_particle_system_generate | Generate a professional, struct-based GML Particle System manager boilerplate script |
gm_gui_layout_generate | Generate a responsive GML GUI layout manager script and register it |
gm_inventory_system_generate | Generate a struct-based GML Inventory system manager script and register it |
gm_asset_rename | Safely rename any asset on disk, in YYP/YY metadata, and refactor all GML references project-wide |
gm_note_create | Create a new GameMaker Note asset (notes/NoteName/NoteName.txt) with documentation text |
gm_note_inspect | Read text documentation content, line count, file paths, and SHA-256 hash of a Note asset |
gm_note_update | Guardedly update text content of a GameMaker Note asset with SHA-256 concurrency check |
gm_datafile_list | List included data files registered in .yyp and stored in datafiles/ directory |
gm_datafile_create | Create an included data file in datafiles/ and register its GMIncludedFile entry in .yyp |
gm_datafile_read | Read text content of an included data file in datafiles/ |
gm_audio_group_list | List configured audio groups and assigned sound assets in the project |
gm_texture_group_list | List configured texture groups and assigned sprite assets in the project |
gm_shader_effect_generate | Generate complete GLSL ES Vertex & Fragment shader assets for visual effects |
gm_refactor_extract_script | Extract GML code block into a standalone script asset with Feather JSDoc headers |
gm_room_export_json | Serialize room settings, layers, instances, and creation code into a portable JSON level format |
| Tool | Purpose |
|---|---|
gm_object_create | Create a modern GMObject and YYP reference |
gm_object_configure | Set flags and sprite/mask/parent references |
gm_object_events | List events with stable keys, paths, hashes, and line counts |
gm_object_event_read | Read a common named event |
gm_object_event_read_raw | Read any event by type/number/optional collision object |
gm_object_event_upsert | Add or replace a common named event |
gm_object_event_remove | Remove a common named event; code deletion is opt-in |
gm_object_event_remove_raw | Precisely remove any numeric/collision event |
gm_object_event_chain | Traverse parent hierarchy of an object and return implementing event files, line counts, and paths |
| Tool | Purpose |
|---|---|
gm_room_inspect | Room settings, layers, instances, views, physics, and creation code |
gm_room_configure | Guarded room size/persistence/view/volume update |
gm_room_creation_code_upsert | Guarded room creation-code write/reference update |
gm_room_instance_add | Place an object instance in a room at coordinates (X, Y) with scale, rotation, and layer selection |
gm_room_layer_add | Add a new Instance, Background, Tilemap, or Asset layer to a room at specified depth and visibility |
gm_room_layer_remove | Remove a named layer from a room |
gm_room_instance_remove | Remove an instance from a room by name |
gm_room_instance_configure | Configure position (X, Y), scale, or rotation of an instance in a room |
gm_shader_create | Create shader metadata plus vertex/fragment stages |
gm_shader_inspect | Stage hashes, uniforms, attributes, varyings, and interface issues |
gm_shader_update | Guarded per-stage source update with preflight of both hashes |
gm_sequence_inspect | Inspect Sequence tracks, length, playback speed, and keyframes |
gm_timeline_create | Create a new GameMaker Timeline asset (.yy metadata) with a list of step moments and GML moment scripts |
gm_timeline_inspect | Inspect a GameMaker Timeline asset and return the list of defined moment step indexes and GML paths |
gm_anim_curve_create | Create a new Animation Curve asset with default linear channels |
gm_anim_curve_inspect | Inspect an Animation Curve asset and return defined animation channel names |
| Tool | Purpose |
|---|---|
gm_snapshot_create | Create an integrity manifest and text payload snapshot |
gm_snapshot_list | List saved snapshots |
gm_snapshot_inspect | Verify and compare a snapshot |
gm_snapshot_restore | Restore recorded files with integrity checks and backups |
| Tool | Purpose |
|---|---|
gm_compile_sync | Synchronous Windows VM compile through Igor.exe |
gm_project_compile_errors | Compile project with Igor and return parsed, structured file/line/message syntax errors |
gm_test_framework_init | Initialize the GML Unit Testing Framework script (scr_test_framework) in the project |
gm_test_suite_create | Create a new GML test suite script and register it in the Unit Testing Framework |
gm_test_runner_run | Inject runner code, build & run project in background, capture and parse unit tests results |
gm_job_compile_start | Start persistent background Igor compile job |
gm_job_package_zip_start | Start persistent background Igor package-zip job |
gm_job_status | Read live/persisted job state and artifact information |
gm_job_wait | Wait for terminal job state |
gm_job_cancel | Terminate an active build job |
gm_job_list | List persistent build job history |
| Tool | Purpose |
|---|---|
gm_connection_config | Inspect and generate stdio client configuration |
| Tool | Purpose |
|---|---|
gm_gml_object_collision_event_builder | Build GML sub-pixel collision resolution event code with velocity reflection & friction |
gm_gml_light_shadow_2d_builder | Build 2D additive light rendering and shadow caster GML struct code |
gm_gml_particle_emitter_burst_builder | Build GML particle emitter burst code with region shape and auto-cleanup time source |
gm_gml_ds_grid_to_array2d_converter | Convert legacy GameMaker ds_grid structures to modern 2D GML Arrays |
gm_gml_shader_uniform_struct_builder | Build GML struct wrapper for binding and updating Shader Uniforms |
gm_gml_network_packet_buffer_builder | Build binary GameMaker buffer encoder/decoder struct code for multiplayer network packets |
gm_gml_dialogue_tree_generator | Generate GML node-based dialogue tree struct system with choice branching |
gm_gml_behavior_tree_builder | Build AI Behavior Tree system code (Selector, Sequence, Action nodes) |
gm_gml_save_state_rollback_builder | Build frame rollback save state history struct for local and multiplayer rewind |
gm_gml_screen_shake_camera_builder | Build GML camera impulse screen shake decay and view pos update code |
gm_gml_localization_csv_builder | Build GML CSV string table parser and dynamic i18n translation manager struct |
gm_gml_tween_easing_library_generator | Generate GML Math Easing library (Linear, Quad, Cubic, Bounce) |
gm_gml_render_pipeline_depth_sort_builder | Build 2.5D depth sorting render pipeline code with Z-buffer toggles |
gm_ide_room_instance_batch_add | Batch insert multiple object instances into a GameMaker room layer |
gm_gml_performance_memory_audit | Audit GML scripts for per-frame dynamic allocations and GC pressure |
gm_gml_light_shadow_2d_shader_builder | Generate HLSL/GLSL ES 2D Light & Dynamic Shadow Shader pair (.vsh + .fsh) |
gm_gml_inventory_drag_drop_ui_builder | Build Drag-and-Drop Inventory Slot UI system struct GML code |
gm_gml_ds_list_to_array_converter | Convert legacy ds_list functions to modern GML 1D Array methods |
gm_gml_ds_map_to_struct_converter | Convert legacy ds_map functions to modern GML Structs |
gm_gml_object_state_machine_events_generate | Generate Object Event State Machine boilerplate scripts across Create, Step, Clean Up |
gm_gml_surface_blur_bloom_shader_builder | Generate dual-pass Gaussian Blur & Bloom Shader pair (.vsh + .fsh) |
gm_gml_grid_pathfinding_a_star_builder | Build custom A* Grid Pathfinding GML struct implementation |
gm_gml_audio_spatial_3d_emitter_builder | Build 3D Spatial Audio Emitter controller struct code |
gm_gml_save_load_json_encrypted_builder | Build Encrypted JSON Save/Load system struct GML code with MD5 checksums |
gm_gml_camera_view_follow_bounds_builder | Build Smooth Camera Follow with Deadzone and Room Clamping code |
gm_gml_ds_priority_to_array_converter | Convert legacy ds_priority queue to sorted GML Array struct |
gm_gml_event_pubsub_dispatcher_builder | Build Global Observer Pub/Sub Event Dispatcher GML struct |
gm_gml_flexbox_ui_autolayout_builder | Build Flexbox UI Layout spacing and alignment calculator GML code |
gm_ide_tileset_autotile_rules_configure | Configure 47-piece or 16-piece autotiling rule metadata on a GameMaker TileSet |
gm_gml_type_checked_struct_builder | Build schema-validated GML Struct constructor with type assertions |
gamemaker://project/info — Live project summary and resource metadata.gamemaker://project/statistics — Live resource, line count, complexity, and dependency stats.gamemaker://runtimes — Detected GameMaker Studio runtimes and Igor.exe paths.gamemaker://gml/rules — Mandatory GML 2024+ strict syntax and coding rules for AI model context.gamemaker://snapshots — List of recorded project integrity snapshots.gamemaker://jobs/history — History of Igor build and package jobs.audit-gamemaker-project: Run a read-only structural, GML, shader, dependency, and statistics audit.debug-gamemaker-build: Use the persistent background job workflow to diagnose project build errors.safe-gamemaker-refactor: Snapshot, inspect references, preview patches, edit with hashes, validate, and compile.implement-gamemaker-shader-effect: Inspect and update a shader with cross-stage validation and a build check.restore-gamemaker-snapshot: Inspect a snapshot and request explicit confirmation before destructive restoration.create-state-machine: Generate a robust, clean state machine pattern for GameMaker objects.optimize-draw-events: Audit and optimize Draw events for batching, texture swaps, and state resets.refactor-gml-script: Refactor legacy argument0..15 scripts to modern GML 2024+ syntax and Feather JSDoc.write-clean-gml-script: Generate Feather-compliant, memory-optimized GML script with constructors and static methods.write-gml-unit-test: Create GML unit test suite, add assertion checks, and run them using the test framework.build-2d-lighting-system: Generate a complete 2D light raycaster, shadow caster struct, and shader pair.setup-inventory-system: Generate inventory database struct, slot UI controller, and save/load persistence.convert-legacy-ds-structures: Audit and convert legacy ds_list, ds_map, ds_grid, and ds_priority to GML 2D arrays & structs.setup-ai-behavior-tree: Build AI Selector, Sequence, and Action nodes for NPC/enemy decision making.setup-localization-csv-i18n: Scan project for hardcoded UI text strings, generate localization dictionary, and build translator.audit-gc-memory-leaks: Scan GML scripts for per-frame dynamic array/struct/DS allocations in step and draw events.setup-encrypted-save-system: Build encrypted JSON save/load state system with MD5/salt tamper checksums.setup-isometric-depth-sorting: Build 2.5D isometric depth sorting render pipeline code with Z-buffer toggles.setup-branching-dialogue-tree: Generate node-based dialogue tree struct system with choice branching and callback triggers.setup-multiplayer-packet-buffers: Build binary GameMaker buffer encoder/decoder struct code for multiplayer network packets.gm_project_info, gm_asset_list, and the analysis tools.gm_project_validate after metadata changes.gm_job_start, then use gm_job_wait and gm_job_log.Backups are stored under .gamemaker-mcp/backups; snapshots and job history live under .gamemaker-mcp/snapshots and .gamemaker-mcp/jobs.
The smoke command starts the built MCP server in read-only mode, lists its tools, and calls project info, validation, statistics, GML analysis, and shader analysis:
npm run smoke -- "C:\path\to\Game.yyp"
jsonc-parser and create backups;shell: false;The server intentionally does not expose arbitrary shell commands, arbitrary YY/YPP overwrite, bulk asset deletion, or GUI automation. Binary sprite/audio import remains outside the current safe text-focused scope.
A special shoutout to Jon Peterson (PixelatedPope) for his hostile comment regarding this tool and AI assistance in GameMaker development:
"Sorry, he meant 'Real' Game Devs. Not lazy fucks who rely on stolen works"

It is deeply disappointing to see this kind of reaction from a prominent community educator whose content has helped many beginners get started with coding.
While some choose to throw insults and protect legacy gatekeeping, we will continue building modern, open-source, project-aware developer tooling to make GameMaker Studio and the new GMRT runtime more accessible, efficient, and powerful for everyone. 🚀
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows