Skip to main content
Glama

input_map_manage

Manage Godot input actions and bindings: list, add, remove, bind key/mouse/gamepad events, and scaffold presets, persisted to project.godot.

Instructions

InputMap actions and bindings (keyboard, mouse, gamepad). Persisted to project.godot.

Resource form: godot://input_map — prefer for active-session reads.

Ops: • list(include_builtin=False) List input actions and their bound events. By default only user-authored actions (those persisted in project.godot under input/<name>) are returned; pass include_builtin=True to also surface Godot's ui_* and editor-runtime actions (spatial_editor/*, etc.). The is_builtin field on each entry is true for any action not authored by the user. • add_action(action, deadzone=0.5) Create a new empty input action. deadzone must be in [0.0, 1.0] — Godot uses it as the analog-stick dead-zone threshold; values outside this range are rejected with VALUE_OUT_OF_RANGE. Typical values are 0.2-0.5; leave the default 0.5 unless you have a reason. Not a key-repeat delay. • ensure_action(action, deadzone=0.5) Idempotently create or persist an input action. If the action exists in live InputMap or in project.godot, the existing state is preserved. • remove_action(action) Remove an action and all its event bindings. Also removes actions persisted in project.godot but not loaded in the live InputMap (loaded_in_input_map: false in list), e.g. actions created by a previous editor session. • bind_event(action, event_type, keycode="", ctrl=False, alt=False, shift=False, meta=False, button=None, axis=None, axis_value=1.0) Bind a key/mouse/gamepad event to an action. The action must already exist (call add_action first). event_type is "key" | "mouse_button" | "joy_button" | "joy_axis". - key: keycode is a Godot keycode name string like "A", "Space", "Enter", "Escape", "F1", "Left" — not an integer and not KEY_*. Modifier booleans ctrl / alt / shift / meta optional. - mouse_button: button is an int — 1=left, 2=right, 3=middle, 4=wheel up, 5=wheel down. - joy_button: button is the JoyButton index (e.g. 0=A/Cross, 1=B/Circle). - joy_axis: axis is the JoyAxis index and axis_value is the direction/value, usually -1.0 or 1.0. • ensure_binding(action, event_type, ...) Idempotently ensure the action exists and has the requested binding. • scaffold_preset(preset="wasd_platformer") Scaffold a standard input mapping preset. Presets: 'wasd_platformer' (A/D/Space/W/Arrows), 'wasd_topdown' (WASD/Arrows/E/Space), 'first_person' (WASD/Space/Shift/E), 'driving' (W/S/A/D/Arrows/Space).

Canonical call shape: {"op": "<verb>", "params": {...}}. Flat op parameters are accepted as a compatibility alias when the client transmits them; op and session_id remain top-level.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opYes
paramsNo
session_idNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv5.0.28
    • changedInput schema / properties / op / enum
      Previous value: -[
      -  "add_action",
      -  "bind_event",
      -  "ensure_action",
      -  "ensure_binding",
      -  "list",
      -  "remove_action"
      -]New value: +[
      +  "add_action",
      +  "bind_event",
      +  "ensure_action",
      +  "ensure_binding",
      +  "list",
      +  "remove_action",
      +  "scaffold_preset"
      +]
  2. First observedv4.1.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does well: it explains persistence, idempotency, error conditions (out-of-range deadzone rejected with VALUE_OUT_OF_RANGE), and the distinction between live InputMap and project.godot state. It also clarifies that deadzone is not a key-repeat delay. However, it doesn't mention the output format of list or what happens on failures beyond the error code, which would be expected for a tool with this many operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but well-organized with a clear introduction, bullet-pointed operations, and a canonical call shape. It front-loads the most important information (resource form preference) and each operation is concise yet complete. However, it could be slightly trimmed in places, but the length is justified given the tool's complexity and the lack of schema parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 operations, 3 parameters, output schema present), the description is quite complete. It covers when to use, how to use, and what to expect, including edge cases like persisted-but-not-loaded actions. The output schema provides return formats, so the description doesn't need to repeat that. The only minor gap is the lack of error handling for other operations besides deadzone, but that doesn't prevent correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the params object (it's just a generic anyOf), so the description must fully compensate. It does: for each operation, every parameter is explained with types, allowed values, and examples. For bind_event, it details event_type, keycode (as Godot keycode name strings), button indices, axis values, and modifier booleans. This is far beyond what the schema provides and is essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear statement of the tool's function: managing input actions and bindings (keyboard, mouse, gamepad) with persistence to project.godot. It then breaks down each operation with specific verbs (list, add_action, etc.) and details that distinguish it from generic manage tools. This clearly differentiates it from siblings like input_event_manage and ui_manage, which likely handle different aspects of input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the resource form over the file form, and for each operation includes prerequisites (e.g., 'action must already exist' for bind_event) and idempotency notes (ensure_action, ensure_binding). It also mentions that list by default excludes built-in actions, guiding when to set include_builtin=True. This is comprehensive and leaves little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools