Skip to main content
Glama
matula

Godot MCP Server

by matula
README.md
# Godot MCP Server (GMS)

A basic Model Context Protocol (MCP) server for the Godot game engine that enables AI assistants to interact with and manipulate Godot projects.
 This server, in general, uses the [Godot command line](https://docs.godotengine.org/en/stable/tutorials/editor/command_line_tutorial.html) to work with projects, so no Godot plugins are needed.

## Table of Contents
- [Overview](#overview)
- [Setup](#setup)
- [Usage](#usage)
- [Available Tools](#available-tools)
- [Architecture](#architecture)
- [How It Works](#how-it-works)
- [Development](#development)
- [Example using Claude Desktop - Mac](#example-using-claude-desktop---mac)
- [License](#license)

## Overview

The GMS provides a bridge between AI assistants (like Claude) and the Godot game engine. It allows AI models to:

- Create and manage Godot projects
- Launch the Godot editor
- Run Godot projects
- Manipulate scenes and nodes
- Read and write files

This server implements the [Model Context Protocol](https://github.com/anthropics/model-context-protocol) (MCP), which standardizes how AI assistants interact with external tools and services.

## Setup

### Prerequisites

- [Node.js](https://nodejs.org/) (v14 or higher)
- [Godot Engine](https://godotengine.org/) (v4.x recommended)

### Installation

1. Clone this repository:
   ```bash
   git clone https://github.com/matula/godot-mcp-server.git
   cd godot-mcp-server
   ```

2. Install dependencies:
   ```bash
   npm install
   ```

3. Build the project:
   ```bash
   npm run build
   ```

### Configuration

The server will automatically try to locate your Godot command line executable. If it can't find it, you can set the `GODOT_PATH` environment variable to the path of your Godot executable:

```bash
export GODOT_PATH=/path/to/your/godot
```

On different platforms, the server looks for Godot in these default locations:

- **macOS**: 
  - `/Applications/Godot.app/Contents/MacOS/Godot`
  - `/Applications/Godot_4.app/Contents/MacOS/Godot`
  - `/Applications/Godot_4.2.app/Contents/MacOS/Godot`

- **Linux**:
  - `/usr/bin/godot`
  - `/usr/local/bin/godot`

- **Windows**:
  - `C:\Program Files\Godot\Godot.exe`
  - `C:\Program Files (x86)\Godot\Godot.exe`

## Usage

### Starting the Server

```bash
npm start
```

Or in development mode:

```bash
npm run dev
```

### Using with MCP Inspector

You can test the server with the MCP Inspector:

```bash
npm run inspector
```

### Using with Claude Desktop

You can integrate the GMS with Claude Desktop by adding it to the Claude Desktop configuration:

1. Locate the Claude Desktop configuration file:
   - Generally on macOS: `/Users/{username}/Library/Application Support/Claude/claude_desktop_config.json`

2. Add the following configuration to the file:

```json
{
  "mcpServers": {
    "godot-mcp": {
      "command": "node",
      "args": ["{full path to mcp}/godot-mcp-server/build/index.js"],
      "env": {
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}
```

**Notes:**
- If the configuration file already contains an `mcpServers` object, add the `godot-mcp` entry to the existing object.
- Replace `{full path to mcp}` with the actual path to where you cloned the repository.
- You may need to use the complete path to the `node` executable if it's not in your system PATH.

## Available Tools

The GMS provides the following tools:

### Godot Tools

- **godot_version**: Get the installed Godot version
- **launch_editor**: Launch the Godot editor for a project
- **list_projects**: List Godot projects in a directory
- **create_project**: Create a new Godot project (3D, 2D, or empty)
- **run_project**: Run a Godot project
- **stop_project**: Stop a running project
- **get_debug_output**: Get debug output from a running project
- **get_scene_tree**: Get the scene tree from a project
- **create_scene**: Create a new scene in a project
- **add_node**: Add a node to a scene

### File Tools

- **write_file**: Write content to a file
- **read_file**: Read content from a file

## Architecture

The GMS is built with a modular architecture:

1. **MCP Server Core**: Uses the `@modelcontextprotocol/sdk` to create a server that communicates with AI assistants.

2. **Tools Registration**: Tools are registered with the MCP server to expose functionality to AI assistants.

3. **Godot Integration**: The server interacts with Godot in three main ways:
   - **Commands**: Direct execution of Godot commands via command-line interface
   - **Operations**: Complex operations executed through GDScript
   - **Utilities**: Helper functions for finding Godot, running commands, etc.

4. **File Operations**: Basic file I/O operations to read and write files.

## How It Works

1. The server starts and registers all available tools with the MCP framework.
2. It connects to the standard input/output for communication with AI assistants.
3. When a tool is invoked:
   - For simple commands, it executes Godot with appropriate command-line arguments
   - For complex operations, it creates a temporary GDScript file and executes it with Godot
   - The results are returned to the AI assistant in a structured format

## Development

### Project Structure

- `src/index.ts`: Main entry point
- `src/godot/commands.ts`: Basic Godot commands
- `src/godot/operations.ts`: Complex Godot operations using GDScript
- `src/tools/godot-tools.ts`: MCP tool definitions for Godot
- `src/tools/file-tools.ts`: MCP tool definitions for file operations
- `src/utils/godot-utils.ts`: Utility functions for Godot integration

### Building

```bash
npm run build
```

## Example using Claude Desktop - Mac

In the tools, you should see the active MCP:

![claude-desktop-tools.png](claude-desktop-tools.png)

Here's an example prompt:

![claude-desktop-example-prompt.png](claude-desktop-example-prompt.png)

If you're interested, [here's the full code](https://github.com/matula/example-godot-rpg) that was created with that prompt. I tried to run it 
and there were errors, but it looks fixable.

## License

ISC License

TDQS

C2.1/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct action (e.g., project management, scene editing, file I/O) with unique names, making confusion unlikely despite missing descriptions.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., list_projects, create_scene, write_file), ensuring predictability.

Tool Count5/5

12 tools cover a broad range of Godot interactions (project, editor, scene, debug, file) without being excessive or trivial.

Completeness4/5

Core workflows are covered, but missing operations like remove_node or update project limit some lifecycle completeness.

Maintenance

ActivityInactive
ResponsivenessNo issues