windows-mcp 0.6.1__py3-none-any.whl → 0.6.2__py3-none-any.whl

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.
windows_mcp/__main__.py CHANGED
@@ -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:
@@ -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)
@@ -1,9 +1,9 @@
1
1
  windows_mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- windows_mcp/__main__.py,sha256=_Zh_MBFb1sETzkVz-TSxMS1M6yz3Yb4UbFEJH2DKJNU,14547
2
+ windows_mcp/__main__.py,sha256=IEiOEC1DiVxvOFCg82fba-94TXQeqYGW0uC9dq5QqdI,15040
3
3
  windows_mcp/analytics.py,sha256=yir5IWAI_YN9dmy9KOVIRYsZbeAO12INcxvY2WJSWCU,6307
4
4
  windows_mcp/desktop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  windows_mcp/desktop/config.py,sha256=LxMWSyYOUfMKzkk5ts46dV1NrAnukS2zHjTfyEKRc-A,364
6
- windows_mcp/desktop/service.py,sha256=BAy13hqUktHhelqbqmC_13lp5eilSbu9OLB_PiDMra8,30433
6
+ windows_mcp/desktop/service.py,sha256=Vrq3tHYThWXuV50cj63JGzP-Mx22UiU5Rm0G2TUQiCc,30994
7
7
  windows_mcp/desktop/views.py,sha256=pkIJQrriAoKyCxdWP1li4MoThB_Us0xFn21Pbm7eHJ4,2265
8
8
  windows_mcp/tree/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  windows_mcp/tree/cache_utils.py,sha256=xuS4Gt96Az8eYoo9cu464NRZWuGQngDCgAhT2iYX-j8,5361
@@ -22,8 +22,8 @@ windows_mcp/vdm/core.py,sha256=E5GxlWAxrhXMZm635oXQ_vLFo0tBkPuM0JFwtW7nANE,22216
22
22
  windows_mcp/watchdog/__init__.py,sha256=ExC350_KZXwTENsLQfESSPUJZfwsEjrAvGtLRPCqqjk,31
23
23
  windows_mcp/watchdog/event_handlers.py,sha256=mHw2msgAjkGuYwTp-U6tYX-gL4S7N1J1HQNmyQ-sdVk,2052
24
24
  windows_mcp/watchdog/service.py,sha256=9Tpoq8Ma3MF0Zq7yJKkLOx8NCm4bcUeJY_P1GPkjeLk,9099
25
- windows_mcp-0.6.1.dist-info/METADATA,sha256=msCbxd1tnvZGVJNy5Dird6u7a6kGcxevuVwkFPXrQr0,14544
26
- windows_mcp-0.6.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
27
- windows_mcp-0.6.1.dist-info/entry_points.txt,sha256=wW8NcVQ_OJK5e5GemZSE_nOKyxfUtBPq2acFLszRwaw,58
28
- windows_mcp-0.6.1.dist-info/licenses/LICENSE.md,sha256=U1UM4Xi_IX-jHnHjGT0rETNia-Ck8gd92iSQMqQ6a8Y,1089
29
- windows_mcp-0.6.1.dist-info/RECORD,,
25
+ windows_mcp-0.6.2.dist-info/METADATA,sha256=kS3y9ehhWdU9vo8VzebO2PFL7gVud1budv4LVcUq9QA,14806
26
+ windows_mcp-0.6.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
27
+ windows_mcp-0.6.2.dist-info/entry_points.txt,sha256=wW8NcVQ_OJK5e5GemZSE_nOKyxfUtBPq2acFLszRwaw,58
28
+ windows_mcp-0.6.2.dist-info/licenses/LICENSE.md,sha256=U1UM4Xi_IX-jHnHjGT0rETNia-Ck8gd92iSQMqQ6a8Y,1089
29
+ windows_mcp-0.6.2.dist-info/RECORD,,