[project] name = "mcp-server-pronunciation" version = "0.3.0" description = "Local MCP voice coach for Codex, Claude, and other MCP clients with English pronunciation, grammar, fluency, phoneme-level feedback, and practice drills" readme = "README.md" license = "MIT" requires-python = ">=3.11" authors = [ { name = "JuhongPark" }, ] keywords = [ "mcp", "model-context-protocol", "voice", "conversation", "pronunciation", "english-learning", "language-feedback", "whisper", "speech", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Education", "Topic :: Multimedia :: Sound/Audio :: Speech", ] dependencies = [ "mcp[cli]>=1.2,<2", "pydantic>=2,<3", "faster-whisper>=1.0,<2", "sounddevice>=0.4,<0.6", "numpy>=1.24,<3", # Pronunciation analysis: "cmudict>=1.0", # offline ARPAbet dictionary (~10MB) "g2p-en>=2.1", # neural G2P fallback for OOV words (~30MB) "librosa>=0.10,<1", # prosody: f0 + RMS via pyin ] [project.optional-dependencies] # Optional: wav2vec2 forced alignment for Whisper-bias mitigation. When # installed, `assess` / `practice` run CTC forced alignment against the # reference text to verify which words the user actually produced, even # when Whisper misheard rare proper nouns or domain terms. Adds ~200MB of # torch CPU wheels plus a one-time ~360MB wav2vec2 weight download. phoneme = [ "torch>=2.2", "torchaudio>=2.2", ] dev = [ "pytest>=8.0", "ruff>=0.4", ] [project.scripts] mcp-server-pronunciation = "mcp_server_pronunciation:cli_main" [project.urls] Homepage = "https://github.com/JuhongPark/mcp-server-pronunciation" Repository = "https://github.com/JuhongPark/mcp-server-pronunciation" Issues = "https://github.com/JuhongPark/mcp-server-pronunciation/issues" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/mcp_server_pronunciation"] [tool.hatch.build.targets.wheel.force-include] "src/mcp_server_pronunciation/record_mic.ps1" = "mcp_server_pronunciation/record_mic.ps1" [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] target-version = "py311" line-length = 100