TidalCycles MCP Server

TidalCycles MCP Server

Enables conversational live coding with Claude AI and TidalCycles, allowing users to create and manipulate algorithmic music patterns through natural language.

Category
访问服务器

README

🌀 TidalCycles MCP Server

Conversational live coding with Claude AI + TidalCycles

License: MIT Node Version

This MCP (Model Context Protocol) server enables Claude to control TidalCycles through natural conversation, creating a powerful AI-assisted live coding experience for algorithmic music composition.

✨ Features

  • 🎵 Evaluate TidalCycles patterns through conversational AI
  • 📊 State awareness - Claude knows what's currently playing
  • 🕰️ Pattern history - Track and recall previous patterns
  • 🎛️ Channel management - Solo, silence, or hush specific channels
  • 💬 Natural conversation - Talk to Claude about your music in plain English
  • 🔄 Real-time feedback - Immediate pattern evaluation
  • 🚀 Dual transport modes: stdio for Claude Desktop + WebSocket for external clients
  • 🌐 Network accessible - Web UIs and remote clients can connect via WebSocket
  • 🔄 Auto-recovery - Robust GHCi process management with automatic reconnection

📋 Prerequisites

Before installing, ensure you have:

  1. TidalCycles - Install from tidalcycles.org

    • Includes GHCi (Glasgow Haskell Compiler Interactive)
    • Haskell Stack or Cabal
  2. SuperCollider + SuperDirt - Required for audio output

    • Download from supercollider.github.io
    • Install SuperDirt: In SuperCollider, run Quarks.install("SuperDirt")
    • Install samples: Quarks.install("Dirt-Samples")
  3. Claude Desktop - Get from claude.ai

  4. Node.js 18+ - For running the MCP server

🚀 Quick Start

1. Installation

# Clone the repository
git clone https://github.com/yourusername/tidal-mcp-server.git
cd tidal-mcp-server

# Install dependencies
npm install

# Build the server
npm run build

2. Start SuperCollider

Open SuperCollider and run:

// Start SuperDirt
SuperDirt.start;

// Verify it's listening
// Should see: "SuperDirt: listening to Tidal on port 57120"

3. Configure Claude Desktop

Add this to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json

File-based Mode (Recommended for stability):

{
  "mcpServers": {
    "tidal": {
      "command": "node",
      "args": [
        "/absolute/path/to/tidal-mcp-server/dist/index.js"
      ],
      "env": {
        "TIDAL_FILE": "/absolute/path/to/tidal-mcp-server/tidal-mcp-output.tidal"
      }
    }
  }
}

Direct GHCi Mode (Experimental - no restarts):

{
  "mcpServers": {
    "tidal": {
      "command": "node",
      "args": [
        "/absolute/path/to/tidal-mcp-server/dist/index.js"
      ],
      "env": {
        "TIDAL_FILE": "/absolute/path/to/tidal-mcp-server/tidal-mcp-output.tidal",
        "TIDAL_USE_GHCI": "true",
        "TIDAL_BOOT_PATH": "/absolute/path/to/tidal-mcp-server/BootTidal.hs",
        "GHCI_PATH": "/usr/local/bin/ghci"
      }
    }
  }
}

Finding your ghci path:

which ghci
# Use this path for GHCI_PATH

Replace /absolute/path/to/ with the actual path to your installation.

4. File Watching Setup (File-based mode only)

For file-based mode, you need to watch the output file and evaluate it in TidalCycles:

Option A: Using watchexec (recommended)

# Install watchexec
brew install watchexec  # macOS
# or
cargo install watchexec-cli  # Any OS with Rust

# Watch and auto-reload patterns
cd /path/to/tidal-mcp-server
watchexec --restart -w tidal-mcp-output.tidal \
  "ghci -ghci-script BootTidal.hs -ghci-script tidal-mcp-output.tidal"

Option B: Using your editor

Open tidal-mcp-output.tidal in your preferred editor with TidalCycles support and manually evaluate patterns when Claude writes them.

5. Start Using

  1. Restart Claude Desktop to load the MCP server
  2. Start a new conversation
  3. Make music!
You: Create a funky drum pattern

Claude: [calls tidal_eval]
       I'll create a syncopated funk groove:
       d1 $ sound "bd ~ bd ~ bd ~ ~ ~"

You: Add a bassline

Claude: [calls tidal_eval on d2]
       Added a groovy bassline:
       d2 $ sound "bass2*8" # n "0 3 5 7"

🎹 Usage Examples

Basic Patterns

You: Play a simple drum beat
You: Make it faster
You: Add some hi-hats
You: What's playing right now?

Advanced Composition

You: Create a glitchy breakbeat with euclidean rhythms
You: Add a wobbling bassline with filter sweeps
You: Layer some atmospheric pads over the top
You: Make the whole thing more sparse

Live Performance

You: Solo channel d2
You: Bring back everything
You: Hush
You: Show me the last 5 patterns I evaluated

🛠️ Available Tools

The MCP server exposes these tools to Claude:

tidal_eval

Evaluate a TidalCycles pattern on a specific channel (d1-d9).

Parameters:

  • channel: String (d1-d9)
  • pattern: String (TidalCycles code without the d1 $ prefix)

Example:

{
  "channel": "d1",
  "pattern": "sound \"bd sd bd sd\" # gain \"1.2\""
}

tidal_hush

Stop all currently playing patterns immediately.

tidal_silence

Stop a specific channel gracefully.

Parameters:

  • channel: String (d1-d9)

tidal_get_state

Get current state of all channels - what's playing and when it started.

tidal_solo

Solo a specific channel, muting all others.

Parameters:

  • channel: String (d1-d9)

tidal_unsolo

Restore all channels after soloing.

tidal_get_history

Get pattern history from the current session.

Parameters:

  • limit: Number (optional, default: 10)

📁 Project Structure

tidal-mcp-server/
├── src/
│   ├── index.ts              # Main MCP server implementation
│   └── websocket-transport.ts # WebSocket transport layer
├── dist/                     # Compiled JavaScript output
├── BootTidal.hs             # TidalCycles initialization
├── tidal-mcp-output.tidal   # Generated pattern output file
├── start-websocket.sh       # WebSocket server startup script
├── test-websocket-client.js # WebSocket connection test
├── examples.tidal            # Example patterns
├── WEBSOCKET-USAGE.md       # WebSocket setup and usage guide
├── package.json             # Node.js dependencies
├── tsconfig.json            # TypeScript configuration
├── README.md                # This file
├── QUICKSTART.md            # Quick reference guide
├── CONTRIBUTING.md          # Contribution guidelines
└── LICENSE                  # MIT License

🎨 Use Cases

Live Performance

  • Generate patterns on the fly during algoraves
  • Quick iterations and experimentation
  • Emergency pattern generation when stuck
  • AI-assisted improvisation

Learning & Exploration

  • Ask Claude to explain TidalCycles concepts
  • Generate example patterns for specific techniques
  • Explore new rhythmic and harmonic ideas
  • Learn by conversation

Composition

  • Rapid prototyping of musical ideas
  • Generate pattern variations
  • Collaborative composition with AI
  • Build complex layered arrangements

🔧 Architecture

┌─────────┐         ┌──────────────┐         ┌──────────────┐
│ Claude  │ ◄─MCP─► │  MCP Server  │ ◄─────► │ TidalCycles  │
│   AI    │         │  (Node.js)   │         │    (GHCi)    │
└─────────┘         └──────────────┘         └──────────────┘
                            │                         │
                            │ (File mode)             │
                            ▼                         ▼
                    ┌──────────────┐         ┌──────────────┐
                    │ .tidal file  │         │ SuperCollider│
                    │   (watch)    │         │  SuperDirt   │
                    └──────────────┘         └──────────────┘

Flow:

  1. You talk to Claude in natural language
  2. Claude uses MCP tools to generate Tidal code
  3. MCP server either:
    • File mode: Writes code to .tidal file → File watcher evaluates it
    • Direct mode: Sends directly to running GHCi process
  4. TidalCycles/GHCi sends OSC messages to SuperDirt
  5. SuperCollider/SuperDirt plays the audio

🐛 Troubleshooting

"MCP server not connecting"

  • Check the path in claude_desktop_config.json is absolute
  • Restart Claude Desktop after config changes
  • Check Node.js version: node --version (need 18+)
  • Check MCP server logs in Claude Desktop

"Patterns not playing" (File mode)

  • Ensure SuperCollider is running: SuperDirt.start
  • Verify file watcher (watchexec) is running
  • Check the TIDAL_FILE path is correct
  • Try manually evaluating the file in your editor

"Patterns not playing" (Direct GHCi mode)

  • Check ghci is in PATH: which ghci
  • Verify GHCI_PATH in config matches which ghci
  • Check MCP server logs for "GHCi/TidalCycles started and connected"
  • Ensure only one GHCi instance is running

"spawn ghci ENOENT"

  • GHCi not found in PATH
  • Set GHCI_PATH environment variable with full path
  • On macOS with ghcup: usually /Users/username/.ghcup/bin/ghci

"No samples found" / Empty sound library

  • Install Dirt-Samples in SuperCollider:
    Quarks.install("Dirt-Samples");
    // Recompile (Cmd+K)
    SuperDirt.start;
    
  • Verify: ~dirt.soundLibrary.buffers.keys.do({|x| x.postln});

"Late" messages in SuperCollider

  • Normal at fast tempos (jungle/DnB)
  • If severe (>1 second), restart SuperDirt
  • Check system audio settings
  • Reduce pattern complexity

Music continues after stopping MCP server

  • Patterns run in SuperCollider, independent of MCP server
  • Stop in SuperCollider: s.freeAll;
  • Or in any GHCi/Tidal session: hush
  • Kill all ghci processes: pkill -9 ghci

🚧 Known Limitations

  • File mode: Restarts GHCi on every change (causes brief audio dropout)
  • Direct GHCi mode: Experimental, may have edge cases
  • No visual feedback: Pattern changes aren't visible in editor (file mode)
  • Single instance: Can't run multiple MCP servers simultaneously
  • No undo: Pattern changes are immediate and can't be undone

🗺️ Roadmap

✅ Completed Features

  • Direct GHCi integration - Real-time pattern evaluation without file watching
  • WebSocket transport - Network-accessible server for web UIs and collaboration
  • Robust error handling - GHCi process recovery and connection monitoring
  • Session logging - Complete pattern history with timestamps

🚀 Next Up (Priority Features)

  • MIDI Controller Input - Physical knobs/faders control Tidal parameters

    • MIDI learn mode for easy mapping
    • Support for popular controllers (Push, Launchpad, etc.)
    • Macro controls for complex parameter automation
  • Pattern Version Control - Git-like history for your patterns

    • Undo/redo system with branching
    • Save/restore snapshots
    • Compare pattern versions
  • Browser-based UI - Real-time pattern visualization

    • Live waveform display
    • Channel timeline view
    • WebSocket integration for multiple UIs

🌟 Advanced Features

  • Real-time Audio Analysis - AI gets audio feedback

    • Frequency analysis to inform pattern choices
    • Beat detection for tempo sync
    • Amplitude monitoring for mix balance
  • AI Pattern Suggestions - Context-aware recommendations

    • ML-based pattern generation
    • Style-specific suggestions (techno, ambient, breaks)
    • Automatic complementary pattern creation
  • Multi-user Collaboration - Live coding sessions

    • Multiple users control different channels
    • Turn-based jamming modes
    • Shared pattern library

🎨 Creative Integrations

  • Hydra Visual Integration - Reactive visuals

    • Auto-generate visuals from audio patterns
    • Synchronized visual effects with beat events
    • Live visual coding alongside audio
  • DAW Integration - Professional workflow

    • MIDI output to hardware synths
    • Audio recording of Tidal sessions
    • Timeline sync with Ableton Live/Logic
  • AI Composition Tools - Advanced creativity

    • Generate full track structures
    • Style transfer between genres
    • Harmony analysis and suggestions

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Quick start for contributors:

# Clone and setup
git clone https://github.com/yourusername/tidal-mcp-server.git
cd tidal-mcp-server
npm install

# Development mode (with auto-rebuild)
npm run dev

# Run tests
npm test

# Build for production
npm run build

📚 Resources

📄 License

MIT License - see LICENSE file for details.

🙏 Acknowledgments

  • Alex McLean (yaxu) for creating TidalCycles
  • The TOPLAP and algorave communities for live coding culture
  • Anthropic for the Model Context Protocol and Claude
  • Everyone who live codes and makes weird music with computers

📞 Support


Made with 🌀 for the live coding community

Go forth and make some algorithmic noise!

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选