昨天介紹了 Spotify MCP Server 的功能與工具,今天就進入重頭戲 —— 實作。
這次我們不只是單純把 Server 跑起來,而是會把它整合進我們自己的 Agent 系統裡(*^-^)
準備好後,我們就能開始動工啦~
接下來要把 spotify-mcp-server clone 下來並安裝。
git clone <the web URL>
設定完成後,別忘了把 Client ID、Client Secret、Redirect URI 寫進 .env
檔:
# Spotify
SPOTIFY_CLIENT_ID="your_spotify_client_id_here"
SPOTIFY_CLIENT_SECRET="your_spotify_client_secret_here"
SPOTIFY_REDIRECT_URI="your_spotify_redirect_uri_here"
cd spotify-mcp-server
npm install
npm run build
建立檔案
cp spotify-config.example.json spotify-config.json
編輯spotify-config.json
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
運行身份驗證腳本
npm run auth
身份驗證腳本將自動將此程式碼交換為存取和刷新令牌,這些令牌將被保存到您的spotify-config.json文件中。
import os
from dotenv import load_dotenv
from google.adk.agents import Agent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters, StdioConnectionParams
from . import spotify_prompt as prompt
load_dotenv()
spotify_agent = Agent(
model="gemini-2.0-flash",
name="spotify_agent",
description=prompt.SPOTIFY_AGENT_DESCRIPTION,
instruction=prompt.SPOTIFY_AGENT_INSTRUCTION,
tools=[MCPToolset(
connection_params=StdioConnectionParams(
server_params=StdioServerParameters(
command='node',
args=['build/index.js'],
cwd="D:\\VsCode\\multi_tool_agent\\spotify-mcp-server",
env={
"SPOTIFY_CLIENT_ID": os.getenv("SPOTIFY_CLIENT_ID"),
"SPOTIFY_CLIENT_SECRET": os.getenv("SPOTIFY_CLIENT_SECRET"),
"SPOTIFY_REDIRECT_URI": os.getenv("SPOTIFY_REDIRECT_URI"),
}
)
)
)]
)
注意cwd 放自己clone 的spotify-mcp-server 位置!
可參考我的內容
SPOTIFY_AGENT_DESCRIPTION = """
Spotify 音樂播放控制專家,負責處理所有與 Spotify 相關的音樂播放、搜尋、播放清單管理等功能。
具備完整的 Spotify API 操作能力,包括播放控制、音樂搜尋、播放清單建立與管理等。
"""
SPOTIFY_AGENT_INSTRUCTION = """
你是一個專業的 Spotify 音樂助手,擁有完整的 Spotify 控制功能。你可以執行以下任務:
## 主要功能:
### 音樂播放控制
- 播放特定歌曲、專輯、藝人或播放清單
- 暫停/繼續播放
- 切換上一首/下一首
- 查看目前正在播放的音樂
- 將音樂加入播放佇列
### 音樂搜尋功能
- 搜尋歌曲、專輯、藝人、播放清單
- 取得專輯詳細資訊和曲目列表
- 查看使用者的已儲存音樂
- 瀏覽最近播放的歌曲
### 播放清單管理
- 建立新的播放清單
- 取得使用者的所有播放清單
- 查看播放清單中的歌曲
- 將歌曲添加到播放清單
### 音樂收藏管理
- 儲存/移除專輯到使用者音樂庫
- 檢查專輯是否已儲存
- 管理「喜歡的歌曲」
## 使用指南:
### 當用戶想要播放音樂時:
1. 先使用 `searchSpotify` 搜尋相關內容
2. 從搜尋結果中選擇合適的項目
3. 使用 `playMusic` 開始播放
### 當用戶想要管理播放清單時:
1. 使用 `getMyPlaylists` 查看現有播放清單
2. 根據需求使用 `createPlaylist` 建立新播放清單
3. 使用 `addTracksToPlaylist` 添加歌曲
### 回應準則:
- 始終使用繁體中文回應
- 提供清晰的操作結果說明
- 當無法找到指定內容時,建議替代選項
- 主動詢問用戶是否需要進一步操作
- 對於播放控制,提供即時的狀態更新
### 錯誤處理:
- 如果搜尋無結果,建議調整搜尋關鍵字
- 如果播放失敗,檢查 Spotify 是否正在運行
- 如果授權過期,提醒用戶重新認證
記住:你的目標是讓用戶輕鬆享受音樂,提供流暢且直觀的 Spotify 體驗。
"""
root_agent
只要在 sub_agent 寫入 spotify_agent 就好~(記得匯入喔!)
root_agent prompt
依據自己要求撰寫就好,我spotify 一些部分:
### spotify_agent - Spotify 音樂專家
**服務範圍:**
- Spotify 音樂搜尋和播放控制
- 播放清單管理
- 音樂資訊查詢
1.啟動 FastAPI: uvicorn main:app --host 0.0.0.0 --port <port>
2.啟動 Gradio: python gradio_app.py
如何確認是否用到 mcp server,可至 VsCode 終端機裡查看訊息,會看到出現多次 MCP 相關的訊息,如:
auth_config or auth_config.auth_scheme is missing. Will skip authentication.Using FunctionTool instead if authentication is not required.
這個警告不會影響功能,只是表示:
Warning: there are non-text parts in the response: ['function_call'], returning concatenated text result from text parts. Check the full candidates.content.parts accessor to get the full model response.
AI 模型回應結構:
實際運作流程(舉例):
到這裡,是不是發現自己的 agent 變得更加有趣而不單調了?
你不只是在「單純跑 Spotify MCP Server」,而是真的把它 接入自己的 Agent 架構 了,你自己的智慧助理,已經不只是聊天 AI,而是能幫忙 搜尋音樂 的幫手~
那我們下一篇見(≧∇≦)ノ