rhythm-vibe-studio

rhythm-vibe-studio

MCP server for vibe coding with music, enabling format conversion (LilyPond, MusicXML, MIDI, ABC, etc.), audio-to-sheet transcription, and transposition with robust fallback outputs.

Category
访问服务器

README

rhythm-vibe-studio

MCP server for "vibe coding" music with LilyPond-first workflows and resilient fallbacks.

Full documentation (single handbook): docs/HANDBOOK.md — run/deploy, vision, architecture, tests, types, theory, UI history, prompt mapping, cloud agent workflows. Index: docs/README.md.

Rhythm Vibe Studio — backend + frontend commands

Goal What to run
Production-style (one server) — FastAPI serves /api/* and the built SPA uv sync --extra dev --extra scrape then uv run python -m rhythm_vibe_studio.web.build then uv run rhythm-vibe-studio-webui --host 127.0.0.1 --port 7860 -> open http://127.0.0.1:7860
Development (hot reload) — Vite + separate API Terminal A: uv run rhythm-vibe-studio-webui --host 127.0.0.1 --port 7860 — Terminal B: cd frontend && pnpm install && pnpm dev (or cd frontend && npm install && npm run dev) -> UI at http://127.0.0.1:5173 (proxies /api to port 7860)

Optional: point Vite at another API with frontend/.env.development.local -> VITE_STUDIO_API_ORIGIN=http://host:port.

Remote static UI (GitHub Pages, etc.): set VITE_STUDIO_API_ORIGIN at build time to your public FastAPI origin. Cloudflare Worker: build frontend/dist, deploy cloudflare/ with Wrangler (STUDIO_API_ORIGIN secret). Details: docs/HANDBOOK.md § Part 1.

Release automation

Container runtime defaults:

  • Root image entrypoint: rhythm-vibe-studio-webui --host 0.0.0.0 --port 7860
  • Health probe: /api/healthcheck
  • Writable workdir volume: /data

Secrets, variables, and chart publishing details live in docs/HANDBOOK.md.

Documentation

Doc Description
docs/HANDBOOK.md Primary reference — how to run everything (MCP, Studio, Vite, tests, hosting), vision, architecture, web UI research, implementation map, testing, types, theory, cloud agents
docs/README.md Short TOC + links into the handbook
docs/ROCKSMITH_KNOWLEDGEBASE.md Rocksmith-style practice feature research and Studio parity map
Stub files (docs/VISION_AND_SPECIFICATION.md, ARCHITECTURE.md, …) Redirect to the handbook section (old links keep working)

What this server supports now

  • Fetch existing music assets from the web (fetch_music_from_web).
  • Convert between common music formats (convert_music) with best-effort routing:
    • Notation: lilypond, musicxml, midi, abc, pdf
    • Audio containers: wav, mp3, m4a
    • Fallback: json_fallback
  • Audio/file to sheet workflow (audio_or_file_to_sheet) using transcription/conversion chain.
  • Song transposition by semitones (transpose_song).
  • Musescore API proxy (musescore_api) with:
    • public endpoint usage without login where possible
    • login token via env (MUSESCORE_API_TOKEN) or session tool (set_musescore_auth_token)
  • Robust fallback behavior when strict LilyPond or converter steps fail.

Canonical text-based social shorthand

For "Reddit/phone shorthand", this server treats ABC notation as the primary universal text format, with ChordPro as a secondary lead-sheet shorthand.

Tool:

  • normalize_reddit_music_text: normalizes informal text into a robust event-based fallback model.

Why this choice:

  • ABC is compact and human-typable in comments/chats.
  • ABC has broad tooling support and maps well to formal notation pipelines.
  • ChordPro is widely used for quick chord+lyric communication.

Error handling model

When strict conversions fail (e.g. LilyPond compile errors), server returns:

  • ok=false plus diagnostic message
  • fallback object (RobustMusicFallback) containing:
    • ambiguous but actionable event data
    • shorthand text snapshot
    • warnings to continue downstream tasks

This keeps multi-step agent tasks moving even when one notation step fails.

Verification (design phase)

There is no automated test suite in this repo while Studio and MCP surfaces are still in active design. Do not add pytest, Vitest, or Playwright tests without an explicit stabilization decision.

  • Studio UI: run the app and verify affected flows in a real browser; see AGENTS.md and docs/HANDBOOK.md.
  • CLI/MCP: uv run rhythm-vibe-studio-cli <tool> --help plus one real invocation with stdout/stderr shown.
  • Fixtures: samples/studio-fixtures/ (minimal.abc, minimal.ly, minimal.mid) for manual import smoke.

Quickstart

With uv (recommended):

Run from the project directory so the installed package uses source (src/). Run uv sync to pick up the latest code.

cd C:\GitHub\rhythm-vibe-studio
uv sync
uv run rhythm-vibe-studio
# or: uvx --from . rhythm-vibe-studio

Select transport explicitly when needed:

uv run rhythm-vibe-studio --transport stdio
uv run rhythm-vibe-studio --transport streamable-http --host 127.0.0.1 --port 8000
uv run rhythm-vibe-studio --transport sse --host 127.0.0.1 --port 8000

Supported transports: stdio, streamable-http, sse (http is accepted as an alias for streamable-http).

Optional extras (audio/transcription, scraping):

uv sync --extra audio --extra scrape

audio enables ML transcription via Spotify Basic Pitch for the audio->MIDI step. If the extra is not installed (or the runtime fails), the project uses a best-effort ffmpeg+autocorrelation fallback so audio workflows still run.

Rhythm Vibe Studio (FastAPI + React): see the Rhythm Vibe Studio — backend + frontend commands section at the top of this file for the exact matrix (single server vs Vite dev). Minimal API-only start:

uv sync
uv run rhythm-vibe-studio-webui --host 127.0.0.1 --port 7860

Production bundle path: API routes from FastAPI and static assets under src/rhythm_vibe_studio/web/static/ after:

uv run python -m rhythm_vibe_studio.web.build

If you still need the legacy Gradio UI module, install the optional extra:

uv sync --extra legacy_ui

Studio screenshot:

  • docs/screenshots/rhythm-vibe-studio-overview.png

Refresh top Hugging Face music Spaces into vendor/huggingface_spaces and regenerate report:

uv run rhythm-vibe-refresh-spaces --query music --top-n 5 --limit 100

Optional cleanup of stale cloned Space folders:

uv run rhythm-vibe-refresh-spaces --query music --top-n 5 --prune

With pip:

python -m venv .venv
. .venv/Scripts/Activate.ps1
pip install -e .
pip install -e ".[audio,scrape]"   # optional
rhythm-vibe-studio

To launch the web UI with pip-managed environments:

pip install -e .
rhythm-vibe-studio-webui

External binaries/tools (recommended)

  • lilypond for LilyPond -> PDF/MIDI rendering
  • ffmpeg for audio container conversion
  • MuseScore CLI (future route expansion for advanced engraving/export)

Without these tools, the server still returns structured fallback outputs.

Running with uvx (no PyPI publish)

The package is not on PyPI. Run the tool from the local project path so uv installs from the directory:

# From the project directory (recommended)
cd C:\GitHub\rhythm-vibe-studio
uvx --from . rhythm-vibe-studio

Or from anywhere using an absolute path:

uvx --from "C:/GitHub/rhythm-vibe-studio" rhythm-vibe-studio

Do not use uvx rhythm-vibe-studio alone—that looks for the package on PyPI and will fail.

Cursor MCP config (example)

Using uvx with local path (recommended):

{
  "mcpServers": {
    "rhythm-vibe-studio": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", ".", "rhythm-vibe-studio"],
      "env": { "rhythm_vibe_mcp_WORKDIR": "C:/GitHub/rhythm-vibe-studio" },
      "cwd": "C:/GitHub/rhythm-vibe-studio"
    }
  }
}

Alternative (Python from venv):

{
  "mcpServers": {
    "rhythm-vibe-studio": {
      "command": "python",
      "args": ["-m", "rhythm_vibe_studio.server"],
      "cwd": "c:/GitHub/rhythm-vibe-studio"
    }
  }
}

CLI (direct tool commands)

rhythm-vibe-studio-cli / rhythmvibe-cli expose one subcommand per MCP tool (generated from tool schemas).

uvx --from . --with-editable . rhythmvibe-cli --help
uvx --from . --with-editable . rhythmvibe-cli healthcheck
uvx --from . --with-editable . rhythmvibe-cli analyze-audio-performance --input-ref "cello_samples/New Recording 31_formats/New Recording 31.opus"
uvx --from . --with-editable . rhythmvibe-cli batch-convert-audio --input-ref "cello_samples"
uvx --from . --with-editable . rhythmvibe-cli audio-or-file-to-sheet --input-ref "cello_samples/New Recording 31.m4a" --prefer-output lilypond

For ML transcription with basic_pitch, install the audio extra:

uvx --python 3.11 --from ".[audio]" --with-editable . --with "setuptools<81" rhythmvibe-cli audio-or-file-to-sheet --input-ref "cello_samples/New Recording 31.m4a" --prefer-output lilypond

Current tool surface

  • healthcheck() — workdir, artifacts_dir, MuseScore env + session token flag, binary availability (lilypond, ffmpeg), and supported_formats list
  • fetch_music_from_web(url)
  • plan_music_conversion(input_format, output_format)
  • convert_music(input_ref, output_format)
  • audio_or_file_to_sheet(input_ref, prefer_output="pdf")
  • transpose_song(input_ref, semitones, output_format="musicxml")
  • normalize_reddit_music_text(text, title="reddit_vibe_idea")
  • convert_text_notation_to_lily_or_fallback(text, target_format="lilypond", title="text_notation_piece")
  • compose_story_lily(prompt, title="Theme", tempo_bpm=56, instrument="Solo", clef=null, midi_instrument=null, output_format="lilypond")
  • batch_convert_audio(input_ref)
  • analyze_audio_performance(input_ref)
  • set_musescore_auth_token(token)
  • musescore_api(endpoint, method="GET", payload_json="{}", base_url="")

Notes on "any/all conversion combinations"

The architecture is built to support full matrix conversion, but some routes depend on external engines. When a direct route does not exist yet, the server emits fallback output and diagnostics instead of failing hard.

Planned expansion areas:

  • route planner with multistep intermediate formats
  • richer audio-to-score transcription and quantization choices
  • deeper MuseScore integration routes (CLI + public APIs + optional authenticated flows)

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选