MusicBrainz MCP Server
A comprehensive MCP server for querying the MusicBrainz database, providing tools to search for artists, releases, recordings, and browse music metadata.
README
MusicBrainz MCP Server
A comprehensive Model Context Protocol (MCP) server for querying the MusicBrainz database, built with FastMCP framework. This server provides seamless access to music metadata including artists, releases, recordings, and more through a standardized MCP interface.
🎵 Features
- 10 Comprehensive MCP Tools for music database queries
- Real-time MusicBrainz API Integration with rate limiting and error handling
- Async/Await Support for high-performance operations
- Comprehensive Caching System with configurable TTL
- Robust Error Handling with detailed error messages
- Flexible Configuration via environment variables or config files
- Production Ready with comprehensive testing (101 tests, 99% passing)
🚀 Quick Start
Prerequisites
- Python 3.8+
- Internet connection for MusicBrainz API access
Installation
- Clone the repository:
git clone <repository-url>
cd MusicBrainzMcp
- Create virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install dependencies:
pip install -e .
- Run the server:
python -m musicbrainz_mcp.main
The server will start and be available for MCP client connections.
🚀 Quick Start with Smithery.ai
The easiest way to use the MusicBrainz MCP Server is through smithery.ai:
- Visit smithery.ai and sign in
- Search for "MusicBrainz MCP Server" in the tool directory
- Configure your settings:
- User Agent:
YourApp/1.0.0 (your.email@example.com) - Rate Limit:
1.0(requests per second) - Timeout:
30.0(seconds)
- User Agent:
- Start querying music data instantly!
Popular Music Queries You Can Try
- Search for Taylor Swift:
search_artistwith query "Taylor Swift" - Find "Blinding Lights":
search_recordingwith query "Blinding Lights" - Browse recent releases:
browse_artist_releasesfor any artist - Get detailed info:
get_artist_detailswith any artist MBID
📖 Documentation
- API Reference - Complete documentation of all 10 MCP tools
- Configuration Guide - Environment variables and configuration options
- Usage Examples - Practical examples and tutorials
- Client Testing Guide - FastMCP client implementation and testing
- Test Results - Comprehensive test results (100% success rate)
- Deployment Guide - Production deployment instructions
🛠️ Available MCP Tools
| Tool | Description | Example Use Case |
|---|---|---|
search_artist |
Search for artists by name | Find "The Beatles" |
search_release |
Search for releases/albums | Find "Abbey Road" album |
search_recording |
Search for individual tracks | Find "Come Together" song |
search_release_group |
Search for release groups | Find album groups |
get_artist_details |
Get detailed artist info by MBID | Get Beatles discography |
get_release_details |
Get detailed release info | Get album track listing |
get_recording_details |
Get detailed recording info | Get song metadata |
browse_artist_releases |
Browse an artist's releases | List Beatles albums |
browse_artist_recordings |
Browse an artist's recordings | List Beatles songs |
lookup_by_mbid |
Generic lookup by MusicBrainz ID | Get any entity by ID |
⚙️ Configuration
Environment Variables
# MusicBrainz API Configuration
MUSICBRAINZ_USER_AGENT="YourApp/1.0.0" # Required: Your app identifier
MUSICBRAINZ_RATE_LIMIT="1.0" # Requests per second (default: 1.0)
MUSICBRAINZ_TIMEOUT="10.0" # Request timeout in seconds
# Caching Configuration
CACHE_ENABLED="true" # Enable/disable caching
CACHE_DEFAULT_TTL="300" # Cache TTL in seconds (5 minutes)
# Server Configuration
DEBUG="false" # Enable debug logging
Configuration File
Create config.json in the project root:
{
"api": {
"user_agent": "YourApp/1.0.0",
"rate_limit": 1.0,
"timeout": 10.0
},
"cache": {
"enabled": true,
"default_ttl": 300
},
"debug": false
}
💡 Usage Examples
Basic Artist Search
# Using MCP client to search for artists
result = await client.call_tool("search_artist", {
"params": {
"query": "The Beatles",
"limit": 10
}
})
Get Artist Details
# Get detailed information about an artist
result = await client.call_tool("get_artist_details", {
"params": {
"mbid": "b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d",
"inc": ["releases", "recordings"]
}
})
Browse Artist Releases
# Browse all releases by an artist
result = await client.call_tool("browse_artist_releases", {
"params": {
"artist_mbid": "b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d",
"limit": 20,
"release_type": ["album"],
"release_status": ["official"]
}
})
For more examples, see docs/examples.md.
🚀 Deployment
Docker Deployment
- Build the Docker image:
docker build -t musicbrainz-mcp .
- Run the container:
docker run -d \
--name musicbrainz-mcp \
-e MUSICBRAINZ_USER_AGENT="YourApp/1.0.0" \
-p 8000:8000 \
musicbrainz-mcp
Systemd Service
Create /etc/systemd/system/musicbrainz-mcp.service:
[Unit]
Description=MusicBrainz MCP Server
After=network.target
[Service]
Type=simple
User=musicbrainz
WorkingDirectory=/opt/musicbrainz-mcp
Environment=MUSICBRAINZ_USER_AGENT=YourApp/1.0.0
ExecStart=/opt/musicbrainz-mcp/venv/bin/python -m musicbrainz_mcp.main
Restart=always
[Install]
WantedBy=multi-user.target
Cloud Deployment
The server can be deployed on any cloud platform that supports Python applications:
- Heroku: Use the included
Procfile - AWS Lambda: Package as a serverless function
- Google Cloud Run: Use the Docker container
- Azure Container Instances: Deploy the Docker image
🧪 Testing
Run the comprehensive test suite:
# Run all tests
pytest
# Run with coverage
pytest --cov=musicbrainz_mcp
# Run only unit tests
pytest -m unit
# Run only integration tests
pytest -m integration
# Run with verbose output
pytest -v
Test Results:
- ✅ 101 total tests
- ✅ 100 passing, 1 skipped
- ✅ 99% success rate
- ✅ Zero failures, zero warnings
🛠️ Development
Setup Development Environment
- Clone and setup:
git clone <repository-url>
cd MusicBrainzMcp
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
- Install pre-commit hooks:
pre-commit install
- Run tests:
pytest
Project Structure
MusicBrainzMcp/
├── src/musicbrainz_mcp/ # Main package
│ ├── __init__.py
│ ├── main.py # Server entry point
│ ├── server.py # FastMCP server implementation
│ ├── musicbrainz_client.py # MusicBrainz API client
│ ├── models.py # Pydantic data models
│ ├── schemas.py # Response schemas
│ ├── config.py # Configuration management
│ ├── cache.py # Caching system
│ ├── exceptions.py # Custom exceptions
│ └── utils.py # Utility functions
├── tests/ # Test suite
│ ├── test_client.py # Client tests
│ ├── test_server.py # Server tests
│ ├── test_models.py # Model tests
│ ├── test_utils.py # Utility tests
│ ├── test_integration.py # Integration tests
│ └── mock_data.py # Test data
├── docs/ # Documentation
├── examples/ # Usage examples
└── pyproject.toml # Project configuration
🔧 Troubleshooting
Common Issues
1. Rate Limit Errors
MusicBrainzRateLimitError: Rate limit exceeded
- Solution: Reduce the
MUSICBRAINZ_RATE_LIMITvalue or wait before retrying - Default: 1 request per second (MusicBrainz recommendation)
2. Network Timeout
MusicBrainzAPIError: Request timeout
- Solution: Increase
MUSICBRAINZ_TIMEOUTvalue or check network connectivity - Default: 10 seconds
3. Invalid MBID Format
ValidationError: Invalid MBID format
- Solution: Ensure MBIDs are valid UUID format (e.g.,
b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d)
4. Missing User Agent
MusicBrainzAPIError: User agent required
- Solution: Set
MUSICBRAINZ_USER_AGENTenvironment variable
Debug Mode
Enable debug logging for troubleshooting:
export DEBUG=true
python -m musicbrainz_mcp.main
Health Check
Test server connectivity:
# Test basic connectivity
result = await client.call_tool("search_artist", {
"params": {"query": "test", "limit": 1}
})
🤝 Contributing
We welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes with proper tests
- Run the test suite:
pytest - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Development Guidelines
- Code Style: Follow PEP 8 and use type hints
- Testing: Add tests for new functionality
- Documentation: Update docs for API changes
- Commit Messages: Use conventional commit format
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- MusicBrainz - For providing the comprehensive music database
- FastMCP - For the excellent MCP framework
- Model Context Protocol - For the standardized protocol
📞 Support
- Documentation: docs/
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with ❤️ for the music community This server provides comprehensive access to music metadata including artists, albums, recordings, releases, and related information through a standardized MCP interface.
Features
- 🎵 Comprehensive Music Data: Access artists, albums, recordings, releases, and more
- 🚀 FastMCP Framework: Built on the robust FastMCP framework for reliable MCP protocol handling
- 🔍 Powerful Search: Search across all MusicBrainz entity types with flexible query options
- 📊 Rich Metadata: Get detailed information including relationships, tags, and ratings
- ⚡ Async Performance: Non-blocking async operations for optimal performance
- 🛡️ Rate Limiting: Built-in compliance with MusicBrainz API guidelines
- 🧪 Well Tested: Comprehensive test suite with high code coverage
- 📚 Great Documentation: Detailed docs with examples and API reference
Quick Start
Installation
# Clone the repository
git clone https://github.com/yourusername/musicbrainz-mcp.git
cd musicbrainz-mcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -e ".[dev]"
Running the Server
# Start the MCP server
musicbrainz-mcp
# Or run directly with Python
python -m musicbrainz_mcp.server
Basic Usage
The server provides several MCP tools for querying MusicBrainz:
search_artist- Search for artists by namesearch_release- Search for releases/albumssearch_recording- Search for recordings/tracksget_artist_details- Get detailed artist informationget_release_details- Get detailed release informationlookup_by_mbid- Direct lookup using MusicBrainz IDs
MCP Tools
search_artist
Search for artists by name or query string.
Parameters:
query(string): Search query for artist namelimit(integer, optional): Maximum number of results (default: 25)offset(integer, optional): Offset for pagination (default: 0)
Example:
{
"query": "The Beatles",
"limit": 10
}
search_release
Search for releases (albums, singles, etc.) by title or artist.
Parameters:
query(string): Search query for release titleartist(string, optional): Filter by artist namelimit(integer, optional): Maximum number of results (default: 25)offset(integer, optional): Offset for pagination (default: 0)
search_recording
Search for recordings (individual tracks) by title or artist.
Parameters:
query(string): Search query for recording titleartist(string, optional): Filter by artist namelimit(integer, optional): Maximum number of results (default: 25)offset(integer, optional): Offset for pagination (default: 0)
get_artist_details
Get detailed information about a specific artist.
Parameters:
mbid(string): MusicBrainz ID of the artistinclude(array, optional): Additional data to include (releases, recordings, etc.)
get_release_details
Get detailed information about a specific release.
Parameters:
mbid(string): MusicBrainz ID of the releaseinclude(array, optional): Additional data to include (tracks, artist-credits, etc.)
lookup_by_mbid
Direct lookup of any entity by its MusicBrainz ID.
Parameters:
mbid(string): MusicBrainz IDentity_type(string): Type of entity (artist, release, recording, etc.)include(array, optional): Additional data to include
Configuration
The server can be configured through environment variables:
MUSICBRAINZ_USER_AGENT: Custom User-Agent for API requestsMUSICBRAINZ_RATE_LIMIT: Rate limit in requests per second (default: 1.0)MUSICBRAINZ_TIMEOUT: Request timeout in seconds (default: 30)MUSICBRAINZ_BASE_URL: Base URL for MusicBrainz API (default: https://musicbrainz.org/ws/2)
Development
Setup Development Environment
# Install development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
# Run tests with coverage
pytest --cov=musicbrainz_mcp --cov-report=html
# Format code
black src tests
ruff check src tests
# Type checking
mypy src
Project Structure
musicbrainz-mcp/
├── src/musicbrainz_mcp/
│ ├── __init__.py # Package initialization
│ ├── server.py # Main MCP server implementation
│ ├── musicbrainz_client.py # MusicBrainz API client
│ ├── models.py # Pydantic data models
│ ├── tools.py # MCP tool definitions
│ ├── utils.py # Utility functions
│ ├── config.py # Configuration management
│ └── exceptions.py # Custom exceptions
├── tests/ # Test suite
├── docs/ # Documentation
├── examples/ # Usage examples
└── pyproject.toml # Project configuration
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for your changes
- Run the test suite (
pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- MusicBrainz for providing the comprehensive music database
- FastMCP for the excellent MCP framework
- Model Context Protocol for the standardized protocol
Support
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。