[project] name = "pitch-mcp" version = "0.3.1" description = "MCP server for real-time pitch detection and score alignment using microphone input" readme = "README.md" authors = [ { name = "Music Assistant Contributors" }, ] license = { text = "MIT" } keywords = ["mcp", "pitch", "music", "choir", "audio", "musicxml"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Topic :: Multimedia :: Sound/Audio :: Analysis", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] requires-python = ">=3.12" dependencies = [ "mcp>=2.2.0,<3.0.0", "music21>=9.0.0", "librosa>=1.0.0", "numpy>=1.24.0", "scipy>=1.10.0", "sounddevice>=0.4.0", "dtaidistance>=2.4.0", "jsonschema>=4.20.0", ] [project.optional-dependencies] # crepe requires TensorFlow (~500MB). Install manually if needed: # pip install crepe tensorflow # Then set PITCH_BACKEND=crepe to activate. dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", ] [project.scripts] pitch-mcp = "pitch_mcp.server:main" [project.urls] Homepage = "https://github.com/raulkivi/sheet-music-mcp" Repository = "https://github.com/raulkivi/sheet-music-mcp" "Bug Tracker" = "https://github.com/raulkivi/sheet-music-mcp/issues" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.pytest.ini_options] asyncio_mode = "auto" markers = [ "integration: marks tests as slow integration tests that require real audio fixtures", "manual: marks tests that require a real microphone or audio loopback device", ]