Skip to main content
Glama
dkasaj
by dkasaj
README.md
# Tubist MCP Server

**Remember the last time when you closed a tab or quit your browser and YouTube audio abruptly stopped...? Bet you were angry.**

**Tubist exists for that not to happen.** It's a lightweight macOS menu bar player that keeps YouTube going independently of your browser.

[Tubist is available for free on the Mac App Store](https://apps.apple.com/app/id1603180719).

**This MCP server lets Claude and other AI assistans control Tubist when asked to do so from the assistant's macOS app.**

Just ask naturally:

- _play the Billie Eilish Tiny Desk concert_
- _find me some jazz on YouTube for focus and play it in Tubist_
- _look for an orchestral rendering of Super Mario music on YouTube and play it in Tubist_

## Features

- 🎬 Play any YouTube video with a simple request...  (unless it longer exists 😞)
- 🎵 Ideal for background audio (concerts, podcasts, music)
- 🤖 Control via natural language through AI assistants
- ⚡ Instant playback - just ask and it plays without any UI interruptions

## Prerequisites / minimum requirements

- **macOS 13 (Ventura) and above**
- **Tubist v1.3** installed ([Tubist is available for free on the Mac App Store](https://apps.apple.com/app/id1603180719).)
- **Node.js** 18.0.0 or higher
- **Claude Desktop** or another MCP-compatible client

## Installation

1. **Clone this repository:**
   ```bash
   git clone https://github.com/dkasaj/tubist-mcp-server.git
   cd tubist-mcp-server
   ```

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

3. **Configure Claude Desktop:**
   
   Edit your Claude Desktop config file:
   ```bash
   # On macOS
   nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
   ```

   Add the Tubist MCP server, use the path where you installed it:
   ```json
   {
	 "mcpServers": {
	   "Tubist - menu bar player for YouTube": {
		 "command": "/opt/homebrew/bin/node",
		 "args": ["/path/to/tubist-mcp-server/index.js"]
	   }
	 }
   }
   ```

   **Important:** Replace `/path/to/tubist-mcp/index.js` with the actual path where you cloned this repo.

   **Find your Node.js path:**
   ```bash
   which node
   ```
   Use this path instead of `/opt/homebrew/bin/node` if different.

4. **Restart Claude Desktop** completely (quit and reopen, don't just close the window)

## Usage

Once configured, you can ask Claude to play YouTube videos naturally:

**Examples:**
- "Play the Billie Eilish Tiny Desk concert"
- "Find me some jazz on YouTube for focus and play it in Tubist"
- "Look for an orchestral rendering of Super Mario music on YouTube and play it in Tubist"

## How It Works

1. You make a request to Claude
2. Claude uses the MCP protocol to call this server
3. The server opens the YouTube video in Tubist using the `tubist://play?` URL scheme
4. Video starts playing automatically

## Troubleshooting

### "MCP server disconnected" error
- Check that the path in `claude_desktop_config.json` is correct
- Verify Node.js path with `which node`
- Make sure you restarted Claude Desktop completely

### Video doesn't play
- Ensure Tubist is installed and can be launched
- Try opening Tubist manually first to verify it works
- Check that the YouTube URL is valid. Claude for instance sometimes uses a link to a video that no longer exists.

### Tool doesn't appear in Claude
- Confirm the config file is valid JSON (use a JSON validator)
- Check for log Claude Desktop logs: `~/Library/Logs/Claude/`
- Make sure you saved the config file and restarted Claude


## Technical Details

This MCP server uses the `Server` class with `setRequestHandler` pattern (rather than `McpServer.tool()`) due to a known bug in MCP SDK 1.25.x where arguments aren't passed correctly to tool handlers.

**Tool definition:**
- **Name:** `play`
- **Parameter:** `url` (YouTube video URL)
- **Action:** Opens video in Tubist via `tubist://play?[url]` URL scheme

## Contributing

Contributions welcome! Please feel free to submit a Pull Request.

## License

MIT © Daniel Kašaj

## Links

- [Tubist on the Mac App Store](https://apps.apple.com/app/id1603180719)
- [Model Context Protocol Documentation](https://modelcontextprotocol.io)
- [Claude Desktop](https://claude.ai/download)

---

**Made with ❤️ for background YouTube listening**

TDQS

A3.6/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility for confusion. The tool 'play' clearly has a distinct purpose.

Naming Consistency4/5

The single tool name 'play' is a verb that describes its action well, but with only one tool, consistency cannot be fully assessed; it is reasonable.

Tool Count2/5

A single tool for a YouTube video server is too limited. Typical functionality would include search, listing, or details, making this feel incomplete.

Completeness2/5

The server only offers a 'play' action, lacking any way to discover or manage videos, which leaves obvious gaps for any practical use.

Maintenance

ActivityInactive
ResponsivenessNo issues