[build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [project] name = "jaimenbell-mcp-factory" version = "0.1.3" readme = "README.md" description = "Manifest-driven MCP server scaffolder and runtime hub for Claude tool integrations" requires-python = ">=3.12" dependencies = [ "pyyaml>=6.0", "jinja2>=3.1", # Floor is 1.7, not 1.0: the raw-SDK scaffold emits types.ToolAnnotations, # which does not exist before mcp 1.7.0 (verified against the 1.6.0 sdist). # Tool.title becomes a declared field at 1.10.0; on 1.7-1.9.4 Tool sets # extra="allow", so title rides through as an extra and still reaches the # wire. Ceiling stays <2.0: mcp 2.x implements protocol revision 2026-07-28 # (stateless core, mandatory server/discover) and is a separate migration. "mcp>=1.7,<2.0", ] [project.scripts] mcp-factory-hub = "mcp_factory.cli:run" [project.optional-dependencies] dev = ["pytest>=8.0", "pytest-cov", "fastmcp==3.4.2", "watchdog>=4.0"] # Only needed to run servers generated with runtime.style: fastmcp — the # factory itself (manifest/generator/hub) has no fastmcp import. # Pinned exact (not >=): fastmcp 4.0.0b1 is a beta (published 2026-07-28) # that breaks sampling/roots. Do not widen this to a floor pin without # validating against the new version first. fastmcp = ["fastmcp==3.4.2"] [tool.pytest.ini_options] testpaths = ["tests"] [tool.setuptools.packages.find] include = ["mcp_factory*"] [tool.setuptools.package-data] mcp_factory = ["templates/*.j2", "demo/*.yaml", "demo/*.py"]