yoto-mcp-server
Enables Yoto API tools (audio upload, card management) to be used directly in Warp Agent Mode.
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., "@yoto-mcp-serverupload audio.mp3 to Yoto as 'My Audio'"
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.
Yoto MCP Server
A Model Context Protocol (MCP) server that bridges Warp AI and the Yoto API, enabling seamless audio uploads and MYO card creation directly from your terminal.
Features
š OAuth Device Flow Authentication - Secure authentication with Yoto API
šµ Audio Upload - Upload MP3 files to Yoto with automatic transcoding
š¦ MYO Card Creation - Automatically create Make Your Own cards
š Token Management - Automatic token refresh and storage
š Native Warp Integration - Use Yoto tools directly in Warp Agent Mode
Related MCP server: OpenCode MCP Gateway
Prerequisites
Node.js 18+
A Yoto account
Warp terminal with Agent Mode enabled
Installation
Clone or download this repository:
cd yoto-mcp-serverInstall dependencies:
npm installBuild the project:
npm run buildConfiguration
Add to Warp MCP Settings
Add this server to your Warp MCP configuration file (usually ~/.config/warp/mcp_config.json or similar):
{
"mcpServers": {
"yoto": {
"command": "node",
"args": [
"/absolute/path/to/yoto-mcp-server/dist/index.js"
]
}
}
}Or for global installation:
npm linkThen in your Warp MCP config:
{
"mcpServers": {
"yoto": {
"command": "yoto-mcp-server"
}
}
}Usage
Once configured, restart Warp and you'll have access to three new tools in Agent Mode:
1. Authenticate with Yoto
First, authenticate with your Yoto account:
In Warp Agent Mode:
Please authenticate with YotoOr explicitly:
Use the yoto-auth toolThe server will display a URL and code. Visit the URL in your browser, enter the code, and approve the connection.
2. Check Authentication Status
In Warp Agent Mode:
Check if I'm authenticated with Yoto3. Upload Audio to Yoto
In Warp Agent Mode:
Upload the file /path/to/audio.mp3 to my Yoto player with title "My Audio Track"The server will:
Upload the audio file to Yoto
Wait for transcoding (automatic conversion to Yoto-compatible format)
Create a new MYO card with the audio
Return the card ID
You can then link the card to a physical MYO card using your Yoto app or player.
4. List Your MYO Cards
In Warp Agent Mode:
List all my Yoto cardsReturns a list of all your MYO cards with their IDs and titles.
5. Get Card Details
In Warp Agent Mode:
Get details for Yoto card dyp9bReturns detailed information about a specific card including chapter and track counts.
6. Add Track to Existing Card
In Warp Agent Mode:
Add /path/to/track2.mp3 to Yoto card dyp9b with title "Track 2"Adds a new audio track to an existing MYO card as an additional chapter.
Example Workflow
User: Please authenticate with Yoto
[Server displays URL and code]
[User visits URL and approves]
ā
Successfully authenticated with Yoto API!
---
User: Upload hop-little-bunnies.mp3 to Yoto with title "Hop Little Bunnies"
[Server uploads and transcodes]
ā
Successfully uploaded audio to Yoto!
Card ID: dyp9b
Title: Hop Little Bunnies
You can now link this card to a physical MYO card using your Yoto app or player.Available Tools
Tool | Description | Parameters |
| Authenticate with Yoto API | None |
| Check authentication status | None |
| Upload audio and create MYO card |
|
| List all MYO cards | None |
| Get details of a specific card |
|
| Add audio track to existing card |
|
Configuration Storage
Authentication tokens are stored securely in ~/.yoto-mcp-config.json. The server automatically handles token refresh.
Development
Build
npm run buildWatch mode
npm run watchRun directly
npm run devTroubleshooting
Authentication Issues
Ensure you're visiting the correct URL and entering the code within the time limit
Check that your Yoto account is active
Try re-authenticating: the old token will be replaced
Upload Failures
Verify the audio file path is absolute and accessible
Ensure the file is in MP3 format
Check file size (very large files may timeout during transcoding)
Token Expiry
Tokens automatically refresh when expired
If refresh fails, re-authenticate using
yoto-auth
API Reference
This server uses the Yoto Developer API. For more information:
Documentation: https://yoto.dev/api/
MYO Cards Guide: https://yoto.dev/myo/uploading-to-cards/
License
MIT
Contributing
Contributions welcome! Please feel free to submit issues or pull requests.
Acknowledgments
Built with the Model Context Protocol SDK
Powered by the Yoto API
Designed for Warp Terminal
Available Tools
6 toolsyoto-add-trackB
Add a track to an existing Yoto MYO card
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The card ID to add the track to | |
| trackTitle | Yes | Title for the track | |
| audioFilePath | Yes | Absolute path to the audio file (MP3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It indicates a mutation ('Add') but does not explain side effects, error conditions, whether this appends or replaces existing tracks, or any authorization requirements.
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 that immediately conveys the core action and target. No unnecessary words or repetition.
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?
The tool is simple with only three parameters and no output schema, so the description is minimally sufficient. However, it lacks context about prerequisites like authentication or how this interacts with sibling tools (e.g., yoto-upload-audio).
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 100%, so the parameter descriptions in the schema already fully document the three parameters. The tool description adds no additional semantic value beyond the schema, so the baseline of 3 is appropriate.
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 ('Add') and resource ('track to an existing Yoto MYO card'), clearly distinguishing it from siblings like yoto-upload-audio (which uploads audio) and yoto-list-cards (which lists cards).
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?
No guidance is provided on when to use this tool versus alternatives or on prerequisites such as authentication (yoto-auth) or ensuring the card exists. The description only states the action, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yoto-authA
Authenticate with Yoto API using device authorization flow
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only names the 'device authorization flow' but does not explain its multi-step nature, user interaction requirements, or side effects (e.g., storing tokens). This is a significant gap for a tool that likely mutates state.
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 sentence that is front-loaded with the verb 'Authenticate' and provides the essential resource and flow. It is concise with no wasted words, making it easy to parse.
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?
The tool has no parameters and no output schema, so the description could have compensated by explaining what happens after successful authentication (e.g., token storage) or noting that it should be run before other Yoto tools. It fails to do so, leaving the context incomplete for an agent that needs to orchestrate multiple steps.
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 is empty (0 parameters), so the baseline is 4. The description does not add parameter details, but none are needed. The description provides no misleading or ambiguous parameter information.
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 clearly states the verb 'Authenticate' and the resource 'Yoto API', and specifies the method ('device authorization flow'). This distinguishes it from sibling tools like yoto-upload-audio and yoto-list-cards, which perform content operations, and yoto-check-auth, which likely only checks authentication status.
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 implies that authentication is required for using other Yoto API tools, but it does not explicitly state when to use this tool versus alternatives such as yoto-check-auth. There is no guidance on prerequisites, order of operations, or conditions under which authentication should be renewed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yoto-check-authA
Check if authenticated with Yoto API
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full behavioral burden. It only states the action but fails to disclose the return format (e.g., boolean), error behavior, or whether it performs network I/O. This is a significant gap for a check tool.
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 sentence with no filler, front-loads the verb 'Check', and is appropriately sized for the tool's simplicity.
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?
Given the tool's simplicity (0 params, no annotations, no output schema), the description is minimally viable but lacks critical context about what the tool returns or what 'authenticated' means operationally. An AI agent would benefit from knowing the output type or success/failure signaling.
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 and the input schema is empty with 100% coverage, so the baseline of 4 applies. The description adds no parameter info because none exist, which is acceptable.
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 'Check' and clearly identifies the resource 'authenticated with Yoto API'. It distinguishes from siblings like yoto-auth (which likely handles authentication) and content-management tools, making the purpose unambiguous.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention that it should be called before other API operations to verify authentication, nor does it compare with yoto-auth. Usage context is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yoto-get-cardB
Get details of a specific Yoto MYO card
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The card ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It only says 'Get details,' omitting any mention of authentication prerequisites, error behavior (e.g., not found), or what payload is returned. This is minimal disclosure.
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 that states the core purpose without unnecessary words. It is perfectly concise for the information it conveys.
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?
Given no output schema and no annotations, the description should explain what 'details' include (e.g., title, tracks, metadata) and any conditional behavior. It does not, leaving the agent without a clear picture of the tool's output or failure modes.
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 already describes cardId as 'The card ID to retrieve,' and with 100% schema coverage, the baseline is 3. The description adds only the 'MYO card' context, which is marginal value beyond the schema.
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 'Get details of a specific Yoto MYO card' clearly states the action (get) and resource (specific card details), and the word 'specific' distinguishes it from the sibling tool yoto-list-cards.
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 implies this tool is for retrieving a single card's details when you have a cardId, but it does not explicitly mention when to use it over yoto-list-cards or provide exclusions. The guidance is inferred, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yoto-list-cardsA
List all MYO cards in your Yoto library
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 implies a read operation ('list') but does not disclose authentication requirements, pagination, output format, or any edge cases. This is a significant gap for a tool with no other structured behavioral information.
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 sentence with the key verb and object front-loaded. Every word is meaningful, with no fluff or repetition.
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-only list tool with no output schema, the description completely covers what the tool does. The sibling context makes the boundary clear, and no further details are necessary.
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 nothing for the description to clarify. Baseline of 4 is appropriate; the description adds no param details but none are needed.
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 clearly states the verb 'list' and the specific resource 'all MYO cards in your Yoto library', which differentiates it from sibling yoto-get-card (single card). The scope is explicit and unambiguous.
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 implies when to use it: when you need all MYO cards, as opposed to yoto-get-card for a specific one. It provides clear context but does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yoto-upload-audioC
Upload an audio file to Yoto and create a new MYO card
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title for the MYO card | |
| audioFilePath | Yes | Absolute path to the audio file (MP3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. It only states the basic upload-and-create action, but does not mention side effects, authentication requirements, file format constraints beyond MP3, or what happens on conflict or failure.
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, succinct sentence that effectively captures the core function. It is front-loaded with the action and resource, with no filler words.
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?
Despite the low complexity (2 simple parameters, no output schema), the description lacks important context such as authentication prerequisites (sibling tools include yoto-auth and yoto-check-auth), any side effects, or expected return behavior. It is minimally adequate but leaves gaps for an AI agent.
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 description coverage is 100%, with both parameters (title, audioFilePath) already described in the schema. The tool description adds no additional semantic meaning beyond what the schema provides, so the baseline of 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?
The description clearly states the tool's action with a specific verb ('Upload') and resource ('audio file to Yoto') and indicates the outcome ('create a new MYO card'). It distinguishes itself from sibling tools like yoto-list-cards and yoto-check-auth, though it doesn't explicitly differentiate from yoto-add-track.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., yoto-add-track). The description does not mention prerequisites like authentication or context such as needing to create a new MYO card versus adding a track to an existing card.
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.
6 tool updates
v1.0.0- First observed
yoto-add-track - First observed
yoto-auth - First observed
yoto-check-auth - First observed
yoto-get-card - First observed
yoto-list-cards - First observed
yoto-upload-audio
TDQS
Scored across 6 tools
Each tool targets a distinct action: authentication, checking auth, uploading audio, adding tracks, listing cards, and fetching card details. The only potential confusion is between yoto-auth and yoto-check-auth, but their descriptions clearly differentiate performing authentication versus checking status.
All tools use a consistent 'yoto-' prefix followed by a verb-noun pattern (e.g., upload-audio, list-cards, get-card). The exception is yoto-auth, which is a single verb, but it still fits the overall style and is readable.
Six tools is well-scoped for a Yoto integration server, covering authentication, uploading, track management, and card queries without unnecessary bloat. Each tool serves a clear purpose.
The tool set covers the core workflow of authenticating, uploading audio to create cards, adding tracks, and querying cards. Minor gaps exist, such as no delete or update card operations, but these are not critical for the primary use case.
Maintenance
Related MCP Connectors
Generate images, video, music and voice from your CLI or AI agent. On-brand AI media toolkit.
Run AI customer support from your terminal: conversations, knowledge base, and chat widget.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
- RendobarOAuthcom.rendobar
Transform video, audio and images, and generate media from prompts. FFmpeg, captions, models.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI services like Claude and Cursor to remotely control a Mac by executing shell commands, managing files, and running AppleScript for UI automation. Access is secured through OAuth 2.0 authentication and encrypted tunnels to protect remote interactions.2MIT
- FlicenseNot gradedqualityDmaintenanceExposes local OpenCode instances as remote MCP servers for Claude and ChatGPT, enabling terminal access, session management, and interactive human-in-the-loop workflows. It simplifies deployment for local machines using Cloudflare Tunnels to provide secure public connectivity and OAuth support.-
- FlicenseNot gradedqualityDmaintenanceDual-mode tool server for controlling Spotify through terminal or AI assistants like Claude or ChatGPT.-
- FlicenseNot gradedqualityDmaintenanceBridges stdio-based LLM harnesses to OAuth-protected remote MCP servers via Streamable HTTP, handling PKCE browser login and token refresh automatically.6 npm-