Skip to main content
Glama

Kodi MCP Server

A Model Context Protocol (MCP) server for interacting with Kodi media center. This server provides tools for querying media libraries, checking existing content, playing media, and managing Kodi remotely.

Features

  • Library Search: Search movies and TV shows by title, year, or genre

  • Content Verification: Check if movies/episodes exist before downloading

  • Smart Playback Control: Play movies/episodes and control playback

  • Watch Status Tracking: NEW v1.2.0 - Automatically track what you've watched and play next unwatched episodes

  • Targeted Library Scanning: NEW v1.2.0 - Scan specific TV show directories instead of entire library (fast!)

  • Library Management: Get statistics, recent additions, and trigger scans

  • SOCKS5 Proxy Support: Connect to remote Kodi instances through SSH tunnels

  • Fuzzy Matching: Intelligent title matching for better search results

Installation

  1. Clone the repository:

git clone https://github.com/v-odoo-testing/kodi-mcp-server.git
cd kodi-mcp-server
  1. Create and activate a virtual environment:

python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:

pip install -r requirements.txt
  1. Test the connection:

python test_connection.py --host 192.168.1.71 --username kodi --password kodi

Configuration

Configure the server using environment variables:

Basic Configuration

export KODI_HOST="192.168.1.71"
export KODI_PORT="8080"
export KODI_USERNAME="kodi"
export KODI_PASSWORD="kodi"
export KODI_TIMEOUT="30"
export USE_HTTPS="false"

SOCKS5 Proxy (for remote access)

export SOCKS5_HOST="localhost"
export SOCKS5_PORT="1080"
export SOCKS5_USERNAME=""  # Optional
export SOCKS5_PASSWORD=""  # Optional

Claude Desktop Integration

Add this configuration to your Claude Desktop config file:

{
  "mcpServers": {
    "kodi": {
      "command": "/path/to/kodi-mcp-server/venv/bin/python",
      "args": ["/path/to/kodi-mcp-server/src/server.py"],
      "env": {
        "KODI_HOST": "192.168.1.71",
        "KODI_PORT": "8080",
        "KODI_USERNAME": "kodi",
        "KODI_PASSWORD": "kodi",
        "KODI_TIMEOUT": "30",
        "USE_HTTPS": "false",
        "SOCKS5_HOST": "",
        "SOCKS5_PORT": "1080",
        "SOCKS5_USERNAME": "",
        "SOCKS5_PASSWORD": ""
      }
    }
  }
}

Available Tools

Search Tools

  • search_movies - Search movies by title, year, or genre

  • search_tv_shows - Search TV shows by title or genre

  • check_movie_exists - Quick check if a movie exists

  • check_tv_show_exists - Check TV show/season/episode availability

Playback Tools

  • play_movie - Play a movie by title

  • play_episode - Play a specific TV episode

  • play_next_unwatched - NEW v1.2.0 - Find and play the next unwatched episode automatically

  • control_playback - Pause, stop, or get playback status

Library Tools

  • get_library_stats - Get library overview and statistics

  • get_recently_added - List recently added content

  • update_library - Trigger library scan (full library)

  • scan_tv_show - NEW v1.2.0 - Scan specific TV show directory only (fast, targeted)

  • get_episode_details - NEW v1.2.0 - Get detailed episode information with file paths

All tools support the use_socks5 parameter for remote access.

SOCKS5 Proxy Setup

For remote Kodi access through SSH:

  1. Create SSH tunnel:

ssh -D 1080 -N user@remote-server
  1. Set environment variables:

export SOCKS5_HOST="localhost"
export SOCKS5_PORT="1080"
  1. Use proxy in tool calls:

User: "Search my remote Kodi for movies, use SOCKS5"
Assistant: Uses search_movies with use_socks5=true

API Reference

Environment Variables

Variable

Default

Description

KODI_HOST

192.168.1.71

Kodi server IP address

KODI_PORT

8080

Kodi web interface port

KODI_USERNAME

kodi

Authentication username

KODI_PASSWORD

kodi

Authentication password

KODI_TIMEOUT

30

Request timeout in seconds

USE_HTTPS

false

Use HTTPS connection

SOCKS5_HOST

-

SOCKS5 proxy host

SOCKS5_PORT

1080

SOCKS5 proxy port

SOCKS5_USERNAME

-

SOCKS5 proxy username (optional)

SOCKS5_PASSWORD

-

SOCKS5 proxy password (optional)

Tool Parameters

search_movies

{
  "title": "Movie title to search for",
  "year": 2023,
  "genre": "Action",
  "use_socks5": false
}

play_movie

{
  "title": "The Matrix",
  "year": 1999,
  "use_socks5": false
}

play_episode

{
  "show_title": "Breaking Bad",
  "season": 1,
  "episode": 1,
  "use_socks5": false
}

play_next_unwatched

{
  "show_title": "Murderbot",
  "use_socks5": false
}

scan_tv_show

{
  "show_title": "Breaking Bad", 
  "use_socks5": false
}

get_episode_details

{
  "show_title": "Breaking Bad",
  "season": 1,
  "episode": 1,
  "use_socks5": false
}

control_playback

{
  "action": "pause|stop|status",
  "use_socks5": false
}

Usage Examples

Smart Episode Management (NEW v1.2.0)

Scan specific show for new episodes and play next unwatched:

User: "Scan the Murderbot TV show directory for new episodes and play the last one that I have not watched"

Workflow:
1. Uses kodi:scan_tv_show("Murderbot") → Scans only Murderbot directory (fast)
2. Uses kodi:play_next_unwatched("Murderbot") → Finds S01E03 was last watched, plays S01E04

Get detailed episode information:

User: "Get details for Murderbot S1E4"
Assistant: Uses kodi:get_episode_details → Shows file path, rating, plot, episode ID

Basic Library Queries

Check if content exists:

User: "Do I have Inception (2010) in my Kodi library?"
Assistant: Uses kodi:check_movie_exists → "✅ Inception (2010) found in library!"

Search for content:

User: "Show me all action movies from 2022"
Assistant: Uses kodi:search_movies → Lists matching movies with details

Playback Control

Play specific content:

User: "Play The Matrix"
Assistant: Uses kodi:play_movie → "🎬 Started playing The Matrix (1999)"

User: "Play Breaking Bad S1E1" 
Assistant: Uses kodi:play_episode → "📺 Started playing Breaking Bad S01E01: Pilot"

Smart unwatched playback:

User: "Play the next episode of Murderbot I haven't seen"
Assistant: Uses kodi:play_next_unwatched → Detects watch status, plays next episode

Library Management

Targeted scanning (no more full library scans!):

User: "Scan just the Murderbot folder for new episodes"
Assistant: Uses kodi:scan_tv_show → Scans only that show's directory

Get library information:

User: "How many movies do I have?"
Assistant: Uses kodi:get_library_stats → Shows totals and top genres

User: "What did I add recently?"
Assistant: Uses kodi:get_recently_added → Lists recent additions with dates

Integration Examples

Smart TV Show Management (NEW v1.2.0)

User: "Check for new Murderbot episodes and play where I left off"

Workflow:
1. kodi:scan_tv_show("Murderbot") → Fast targeted scan
2. kodi:play_next_unwatched("Murderbot") → Plays next unwatched episode

Troubleshooting

Connection Issues

  1. Verify Kodi is running and accessible:

python test_connection.py
  1. Check network connectivity:

curl http://192.168.1.71:8080/jsonrpc -d '{"jsonrpc":"2.0","method":"JSONRPC.Ping","id":1}'
  1. Test SOCKS5 proxy:

python test_connection.py --socks5 socks5://localhost:1080

Common Errors

"Cannot connect to Kodi"

  • Verify KODI_HOST and KODI_PORT

  • Check if Kodi web interface is enabled

  • Ensure firewall allows connections

"Authentication failed"

  • Verify KODI_USERNAME and KODI_PASSWORD

  • Check Kodi web interface authentication settings

"SOCKS5 proxy connection failed"

  • Verify SSH tunnel is active

  • Check SOCKS5_HOST and SOCKS5_PORT

  • Test proxy with curl: curl --socks5 localhost:1080 http://example.com

Kodi Configuration

Ensure Kodi has the following enabled:

  1. Web Interface:

    • Settings → Services → Control → Allow remote control via HTTP

    • Username: kodi

    • Password: kodi

  2. Network Access:

    • Allow connections from other systems

    • Port: 8080

Development

Project Structure

kodi-mcp-server/
├── src/
│   └── server.py              # Main MCP server
├── requirements.txt           # Dependencies
├── test_connection.py         # Connection testing
├── claude-desktop-config.json # Claude integration
├── README.md                  # This file
├── CHANGELOG.md              # Development log
└── .gitignore                # Git ignore rules

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make changes with proper commit messages

  4. Update CHANGELOG.md (append only)

  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

  • Create an issue on GitHub

  • Check troubleshooting section

  • Test connection with test_connection.py

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dgoo2308/kodi-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server