[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "fcp-mcp-server" version = "0.13.1" description = "MCP server for Final Cut Pro XML. 62 tools for timeline analysis, batch editing, QC, generation, multi-track support, NLE export, templates, media relink, .fcpxmld bundles, and real media analysis (silence detection + auto-removal, beat detection, local Whisper transcript editing) via Claude." readme = "README.md" license = {text = "MIT"} authors = [ {name = "DareDev256", email = "dare@jamesdare.com"} ] keywords = ["final-cut-pro", "mcp", "video-editing", "fcpxml", "ai"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Multimedia :: Video", ] requires-python = ">=3.10" dependencies = [ "mcp>=1.0.0,<2.0.0", "defusedxml>=0.7.1", "flet>=0.86.5", ] [project.optional-dependencies] intelligence = [ "librosa>=0.10.0", ] transcribe = [ "faster-whisper>=1.0.0", ] align = [ "whisperx>=3.0.0", ] diarization = [ "pyannote.audio>=3.1", ] dev = [ "pytest>=7.0.0", "pytest-asyncio>=0.21.0", "black>=23.0.0", "ruff>=0.1.0", ] [project.urls] Homepage = "https://github.com/DareDev256/fcp-mcp-server" Repository = "https://github.com/DareDev256/fcp-mcp-server.git" Issues = "https://github.com/DareDev256/fcp-mcp-server/issues" Changelog = "https://github.com/DareDev256/fcp-mcp-server/blob/main/CHANGELOG.md" [project.scripts] fcp-mcp-server = "server:main_sync" [tool.setuptools] py-modules = ["server"] [tool.setuptools.packages.find] where = ["."] include = ["fcpxml*"] [tool.black] line-length = 100 target-version = ['py310'] [tool.ruff] line-length = 100 exclude = ["docs/", "WHISPERX/"] [tool.ruff.lint] select = ["E", "F", "I", "N", "W"] ignore = ["E501"] [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" asyncio_default_test_loop_scope = "function" testpaths = ["tests"]