[project] name = "ros-mcp" version = "3.0.1" description = "Connect AI Language Models with Robots on ROS using MCP" readme = "README.md" requires-python = ">=3.10" license = "Apache-2.0" authors = [ { name = "Rohit John Varghese"}, { name = "Jungsoo Lee"}, { name = "Youngmok Yun"}, { name = "Stefano Dalla Gasperina"} ] dependencies = [ "fastmcp>=2.11.3", "jsonschema>=4.25.1", "mcp[cli]>=1.13.0", "opencv-python>=4.11.0.86", "pillow>=11.3.0", "websocket-client>=1.8.0", ] [project.optional-dependencies] dev = [ "ruff", # single tool for linting & formatting "pytest", # for tests "pytest-timeout", # test timeouts ] [project.scripts] ros-mcp = "ros_mcp.main:main" [build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools] include-package-data = true packages = ["ros_mcp", "ros_mcp.tools", "ros_mcp.utils", "ros_mcp.prompts", "ros_mcp.resources", "config", "robot_specifications"] [tool.setuptools.package-data] robot_specifications = ["*.yaml"] [tool.setuptools.data-files] "." = ["server.json"] # ---------------- Ruff configuration ---------------- [tool.ruff] line-length = 100 target-version = "py310" # Linter config moved to new section [tool.ruff.lint] select = ["E", "F", "I"] # basic errors, pyflakes, import sorting ignore = ["E501"] # ignore long-line warnings (optional) # Formatter config stays here [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false docstring-code-format = true # ---------------- Pytest configuration ---------------- [tool.pytest.ini_options] testpaths = ["tests"] python_files = "test_*.py" python_classes = "Test*" python_functions = "test_*" addopts = "-v --tb=short -p no:launch_testing -p no:launch_ros -p no:ament_flake8 -p no:ament_copyright -p no:ament_lint -p no:ament_pep257 -p no:ament_xmllint" markers = [ "installation: installation tests using Docker containers", "integration: integration tests requiring Docker + ROS", "slow: marks tests as slow (deselect with '-m \"not slow\"')", ] # MCP Registry validation - required for PyPI package verification [tool.mcp] name = "io.github.robotmcp/ros-mcp-server"