内容
# 聚焦线
适用于编程 CLI 的 AI 驱动的专注音乐插件。说“播放音乐”,它就会播放有科学依据的专注音乐,并带有自动的番茄计时器 —— 直接在 Claude Code、Cursor、Windsurf 或任何与 MCP 兼容的编辑器中。
为 **GMI Cloud x GLM 黑客马拉松** 构建。
## 截图

## 工作原理
```
你: “播放一些音乐”
1. GLM DJ 选择最佳的番茄计时器(25/5、50/10 或 15/3,基于时间)
2. GLM DJ 选择音乐源(Brain.fm、YouTube、Lyria 3 或程序生成)
3. 音乐播放并连续循环
4. 状态栏显示曲目 + 番茄计时器倒计时
5. 自动在专注音乐和休息音乐之间切换
6. GLM 生成旋转的励志名言
```
## 科学依据
基于 [brain.fm 研究](https://doi.org/10.1038/s42003-024-07026-3)(Nature,2024,N=677):
- **神经同步** —— 大脑在专注的 beta 频率(16Hz)下与节奏音频同步
- **低显著性音乐** —— 无人声,无突然变化,重复模式逐渐淡入背景
- **番茄工作法集成** —— 25 分钟会话符合注意力研究;4 个循环适合超日节律(90-120 分钟)
- **昼夜适应** —— GLM 根据时间调整计时器预设(早晨深度工作,下午短跑)
## 功能
- **GLM 5.1 AI DJ** —— 通过 GMI Cloud 选择音乐源、计时器设置并生成励志名言
- **Brain.fm 曲目** —— 来自 brain.fm YouTube 频道的精选 30 分钟科学支持的专注曲目
- **Google Lyria 3** —— 用于曲目之间变化的 AI 生成音乐片段
- **YouTube** —— 搜索和播放任何器乐专注音乐
- **程序生成音频** —— 即时双耳节拍(16Hz 专注)、粉色噪音、雨声、 drones
- **番茄计时器** —— 自动选择预设(经典 25/5、深度工作 50/10、短跑 15/3)
- **状态栏** —— 在 Claude Code 中显示实时曲目 + 番茄计时器倒计时 + 励志名言
- **曲目命名** —— GLM 为 AI 生成的曲目生成创意名称
- **自动轮换** —— 在专注会话期间每 3 分钟更换曲目以增加变化
## 架构
```
┌──────────────────┐ stdio ┌──────────────────────────────────┐
│ 编程 CLI │◄─────────────────►│ MCP 服务器 │
│ │ │ │
│ Claude Code │ “播放音乐” │ ┌──────────┐ ┌──────────────┐ │
│ Cursor │ ─────────────────►│ │ GLM 5.1 │──►│ 音乐源 │ │
│ Windsurf │ │ │ DJ 代理 │ │ │ │
│ Cline │ 状态栏 │ └──────────┘ │ - Brain.fm │ │
│ │◄─ state.json ─── │ │ │ - YouTube │ │
│ ▶ 京都 [brainfm]│ │ ┌────▼─────┐ │ - Lyria 3 │ │
│ 🎯 专注 18:46 │ │ │ 番茄计时器 │ │ - 程序生成 │ │
│ “构建…” │ │ │ │ │ - Freesound │ │
│ │ │ └──────────┘ └──────────────┘ │
│ │ │ │ │
│ 🔊 │◄── ffplay ────────│ ┌────▼─────┐ │
│ │ │ │ 播放器 │ │
└──────────────────┘ │ └──────────┘ │
└──────────────────────────────────┘
```
## 项目结构
```
├── src/ # 主包
│ ├── server.py # MCP 服务器(13 个工具,状态轮询器,番茄计时器引擎)
│ ├── dj_agent.py # GLM 5.1 AI DJ(源选择,名言,科学提示)
│ ├── player.py # 跨平台音频播放(ffplay)
│ ├── state.py # 共享状态文件(状态栏的原子写入)
│ ├── statusline.py # Claude Code 状态栏渲染器
│ ├── tui.py # 终端小部件(独立模式)
│ └── sources/ # 音乐源
│ ├── brainfm.py # 精选 Brain.fm YouTube 曲目
│ ├── lyria.py # Google Lyria 3 AI 音乐 + GLM 曲目命名
│ ├── youtube.py # YouTube 搜索/下载(通过 yt-dlp)
│ ├── procedural.py # 双耳节拍,粉色噪音,雨声, drones
│ ├── minimax_music.py # 通过 GMI Cloud 的 MiniMax Music 2.5
│ ├── freesound.py # Freesound.org 环境音
│ └── local_cache.py # 本地音频文件扫描器
├── scripts/
│ ├── generate_music.py # 独立 Lyria 3 音乐生成器
│ └── test-keys.sh # GMI Cloud API 密钥验证器
├── docs/ # 研究和参考文档
│ ├── focus-music-guide.md # 专注音乐生成的科学指南
│ ├── gmi-cloud-services.md # GMI Cloud 完整服务目录
│ ├── gmi-inference-models.md # 45 个 LLM + 238 个媒体模型
│ └── ...
├── pyproject.toml
├── .env.example
└── opencode.json # OpenCode 配置(45 个 GMI 模型)
```
## 安装
```bash
git clone https://github.com/tantk/productivity-music-mcp.git
cd productivity-music-mcp
pip install -e .
```
## API 密钥
```bash
cp .env.example .env
```
必填(至少一个):
- `GMI_INFER` —— GMI Cloud 推断密钥(获取一个)—— 为 GLM DJ 代理提供支持
- `GOOGLE_API` —— Google AI 密钥 —— 为 Lyria 3 音乐生成提供支持
可选:
- `FREESOUND_API_KEY` —— [免费密钥](https://freesound.org/apiv2/apply/) 用于自然声音
## 设置
### Claude Code
```bash
claude mcp add productivity-music -- productivity-music-mcp
```
状态栏自动安装。或者手动添加到 `~/.claude/settings.json`:
```json
{
"statusLine": {
"type": "command",
"command": "productivity-music-status",
"refreshInterval": 2
}
}
```
### Cursor / Windsurf / Cline / 任意 MCP 客户端
```json
{
"mcpServers": {
"productivity-music": {
"command": "productivity-music-mcp",
"env": {
"GMI_INFER": "your-key",
"GOOGLE_API": "your-key"
}
}
}
}
```
## 使用
只需与 AI 助手对话:
```
“播放一些音乐” -> Brain.fm 专注曲目 + 番茄计时器
“播放一些平静的音乐” -> 自然声音或环境音乐
“我需要能量” -> 轻快的器乐音乐
“停止音乐” -> 停止所有音乐
```
GLM DJ 自动:
- 选择合适的音乐源(Brain.fm 用于专注,YouTube 用于变化,程序生成用于即时)
- 根据时间设置番茄计时器
- 为 AI 生成的曲目创意命名
- 每 60 秒轮换励志名言
- 每 3 分钟更换曲目以增加变化
### 独立 TUI
```bash
productivity-music # 交互式预设菜单
productivity-music --preset 1 # 经典番茄计时器(25/5 x 4)
productivity-music --preset 2 # 深度工作(50/10 x 3)
productivity-music --mode focus # 仅音乐,无计时器
```
## 可用的 MCP 工具
| 工具 | 描述 |
|---|---|
| `music(request)` | 开始音乐 + 番茄计时器(默认,推荐) |
| `stop()` | 停止所有音乐 |
| `now_playing()` | 检查正在播放的音乐 |
| `recommend_session()` | 获取 AI 推荐的番茄计时器预设 |
| `generate_lyria(mood)` | 生成 AI 音乐(专注/平静/充满活力/休息/睡眠) |
| `generate_procedural(type, duration)` | 即时声音(双耳节拍/粉色噪音/雨声/drone) |
| `play_youtube(query)` | 从 YouTube 搜索和播放音乐 |
| `play_freesound(query)` | 搜索自然声音 |
| `play_audio(path, loop)` | 播放本地文件 |
| `list_tracks()` | 列出缓存的音频 |
| `list_sources()` | 显示可用的源 |
| `pomodoro(focus, break, cycles)` | 自定义计时器的手动番茄计时器 |
## 技术栈
- **GLM 5.1** 通过 GMI Cloud —— AI DJ 代理,曲目命名,励志名言
- **DeepSeek V3.2** 通过 GMI Cloud —— DJ 决策的备用 LLM
- **Google Lyria 3** —— AI 音乐生成(30 秒片段)
- **Brain.fm** —— 精选的科学支持的专注曲目(通过 YouTube)
- **MCP SDK** —— 用于 CLI 集成的模型上下文协议
- **ffplay** —— 跨平台音频播放
- **yt-dlp** —— YouTube 音频下载
- **Rich** —— 终端 UI 渲染
## 要求
- Python 3.10+
- `ffplay` (来自 ffmpeg)用于音频播放
- `yt-dlp` 用于 YouTube(可选,`pip install yt-dlp`)
- 至少一个 API 密钥(GMI_INFER 或 GOOGLE_API)
## 未来更新
- 通过 Oauth 与自己的 Spotify 播放列表集成
## 许可证
MIT