使用说明
🎵 Spotify MCP服务器
A. 模型上下文协议(MCP) 连接到Spotify Web API的服务器,使Microsoft Copilot Studio中的人工智能代理能够搜索艺术家、检索热门曲目并获取专辑信息。
🌟 特性
✅ 搜索艺术家 -按名称在Spotify上查找艺术家
✅ 搜索曲目 -按姓名、艺术家或两者搜索歌曲
✅ 获取热门曲目 -检索艺术家最受欢迎的曲目
✅ 获取相册 -列出任何Spotify艺术家的专辑
✅ 艺术家信息 -获取详细的艺术家信息(流派、关注者、受欢迎程度)
✅ 相关艺术家 -根据Spotify的推荐查找类似的艺术家
✅ 音频特征 -分析曲目的能量、可跳舞性、节奏、配价等。
✅ 曲目详细信息 -获取有关特定曲目的完整信息
✅ 专辑详情 -查看包含曲目列表的完整专辑信息
✅ 批量音频分析 -一次获得多达100首曲目的音频功能
✅ 安全认证 -使用中间件进行承载令牌身份验证
✅ Azure部署 -使用GitHub操作实现自动化CI/CD
✅ Copilot工作室就绪 -与Microsoft Copilot Studio直接集成
🏗️ 建筑
┌─────────────────────┐
│ Copilot Studio │
│ Agent │
└──────────┬──────────┘
│ MCP Protocol
│ (Streamable HTTP)
│
┌──────────▼──────────┐
│ Azure Web App │
│ FastMCP Server │
│ + Auth Middleware │
└──────────┬──────────┘
│ REST API
│
┌──────────▼──────────┐
│ Spotify Web API │
└─────────────────────┘
📋 先决条件
- Python 3.11+
- Spotify开发者帐户
- Azure帐户(用于部署)
- Microsoft Copilot Studio(用于AI代理集成)
🚀 快速开始
1.克隆存储库
git clone https://github.com/ifiecas/spotify-mcp.git
cd spotify-mcp
2.设置Spotify API凭据
- 首选 Spotify开发者仪表板
- 创建新应用程序
- 注意你的 客户端ID 和 客户端密钥
3.创建环境变量
创建一个 .env 项目根目录中的文件:
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
LOCAL_TOKEN=your_secure_token_here
PORT=8000
注: 为生成强随机令牌
LOCAL_TOKEN-这将保护您的MCP服务器。
4.安装依赖项
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
5.本地运行
python server.py
服务器将在以下时间启动 http://localhost:8000/mcp
☁️ 部署到Azure
选项1:自动GitHub操作(推荐)
-
分叉此存储库
-
设置Azure Web应用程序:
- 创建Azure Web应用程序(Python 3.11)
- 启用 系统分配的托管身份
- 记下你的应用程序名称(例如。,
spotify-mcp1611)
-
配置GitHub机密:
转到您的存储库→ 设置→ 秘密与变量→ 操作,并添加:
AZUREAPPSERVICE_CLIENTIDAZUREAPPSERVICE_TENANTIDAZUREAPPSERVICE_SUBSCRIPTIONIDSPOTIFY_CLIENT_IDSPOTIFY_CLIENT_SECRETLOCAL_TOKEN
-
更新工作流文件:
编辑
.github/workflows/main_spotify-mcp1611.yml:app-name: your-app-name # Change this to your Azure Web App name -
推送到主分支 -将触发自动部署!
选项2:手动Azure CLI部署
az login
az webapp up --name your-app-name --resource-group your-rg --runtime "PYTHON:3.11"
配置Azure环境变量
在Azure门户中→ 您的Web应用程序→ 配置→ 应用程序设置,添加:
| 名称 | 值 |
|---|---|
SPOTIFY_CLIENT_ID |
您的Spotify客户端ID |
SPOTIFY_CLIENT_SECRET |
您的Spotify客户端密码 |
LOCAL_TOKEN |
您的安全身份验证令牌 |
PORT |
8000 |
保存并重新启动Web应用程序。
🤖 与Copilot Studio集成
步骤1:创建自定义连接器YAML
创建 spotify-mcp.yaml:
swagger: '2.0'
info:
title: Spotify MCP
description: MCP server for Spotify artist data
version: 1.0.0
host: your-app-name.azurewebsites.net
basePath: /
schemes:
- https
consumes:
- application/json
produces:
- application/json
paths:
/mcp:
post:
summary: Invoke Spotify MCP Server
x-ms-agentic-protocol: mcp-streamable-1.0
operationId: InvokeSpotifyMCP
responses:
'200':
description: Success
securityDefinitions:
api_key:
type: apiKey
in: header
name: Authorization
security:
- api_key: []
步骤2:创建自定义连接器
- 首选 电源应用程序 → 自定义连接器
- 点击 +新的自定义连接器 → 导入OpenAPI文件
- 上传您的
spotify-mcp.yaml - 命名它: Spotify MCP
- 在 安全 选项卡:
- 身份验证类型: API密钥
- 参数名称:
Authorization - 参数位置:
Header
- 点击 创建连接器
步骤3:添加到Copilot Studio
- 打开 Copilot工作室
- 创建或打开您的代理
- 首选 工具 → 添加工具 → 新工具 → 模型上下文协议
- 填写:
- 服务器名称: Spotify MCP
- 服务器描述: 检索Spotify艺术家信息、热门曲目和专辑
- 服务器URL:
https://your-app-name.azurewebsites.net/mcp - 身份验证: API密钥
- 与以下对象建立连接:
Bearer your_LOCAL_TOKEN
步骤4:测试您的代理
尝试以下提示以测试所有不同的工具:
艺术家搜索:
- “在Spotify上搜索Billie Eilish”
- “找到艺术家德雷克”
曲目搜索:
- “寻找the Weeknd的歌曲《Blinding Lights》”
- “寻找Post Malone的足迹”
艺术家信息:
- “跟我说说泰勒·斯威夫特——她创作了哪些流派?”
- “爱莉安娜·格兰德有多少粉丝?”
热门曲目和专辑:
- “获得泰勒·斯威夫特的热门歌曲”
- “给我看看The Weeknd的专辑”
相关艺术家:
- “查找与Billie Eilish相似的艺术家”
- “像德雷克这样的艺术家是谁?”
音频分析:
- “Blinding Lights的节奏和能量是多少?”(您需要曲目ID)
- “分析曲目0VjIjW4GlUZAMYd2vXMi3b的音频特性”
- “这条赛道既能跳舞又充满活力吗?”
详细信息:
- “获取曲目ID 0VjIjW4GlUZAMYd2vXMi3b的完整详细信息”
- “跟我说说《午夜》这张专辑”
💡 用例
借助11个强大的Spotify工具,您的Copilot可以处理复杂的音乐查询:
🎯 音乐探索
- “查找与《Blinding Lights》类似的歌曲”
- “像Billie Eilish这样的艺术家是谁?”
- “搜索欢快的舞曲”
📊 音乐分析
- “这条赛道的能量水平和节奏是多少?”
- “比较三首不同歌曲的舞蹈性”
- “这首歌是原声的还是电子的?”
🎤 艺术家研究
- “告诉我泰勒·斯威夫特的流派和受欢迎程度”
- “德雷克有多少追随者?”
- “The Weeknd的前五首歌是什么?”
📀 专辑探索
- “显示专辑《午夜》中的所有曲目”
- “Ariana Grande发行了哪些专辑?”
- “获取此相册的详细信息”
🎵 轨道发现
- 寻找泰勒·斯威夫特的歌曲《反英雄》
- “搜索标题中带有‘love’的曲目”
- “获得这首歌的30秒预览”
🔗 推荐链
您的Copilot可以将多个工具链接在一起:
- 寻找艺术家→ 获取他们的热门曲目→ 分析其音频特性
- 查找相册→ 获取所有曲目→ 比较他们的能量水平
- 搜索艺术家→ 寻找相似的艺术家→ 获取他们的热门曲目
🛠️ 可用工具
1. search_artist_by_name
按名称在Spotify上搜索艺术家。
参数:
artist_name(string):要搜索的艺术家的名称
例子:
{
"artist_name": "Taylor Swift"
}
退货: 最多5位匹配的艺术家及其Spotify ID、图像和流行度评分。
2. search_tracks
在Spotify上按姓名、艺术家或两者搜索曲目。
参数:
query(字符串):搜索查询(曲目名称、艺术家或组合)limit(整数,可选):最大结果数(1-50,默认值:10)
例子:
{
"query": "Blinding Lights The Weeknd",
"limit": 5
}
退货: 使用姓名、艺术家、相册和预览URL跟踪搜索结果。
3. get_artist_top_tracks
获取Spotify艺术家的热门曲目。
参数:
artist_id(string):艺术家的Spotify ID
例子:
{
"artist_id": "06HL4z0CvFAxyc27GXpf02"
}
退货: 艺术家最受欢迎的曲目列表。
4. get_artist_albums
为Spotify艺术家获取专辑。
参数:
artist_id(string):艺术家的Spotify ID
例子:
{
"artist_id": "06HL4z0CvFAxyc27GXpf02"
}
退货: 包含发行日期和图片的专辑列表(最多10张)。
5. get_artist_info
获取有关Spotify艺术家的详细信息。
参数:
artist_id(string):艺术家的Spotify ID
例子:
{
"artist_id": "06HL4z0CvFAxyc27GXpf02"
}
退货: 艺术家详细信息包括:
- 类型
- 人气评分(0-100)
- 关注者数量
- 艺术家图片
- Spotify URL
6. get_related_artists
根据Spotify的推荐算法,获取与给定艺术家相似的艺术家。
参数:
artist_id(string):艺术家的Spotify ID
例子:
{
"artist_id": "06HL4z0CvFAxyc27GXpf02"
}
退货: 最多20位类似艺术家的名单。
7. get_track_audio_features
获取曲目的音频分析功能(能量、可跳舞性、节奏等)。
参数:
track_id(string):曲目的Spotify ID
例子:
{
"track_id": "0VjIjW4GlUZAMYd2vXMi3b"
}
退货: 音频功能包括:
- 舞蹈性 (0.0-1.0):多适合跳舞啊
- 能量 (0.0-1.0):强度和活动
- 钥匙 (0-11):音乐键(0=C,1=C#等)
- 响度 (dB):整体响度
- 模式 (0-1):大(1)或小(0)
- 哑口无言 (0.0-1.0):口语的存在
- 声学 (0.0-1.0):声学与电学
- 乐器 (0.0-1.0):声乐vs器乐
- 活性 (0.0-1.0):现场观众在场
- 价 (0.0-1.0):音乐的积极性/幸福感
- 速度 (BPM):每分钟节拍数
- 持续时间_ms:轨道长度(毫秒)
8. get_track_details
获取特定赛道的详细信息。
参数:
track_id(string):曲目的Spotify ID
例子:
{
"track_id": "0VjIjW4GlUZAMYd2vXMi3b"
}
退货: 完整的轨道信息,包括:
- 曲目名称
- 艺术家
- 专辑
- 持续时间
- 人气评分
- 预览URL(30秒剪辑)
- 显式内容标志
- 可用市场
9. get_album_details
获取有关Spotify专辑的详细信息。
参数:
album_id(string):专辑的Spotify ID
例子:
{
"album_id": "4yP0hdKOZPNshxUOjY0cZj"
}
退货: 专辑详细信息包括:
- 专辑名称
- 艺术家
- 发布日期
- 轨道总数
- 完整曲目列表
- 相册图片
- 人气评分
- 标签和版权信息
10. get_multiple_tracks_audio_features
一次获取多首曲目的音频功能(批量操作)。
参数:
track_ids(string):以逗号分隔的Spotify曲目ID列表(最多100个)
例子:
{
"track_ids": "0VjIjW4GlUZAMYd2vXMi3b,4cOdK2wGLETKBW3PvgPWqT,3n3Ppam7vgaVa1iaRUc9Lp"
}
退货: 所有请求曲目的音频功能阵列,可用于比较多首歌曲。
11. get_artist_albums (增强)
使用过滤选项为Spotify艺术家获取专辑。
参数:
artist_id(string):艺术家的Spotify ID
例子:
{
"artist_id": "06HL4z0CvFAxyc27GXpf02"
}
退货: 包含元数据的相册列表。
📁 项目结构
spotify-mcp/
├── .github/
│ └── workflows/
│ └── main_spotify-mcp1611.yml # GitHub Actions deployment
├── server.py # Main MCP server
├── requirements.txt # Python dependencies
├── .env # Environment variables (local)
├── .gitignore # Git ignore rules
└── README.md # This file
🔒 安全
身份验证流程
- 客户端请求 → 包含
Authorization: Bearer <token>头球 - 中间件检查 → 根据验证令牌
LOCAL_TOKEN - 如果有效 → 请求继续到MCP服务器
- 如果无效 → 返回401未经授权
当前实施(开发/演示)
当前的实现使用了 简单的Bearer代币 认证适用于:
- ✅ 开发和测试
- ✅ 单租户部署
- ✅ 公司内部使用,网络隔离
- ✅ 概念验证演示
限制:
- ❌ 所有用户的单一共享令牌
- ❌ 没有用户特定的访问控制
- ❌ 无令牌过期
- ❌ 没有用户操作的审核日志记录
🔐 生产安全最佳实践
1. 实现OAuth 2.0/OpenID连接
对于生产,用适当的OAuth替换简单的Bearer令牌:
from fastmcp.server.auth import AzureOAuthProvider
# Use Azure Entra ID (recommended for Microsoft ecosystem)
auth = AzureOAuthProvider(
tenant_id=os.getenv("AZURE_TENANT_ID"),
client_id=os.getenv("AZURE_CLIENT_ID"),
client_secret=os.getenv("AZURE_CLIENT_SECRET"),
redirect_uri=os.getenv("OAUTH_REDIRECT_URI"),
scopes=["openid", "profile", "email"]
)
mcp = FastMCP("spotify-mcp", auth=auth)
支持的身份提供程序:
- Azure Entra ID(微软365)
- Google 工作区
- GitHub
- 身份验证0
- WorkOS
- AWS Cognito
优点:
- ✅ 用户特定身份验证
- ✅ 自动令牌过期和刷新
- ✅ 单点登录(SSO)支持
- ✅ 每用户审计跟踪
2. 使用Azure密钥库获取秘密
切勿在生产环境变量中存储机密。
设置Azure密钥库:
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
# Connect to Key Vault
credential = DefaultAzureCredential()
vault_url = f"https://{os.getenv('KEY_VAULT_NAME')}.vault.azure.net"
client = SecretClient(vault_url=vault_url, credential=credential)
# Retrieve secrets
SPOTIFY_CLIENT_ID = client.get_secret("SpotifyClientId").value
SPOTIFY_CLIENT_SECRET = client.get_secret("SpotifyClientSecret").value
配置Azure Web应用程序:
- 启用 管理身份 在您的Web应用程序上
- 授予托管身份访问密钥库的权限
- 参考机密使用
@Microsoft.KeyVault(...)语法
3. 实施速率限制
使用限速中间件防止滥用:
from fastmcp.server.middleware import RateLimitMiddleware
mcp.add_middleware(
RateLimitMiddleware(
max_requests=100,
window_seconds=60,
by_client_id=True # Rate limit per client
)
)
建议限值:
- 发展: 每个客户端每分钟100个请求
- 生产: 每个客户端每分钟1000个请求
- 公共API: 每个IP地址每分钟60个请求
4. 添加请求日志和审计跟踪
跟踪API在安全和合规方面的所有使用情况:
from fastmcp.server.middleware import LoggingMiddleware
import logging
# Configure structured logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('audit.log'),
logging.StreamHandler()
]
)
class AuditMiddleware(Middleware):
async def on_call_tool(self, context: MiddlewareContext, call_next):
user_id = context.request_context.user_id # From OAuth
tool_name = context.params.get("name")
logger.info(f"User {user_id} called tool {tool_name}")
result = await call_next(context)
return result
mcp.add_middleware(AuditMiddleware())
登录Azure应用程序洞察:
from opencensus.ext.azure.log_exporter import AzureLogHandler
logger.addHandler(AzureLogHandler(
connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
))
5. 实现基于角色的访问控制(RBAC)
控制哪些用户可以访问哪些工具:
from fastmcp.server.middleware import Middleware
class RBACMiddleware(Middleware):
ADMIN_TOOLS = {"get_multiple_tracks_audio_features"}
async def on_call_tool(self, context: MiddlewareContext, call_next):
user_roles = context.request_context.user_roles # From OAuth token
tool_name = context.params.get("name")
# Restrict admin-only tools
if tool_name in self.ADMIN_TOOLS and "admin" not in user_roles:
return ToolResult(
content=[{"type": "text", "text": "Unauthorized: Admin access required"}]
)
return await call_next(context)
mcp.add_middleware(RBACMiddleware())
6. 启用Azure Web应用程序身份验证
使用Azure的内置身份验证(EasyAuth):
在Azure门户中:
- 转到您的Web应用程序→ 认证
- 点击 添加身份提供者
- 选择 微软 (或其他供应商)
- 配置:
- 限制访问: 需要身份验证
- 未经身份验证的请求: HTTP 401
- 令牌存储: 启用
优点:
- ✅ 无需更改代码
- ✅ 在平台级别处理身份验证
- ✅ 适用于Copilot Studio的OAuth流程
- ✅ 自动令牌验证
7. 使用基于环境的配置
单独的dev/stating/prod配置:
import os
ENV = os.getenv("ENVIRONMENT", "development")
if ENV == "production":
# Strict security settings
REQUIRE_HTTPS = True
MASK_ERROR_DETAILS = True
ENABLE_RATE_LIMITING = True
LOG_LEVEL = "WARNING"
elif ENV == "staging":
REQUIRE_HTTPS = True
MASK_ERROR_DETAILS = True
ENABLE_RATE_LIMITING = False
LOG_LEVEL = "INFO"
else: # development
REQUIRE_HTTPS = False
MASK_ERROR_DETAILS = False
ENABLE_RATE_LIMITING = False
LOG_LEVEL = "DEBUG"
mcp = FastMCP(
"spotify-mcp",
mask_error_details=MASK_ERROR_DETAILS
)
8. Spotify API安全证书
最佳实践:根据环境使用服务主体
- 为开发/暂存/生产创建单独的Spotify应用程序
- 定期轮换凭证(每90天一次)
- 监视异常的API使用模式
实施令牌轮换:
import time
from threading import Lock
class SpotifyTokenManager:
def __init__(self):
self.token = None
self.expiry = 0
self.lock = Lock()
def get_token(self) -> str:
with self.lock:
if time.time() >= self.expiry:
self.refresh_token()
return self.token
def refresh_token(self):
# Get new token from Spotify
resp = requests.post(...)
self.token = resp.json()["access_token"]
self.expiry = time.time() + resp.json()["expires_in"] - 60
token_manager = SpotifyTokenManager()
9. 正确启用CORS
只允许生产中的特定来源:
from starlette.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=[
"https://copilotstudio.microsoft.com",
"https://your-company-domain.com"
], # Never use ["*"] in production
allow_credentials=True,
allow_methods=["POST"],
allow_headers=["Authorization", "Content-Type"],
)
10. 实施健康检查和监测
为Azure监控添加运行状况终结点:
@mcp.custom_route("/health", methods=["GET"])
async def health_check():
# Check Spotify API connectivity
token = get_spotify_token()
if not token:
return JSONResponse(
status_code=503,
content={"status": "unhealthy", "reason": "Cannot authenticate with Spotify"}
)
return JSONResponse(
content={
"status": "healthy",
"version": "2.0.0",
"tools_count": 11
}
)
在Azure中配置:
- 设置健康检查路径:
/health - 启用 应用洞察
- 设置 警报 对于失败
11. 数据隐私和合规
GDPR合规性:
- 仅记录必要的用户信息
- 实施数据保留策略
- 提供用户数据导出/删除
审核日志清理示例:
import datetime
def cleanup_old_logs():
"""Delete logs older than 90 days (GDPR requirement)"""
retention_days = 90
cutoff_date = datetime.datetime.now() - datetime.timedelta(days=retention_days)
# Delete logs older than cutoff_date
🛡️ 生产安全检查表
上线前:
- []用OAuth 2.0替换简单的Bearer令牌
- []将所有机密移动到Azure密钥库
- []启用Azure Web应用程序托管身份
- []配置Azure Web应用程序身份验证(EasyAuth)
- []实施限速(100-1000要求/分钟)
- []使用Application Insights添加审计日志记录
- []为敏感工具设置RBAC
- []仅启用特定来源的CORS
- []添加健康检查端点
- []配置故障警报
- []测试令牌过期和刷新
- []实现错误屏蔽(
mask_error_details=True) - []为每个环境设置单独的Spotify应用程序
- []仅启用HTTPS(禁用HTTP)
- []配置Web App防火墙规则
- []设置Azure Monitor仪表板
- []记录事件响应程序
- []执行安全渗透测试
- []如果处理PHI/PII,请审查并签署BAA
📋 合规注意事项
数据处理
- Spotify数据: 受Spotify服务条款约束
- 用户数据: 可能需要遵守GDPR/CCPA
- 审核日志: 保留以符合要求(通常为90天至7年)
推荐政策
- 数据保留政策 -日志和缓存数据保留多长时间
- 事件响应计划 -如果发生安全漏洞怎么办
- 访问控制策略 -谁可以访问哪些工具
- API使用策略 -费率限制和可接受的使用
🔗 安全资源
最佳实践总结
✅ 发展: 简单承载令牌(当前实现)
✅ 分期: OAuth+密钥库+速率限制
✅ 生产: OAuth+密钥库+速率限制+RBAC+审计日志+监控
🧪 测试
卷曲测试
# Initialize session
curl -X POST https://your-app-name.azurewebsites.net/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer your_token" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}},"id":1}'
Copilot Studio中的测试
- 打开你的代理 测试 窗格
- 问:“在Spotify上搜索德雷克”
- 检查Azure日志以了解:
✅ Token validation successful INFO:mcp.server.lowlevel.server:Processing request of type CallToolRequest
📊 监控
查看Azure日志
az webapp log tail --name your-app-name --resource-group your-rg
或者在Azure门户中:
- 转到您的Web应用程序
- 监控 → 日志流
预期日志输出
🎵 Spotify MCP Server starting...
Port: 8000
Endpoint: /mcp
Authentication: Bearer token required
Available Tools: 11
INFO: Started server process
INFO: Uvicorn running on http://0.0.0.0:8000
当请求进来时:
✅ Token validation successful
INFO:mcp.server.lowlevel.server:Processing request of type CallToolRequest
🐛 故障排除
问题:“未经授权”错误
原因: Bearer令牌丢失或无效
解决方案:
- 检查你的
LOCAL_TOKEN在Azure配置中 - 验证Copilot Studio中的连接是否使用:
Bearer your_token - 确保令牌中没有多余的空格
问题:“Spotify身份验证失败”
原因: Spotify凭据无效
解决方案:
- 验证
SPOTIFY_CLIENT_ID和SPOTIFY_CLIENT_SECRET在Azure中 - 检查凭据 Spotify仪表板
- 更新后重新启动Azure Web应用程序
问题:Copilot Studio中未显示工具
原因: MCP服务器未正确连接
解决方案:
- 验证服务器URL是否正确
- 带有卷曲的测试终点
- 检查Azure日志是否有错误
- 在Copilot Studio中重建连接
🎼 Spotify API使用的功能
此MCP服务器利用以下Spotify Web API端点:
| 端点 | 工具 | 速率限制 |
|---|---|---|
/search |
search_artist_by_name, search_tracks |
标准 |
/artists/{id} |
get_artist_info |
标准 |
/artists/{id}/top-tracks |
get_artist_top_tracks |
标准 |
/artists/{id}/albums |
get_artist_albums |
标准 |
/artists/{id}/related-artists |
get_related_artists |
标准 |
/tracks/{id} |
get_track_details |
标准 |
/albums/{id} |
get_album_details |
标准 |
/audio-features/{id} |
get_track_audio_features |
标准 |
/audio-features?ids= |
get_multiple_tracks_audio_features |
标准 |
注: 所有端点都使用客户端凭据流,不需要用户身份验证。
🔄 API费率限制
- Spotify API: 费率限制适用于每个客户ID
- 建议: 对频繁请求的数据实施缓存
- 最佳实践: 使用批处理端点(如
get_multiple_tracks_audio_features)如果可能的话
📚 资源
🤝 贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
👤 作者
Ivy Fiecas Borjal
🙏 致谢
- 内置于 FastMCP
- 由...驱动 Spotify Web API
- 部署于 Azure应用服务
- 与集成 微软复制品工作室
📺 教程
该项目基于以下概念构建:
- 如何构建基于Python的自定义HTTP MCP服务器并将其与Copilot Studio连接 Rafsan Huseynov和Maciek Jarka
- 观看:[https://youtu.be/5gWBoc5Rx3w?si=ps4Q_uqzqOJBz2iG](https://youtu.be/5gWBoc5Rx3w?si=ps4Q_uqzqOJBz2iG)