[project] name = "mcp-walmart-ads" version = "0.5.0" description = "MCP server for Walmart Connect Ads, Sam's Club Sponsored Ads, and Walmart Marketplace APIs" readme = "README.md" keywords = [ "walmart", "walmart-connect", "ads", "marketplace", "sams-club", "mcp", "api", ] license = { text = "MIT" } classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries :: Python Modules", ] requires-python = ">=3.13" dependencies = [ "mcp[cli]>=2.2.0", "httpx>=0.28.0", "cryptography>=50.0.0", # 3.30 is where lock_descriptor landed; the spec-refresh lease needs it to # lock a descriptor we opened, which FileLock cannot do without truncating. "filelock>=3.30", ] [project.scripts] mcp-walmart-ads = "mcp_walmart_ads.server:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/mcp_walmart_ads"] [dependency-groups] # Floors match what CI runs: an older ruff or pyright disagrees about clean # code, so a contributor would pass locally and fail the gate. dev = [ "pytest>=9.0.0", "pytest-asyncio>=1.3.0", "ruff>=0.16.0", "pyright>=1.1.408", ] # Offline spec tooling (scripts/); not needed at runtime. spec-build = [ "beautifulsoup4>=4.12.0", ] [tool.ruff] line-length = 100 target-version = "py313" [tool.ruff.lint] select = ["E", "F", "I", "UP"] [tool.pyright] pythonVersion = "3.13" typeCheckingMode = "standard" include = ["src", "tests"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]