windows-mcp 0.6.1__tar.gz → 0.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/PKG-INFO +3 -1
  2. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/README.md +2 -0
  3. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/manifest.json +1 -1
  4. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/pyproject.toml +1 -1
  5. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/server.json +2 -2
  6. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/__main__.py +10 -4
  7. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/desktop/service.py +8 -2
  8. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/uv.lock +1 -1
  9. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/.github/FUNDING.yml +0 -0
  10. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/.gitignore +0 -0
  11. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/.mcpbignore +0 -0
  12. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/.python-version +0 -0
  13. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/CONTRIBUTING.md +0 -0
  14. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/LICENSE.md +0 -0
  15. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/SECURITY.md +0 -0
  16. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/assets/logo.png +0 -0
  17. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/assets/screenshots/screenshot_1.png +0 -0
  18. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/assets/screenshots/screenshot_2.png +0 -0
  19. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/assets/screenshots/screenshot_3.png +0 -0
  20. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/__init__.py +0 -0
  21. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/analytics.py +0 -0
  22. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/desktop/__init__.py +0 -0
  23. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/desktop/config.py +0 -0
  24. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/desktop/views.py +0 -0
  25. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/__init__.py +0 -0
  26. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/cache_utils.py +0 -0
  27. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/config.py +0 -0
  28. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/service.py +0 -0
  29. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/utils.py +0 -0
  30. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/tree/views.py +0 -0
  31. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/__init__.py +0 -0
  32. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/controls.py +0 -0
  33. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/core.py +0 -0
  34. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/enums.py +0 -0
  35. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/events.py +0 -0
  36. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/uia/patterns.py +0 -0
  37. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/vdm/__init__.py +0 -0
  38. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/vdm/core.py +0 -0
  39. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/watchdog/__init__.py +0 -0
  40. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/watchdog/event_handlers.py +0 -0
  41. {windows_mcp-0.6.1 → windows_mcp-0.6.2}/src/windows_mcp/watchdog/service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: windows-mcp
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: Lightweight MCP Server for interacting with Windows Operating System.
5
5
  Project-URL: homepage, https://github.com/CursorTouch
6
6
  Author-email: Jeomon George <jeogeoalukka@gmail.com>
@@ -73,6 +73,8 @@ Description-Content-Type: text/markdown
73
73
  mcp-name: io.github.CursorTouch/Windows-MCP
74
74
 
75
75
  ## Updates
76
+ - v0.6.2: Extended boolean parameter compatibility and updated `manifest.json` for `mcpb` compatibility in Claude Desktop (Thanks to bryan-anthropic).
77
+ - v0.6.1: Fixed `Shell` tool output issues and improved boolean parameter compatibility (Thanks to @yakub268).
76
78
  - Windows-MCP reached `1M+ Users` in [Claude Desktop Extensiosn](https://claude.ai/directory).
77
79
  - Windows-MCP is now available on [PyPI](https://pypi.org/project/windows-mcp/) (thus supports `uvx windows-mcp`)
78
80
  - Windows-MCP is added to [MCP Registry](https://github.com/modelcontextprotocol/registry)
@@ -26,6 +26,8 @@
26
26
  mcp-name: io.github.CursorTouch/Windows-MCP
27
27
 
28
28
  ## Updates
29
+ - v0.6.2: Extended boolean parameter compatibility and updated `manifest.json` for `mcpb` compatibility in Claude Desktop (Thanks to bryan-anthropic).
30
+ - v0.6.1: Fixed `Shell` tool output issues and improved boolean parameter compatibility (Thanks to @yakub268).
29
31
  - Windows-MCP reached `1M+ Users` in [Claude Desktop Extensiosn](https://claude.ai/directory).
30
32
  - Windows-MCP is now available on [PyPI](https://pypi.org/project/windows-mcp/) (thus supports `uvx windows-mcp`)
31
33
  - Windows-MCP is added to [MCP Registry](https://github.com/modelcontextprotocol/registry)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": "0.2",
3
3
  "name": "Windows-MCP",
4
- "version": "0.6.0",
4
+ "version": "0.6.2",
5
5
  "description": "MCP Server that enables Claude to interact with Windows OS",
6
6
  "long_description": "Windows MCP is an open-source project that enables seamless integration between AI agents and the Windows operating system. Acting as an MCP server, it bridges the gap between large language models (LLMs) and the Windows OS, allowing agents to perform tasks such as **file navigation, application control, UI interaction, QA testing, and more**.\n\n**KEY FEATURES**\n- **Seamless Windows Integration**: Interacts natively with Windows UI elements, opens applications, controls windows, simulates user input, and more.\n- **Use Any LLM (Vision Optional)**: Does not rely on traditional computer vision techniques or fine-tuned models. Works with any LLM, reducing complexity and setup time.\n- **Rich Toolset for UI Automation**: Includes tools for keyboard and mouse control, window management, and capturing window or UI state.\n- **Lightweight & Open-Source**: Minimal dependencies with full source code available under the MIT license.\n- **Customizable & Extendable**: Easily adapt or extend tools to suit custom automation workflows or AI integrations.\n- **Real-Time Interaction**: Typical latency between actions ranges from `0.2` to `0.9` seconds, depending on system load, active applications, and LLM inference speed.\n\n**MINIMUM REQUIREMENTS**\n- Python 3.13 or higher\n- UV Package Manager\nThis MCP server requires UV, a fast Python package manager.\nInstallation:\n`curl -LsSf https://astral.sh/uv/install.sh | sh`\nFor detailed installation instructions, [see the UV documentation](https://github.com/astral-sh/uv)",
7
7
  "author": {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "windows-mcp"
3
- version = "0.6.1"
3
+ version = "0.6.2"
4
4
  description = "Lightweight MCP Server for interacting with Windows Operating System."
5
5
  authors = [
6
6
  { name = "Jeomon George", email = "jeogeoalukka@gmail.com" }
@@ -12,8 +12,8 @@
12
12
  {
13
13
  "registry_type": "pypi",
14
14
  "registry_base_url": "https://pypi.org",
15
- "identifier": "windows_mcp",
16
- "version": "0.5.4",
15
+ "identifier": "windows-mcp",
16
+ "version": "0.6.2",
17
17
  "runtime_hint": "uvx",
18
18
  "transport": {
19
19
  "type": "stdio"
@@ -97,7 +97,10 @@ def powershell_tool(command: str,timeout:int=10, ctx: Context = None) -> str:
97
97
  )
98
98
  )
99
99
  @with_analytics(analytics, "State-Tool")
100
- def state_tool(use_vision:bool=False,use_dom:bool=False, ctx: Context = None):
100
+ def state_tool(use_vision:bool|str=False,use_dom:bool|str=False, ctx: Context = None):
101
+ use_vision = use_vision is True or (isinstance(use_vision, str) and use_vision.lower() == 'true')
102
+ use_dom = use_dom is True or (isinstance(use_dom, str) and use_dom.lower() == 'true')
103
+
101
104
  # Calculate scale factor to cap resolution at 1080p (1920x1080)
102
105
  scale_width = MAX_IMAGE_WIDTH / screen_size.width if screen_size.width > MAX_IMAGE_WIDTH else 1.0
103
106
  scale_height = MAX_IMAGE_HEIGHT / screen_size.height if screen_size.height > MAX_IMAGE_HEIGHT else 1.0
@@ -201,7 +204,8 @@ def scroll_tool(loc:list[int]=None,type:Literal['horizontal','vertical']='vertic
201
204
  )
202
205
  )
203
206
  @with_analytics(analytics, "Move-Tool")
204
- def move_tool(loc:list[int], drag:bool=False, ctx: Context = None)->str:
207
+ def move_tool(loc:list[int], drag:bool|str=False, ctx: Context = None)->str:
208
+ drag = drag is True or (isinstance(drag, str) and drag.lower() == 'true')
205
209
  if len(loc) != 2:
206
210
  raise ValueError("loc must be a list of exactly 2 integers [x, y]")
207
211
  x,y=loc[0],loc[1]
@@ -256,7 +260,8 @@ def wait_tool(duration:int, ctx: Context = None)->str:
256
260
  )
257
261
  )
258
262
  @with_analytics(analytics, "Scrape-Tool")
259
- def scrape_tool(url:str,use_dom:bool=False, ctx: Context = None)->str:
263
+ def scrape_tool(url:str,use_dom:bool|str=False, ctx: Context = None)->str:
264
+ use_dom = use_dom is True or (isinstance(use_dom, str) and use_dom.lower() == 'true')
260
265
  if not use_dom:
261
266
  content=desktop.scrape(url)
262
267
  return f'URL:{url}\nContent:\n{content}'
@@ -284,7 +289,8 @@ def scrape_tool(url:str,use_dom:bool=False, ctx: Context = None)->str:
284
289
  )
285
290
  )
286
291
  @with_analytics(analytics, "Multi-Select-Tool")
287
- def multi_select_tool(locs:list[list[int]], press_ctrl:bool=True, ctx: Context = None)->str:
292
+ def multi_select_tool(locs:list[list[int]], press_ctrl:bool|str=True, ctx: Context = None)->str:
293
+ press_ctrl = press_ctrl is True or (isinstance(press_ctrl, str) and press_ctrl.lower() == 'true')
288
294
  desktop.multi_select(press_ctrl,locs)
289
295
  elements_str = '\n'.join([f"({loc[0]},{loc[1]})" for loc in locs])
290
296
  return f"Multi-selected elements at:\n{elements_str}"
@@ -46,7 +46,12 @@ class Desktop:
46
46
  self.tree=Tree(self)
47
47
  self.desktop_state=None
48
48
 
49
- def get_state(self,use_annotation:bool=True,use_vision:bool=False,use_dom:bool=False,as_bytes:bool=False,scale:float=1.0)->DesktopState:
49
+ def get_state(self,use_annotation:bool|str=True,use_vision:bool|str=False,use_dom:bool|str=False,as_bytes:bool|str=False,scale:float=1.0)->DesktopState:
50
+ use_annotation = use_annotation is True or (isinstance(use_annotation, str) and use_annotation.lower() == 'true')
51
+ use_vision = use_vision is True or (isinstance(use_vision, str) and use_vision.lower() == 'true')
52
+ use_dom = use_dom is True or (isinstance(use_dom, str) and use_dom.lower() == 'true')
53
+ as_bytes = as_bytes is True or (isinstance(as_bytes, str) and as_bytes.lower() == 'true')
54
+
50
55
  start_time = time()
51
56
 
52
57
  controls_handles=self.get_controls_handles() # Taskbar,Program Manager,Apps, Dialogs
@@ -418,7 +423,8 @@ class Desktop:
418
423
  else:
419
424
  pg.press(''.join(shortcut))
420
425
 
421
- def multi_select(self,press_ctrl:bool=False,locs:list[tuple[int,int]]=[]):
426
+ def multi_select(self,press_ctrl:bool|str=False,locs:list[tuple[int,int]]=[]):
427
+ press_ctrl = press_ctrl is True or (isinstance(press_ctrl, str) and press_ctrl.lower() == 'true')
422
428
  if press_ctrl:
423
429
  pg.keyDown('ctrl')
424
430
  for loc in locs:
@@ -1572,7 +1572,7 @@ wheels = [
1572
1572
 
1573
1573
  [[package]]
1574
1574
  name = "windows-mcp"
1575
- version = "0.6.0"
1575
+ version = "0.6.2"
1576
1576
  source = { editable = "." }
1577
1577
  dependencies = [
1578
1578
  { name = "click" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes