[build-system] requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "mcptoon" version = "0.7.19" description = "MCP client for every AI agent, with no hand-written config. Sync MCP servers across agents. Token-efficient CLI: 99.2% fewer tokens on tool discovery. Zero dependencies." readme = "README.md" license = {text = "Apache-2.0"} authors = [{name = "Alex Chen"}] requires-python = ">=3.10" keywords = ["mcp", "cli", "token-efficient", "model-context-protocol", "agent", "llm"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Shells", ] dependencies = [] [project.urls] Homepage = "https://github.com/activeing123/mcptoon" Repository = "https://github.com/activeing123/mcptoon" Documentation = "https://github.com/activeing123/mcptoon#readme" Changelog = "https://github.com/activeing123/mcptoon/blob/main/CHANGELOG.md" Issues = "https://github.com/activeing123/mcptoon/issues" PyPI = "https://pypi.org/project/mcptoon/" [project.optional-dependencies] dev = ["pytest>=7.0", "pytest-cov", "ruff>=0.6"] [project.scripts] mcptoon = "mcptoon.cli:main" [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] target-version = "py310" src = ["src", "tests"] [tool.ruff.lint] # F821 = undefined-name (BUG: must be zero) # F841 = unused-variable (BUG) # B904 = raise-without-from (BUG) # F401 = unused-import (cleanliness) # UP = pyupgrade (modernize) # E = pycodestyle errors # W = pycodestyle warnings # SIM = simplification select = ["F821", "F841", "B904", "F401", "E", "W", "UP", "SIM"] ignore = [ "E501", # line-too-long (not enforced) "E741", # ambiguous-variable-name (l, I, O) "E402", # module-import-not-at-top (test files need sys.path setup) "SIM105", # suppressible-exception (contextlib.suppress less readable) "SIM117", # multiple-with-statements (readability) "SIM108", # if-else-block-instead-of-if-exp (readability) "SIM116", # if-else-block-instead-of-dict-lookup (readability) "SIM102", # collapsible-if (readability) "SIM103", # needless-bool (readability) "UP045", # non-pep604-annotation-optional (Optional[X] still valid) "UP036", # outdated-version-block "W293", # blank-line-with-whitespace ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["E402"]