RenForge 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": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| renforge_infoA | Call first: report RenForge version and the active project. active_project falls back from the dashboard selection to the serve default, then to a Ren'Py project detected from the current directory (project_source says which one matched). A null active_project only means auto-discovery found nothing — every tool accepts project_path directly, so ask the user for the game's path and keep going. |
| renforge_contextC | Discover the active Ren'Py project (dashboard, serve default, or cwd). |
| renforge_inspect_imageC | Open a local image and return an optional cropped/zoomed PNG for inspection. |
| renforge_inspect_projectD | – |
| renforge_scan_projectC | Scan scripts; defaults to summary-only, with opt-in sections and pagination. |
| renforge_find_referencesC | Find exact Ren'Py definitions/usages, including text interpolations. |
| renforge_parse_lintD | – |
| renforge_launchA | Launch or reuse a game with the Live Editor enabled by default. Pass After launch, poll The call waits at most 20 seconds for readiness, then returns
|
| renforge_launch_statusB | Return starting, ready, failed, or idle for a background launch. |
| renforge_jumpC | Restart at a label or file:line; poll launch status when still starting. |
| renforge_new_gameC | Start at the |
| renforge_stopC | Stop a running game or cancel its in-progress launch, then clean up. |
| renforge_game_stateC | Return complete live state; optionally include compact metrics or audio. |
| renforge_game_state_compactB | Return bounded live state, optionally with selected variables. Defaults to state_profile='interaction' so the full store is never returned in the payload unless state_profile='full' is requested. |
| renforge_inspect_screenC | Inspect an active screen's layer, JSON-safe scope, and arguments. |
| renforge_advanceC | Advance the current dialogue. |
| renforge_controlB | Run a runtime action: advance, rollback, toggle_skip, toggle_auto, toggle_afm, game_menu, hide_windows, quick_save, quick_load, reload_script, restart_interaction, or quit. Emits correlated business events (quick_save.completed, skip.stopped, …). Set wait_for_effect=true to block until the matching event appears. |
| renforge_send_inputB | Send exactly one input mode: text, named key, or scroll object.
|
| renforge_savesC | Save, load, or list named save slots without screenshot payloads. |
| renforge_list_choicesC | List the on-screen menu choices (text + index). |
| renforge_select_choiceB | Select a menu choice by visible text (preferred) or by index. |
| renforge_list_ui_elementsC | List visible focusable Ren'Py controls with bounds and frame guard. |
| renforge_click_elementB | Click a visible control by text/id, guarded against a stale frame. Returns received_by when another control owns the hit point. With wait_for_effect=true, wait for a correlated business event such as quick_save.completed when the clicked action is recognizable. |
| renforge_hover_elementC | Move the pointer over a visible control without clicking it. |
| renforge_get_ui_element_boundsC | Report focus bounds and rendered painted bounds for a UI element. |
| renforge_click_atC | Click screen coordinates with optional frame/state safety guards. |
| renforge_get_displayable_boundsC | Report where a shown image tag was rendered, in logical coordinates. |
| renforge_position_elementA | Reposition a shown image tag live and return its new logical bounds. Provide at least one placement field. The tag keeps its current
attributes. Positions follow Ren'Py's rule: an integer is absolute
pixels ( |
| renforge_diff_screenshotsA | Diff two frames and return the bounding box of what changed.
|
| renforge_evalC | Evaluate a Python expression in the running game's store namespace. |
| renforge_set_varC | Set a variable in the running game's store namespace. |
| renforge_get_varC | Read a variable from the running game's store. |
| renforge_poll_eventsB | Return pushed events (dialogue, labels, exceptions) newer than |
| renforge_get_errorsC | Return recent bridge exceptions or bounded crash-file diagnostics. |
| renforge_wait_untilB | Wait for exactly one label, screen, or expression condition. Returns a compact state by default (state_profile='interaction'). Pass include for extra fields/variables; use state_profile='full' only when the complete store is required. |
| renforge_hit_testB | Inspect the interactive focus stack at a coordinate. Returns topmost and underneath focusable controls so agents can detect transparent overlays that intercept clicks. |
| renforge_scene_treeA | Perceive the whole scene as structured data (logical coordinates). Unlike |
| renforge_measureA | Measure pixel relationships between scene nodes, without eyes.
|
| renforge_run_scenarioB | Run a multi-step live scenario (click/wait/assert/...) in one call. On failure, captures a screenshot and compact diagnostics automatically. Supported step actions: set, eval, click, click_at, advance, scroll, wait, assert, select_choice, capture, save, load, control, send_input. |
| renforge_autopilotC | Auto-play the game across all branches; report label coverage and crashes. |
| renforge_assetsC | Find orphaned and missing image/audio assets in the project. |
| renforge_languagesC | List translation languages present under game/tl/. |
| renforge_translation_statsC | Report missing dialogue/string translation counts for a language. |
| renforge_generate_translationsC | Generate/update translation files for a language (writes game/tl//). |
| renforge_export_dialogueC | Export the game's dialogue as plain text. |
| renforge_web_buildC | Package the project as a browser-playable build (needs the web DLC). |
| renforge_distributeC | Build desktop distributions (e.g. package='pc', 'mac', 'linux'). |
| renforge_search_docsC | Search Ren'Py's offline documentation for a keyword. |
| renforge_get_docB | Read a Ren'Py documentation page as plain text (e.g. topic='cli'). |
| renforge_list_docsB | List available Ren'Py documentation topics. |
| renforge_screenshotB | Capture a game frame, optionally resizing, cropping, and zooming it. Measurement guides help pixel-perfect placement: |
| renforge_capture_screenshotC | Persist a screenshot under the project's controlled capture directory. |
| renforge_estimate_translationC | Estimate stable visual translation between two saved frames. |
| renforge_find_image_on_screenC | Find a template image in the current frame and return its bounds. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 54 tools
The set has multiple overlapping tools: renforge_info vs renforge_context both discover the active project; renforge_screenshot vs renforge_capture_screenshot blur capture/persist; renforge_advance duplicates part of renforge_control; renforge_game_state and renforge_game_state_compact create state-reading ambiguity. Two tools (renforge_inspect_project, renforge_parse_lint) have no descriptions at all, worsening boundaries.
All 54 tools use a uniform `renforge_` snake_case prefix with no camelCase or mixed conventions. Although some names are noun-based (renforge_info) and some verb-based (renforge_click_at), the pattern is predictable and consistent throughout.
54 tools far exceeds the 50+ threshold for extreme mismatch; even for a broad Ren'Py automation domain, the surface is bloated. Many operations (advance, bounds, state, screenshots) are duplicated across separate tools, indicating poor scoping.
The set covers project discovery, scanning, docs, live launch/control, UI automation, screenshots, scene perception, variables, events, saves, translations, assets, builds, and autopilot. No obvious workflow dead ends appear for Ren'Py development and testing, aside from direct script editing which may be outside this server's control plane.