Skip to main content

Model Context Protocol server that bridges to MediaMonkey 2024 via COM

Project description

MediaMonkey 2024 MCP

Python-based Model Context Protocol (MCP) server that proxies MediaMonkey 2024 / MediaMonkey 5 via the official COM automation surface. The MCP tools expose playback control, volume/seek management, queue inspection, and a safe wrapper around the runJSCode bridge described in MediaMonkey's documentation.

References

Requirements

  • Windows host with MediaMonkey 5+/2024 installed.
  • Python 3.11+ (the MCP SDK requires 3.10+, we target 3.11).
  • pywin32 (installed automatically via pyproject.toml).
  • modelcontextprotocol Python SDK 1.2.0+.

Note: MediaMonkey automatically launches when the COM SongsDB5.SDBApplication object is created. The MCP server keeps ShutdownAfterDisconnect = False so MediaMonkey is not force-closed when the server exits.

Setup

uv venv
uv pip install -e .

If you do not use uv, replace with python -m venv and pip install -e ..

Running the MCP server

uv run mm2024-mcp

Or execute directly:

python -m mm2024_mcp.server

The server speaks MCP over stdio. Configure your MCP host (Claude for Desktop, VS Code MCP client, etc.) to launch the mm2024-mcp console command or python -m mm2024_mcp.server within this repository.

Using VS Code as your MCP host

Visual Studio Code 1.102+ with GitHub Copilot supports MCP servers natively (see the VS Code "Use MCP servers" guide). This repository includes a ready-to-use workspace configuration under .vscode/mcp.json.

  1. Install the latest VS Code and sign in to Copilot.
  2. Enable the MCP gallery (chat.mcp.gallery.enabled) or open the Command Palette and run MCP: Open Workspace Folder Configuration.
  3. Inspect .vscode/mcp.json, update the path if your repository resides somewhere other than ${workspaceFolder}, and tweak env entries (for example, override MM2024_COM_PROGID).
  4. Open the Chat view (Ctrl+Alt+I), pick the mm2024 server in the Tools picker, and approve the trust prompt the first time VS Code launches the server.
  5. While developing MediaMonkey plugins, invoke MCP tools directly from chat (for example, #get_playback_state, #list_now_playing, or #run_javascript) to validate COM behavior without leaving the editor.

Tips:

  • VS Code caches tool metadata. Use the MCP: Reset Cached Tools command after adding new MCP tools in server.py.
  • Enable MCP: Reset Trust if you change the server command and VS Code refuses to restart it.
  • Development mode is already configured in .vscode/mcp.json so editing src/**/*.py automatically restarts the MCP server that VS Code launched.

Available tools

Tool Description
get_playback_state Returns SDBPlayer status plus metadata from CurrentSong.
control_playback Dispatches Play, Pause, Stop, Next, Previous, toggle, or stop_after_current.
set_volume Sets the SDBPlayer.Volume property (0-100).
seek Sets SDBPlayer.PlaybackTime (milliseconds).
list_now_playing Reads the CurrentSongList queue (first N entries).
run_javascript Invokes SDBApplication.runJSCode per the MediaMonkey wiki for advanced automations.
invoke_menu_item Walks an SDB.UI menu/toolbar scope and executes the resolved SDBMenuItem.
set_config_value Writes MediaMonkey.ini entries through SDB.IniFile (string, int, or bool).

All tool results are serialized using Pydantic models defined under src/mm2024_mcp/models.py.

Menu automation

invoke_menu_item uses the menu scopes listed in the ISDBUI::Menu Compendium. Provide the scope name (for example Menu_Tools) and a list of captions to traverse beneath that scope (["Options..."]). Captions are normalized by removing ampersands and trailing ellipses, and you can loosen matching via match_strategy="startswith" or match_strategy="contains". Some menu trees are generated on demand; if a path fails, open the target menu in MediaMonkey once to warm it up before calling the tool again. Passing allow_disabled=True is useful for diagnostic scenarios, but be careful—MediaMonkey may still block execution for items that are disabled in the UI.

Configuration helpers

set_config_value wraps SDB.IniFile (see the SDBIniFile reference) so you can modify MediaMonkey.ini remotely. Pick a value_type (string, int, or bool), supply the new value, and optionally choose persist_mode="flush" or persist_mode="apply" to force MediaMonkey to write or re-load the ini file immediately. The tool returns the prior value whenever possible so you can confirm that a change was accepted. Some settings only take effect after restarting MediaMonkey—consult the MediaMonkey wiki for per-setting caveats.

Plugin development workflow

  1. Launch MediaMonkey 2024 normally so its COM automation layer is warmed up.
  2. Open this repository in VS Code, enable the bundled mm2024 MCP server (Chat → Tools → Servers), and keep the MCP chat panel docked next to your add-on source files.
  3. While editing your MediaMonkey plug-in, use chat prompts such as Run list_now_playing to confirm the testing playlist or Call run_javascript with the playlist enumerator snippet to validate behavior live.
  4. After iterating on COM changes inside media_monkey_client.py, run uv run mm2024-mcp in a terminal if you need to debug outside of VS Code's agent view.

Packaging & releases

Local builds

  1. Install the packaging tools (this uses the optional dev extra defined in pyproject.toml):

    uv pip install -e .[dev]
    
  2. Build the source distribution and wheel:

    python -m build --sdist --wheel
    
  3. Verify the metadata before uploading:

    python -m twine check dist/*
    
  4. Publish to PyPI (requires an API token created in your PyPI account):

    $env:TWINE_USERNAME = "__token__"
    $env:TWINE_PASSWORD = "pypi-xxxxxxxxxxxxxxxx"
    python -m twine upload dist/*
    

Artifacts are emitted to dist/ (already ignored by .gitignore). Delete the folder between releases if you want a clean rebuild.

GitHub Actions workflow

  • .github/workflows/publish.yml runs on manual dispatch, annotated tag pushes that match v*, and release events when a GitHub release is published.
  • The workflow builds the wheel and sdist, runs twine check, uploads the dist/ contents as a workflow artifact, and optionally pushes to PyPI via pypa/gh-action-pypi-publish.
  • Configure the PYPI_API_TOKEN repository secret with a token generated on PyPI (__token__ scope). If the secret is unset, the workflow still builds artifacts but skips publishing.
  • Typical release flow: bump the version in pyproject.toml, tag the commit (git tag v0.2.0 && git push origin v0.2.0), then watch the workflow finish. You can also rerun it via Actions → Build and Publish → Run workflow to regenerate artifacts without pushing a new tag.

Troubleshooting

  • If the MCP host reports pywin32 is not available, ensure you're installing dependencies within a Windows Python environment.
  • If the COM automation object cannot be created, confirm MediaMonkey is installed and that the SongsDB5.SDBApplication ProgID exists. Override via MM2024_COM_PROGID if needed.
  • run_javascript wraps payloads so runJSCode_callback returns JSON. For raw scripts that manage callbacks themselves, pass expect_callback=False to avoid double-wrapping.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mm2024_mcp-0.1.0.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mm2024_mcp-0.1.0-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file mm2024_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: mm2024_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for mm2024_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 14916a08b480863b5646675df675018b4f8b6c50a653e9fc28b30db14ca840c6
MD5 b779c59d83f3d7f5bd175a2f5b429dc1
BLAKE2b-256 47f5f0230a1cd54a55c1919d5645b90cbccf1a3768353f09d16e2f543e7a17ce

See more details on using hashes here.

File details

Details for the file mm2024_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mm2024_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for mm2024_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a14308b4378f0a17c75cf040896d3e33c80cae1017ab1346f08b60974e45a19
MD5 4c9e22aaff9bee39f351cc23c682bc87
BLAKE2b-256 ca22033293be32737d15db8d33d251ecaa48644e3a8709c7f3bc39b8f590d51b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page