youtube-music
Allows controlling YouTube Music playback in the user's signed-in browser, including playing songs and saved playlists, searching and selecting results, controlling playback, checking what is currently playing, and refreshing/reading the user's library.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@youtube-musicplay my early morning playlist"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ytmusic-control
Let a script, an AI agent or an MCP-capable app play and control the YouTube Music you are already signed in to, in your normal browser. No API keys, no paid credits, no separate browser profile, no screenshots.
$ ytm-control play "Continuum by SLVM Lord"
Playing Continuum by SLVMLORD (a song) in YouTube Music.
$ ytm-control playlist "early morning"
Playing your playlist 'Early Morning', starting with Dance With Me by Sam Smith.
$ ytm-control play "Continuum by Metallica"
Could not find 'Continuum by Metallica'. Nothing played. The closest results were: Continuum by Lemaitre; Continuum by SLVMLORD.It comes in four small parts, all in this repository and all readable:
Part | What it is |
| A Chrome / Edge extension (plain JavaScript, about 250 lines). It works inside your own YouTube Music tab: types into the page's search box, reads the visible results, presses play, reads the player. |
| A small Python helper that talks to the extension over |
| A skill file that teaches an AI agent (Claude Code or any agent that loads skills) to use the CLI well. |
| An MCP server (stdio) with the same abilities as tools, for any MCP-capable app. |
Any app that can run a shell command or speak MCP can use it.
Why a browser extension
YouTube Music has no public API for controlling playback. This works the way you would: through the page itself, in your already signed-in session. That is also why it needs no login from the tool and why your account details never leave your browser.
Related MCP server: huashu-chrome
Install
You need Python 3.10+, Chrome or Edge, and YouTube Music open in a tab or installed as an app window.
pip install git+https://github.com/VirtualyMichael/ytmusic-controlRun
ytm-control extension-pathand note the folder it prints.In Chrome or Edge open
chrome://extensions(oredge://extensions), turn on Developer mode, press Load unpacked and pick that folder.Keep the browser open, then run
ytm-control status. It should say the extension is connected (it can take up to about 30 seconds after the helper first starts).ytm-control play "Maps by Maroon 5".
The helper starts itself in the background the first time you run a command; ytm-control serve runs it in the foreground.
As an agent skill
Copy skills/youtube-music into your agent's skills folder (for Claude Code: ~/.claude/skills/youtube-music). The agent then runs the CLI for requests like "play something by Stellardrone" or "skip this song".
As an MCP server
Add this to your MCP client's configuration:
{ "mcpServers": { "youtube-music": { "command": "python", "args": ["-m", "ytm_control", "mcp"] } } }Tools: play_music, play_playlist, search_music, play_result, music_control, now_playing, library_find, library_refresh. search_music followed by play_result lets the model read the whole result list and choose, instead of trusting one guess.
What makes it dependable
Names are compared with spaces ignored, so a speech recogniser's "SLVM Lord" finds "SLVMLORD".
It never plays a different artist's song with the right title. If nothing matches it says so and lists the closest results, so an agent can look at them and decide.
Real songs beat lyric videos, karaoke and covers, and "Eternity" beats "Eternity (Reprise)".
It checks that the right song actually started instead of reporting success after a click.
Names that cannot be read aloud: stylised spellings are matched by how they sound, so "Slum Lord" finds SLVMLORD (V stands in for U), "Kr3w" finds Krew, and spelling the first letters ("S L V M lord") works too. A sound-alike is never allowed to beat an exact spelling, and a different artist with the right title is still refused.
Your library:
ytm-control library refreshreads all your playlists and the title and artist of every song in them (from your signed-in page, saved on your PC in~/.ytm-control/ytm-library.json). Spoken or typed names are then put into your own spelling before searching.
Security and privacy
The extension is allowed on
https://music.youtube.com/*only, with the permissionstabs,scriptingandalarms. It talks only tows://127.0.0.1:47821-47825, never the internet. Seeextension/README.md.The helper accepts a WebSocket connection only from an extension (the browser reports the origin, so a web page is refused), and only from the first extension that connects, which it then remembers.
The command-line / MCP side talks to the helper over a local HTTP API on
127.0.0.1:47830-47832that requires a secret token stored in~/.ytm-control/token, refuses any request a browser makes cross-site (anOriginheader), and refuses unexpectedHostnames (DNS rebinding).Nothing is sent anywhere. There is no telemetry.
Limits, honestly
Unofficial. It drives YouTube Music's web page, which Google can change; if it stops finding results, the selectors in
extension/content.jsneed updating. Using it is your decision under YouTube's terms of service.Needs the browser open with a YouTube Music tab (it opens one for you if none is open).
A browser can block a page from starting audio when you have never interacted with that tab; the tool then says the song is loaded and you need to press play.
Playlists: only your saved playlists can be played by name (run
ytm-control library refreshonce). A name that is not in your library is refused, with the closest names listed, rather than guessed.Tested with fake browsers and a fake page, plus live checks in Chrome on Windows. Not yet tested on macOS or Linux.
Development
pip install -e ".[dev]"
pytest
node tests/extension_test.mjsOrigin
Extracted from the YouTube Music control in Voice Assistant, a hands-free Windows voice assistant.
License
MIT, see LICENSE.
Available Tools
8 toolslibrary_findB
Check whether a song is in the user's saved YouTube Music playlists and how it is spelled there.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden. It hints that the return concerns membership and stored spelling, but says nothing about matching semantics (exact vs fuzzy), what happens on a miss, whether the query is read-only, or what the response shape is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the purpose and the unusual spelling output are both packed in efficiently. Slightly terse given the gaps it leaves elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no annotations or output schema, the description conveys the core purpose and the noteworthy return aspect (canonical spelling). It still omits matching behavior, failure behavior, and routing against the sibling search/library tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, 'query', with 0% schema description coverage, so the description must explain it. It only indirectly implies the query is a song identifier; it does not say whether it should be a title, 'artist - title', or a free-form string, nor how matching is performed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('check') and a specific resource ('user's saved YouTube Music playlists'), plus a distinctive secondary output ('how it is spelled there'). It is clearly not a playback or search-catalog tool, though it never names the siblings (search_music, library_refresh) it must be distinguished from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: reach for this when you need to know whether a track is already saved rather than to find or play it. However, it never states when to prefer it over search_music or library_refresh, and gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_refreshA
Re-read all the user's playlists and songs from their signed-in YouTube Music (can take a minute).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the signed-in YouTube Music requirement and that the operation can take a minute, but it does not clarify whether local library data is replaced, what happens on failure, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The scope and runtime caveat are both stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter refresh operation, the description covers purpose, source, authentication context, and expected duration. It lacks detail on side effects and post-refresh state, but no output schema exists and the invocation surface is simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to explain beyond what the schema already provides. Baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (re-read all playlists and songs) and source (signed-in YouTube Music). It is clear what the tool does, though it does not explicitly differentiate itself from siblings such as library_find.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no explicit guidance on when to use this tool versus alternatives, nor when not to use it. The duration note is useful context but is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
music_controlC
pause, play (resume), toggle, next or previous.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses almost nothing: no indication that pause is resumable, whether play resumes or restarts, how it interacts with the current queue/track, or what happens on failure. The only nugget is the parenthetical 'play (resume)', which is a small behavioral clarification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is very short with no wasted words, but it is a sentence fragment rather than a front-loaded sentence, and its brevity borders on under-specification rather than earning each token.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-style playback control tool with no annotations and no output schema, the description should clarify the resource affected, how each action changes player state, and any error/permission expectations. None of that is present, leaving the agent to guess at the tool's actual effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'action' enum already fully enumerates the allowed values in the schema, so the description largely repeats structured data. It does add one semantic note, 'play (resume)', clarifying that play resumes rather than restarts, which is marginal but non-zero added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the actions (pause, play/resume, toggle, next, previous), which maps to the enum and implies playback control. However, it never states a verb+resource ('control music playback') or what is being controlled, and it offers no differentiation from siblings like play_music or play_playlist, which overlap with the 'play' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of when to prefer this tool over play_music, play_playlist, or now_playing. The agent must infer entirely from the tool name and enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
now_playingA
What is playing in YouTube Music right now, and whether it is paused.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the shape of the result (what is playing plus paused flag), which is the most important behavioral fact for a status query, but it says nothing about behavior when nothing is playing, whether it requires an active session or auth, or whether it can error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste, front-loading the subject (what is playing) before the qualifier (paused state). Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no annotations and no output schema, the description covers the essential return content, but it leaves the no-playback case, session/auth expectations, and error behavior unspecified. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter semantics for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (YouTube Music playback state) and the exact facts returned (current track and paused status), which no sibling tool provides. The verb is phrased as a question rather than an explicit action verb, but the intent is unambiguous and clearly distinct from play_music, music_control, and search_music.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read-only status check, but there is no explicit statement of when to call it versus music_control (which may also surface playback state) and no exclusions or prerequisites. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_musicA
Search YouTube Music and play the best match, e.g. 'Maps by Maroon 5'. Never plays a different artist's song with the same title: says it could not find it instead (then use search_music and look at the results).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Song, or 'Song by Artist' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it usefully discloses a non-obvious failure mode (it refuses to play a same-titled song by a different artist and reports 'could not find it'). It still omits playback side effects (queue interruption, active session requirements) and whether playback begins immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the fallback routing in the parenthetical. Nothing is padding, though the parenthetical is slightly dense and could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a single documented parameter, the description covers purpose, the failure behavior, and the recovery path reasonably well. Missing only playback side effects / return signaling, which keeps it short of full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 100% schema description coverage ('Song, or "Song by Artist"'), so the schema already documents it. The description adds only an example ('Maps by Maroon 5'), which is a marginal gain over the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: it 'searches YouTube Music and plays the best match,' with a concrete example query. It partially differentiates itself by naming search_music as the fallback when a match fails, though it does not distinguish itself from play_result or play_playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit condition and alternative: if the song/artist match can't be found, use search_music and inspect results instead. It does not say when this tool is the wrong choice versus play_playlist or music_control, so no full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_playlistB
Play one of the user's saved YouTube Music playlists by name (needs the library; says so when no saved playlist is called that and lists the closest names).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the library prerequisite and the not-found behavior of listing closest names, but it does not describe whether playback starts immediately, authentication requirements, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted framing. The parenthetical is dense but contains useful prerequisite and error behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter playback tool with no annotations and no output schema, it covers the main invocation context and failure mode. It remains incomplete about playback side effects and library-state requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It clarifies that 'name' refers to a saved playlist name and that exact saved-playlist matching is involved, including closest-name suggestions, but it does not specify formatting or case sensitivity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Play one of the user's saved YouTube Music playlists by name.' It is clearly different from general search or playback siblings, though it does not explicitly name the alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when the user wants to play a saved playlist by name. The description adds a prerequisite ('needs the library') and failure behavior, but it does not explicitly say when to use a sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_resultA
Press play on a result from the latest search_music (use its kind and number).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals only that the call is stateful (dependent on the latest search results); it says nothing about what playback does to the current queue, whether it requires an active session/account, or what happens on an invalid kind or stale search. This is a significant gap for a mutation-like playback action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no waste; the action and its dependency on search_music are both front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter play tool with no annotations and no output schema, the description adequately explains the calling context (must follow search_music) but omits parameter value ranges, failure behavior, and playback side effects. Minimum viable, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does partially by telling the agent both parameters come from the latest search_music result (kind and number). However, it never defines what 'kind' values exist or how 'number' indexes results, leaving the meaning of both parameters under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (press play) and resource (a result from the latest search_music), and explicitly ties itself to the search_music result set, which distinguishes it from play_music and play_playlist. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition: it operates on a result from the latest search_music, implying it should be called after a search. It does not name when-not to use it or contrast explicitly with play_music/play_playlist, so the routing guidance is implicit rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_musicA
List YouTube Music search results (kind, number, title, artist), best guess first, without playing. Pick one and call play_result.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that results are non-playing and ordered 'best guess first,' but it omits permissions, rate limits, pagination, and other operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no wasted words. The action and scope are front-loaded, and the subsequent instruction to call play_result follows naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool with no annotations or output schema, the description covers return fields and the next step, compensating somewhat for the missing output schema. However, it leaves the query parameter semantics and behavioral safety details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for the single required 'query' parameter, and the description does not add any meaning about what the query should contain or how to format it. The phrase 'search results' only weakly implies a search term.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('YouTube Music search results') and names returned fields, clearly distinguishing itself from playback tools by stating 'without playing.' It does not explicitly differentiate from sibling search tools such as library_find, but the purpose is immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear workflow guidance: 'Pick one and call play_result,' which tells the agent what to do after using this tool. It does not state when not to use it or compare against alternative search tools, but the context of use is clear.
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.
8 tool updates
v0.1.0- First observed
library_find - First observed
library_refresh - First observed
music_control - First observed
now_playing - First observed
play_music - First observed
play_playlist - First observed
play_result - First observed
search_music
TDQS
Scored across 8 tools
Tools are mostly distinct: play_music auto-plays, search_music lists, play_result plays a selected result, and music_control handles playback state. Some overlap between play_music and search_music+play_result, but descriptions clarify the intended flows.
Names use snake_case consistently, but patterns are mixed: four verb_noun (play_music, search_music), three noun_verb (music_control, library_find, library_refresh), and one state phrase (now_playing). Readable but not a single predictable pattern.
8 tools is well-scoped for a music control server, covering playback, search, control, and library inspection without obvious redundancy.
Core lifecycle is covered: search, play, control, now playing, and library inspection. Missing write operations (add/remove songs to library, playlist creation/editing) and advanced controls (volume, seek, shuffle) are minor gaps for a playback-focused server.
Maintenance
Related MCP Connectors
YouTube MCP — wraps the YouTube Data API v3 (BYO API key)
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Hosted MCP for YouTube Studio: uploads, metadata, playlists, comments, analytics, captions.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to drive your already-open Chrome browser like a human, using 45 tools for navigation, perception, capture, and trusted input that pages receive as genuinely user-generated.MIT
- AlicenseNot gradedqualityAmaintenanceEnables any MCP-compatible AI agent to drive your own Chrome browser with your existing login state, filling forms, clicking elements, fetching data, and handling captchas without API keys or re-authentication.338 npm483MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to directly operate your existing logged-in Chrome profiles, including cookies and extensions, without re-authentication or a headless browser. It provides tools for managing tabs, navigating, reading pages, clicking, typing, and launching profiles.4 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables a local MCP server to control an authenticated Chrome browser for interacting with Google Search, Gemini, ChatGPT, Claude, and DeepSeek, including web search and image generation without per-provider API keys.-