Skip to main content
Glama

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

  1. Clone or download this repository:

cd yoto-mcp-server
  1. Install dependencies:

npm install
  1. Build the project:

npm run build

Configuration

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 link

Then 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 Yoto

Or explicitly:

Use the yoto-auth tool

The 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 Yoto

3. 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:

  1. Upload the audio file to Yoto

  2. Wait for transcoding (automatic conversion to Yoto-compatible format)

  3. Create a new MYO card with the audio

  4. 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 cards

Returns 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 dyp9b

Returns 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

yoto-auth

Authenticate with Yoto API

None

yoto-check-auth

Check authentication status

None

yoto-upload-audio

Upload audio and create MYO card

audioFilePath, title

yoto-list-cards

List all MYO cards

None

yoto-get-card

Get details of a specific card

cardId

yoto-add-track

Add audio track to existing card

cardId, audioFilePath, trackTitle

Configuration Storage

Authentication tokens are stored securely in ~/.yoto-mcp-config.json. The server automatically handles token refresh.

Development

Build

npm run build

Watch mode

npm run watch

Run directly

npm run dev

Troubleshooting

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:

License

MIT

Contributing

Contributions welcome! Please feel free to submit issues or pull requests.

Acknowledgments

Available Tools

6 tools
yoto-add-trackB

Add a track to an existing Yoto MYO card

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID to add the track to
trackTitleYesTitle for the track
audioFilePathYesAbsolute path to the audio file (MP3)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

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 (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
cardIdYesThe card ID to retrieve

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

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 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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle for the MYO card
audioFilePathYesAbsolute path to the audio file (MP3)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 6 tool updatesv1.0.0
    • First observedyoto-add-track
    • First observedyoto-auth
    • First observedyoto-check-auth
    • First observedyoto-get-card
    • First observedyoto-list-cards
    • First observedyoto-upload-audio

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Exposes 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.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Bridges stdio-based LLM harnesses to OAuth-protected remote MCP servers via Streamable HTTP, handling PKCE browser login and token refresh automatically.
    6 npm
    -