[project]
name = "fal-mcp-server"
version = "1.18.0"
description = "MCP server for Fal.ai - Generate images, videos, music and audio with AI models"
readme = "README.md"
requires-python = ">=3.10"
license = {text = "MIT"}
keywords = ["mcp", "fal", "ai", "image-generation", "claude", "llm"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
dependencies = [
"mcp>=1.6.0",
"fal-client>=0.5.0",
"starlette>=0.40.0",
"uvicorn>=0.34.0",
"sse-starlette>=2.0.0",
"loguru>=0.7.0",
"pillow>=10.0.0",
"httpx>=0.27.0",
]
[project.urls]
homepage = "https://github.com/raveenb/fal-mcp-server"
repository = "https://github.com/raveenb/fal-mcp-server"
issues = "https://github.com/raveenb/fal-mcp-server/issues"
[project.scripts]
fal-mcp = "fal_mcp_server.server:main"
fal-mcp-http = "fal_mcp_server.server_http:main"
fal-mcp-dual = "fal_mcp_server.server_dual:main"
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"pytest-cov>=6.0.0",
"black>=24.0.0",
"ruff>=0.8.0",
"mypy>=1.13.0",
"types-aiofiles>=24.0.0",
"requests>=2.32.0",
"pyyaml>=6.0.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/fal_mcp_server"]
[tool.mypy]
python_version = "3.10"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_any_unimported = false
no_implicit_optional = true
check_untyped_defs = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
follow_imports = "normal"
ignore_missing_imports = true
[tool.black]
line-length = 88
target-version = ['py310']
[tool.ruff]
line-length = 88
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "B"]
ignore = ["E501"]
[tool.semantic_release]
version_toml = ["pyproject.toml:project.version"]
branch = "main"
upload_to_pypi = false # PyPI upload handled by separate publish.yml workflow
upload_to_release = true
build_command = "pip install build && python -m build"
commit_message = "chore(release): {version} [skip-release]"
[tool.semantic_release.commit_parser_options]
allowed_tags = ["feat", "fix", "perf", "refactor", "build", "chore", "ci", "docs", "style", "test"]
minor_tags = ["feat"]
patch_tags = ["fix", "perf", "refactor"]
[tool.semantic_release.changelog]
template_dir = ".github/templates"
changelog_file = "CHANGELOG.md"
[tool.semantic_release.remote]
name = "origin"
type = "github"
[tool.semantic_release.publish]
dist_glob_patterns = ["dist/*"]
upload_to_vcs_release = true