Skip to main content
Glama
dkasaj
by dkasaj

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.

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

Related MCP server: YouTube Music MCP Server

Prerequisites / minimum requirements

Installation

  1. Clone this repository:

    git clone https://github.com/dkasaj/tubist-mcp-server.git
    cd tubist-mcp-server
  2. Install dependencies:

    npm install
  3. Configure Claude Desktop:

    Edit your Claude Desktop config file:

    # On macOS
    nano ~/Library/Application\ Support/Claude/claude_desktop_config.json

    Add the Tubist MCP server, use the path where you installed it:

    {
      "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:

    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


Made with ❤️ for background YouTube listening

Available Tools

1 tool
playA

Play a YouTube video in Tubist

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesYouTube video URL, e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'Play a YouTube video' without detailing side effects, such as whether it replaces a currently playing video, requires specific permissions, or affects playback state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is a single, concise sentence containing no redundant information. Every word is necessary and front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, no siblings), the description is adequate but minimal. It could be enhanced with details like playback behavior or error conditions, but it meets a minimum viable standard.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'url' that includes a description and example. The tool description adds no additional parameter context beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Play' and identifies resource 'YouTube video' within context 'Tubist', clearly stating the tool's action and scope. With no sibling tools, differentiation is not required.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to play a YouTube video in Tubist). However, it provides no explicit guidance on when not to use it or alternatives, which is acceptable given the absence of sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedplay

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

Related MCP Connectors

Related MCP Servers