Skip to main content
Glama
wegitor

guitar-pro-mcp

by wegitor
README.md
# Guitar Pro MCP Server

A Message Control Protocol (MCP) server for manipulating Guitar Pro files. This server provides a set of tools for opening, modifying, and saving Guitar Pro files through a standardized interface.

> **Note**: Currently, only Guitar Pro 5 (.gp5) format has been tested. Support for other formats (.gp3, .gp4) may be limited or untested.

## Features

- Load and save Guitar Pro files
- Get song information (title, artist, tracks, etc.)
- Extract notes from tracks
- Create new songs and add tracks
- Manipulate track properties
- Export to MIDI format
- Export/Import to/from JSON format

## Requirements

- Python 3.10 or higher
- PyGuitarPro library
- MCP server framework
- MIDI support (mido library)
- uv (recommended for package management)

## Installation

### Using uv (Recommended)

1. Install uv if you haven't already:
```bash
pip install uv
```

2. Create and activate a virtual environment:
```bash
# Create virtual environment
uv venv

# Activate virtual environment
# On Unix/macOS:
source .venv/bin/activate
# On Windows(cmd):
call .venv\Scripts\activate.bat
```

3. Install the package:
```bash
uv pip install .
```

### Running the Server

You can run the server using uv directly:
```bash
uv --directory <project_path> run -m src.run_mcp_server
```

For example, on Windows:
```bash
uv --directory C:\path\to\guitar_pro_mcp2 run -m src.run_mcp_server
```

Or using the Python module directly after installation:
```bash
python -m src.run_mcp_server
```

### Using pip

```bash
pip install guitar-pro-mcp
```

### From source

1. Clone the repository:
```bash
git clone https://github.com/yourusername/guitar-pro-mcp.git
cd guitar-pro-mcp
```

2. Install the package:
```bash
# Install in development mode with all dependencies
pip install -e ".[dev]"

# Or install without development dependencies
pip install -e .
```

2. Connect to the server using an MCP client.

## Usage(Direct)

1. Start the MCP server:
```bash
python src/run_mcp_server.py
```

2. Connect to the server using an MCP client.

## Available MCP Tools

### File Operations
- `load_guitar_pro`: Load a Guitar Pro file
  - Parameters: `file_path` (path to the .gp5 file)
  - Returns: Success/error message
  
- `save_guitar_pro`: Save the current song to a Guitar Pro file
  - Parameters: `file_path` (path to save the file)
  - Returns: Success/error message

### Song Information
- `get_song_info`: Get basic information about the currently loaded song
  - Returns: Dictionary containing title, artist, album, copyright, subtitle, notice, and track count
  
- `get_song_statistics`: Get detailed statistics about the current song
  - Returns: Dictionary containing track counts, measure counts, note counts, and detailed track information

### Track Operations
- `get_gp_tracks`: Get a list of tracks in the current Guitar Pro song
  - Returns: List of tracks with their name, index, strings, and instrument
  
- `get_track_notes`: Get all notes from a specific track
  - Parameters: `track_index` (index of the track)
  - Returns: List of notes with their properties (measure, beat, string, value, etc.)
  
- `add_gp_track`: Add a new track to the Guitar Pro song
  - Parameters: `name` (name of the track)
  - Returns: Success message and track index
  
- `set_track_properties`: Set properties of a track
  - Parameters:
    - `track_index`: Index of the track
    - `name`: New track name (optional)
    - `instrument`: Instrument ID (optional)
    - `volume`: Volume level (optional)
    - `pan`: Pan position (optional)
  - Returns: Success/error message

### Measure Operations
- `add_gp_measure`: Add a new measure to the Guitar Pro song
  - Returns: Success message and measure index

- `set_gp_time_signature`: Set the time signature for a measure
  - Parameters: `measure_index`, `numerator`, `denominator`
  - Returns: Success/error message

- `set_gp_key_signature`: Set the key signature for a measure
  - Parameters: `measure_index`, `key`
  - Returns: Success/error message

- `set_gp_tempo`: Set the tempo for a measure
  - Parameters: `measure_index`, `tempo`
  - Returns: Success/error message

### Note Operations
- `add_gp_note`: Add a note to a specific track and measure
  - Parameters:
    - `track_index`: Index of the track
    - `measure_index`: Index of the measure
    - `string`: String number
    - `fret`: Fret number
    - `duration`: Note duration (default: 4)
    - `voice_index`: Voice index (default: 0)
    - `beat_index`: Beat index (default: 0)
  - Returns: Success/error message

### Export/Import Operations
- `export_to_midi`: Export the current song to MIDI format
  - Parameters: `file_path`
  - Returns: Success/error message

- `export_to_json`: Export the current song to JSON format
  - Parameters: `file_path`
  - Returns: Success/error message

- `import_from_json`: Import a song from JSON format
  - Parameters: `file_path`
  - Returns: Success/error message

### Tab Operations
- `get_track_tab`: Generate ASCII tab representation of a track
  - Parameters: `track_index`
  - Returns: ASCII tab representation as string

### Song Structure Management
- `add_repeat_group`: Add a repeat group to the song
  - Parameters:
    - `start_measure`: Starting measure index
    - `end_measure`: Ending measure index
    - `repeat_type`: Type of repeat ("normal", "alternate", "repeat_1st", "repeat_2nd")
    - `repeat_count`: Number of times to repeat (default: 2)
    - `endings`: List of ending numbers (optional)
  - Returns: Success/error message

- `get_repeat_groups`: Get all repeat groups in the song
  - Returns: List of repeat group objects with their properties

- `add_section`: Add a section to the song
  - Parameters:
    - `start_measure`: Starting measure index
    - `end_measure`: Ending measure index
    - `name`: Section name
    - `text`: Optional section text
    - `color`: Optional section color as RGB tuple
  - Returns: Success/error message

- `get_sections`: Get all sections in the song
  - Returns: List of section objects with their properties

- `add_coda`: Add a coda marker to a measure
  - Parameters: `measure_index`
  - Returns: Success/error message

- `add_double_bar`: Add a double bar line to a measure
  - Parameters: `measure_index`
  - Returns: Success/error message

- `get_song_structure`: Get the complete song structure
  - Returns: Dictionary containing:
    - `sections`: List of all sections
    - `repeat_groups`: List of all repeat groups
    - `markers`: List of all markers (codas, double bars, etc.)

### Metadata and Lyrics
- `set_lyrics`: Set the lyrics for the current song
  - Parameters: `lyrics` (string containing the lyrics)
  - Returns: Success/error message
  
- `get_lyrics`: Get the lyrics of the current song
  - Returns: The lyrics as a string
  
- `set_page_setup`: Set the page setup for the current song
  - Parameters: `page_setup` (dictionary containing page setup properties)
  - Properties include: pageSize, pageMargin, scoreSizeProportion, headerAndFooter, title, subtitle, artist, album, words, music, wordsAndMusic, copyright, pageNumber
  - Returns: Success/error message
  
- `get_page_setup`: Get the page setup of the current song
  - Returns: Dictionary containing page setup properties
  
- `set_advanced_metadata`: Set advanced metadata for the current song
  - Parameters: `metadata` (dictionary containing metadata properties)
  - Properties include: subtitle, words, music, tab, instructions, notice
  - Returns: Success/error message
  
- `get_advanced_metadata`: Get advanced metadata of the current song
  - Returns: Dictionary containing metadata properties

### Chord Operations
- `add_chord`: Add a chord to a specific beat
  - Parameters:
    - `track_index`: Index of the track
    - `measure_index`: Index of the measure
    - `beat_index`: Index of the beat
    - `chord_data`: Dictionary containing chord properties
  - Chord properties include: name, root, type, extension, bass, tonality, fifth, ninth, eleventh, firstFret, strings, barres, fingerings
  - Returns: Success/error message

- `get_chord`: Get the chord from a specific beat
  - Parameters:
    - `track_index`: Index of the track
    - `measure_index`: Index of the measure
    - `beat_index`: Index of the beat
  - Returns: Dictionary containing chord properties

Claude configuration (with uv run):
```json
{
    "mcpServers": {
        "guitar-pro-mcp": {
            "type": "stdio",
            "command": "uv",
            "args": [
                "--directory",
                "<path to folder>",
                "run",
                "-m",
                "src.run_mcp_server"
            ]
        }
    }
}
```

Claude configuration (direct usage):
```json
{
    "mcpServers": {
        "guitar-pro-mcp": {
            "type": "stdio",
            "command": "python",
            "args": [
                "<path to folder>\\src\\run_mcp_server.py"
            ]
        }
    }
}
```


### Claude configuration (with uv run):
```json
{
    "mcpServers": {
        "guitar-pro-mcp": {
            "type": "stdio",
            "command": "uv",
            "args": [
                "--directory",
                "<path to folder>",
                "run",
                "-m",
                "src.run_mcp_server"
            ]
        }
    }
}
```

## Implementation Details

The implementation uses the PyGuitarPro library to parse and manipulate Guitar Pro files. The MCP server provides a simple API to access the functionality of the PyGuitarPro library.

## License

This project is licensed under the MIT License.