[build-system] requires = ["setuptools>=84.0.0"] build-backend = "setuptools.build_meta" [project] name = "x-use-mcp" # Read from src/xuse/__init__.py so the package, the wheel, and the MCP # serverInfo can never disagree. See [tool.setuptools.dynamic] below. dynamic = ["version"] description = "MCP server for X (Twitter): browser research, inbox reads and reviewed publishing. No X API key required." readme = "README.md" requires-python = ">=3.11" license = "MIT" authors = [ {name = "Huzaifa Shoukat"}, ] keywords = ["mcp", "mcp-server", "model-context-protocol", "twitter", "x-twitter", "ai-agent", "browser-automation", "patchright", "claude", "codex"] classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", ] dependencies = [ "patchright>=1.49,<2", "selenium", "webdriver-manager", "fake-headers", "Pillow>=13", "pydantic>=2,<3", "openai", "requests", "python-dotenv", "undetected-chromedriver", "selenium-stealth", "typer>=0.12", "mcp>=2.3.0,<3", # v2 MCPServer API; ToolAnnotations and structuredContent ] [project.urls] Homepage = "https://github.com/ihuzaifashoukat/x-use" Documentation = "https://github.com/ihuzaifashoukat/x-use/blob/main/docs/README.md" Source = "https://github.com/ihuzaifashoukat/x-use" Issues = "https://github.com/ihuzaifashoukat/x-use/issues" Changelog = "https://github.com/ihuzaifashoukat/x-use/blob/main/CHANGELOG.md" Discussions = "https://github.com/ihuzaifashoukat/x-use/discussions" [project.optional-dependencies] playwright = ["playwright>=1.49,<2"] dev = [ "playwright>=1.49,<2", # compatibility comparison in browser fixtures "pytest>=8.4,<10", "pytest-asyncio>=1.2,<2", "pyyaml>=6.0.2,<7", # skills-pack tests parse actual YAML frontmatter "build>=1.2,<2", "twine>=7.0.0,<8", ] [project.scripts] x-use = "xuse.cli:app" # Registry runners invoke the package name without the interactive CLI subcommand. x-use-mcp = "xuse.cli:mcp" [tool.setuptools.dynamic] version = {attr = "xuse.__version__"} [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] xuse = ["skills_pack/*/SKILL.md"] [tool.uv] # The package version and description are dynamic build inputs. Track them so # an editable sync after a version bump cannot reuse stale distribution metadata. cache-keys = [{file = "pyproject.toml"}, {file = "src/xuse/__init__.py"}, {file = "README.md"}, {file = "LICENSE"}]