Skip to main content
Glama

đŸ‡«đŸ‡· Français · 🇬🇧 English

License: MIT npm Godot 4.3+ Node >=18 Zero runtime deps


godot-hands

Donnez les mains Ă  votre assistant IA sur l'Ă©diteur Godot — avec 10 outils au lieu de 100.

Assistant IA <---stdio/MCP---> godot-hands <---WebSocket:6505---> Plugin Godot

Pourquoi celui-ci

La plupart des serveurs MCP Godot exposent chaque mĂ©thode de l'addon comme un tool MCP sĂ©parĂ© — 50, 80, parfois plus de 100 entrĂ©es dans le catalogue que le modĂšle doit lire et trier avant chaque appel. Plus la surface est large, moins un LLM choisit le bon outil de façon fiable, et plus chaque requĂȘte coĂ»te cher en tokens rien que pour dĂ©crire les outils disponibles.

godot-hands prend le pari inverse : 10 outils, dont un seul (godot_call) donne accÚs à un catalogue de 210 méthodes réparties en ~25 catégories (scÚne, nodes, 3D, physique, animation, shaders, tilemap, particules, audio, navigation, export Android, tests
), découvert en direct auprÚs de l'éditeur connecté plutÎt que figé dans ce dépÎt. Le modÚle demande le schéma dont il a besoin (godot_describe) au lieu de tout charger d'un coup. Résultat mesuré (npm run token-cost) : ~1460 tokens pour toute la surface d'outils.

Le reste tient en une phrase : zĂ©ro dĂ©pendance runtime en dehors du SDK MCP, aucun service externe, le plugin Godot est un simple client WebSocket — vous savez exactement ce qui tourne et oĂč.

Ce qui distingue ce pont d'un simple exécuteur de commandes

  • Garde-fous, pas juste des fonctions. Les opĂ©rations destructrices (suppression de fichier, Ă©dition de script, code arbitraire) exigent confirm: true ; les Ă©ditions de script portent un garde optimiste par SHA-256 pour ne pas Ă©craser silencieusement un changement fait entre-temps dans l'Ă©diteur ; les mutations de scĂšne passent par EditorUndoRedoManager — un Ctrl-Z suffit toujours Ă  annuler.

  • Multi-Ă©diteur. Plusieurs projets Godot peuvent se connecter en mĂȘme temps ; godot_status {"select": "..."} Ă©pingle celui qui doit recevoir les appels au lieu de tomber sur le premier connectĂ© par hasard.

  • Les opĂ©rations longues ne timeout plus. godot_call {"async": true} rend la main immĂ©diatement avec un job_id Ă  relire via godot_job — un stress test de 60s ne meurt plus au bout de 30.

  • CompatibilitĂ© de version fine. Chaque mĂ©thode dĂ©clare la version Godot minimale qu'elle requiert ; sur un moteur plus ancien, seules ces mĂ©thodes-lĂ  disparaissent du catalogue au lieu de faire Ă©chouer tout l'addon.

  • Capture d'erreurs structurĂ©e, pas du scraping d'UI : les erreurs runtime sont interceptĂ©es via le signal debug_data du debugger Godot.

  • Playtesting dĂ©terministe : seed RNG fixĂ©e, tick de simulation fixe, snapshots d'Ă©tat, avance frame-par-frame (step_frames) ou jusqu'Ă  condition (wait_for_condition) — pour reproduire un bug plutĂŽt que le chasser Ă  l'aveugle.

  • Perception 3D : modes de rendu debug (wireframe, overdraw, Ă©clairage seul
) sur les captures d'Ă©cran, dĂ©tection d'objets qui se chevauchent ou flottent, test de frustum camĂ©ra, couverture des lumiĂšres — un lint spatial pour repĂ©rer ce qu'un screenshot seul ne montre pas.

  • Assets CC0 intĂ©grĂ©s : recherche, prĂ©visualisation et import direct depuis Poly Haven et ambientCG, sans quitter la conversation.

Related MCP server: GoPeak

Installation

Deux commandes, zéro build, pas de clone de dépÎt :

# 1. Pose l'addon Godot dans votre projet (addons/godot_mcp/)
npx godot-hands install ./mon-jeu

Activez-le : Projet → Paramùtres du projet → Plugins → godot-hands → Activer

{
  "mcpServers": {
    "godot-hands": {
      "command": "npx",
      "args": ["-y", "godot-hands"]
    }
  }
}

Préférez installer une bonne fois pour toutes ? npm install -g godot-hands, puis "command": "godot-hands" dans la config. Le paquet npm embarque le plugin Godot : la sous-commande install le copie depuis node_modules (ou copiez manuellement node_modules/godot-hands/plugin/ vers addons/godot_mcp/, c'est équivalent).

Outils

Outil

Description

godot_call

Appelle n'importe quelle méthode du catalogue (async: true pour les appels longs)

godot_list_methods

Liste les méthodes par catégorie (en direct depuis l'éditeur connecté)

godot_describe

Schéma complet (paramÚtres, types, annotations) d'une ou plusieurs méthodes

godot_info

Infos projet

godot_screenshot

Capture éditeur en PNG

godot_execute

Exécute du GDScript

godot_status

Vérifie la connexion, épingle un éditeur (select) si plusieurs sont connectés

godot_job

Relit le résultat d'un appel async: true

godot_doctor

Diagnostic complet : port, connexion, auth, contrat addon/serveur, binaire Godot

godot_assets

Recherche/prévisualise/importe des assets CC0 (Poly Haven, ambientCG)

Confirmation obligatoire (confirm: true) : les méthodes qui écrivent ou suppriment un fichier sur disque, modifient project.godot, ou exécutent du code arbitraire dans le process éditeur/jeu (create_scene, delete_scene, edit_script, execute_editor_script, set_project_setting, etc.) refusent l'appel avec l'erreur -32009 tant que params.confirm n'est pas true. godot_describe liste ce paramÚtre dans le schéma de chaque méthode concernée. Les mutations de la scÚne éditée (ajout/suppression de nodes, changement de propriétés, CSG, scatter
) ne sont pas gatées : elles passent par EditorUndoRedoManager et un simple Ctrl-Z suffit à les annuler.

godot_assets effectue des requĂȘtes rĂ©seau sortantes vers polyhaven.com et ambientcg.com. import Ă©crit les fichiers dans <projet>/assets/<provider>/<id>/ (chemin obtenu via get_project_info) puis dĂ©clenche un rescan du projet. Sources CC0 uniquement (domaine public, aucune attribution lĂ©galement requise) ; une note NOTICE.txt est Ă©crite Ă  cĂŽtĂ© de chaque asset importĂ©.

Chemins de nodes : les paramĂštres parent_path et node_path de godot_call (ex. add_node, update_property, delete_node) sont toujours relatifs Ă  la racine de la scĂšne actuellement Ă©ditĂ©e ("." = racine de la scĂšne). Les chemins absolus Godot ("/root", "../...") sont rejetĂ©s — ils cibleraient l'arbre interne de l'Ă©diteur au lieu de la scĂšne.

Handles de session : tout paramĂštre node_path accepte aussi un handle (chaĂźne "@id:<n>", renvoyĂ©e sous "handle" par get_scene_tree, add_node, rename_node, etc.) Ă  la place d'un chemin. Un handle continue de dĂ©signer le mĂȘme node aprĂšs un renommage ou un dĂ©placement dans la scĂšne, contrairement Ă  un chemin qui casse dĂšs que l'un des deux se produit — utile pour enchaĂźner plusieurs appels sur le node qu'on vient de crĂ©er/modifier. Un handle expire si la scĂšne est rechargĂ©e/refermĂ©e ; rappelez get_scene_tree pour en obtenir un nouveau.

godot_screenshot nécessite un éditeur avec rendu actif : il ne fonctionne pas en mode --headless (erreur "Could not get image from viewport").

Ressources et prompts MCP

En plus des outils, le serveur expose l'Ă©tat du projet en ressources (gratuites en tokens tant qu'elles ne sont pas lues, contrairement aux outils) : godot://scene/current, godot://project/info, godot://project/settings, godot://logs/recent, et le template godot://class/{name} (rĂ©flexion ClassDB, mise en cache 5 min — les classes du moteur ne changent pas en cours de session).

Quatre prompts réutilisables guident les workflows pour lesquels ce serveur a été conçu : blockout-3d-level, diagnose-crash, audit-scene-perf, asset-strategy.

godot_assets {action: "import"} envoie des notifications de progression (notifications/progress) si le client fournit un progressToken — le tĂ©lĂ©chargement peut prendre du temps sur une connexion lente.

Arborescence

godot-hands/
├── plugin/              ← Plugin Godot (embarquĂ© dans le paquet npm)
├── src/index.ts         ← Serveur MCP (Node.js)
├── src/assets/          ← Sourcing d'assets CC0 (Poly Haven, ambientCG)
├── package.json
├── tsconfig.json
├── README.md
└── LICENSE              ← MIT

Développement

npm test           # tests unitaires (vitest), y compris le contract-check addon/serveur
npm run contract    # contract-check seul : get_commands()/get_command_schemas() alignés, modules enregistrés
npm run test:godot  # tests GDScript en --headless (nécessite `godot`/`godot4` sur le PATH ou GODOT_BIN)
npm run token-cost  # mesure le poids en tokens de la surface d'outils (et le contrefactuel si un éditeur est connecté)

Licence

MIT


godot-hands

Give your AI assistant real control of the Godot editor — with 10 tools instead of 100.

AI Assistant <---stdio/MCP---> godot-hands <---WebSocket:6505---> Godot Plugin

Why this one

Most Godot MCP servers expose every addon method as its own MCP tool — 50, 80, sometimes 100+ entries the model has to read and sort through before every single call. The bigger that surface gets, the less reliably an LLM picks the right tool, and the more tokens get burned on tool descriptions before the conversation even starts.

godot-hands takes the opposite bet: 10 tools, one of which (godot_call) opens onto a catalog of 210 methods across ~25 categories (scene, nodes, 3D, physics, animation, shaders, tilemaps, particles, audio, navigation, Android export, testing
), discovered live from the connected editor instead of hardcoded in this repo. The model asks for the schema it actually needs (godot_describe) instead of loading everything up front. Measured result (npm run token-cost): ~1460 tokens for the whole tool surface.

Everything else fits in one sentence: zero runtime dependencies beyond the MCP SDK, no external services, the Godot plugin is a plain WebSocket client — you know exactly what's running and where.

What sets this apart from a plain command runner

  • Guardrails, not just functions. Destructive operations (deleting a file, editing a script, running arbitrary code) require confirm: true; script edits carry an optimistic SHA-256 guard so they can't silently clobber a change made in the editor in the meantime; scene mutations go through EditorUndoRedoManager — a plain Ctrl-Z always undoes them.

  • Multi-editor aware. Several Godot projects can stay connected at once; godot_status {"select": "..."} pins which one receives calls instead of falling back to whichever connected first.

  • Long operations stop timing out. godot_call {"async": true} returns a job_id immediately, polled via godot_job — a 60-second stress test no longer dies at the 30-second mark.

  • Fine-grained version compatibility. Every method declares the minimum Godot version it needs; on an older engine, only those specific methods drop out of the catalog instead of the whole addon failing to load.

  • Structured error capture, not UI scraping: runtime errors are intercepted through Godot's debugger debug_data signal.

  • Deterministic playtesting: fixed RNG seed, fixed simulation tick, state snapshots, frame-by-frame stepping (step_frames) or stepping until a condition holds (wait_for_condition) — reproduce a bug instead of hunting it blind.

  • 3D perception: debug render modes (wireframe, overdraw, lighting only
) on screenshots, overlapping/floating object detection, camera frustum testing, light coverage — a spatial lint for what a single screenshot won't show you.

  • Built-in CC0 assets: search, preview, and import directly from Poly Haven and ambientCG without leaving the conversation.

Setup

Two commands, zero build, no repo clone:

# 1. Drops the Godot addon into your project (addons/godot_mcp/)
npx godot-hands install ./my-game

Enable it: Project → Project Settings → Plugins → godot-hands → Enable

{
  "mcpServers": {
    "godot-hands": {
      "command": "npx",
      "args": ["-y", "godot-hands"]
    }
  }
}

Prefer a permanent install? npm install -g godot-hands, then use "command": "godot-hands" in the config. The npm package ships the Godot plugin itself: the install subcommand copies it out of node_modules (or manually copy node_modules/godot-hands/plugin/ to addons/godot_mcp/ — same thing).

Tools

Tool

Description

godot_call

Call any method in the catalog (async: true for long-running calls)

godot_list_methods

List methods by category (live from the connected editor)

godot_describe

Full schema (params, types, annotations) for one or more methods

godot_info

Project info

godot_screenshot

Editor screenshot in PNG

godot_execute

Run GDScript

godot_status

Check connection, pin an editor (select) when several are connected

godot_job

Poll the result of an async: true call

godot_doctor

End-to-end diagnostic: port, connection, auth, addon/server contract, Godot binary

godot_assets

Search/preview/import CC0 assets (Poly Haven, ambientCG)

Confirmation required (confirm: true): methods that write to or delete a file on disk, modify project.godot, or run arbitrary code in the editor/game process (create_scene, delete_scene, edit_script, execute_editor_script, set_project_setting, etc.) refuse the call with a -32009 error until params.confirm is true. godot_describe lists this parameter in the schema of every gated method. Mutations to the edited scene (adding/removing nodes, property changes, CSG, scatter
) are not gated: they go through EditorUndoRedoManager, so a plain Ctrl-Z undoes them.

godot_assets makes outbound network requests to polyhaven.com and ambientcg.com. import writes files under <project>/assets/<provider>/<id>/ (path learned via get_project_info) and then triggers a project rescan. CC0 sources only (public domain, no attribution legally required); a NOTICE.txt is written next to each imported asset regardless.

Node paths: parent_path and node_path parameters of godot_call (e.g. add_node, update_property, delete_node) are always relative to the root of the currently edited scene ("." = scene root). Absolute Godot paths ("/root", "../...") are rejected — they would target the editor's internal tree instead of the scene.

Session handles: any node_path parameter also accepts a handle (an "@id:<n>" string, returned as "handle" by get_scene_tree, add_node, rename_node, etc.) instead of a path. A handle keeps addressing the same node across a rename or reparent, where a path would break — useful for chaining several calls against the node you just created/modified. A handle goes stale when the scene is reloaded/reopened; call get_scene_tree again for a fresh one.

godot_screenshot requires an editor with active rendering: it does not work in --headless mode ("Could not get image from viewport" error).

MCP resources and prompts

Besides tools, the server exposes project state as resources (free in tokens until actually read, unlike tools): godot://scene/current, godot://project/info, godot://project/settings, godot://logs/recent, and the template godot://class/{name} (ClassDB reflection, cached for 5 minutes — engine classes don't change mid-session).

Four reusable prompts guide the workflows this server was built for: blockout-3d-level, diagnose-crash, audit-scene-perf, asset-strategy.

godot_assets {action: "import"} sends notifications/progress updates if the client supplies a progressToken — the download can take a while on a slow connection.

Development

npm test           # unit tests (vitest), including the addon/server contract-check
npm run contract    # contract-check alone: get_commands()/get_command_schemas() agree, every module registered
npm run test:godot  # headless GDScript tests (needs `godot`/`godot4` on PATH or GODOT_BIN)
npm run token-cost  # measures the tool surface's token weight (and the counterfactual if an editor is connected)

Structure

godot-hands/
├── plugin/              ← Godot plugin (bundled in the npm package)
├── src/index.ts         ← MCP server (Node.js)
├── src/assets/          ← CC0 asset sourcing (Poly Haven, ambientCG)
├── test/                ← vitest suite + headless GDScript fixture project
├── package.json
├── tsconfig.json
├── README.md
└── LICENSE              ← MIT

License

MIT

Available Tools

10 tools
godot_assetsA

Search, preview, and import free CC0 3D assets (Poly Haven, ambientCG) straight into the Godot project. 'search' finds candidates by name/tag; 'preview' returns a thumbnail so you can pick by sight instead of guessing from an id; 'import' downloads into res://assets/// and rescans the project filesystem.

Inputs: action (required), id, type, limit, +4 more.

godot_callA
Destructive

Call any method on the Godot editor addon. See godot_list_methods to browse what's available and godot_describe for a method's full parameter schema. Any 'node_path' parameter also accepts a session handle (the "@id:..." string returned as "handle" by get_scene_tree, add_node, and similar methods) instead of a path — a handle keeps addressing the same node across a rename or reparent, where a path would break. Handles go stale when the scene is reloaded/reopened; get_scene_tree again for fresh ones.

Inputs: method (required), async, params.

godot_describeA
Read-onlyIdempotent

Get the full parameter schema (types, required/optional, defaults, annotations) for one or more godot_call methods.

Inputs: methods (required).

godot_doctorA
Read-onlyIdempotent

Diagnose the MCP bridge end-to-end (port, editor connection, auth, addon/server contract, Godot binary for headless tests) with a checklist and fix suggestions for anything failing.

Inputs: no named parameters.

godot_executeA
Destructive

Execute GDScript code in the Godot editor (shorthand for godot_call method=execute_editor_script).

Inputs: code (required).

godot_infoA
Read-onlyIdempotent

Get project info from the Godot editor (shorthand for godot_call method=get_project_info).

Inputs: no named parameters.

godot_jobA
Read-onlyIdempotent

Check an async job started by godot_call with async:true. Returns its status and, once finished, its result or error.

Inputs: job_id (required).

godot_list_methodsA
Read-onlyIdempotent

List available Godot addon methods, live from the connected editor. Call with no arguments for category counts, or with a category to list its methods and one-line summaries.

Inputs: category.

godot_screenshotA
Read-onlyIdempotent

Capture the Godot editor viewport. Returns base64 PNG image data.

Inputs: no named parameters.

godot_statusA
Idempotent

Check connection status to the Godot editor. With 'select', pins which editor subsequent calls go to when several are connected.

Inputs: select.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog


    TDQS

    A4.2/5.0

    Scored across 10 tools

    Disambiguation4/5

    Each tool has a clearly identifiable role: browsing, describing, calling, executing, capturing, status checking, job polling, diagnostics, and asset management. The main ambiguity is between the generic godot_call and the shorthands like godot_execute and godot_info, but their descriptions explicitly frame them as shorthands, which mitigates confusion.

    Naming Consistency4/5

    All tools share a consistent godot_ prefix and snake_case style, making them easy to group and predict. However, naming mixes verb-based names like godot_call and godot_execute with noun-based names like godot_info, godot_status, and godot_assets, so it is not a strict verb_noun pattern throughout.

    Tool Count5/5

    With 10 tools, the server is well-scoped: it covers generic invocation, method discovery, descriptions, project info, screenshots, script execution, connection status, async jobs, diagnostics, and asset import. Each tool earns its place, and the count is appropriate for a Godot editor integration surface.

    Completeness5/5

    The generic godot_call plus godot_list_methods and godot_describe provide comprehensive access to the addon API, while shorthands cover the most common operations. Async job handling, connection diagnostics, and asset search/preview/import fill out the workflow with no obvious dead ends.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      C
      quality
      D
      maintenance
      Enables AI assistants to control Godot game engine projects through a WebSocket bridge. Supports scene editing, node manipulation, script management, and project introspection via 163 registered tools.
      100
      1
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables AI assistants to edit, run, inspect, and fix Godot 4 projects through an MCP server with dynamic tool groups and setup-gated capabilities.
      33
      197 npm
      272
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Provides AI assistants with tools to launch the Godot editor, run projects, manipulate scenes, manage scripts, and control node properties through a standardized MCP interface.
      21
      MIT
    • A
      license
      C
      quality
      F
      maintenance
      Godot MCP connects AI assistants directly to the Godot editor, exposing 300+ tools for scene construction, node manipulation, runtime inspection, input recording, physics setup, animation authoring, and more.
      100
      131 npm
      31
      MIT