MCP server
LyricWinter MCP server: connect Claude, ChatGPT, Cursor, and other agents
Connect any MCP client to the remote LyricWinter Studio MCP server at https://lyricwinter.com/mcp using Streamable HTTP with OAuth 2.1 or a scoped API key.
BetaUpdated
The LyricWinter MCP server lets AI agents work in LyricWinter Studio on your behalf. Connect any Model Context Protocol client to https://lyricwinter.com/mcp and the agent can turn a story into fully cast audio, play it, share it, change character voices, add your own voice, and work with your Studio projects. In ChatGPT, Claude, and other apps that support interactive MCP Apps, a story player and a voice panel appear right in the conversation. The server uses the Streamable HTTP transport and authenticates with OAuth 2.1 or a Studio-scoped API key.
| Property | Value |
|---|---|
| Server URL | https://lyricwinter.com/mcp |
| Transport | Streamable HTTP |
| Authentication | OAuth 2.1 with PKCE, or Authorization: Bearer lw_... |
| Scopes | studio:read (required), studio:write (to create stories and audio), voices:read and voices:write (to recast characters and add your voice) |
| Tools | 22 tools |
| Status | Beta |
Connect Claude#
Claude on the web and Claude Desktop. Open Settings → Connectors, choose Add custom connector, and enter https://lyricwinter.com/mcp. Claude opens LyricWinter so you can sign in and approve access.
Claude Code. Add the server, then run /mcp inside Claude Code and choose Authenticate:
claude mcp add --transport http lyricwinter https://lyricwinter.com/mcpConnect ChatGPT#
In ChatGPT, turn on developer mode for apps and connectors, then create a connector with the URL https://lyricwinter.com/mcp and OAuth authentication. ChatGPT sends you to LyricWinter to sign in and approve access. Refresh the connector after LyricWinter adds new tools.
Connect VS Code#
Add the server to .vscode/mcp.json in your workspace, or to your user MCP configuration. VS Code prompts you to sign in when the server starts.
{
"servers": {
"lyricwinter": {
"type": "http",
"url": "https://lyricwinter.com/mcp"
}
}
}Connect Cursor#
Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Use a Studio-scoped API key in the Authorization header:
{
"mcpServers": {
"lyricwinter": {
"url": "https://lyricwinter.com/mcp",
"headers": {
"Authorization": "Bearer lw_..."
}
}
}
}Connect Codex#
Add the server to ~/.codex/config.toml, then sign in:
[mcp_servers.lyricwinter]
url = "https://lyricwinter.com/mcp"codex mcp login lyricwinterConnect other MCP clients#
Any client that supports remote MCP servers over Streamable HTTP can connect:
- Point the client at
https://lyricwinter.com/mcp. - If the client supports MCP authorization, it discovers LyricWinter's OAuth server from the
WWW-Authenticatechallenge and the protected-resource metadata athttps://lyricwinter.com/.well-known/oauth-protected-resource/mcp, registers itself, and opens the LyricWinter sign-in page. - Otherwise, send a Studio-scoped API key as
Authorization: Bearer lw_....
To test the server by hand, run the MCP Inspector and connect it to the same URL:
npx @modelcontextprotocol/inspectorHow does MCP authentication work?#
LyricWinter hosts its own OAuth 2.1 authorization server for the MCP server:
- An unauthenticated request returns
401with aWWW-Authenticateheader that points to the protected-resource metadata. - The client registers through dynamic client registration (
/oauth/register) and starts the authorization code flow with PKCE (S256). - You sign in to LyricWinter and approve
studio:readand, if the client asks for them,studio:write,voices:read, andvoices:write. - LyricWinter issues a one-hour access token and a 30-day refresh token that rotates on every use.
Each token only reaches the account that approved it. To disconnect a client, revoke its key in the Developers panel of your dashboard. See Authentication for endpoints and supported parameters.
Clients that cannot complete OAuth can send a LyricWinter API key with the studio:read and studio:write scopes instead, plus voices:read and voices:write for the voice tools.
What can I ask an agent to do?#
Once connected, ask in plain language. For example:
- "Read this chapter aloud with a different voice for each character."
- "Turn my fanfic into an audio drama." (paste the story)
- "Give Mara a raspier, older voice."
- "I want to narrate it in my own voice."
- "Make a link I can share."
- "Show my LyricWinter Studio projects."
- "Create a Studio story called The Lighthouse from this text and prepare it for audio."
- "Add this chapter to my Winter Road project."
- "Generate audio for chapters 1 through 3 and tell me when it's done."
- "Which characters speak in this project, and how often?"
The agent picks the right tools and polls workflows until they finish. The tool descriptions tell agents to confirm with you before starting paid audio generation.
Does the MCP server cost anything?#
Connecting and reading are free, and new LyricWinter accounts include free words. create_audio_story, recast_character, and start_audio_workflow run Create Audio, which consumes words from your LyricWinter balance exactly as it does in the Studio app. These tools are marked as having side effects so that clients can ask for confirmation.
What the MCP server does not do yet#
The beta MCP server covers the core story-to-audio loop. These tasks are available in the REST API and the Studio app but not yet as MCP tools:
- Editing document blocks, or directing a specific line ("whisper this")
- Exports to WAV, M4B, EPUB, or SRT
- Uploading sounds or voice model files
Troubleshooting#
| Symptom | Fix |
|---|---|
| The client says authorization is required or expired | Reconnect or re-authenticate the server in your client. Access tokens last one hour and refresh automatically when the client supports it. |
| A tool returns "lacks this permission" | The token or API key is missing a scope the tool needs. Reconnect LyricWinter and approve access, or use a key with the listed scopes. |
403 Origin is not allowed | Browser-based clients must connect from lyricwinter.com or chatgpt.com. Use a desktop, CLI, or server-side client instead. |
| A write tool timed out | The result includes a mutation_id. Call the tool again with the same mutation_id to retry safely without creating a duplicate or a second paid run. |