Live at Spatie: سیستم موزیک اشتراکی با Laravel و MCP
خلاصهٔ کاملتر
تیم Spatie در دفتر آنتورپشون سه اسپیکر دارن که همیشه یه چیزی پخش میکنن — و سلیقههای مختلف اغلب منجر به این سوال میشه که «این دیگه چیه؟». برای حل این مشکل، سه نفر از تیم تو یه هکاتون دست به کار شدن و Live at Spatie رو ساختن: یه رپر Laravel + React دور Owntone، یه مدیا سرور متنباز که مستقیم به اسپیکرهای HomePod وصل میشه.
هدف اصلی دو چیز بود: اول اینکه همه بتونن بدون قطع کردن جریان موزیک آهنگ اضافه کنن، دوم اینکه همیشه معلوم باشه الان چی داره پخش میشه. نتیجه یه صف مشترکه که هر کسی میتونه ازش استفاده کنه، یه پلیر ساده در بالای صفحه، و یه لیدربورد که نشون میده هر کی چقدر آهنگ اضافه کرده.
برای جستجو از Spotify API استفاده میشه. وقتی کسی آهنگی اضافه میکنه، URI اسپاتیفای به Owntone داده میشه و بعد از مقایسه صف قبل و بعد، مشخص میشه کدوم آهنگ توسط چه کسی اضافه شده — این mapping تو یه جدول pivot به اسم QueueItemUser ذخیره میشه. هر آهنگی که بیشتر از ۵۰٪ پخش بشه هم تو PlayHistory ثبت میشه.
شاخصترین بخش پروژه یه ربات Slackه که پشتش یه MCP server (پروتکل Model Context Protocol برای ارتباط هوش مصنوعی با ابزارها) قرار داره. اپ یه سرور MCP روی مسیر /mcp/music با پکیج laravel/mcp اکسپوز میکنه:
#[Name('LiveAtSpatie')]
class MusicServer extends Server
{
protected array $tools = [
ListUsersTool::class,
SearchSongsTool::class,
AddToQueueTool::class,
NowPlayingTool::class,
PlayerControlTool::class,
SetVolumeTool::class,
// …
];
}این MCP به یه اینستنس OpenClaw وصله، پس میشه به ربات Slack پیام داد «کل آلبوم In Rainbows رو صف کن» و ربات همین کارو میکنه. ربات میتونه آرت کاور و یه حقیقت جالب درباره آهنگ در حال پخش هم بیاره — دقیقاً همون جواب «این دیگه چیه؟».
از نظر زیرساخت، اپ Laravel روی Laravel Forge اجرا میشه و Owntone روی یه Raspberry Pi در دفتر. اتصال این دو با Tailscale برقراره — Pi به tailnet (شبکه خصوصی مجازی Tailscale) میپیونده و اپ Forge انگار روی یه شبکه محلیه باهاش حرف میزنه؛ بدون port forwarding و بدون expose کردن Owntone به اینترنت. آهنگ در حال پخش روی داشبورد تلویزیون دفتر هم که با laravel-dashboard ساخته شده، همیشه قابل دیدنه.
نکات کلیدی:
- سیستم پخش موزیک اشتراکی دور Owntone با Laravel + React
- جستجو از طریق Spotify API، ردیابی کاربر با جدول pivot
- ربات Slack با پشتیبانی MCP برای کنترل صوتی با زبان طبیعی
- زیرساخت: Laravel Forge + Raspberry Pi متصل از طریق Tailscale
- نمایش آهنگ جاری روی داشبورد دفتر با laravel-dashboard




