[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "winrdp-mcp" version = "0.1.4" description = "Zero-config MCP server to provision and fully administer any Windows RDP box (Win10/11/Server) — built for Claude & Claude Code." readme = "README.md" license = "MIT" requires-python = ">=3.10" authors = [{ name = "Sol" }] keywords = [ "mcp", "model-context-protocol", "windows", "rdp", "winrm", "ssh", "smb", "remote", "provisioning", "sysadmin", "automation", "claude", "claude-code", "llm", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: System Administrators", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: System :: Systems Administration", "Topic :: System :: Networking", "Topic :: Software Development :: Libraries :: Python Modules", ] # Core deps: controller mode needs nothing on the target box beyond WinRM/SSH/SMB. dependencies = [ "fastmcp>=2.3.0", "pywinrm>=0.4.3", "requests>=2.31.0", "requests-ntlm>=1.2.0", "paramiko>=3.4.0", "smbprotocol>=1.12.0", "cryptography>=42.0.0", "click>=8.1.0", ] [project.optional-dependencies] # Cold-start bootstrap of a box where WinRM/SSH are both OFF (runs a command over # DCOM/WMI or SMB service control to turn WinRM on). Heavy, so it is opt-in. bootstrap = ["impacket>=0.11.0"] # Rich interactive desktop UI control (click/type/OCR) via the vendored on-box agent. agent-ui = ["winremote-mcp>=0.4.0"] dev = ["ruff>=0.6.0", "pytest>=8.0.0"] [project.scripts] winrdp-mcp = "winrdp_mcp.__main__:cli" winrdp = "winrdp_mcp.__main__:cli" [project.urls] Homepage = "https://github.com/emog33k/winrdp-mcp" Repository = "https://github.com/emog33k/winrdp-mcp" Issues = "https://github.com/emog33k/winrdp-mcp/issues" Changelog = "https://github.com/emog33k/winrdp-mcp/blob/master/CHANGELOG.md" Documentation = "https://github.com/emog33k/winrdp-mcp/tree/master/docs" [tool.hatch.build.targets.wheel] packages = ["winrdp_mcp"] [tool.hatch.build.targets.wheel.force-include] "scripts" = "winrdp_mcp/_scripts" [tool.ruff] target-version = "py310" line-length = 120 [tool.ruff.lint] select = ["E", "F", "I", "W"] # Tools embed PowerShell/DSL payloads as single-line string literals; wrapping them to fit # a column limit hurts readability more than it helps, so line length is not enforced. ignore = ["E501"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] addopts = "-q"