hanzo-mcp 0.6.1__py3-none-any.whl → 0.6.3__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.

Potentially problematic release.


This version of hanzo-mcp might be problematic. Click here for more details.

hanzo_mcp/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Hanzo MCP - Implementation of Hanzo capabilities using MCP."""
2
2
 
3
- __version__ = "0.6.0"
3
+ __version__ = "0.6.3"
@@ -155,11 +155,24 @@ palette --action current"""
155
155
 
156
156
  def register(self, server: FastMCP) -> None:
157
157
  """Register the tool with the MCP server."""
158
- server.tool(name=self.name, description=self.description)(self.call)
158
+ tool_self = self
159
+
160
+ @server.tool(name=self.name, description=self.description)
161
+ async def palette_handler(
162
+ ctx: MCPContext,
163
+ action: str = "list",
164
+ name: Optional[str] = None,
165
+ ) -> str:
166
+ """Handle palette tool calls."""
167
+ return await tool_self.run(ctx, action=action, name=name)
159
168
 
160
- async def call(self, **kwargs) -> str:
169
+ async def call(self, ctx: MCPContext, **params) -> str:
161
170
  """Call the tool with arguments."""
162
- return await self.run(None, **kwargs)
171
+ return await self.run(
172
+ ctx,
173
+ action=params.get("action", "list"),
174
+ name=params.get("name")
175
+ )
163
176
 
164
177
 
165
178
  # Create tool instance
@@ -784,29 +784,25 @@ Perfect for comprehensive code analysis and refactoring tasks."""
784
784
 
785
785
  @override
786
786
  def register(self, mcp_server: FastMCP) -> None:
787
- """Register the unified search tool with the MCP server."""
787
+ """Register the batch search tool with the MCP server."""
788
788
  tool_self = self
789
789
 
790
790
  @mcp_server.tool(name=self.name, description=self.description)
791
- async def unified_search(
791
+ async def batch_search(
792
792
  ctx: MCPContext,
793
- pattern: Pattern,
793
+ queries: Queries,
794
794
  path: SearchPath = ".",
795
795
  include: Include = "*",
796
796
  max_results: MaxResults = 20,
797
- enable_vector: EnableVector = True,
798
- enable_ast: EnableAST = True,
799
- enable_symbol: EnableSymbol = True,
800
797
  include_context: IncludeContext = True,
798
+ combine_results: CombineResults = True
801
799
  ) -> str:
802
800
  return await tool_self.call(
803
801
  ctx,
804
- pattern=pattern,
802
+ queries=queries,
805
803
  path=path,
806
804
  include=include,
807
805
  max_results=max_results,
808
- enable_vector=enable_vector,
809
- enable_ast=enable_ast,
810
- enable_symbol=enable_symbol,
811
806
  include_context=include_context,
807
+ combine_results=combine_results
812
808
  )
@@ -275,12 +275,12 @@ Only works within allowed directories."""
275
275
 
276
276
  @mcp_server.tool(name=self.name, description=self.description)
277
277
  async def content_replace(
278
+ ctx: MCPContext,
278
279
  pattern: Pattern,
279
280
  replacement: Replacement,
280
281
  path: SearchPath,
281
- file_pattern: FilePattern,
282
- dry_run: DryRun,
283
- ctx: MCPContext
282
+ file_pattern: FilePattern = "*",
283
+ dry_run: DryRun = False
284
284
  ) -> str:
285
285
  return await tool_self.call(
286
286
  ctx,
@@ -173,11 +173,40 @@ diff a.json b.json --ignore-whitespace"""
173
173
 
174
174
  def register(self, server: FastMCP) -> None:
175
175
  """Register the tool with the MCP server."""
176
- server.tool(name=self.name, description=self.description)(self.call)
176
+ tool_self = self
177
+
178
+ @server.tool(name=self.name, description=self.description)
179
+ async def diff_handler(
180
+ ctx: MCPContext,
181
+ file1: str,
182
+ file2: str,
183
+ unified: bool = True,
184
+ context: int = 3,
185
+ ignore_whitespace: bool = False,
186
+ show_line_numbers: bool = True,
187
+ ) -> str:
188
+ """Handle diff tool calls."""
189
+ return await tool_self.run(
190
+ ctx,
191
+ file1=file1,
192
+ file2=file2,
193
+ unified=unified,
194
+ context=context,
195
+ ignore_whitespace=ignore_whitespace,
196
+ show_line_numbers=show_line_numbers,
197
+ )
177
198
 
178
- async def call(self, **kwargs) -> str:
199
+ async def call(self, ctx: MCPContext, **params) -> str:
179
200
  """Call the tool with arguments."""
180
- return await self.run(None, **kwargs)
201
+ return await self.run(
202
+ ctx,
203
+ file1=params["file1"],
204
+ file2=params["file2"],
205
+ unified=params.get("unified", True),
206
+ context=params.get("context", 3),
207
+ ignore_whitespace=params.get("ignore_whitespace", False),
208
+ show_line_numbers=params.get("show_line_numbers", True)
209
+ )
181
210
 
182
211
 
183
212
  # Create tool instance (requires permission manager to be set)
@@ -298,10 +298,10 @@ requested. Only works within allowed directories."""
298
298
 
299
299
  @mcp_server.tool(name=self.name, description=self.description)
300
300
  async def directory_tree(
301
+ ctx: MCPContext,
301
302
  path: DirectoryPath,
302
- depth: Depth,
303
- include_filtered: IncludeFiltered,
304
- ctx: MCPContext
303
+ depth: Depth = 3,
304
+ include_filtered: IncludeFiltered = False
305
305
  ) -> str:
306
306
  return await tool_self.call(
307
307
  ctx, path=path, depth=depth, include_filtered=include_filtered
@@ -262,11 +262,11 @@ Usage:
262
262
 
263
263
  @mcp_server.tool(name=self.name, description=self.description)
264
264
  async def edit(
265
+ ctx: MCPContext,
265
266
  file_path: FilePath,
266
267
  old_string: OldString,
267
268
  new_string: NewString,
268
- expected_replacements: ExpectedReplacements,
269
- ctx: MCPContext
269
+ expected_replacements: ExpectedReplacements = 1
270
270
  ) -> str:
271
271
  return await tool_self.call(
272
272
  ctx,
@@ -257,10 +257,10 @@ Usage:
257
257
 
258
258
  @mcp_server.tool(name=self.name, description=self.description)
259
259
  async def read(
260
+ ctx: MCPContext,
260
261
  file_path: FilePath,
261
- offset: Offset,
262
- limit: Limit,
263
- ctx: MCPContext
262
+ offset: Offset = 0,
263
+ limit: Limit = 2000
264
264
  ) -> str:
265
265
  return await tool_self.call(
266
266
  ctx, file_path=file_path, offset=offset, limit=limit
@@ -225,11 +225,11 @@ Finds code structures (functions, classes, methods) with full context."""
225
225
 
226
226
  @mcp_server.tool(name=self.name, description=self.description)
227
227
  async def symbols(
228
+ ctx: MCPContext,
228
229
  pattern: Pattern,
229
230
  path: SearchPath,
230
- ignore_case: IgnoreCase,
231
- line_number: LineNumber,
232
- ctx: MCPContext
231
+ ignore_case: IgnoreCase = False,
232
+ line_number: LineNumber = False
233
233
  ) -> str:
234
234
  return await tool_self.call(
235
235
  ctx,
@@ -20,11 +20,38 @@ class WatchTool(BaseTool):
20
20
 
21
21
  def register(self, server: FastMCP) -> None:
22
22
  """Register the tool with the MCP server."""
23
- server.tool(name=self.name, description=self.description)(self.call)
23
+
24
+ @server.tool(name=self.name, description=self.description)
25
+ async def watch_handler(
26
+ path: str,
27
+ pattern: str = "*",
28
+ interval: int = 1,
29
+ recursive: bool = True,
30
+ exclude: str = "",
31
+ duration: int = 30,
32
+ ) -> str:
33
+ """Handle watch tool calls."""
34
+ return await self.run(
35
+ None,
36
+ path=path,
37
+ pattern=pattern,
38
+ interval=interval,
39
+ recursive=recursive,
40
+ exclude=exclude,
41
+ duration=duration,
42
+ )
24
43
 
25
- async def call(self, **kwargs) -> str:
44
+ async def call(self, ctx: MCPContext, **params) -> str:
26
45
  """Call the tool with arguments."""
27
- return await self.run(None, **kwargs)
46
+ return await self.run(
47
+ ctx,
48
+ path=params["path"],
49
+ pattern=params.get("pattern", "*"),
50
+ interval=params.get("interval", 1),
51
+ recursive=params.get("recursive", True),
52
+ exclude=params.get("exclude", ""),
53
+ duration=params.get("duration", 30)
54
+ )
28
55
 
29
56
  @property
30
57
  @override
@@ -18,11 +18,36 @@ class BashTool(BaseScriptTool):
18
18
 
19
19
  def register(self, server: FastMCP) -> None:
20
20
  """Register the tool with the MCP server."""
21
- server.tool(name=self.name, description=self.description)(self.call)
21
+ tool_self = self
22
+
23
+ @server.tool(name=self.name, description=self.description)
24
+ async def bash(
25
+ ctx: MCPContext,
26
+ command: str,
27
+ action: str = "run",
28
+ cwd: Optional[str] = None,
29
+ env: Optional[dict[str, str]] = None,
30
+ timeout: Optional[int] = None,
31
+ ) -> str:
32
+ return await tool_self.run(
33
+ ctx,
34
+ command=command,
35
+ action=action,
36
+ cwd=cwd,
37
+ env=env,
38
+ timeout=timeout
39
+ )
22
40
 
23
- async def call(self, **kwargs) -> str:
41
+ async def call(self, ctx: MCPContext, **params) -> str:
24
42
  """Call the tool with arguments."""
25
- return await self.run(None, **kwargs)
43
+ return await self.run(
44
+ ctx,
45
+ command=params["command"],
46
+ action=params.get("action", "run"),
47
+ cwd=params.get("cwd"),
48
+ env=params.get("env"),
49
+ timeout=params.get("timeout")
50
+ )
26
51
 
27
52
  @property
28
53
  @override
@@ -90,11 +90,36 @@ npx --action background json-server db.json"""
90
90
 
91
91
  def register(self, server: FastMCP) -> None:
92
92
  """Register the tool with the MCP server."""
93
- server.tool(name=self.name, description=self.description)(self.call)
93
+ tool_self = self
94
+
95
+ @server.tool(name=self.name, description=self.description)
96
+ async def npx(
97
+ ctx: MCPContext,
98
+ package: str,
99
+ args: str = "",
100
+ action: str = "run",
101
+ cwd: Optional[str] = None,
102
+ yes: bool = True,
103
+ ) -> str:
104
+ return await tool_self.run(
105
+ ctx,
106
+ package=package,
107
+ args=args,
108
+ action=action,
109
+ cwd=cwd,
110
+ yes=yes
111
+ )
94
112
 
95
- async def call(self, **kwargs) -> str:
113
+ async def call(self, ctx: MCPContext, **params) -> str:
96
114
  """Call the tool with arguments."""
97
- return await self.run(None, **kwargs)
115
+ return await self.run(
116
+ ctx,
117
+ package=params["package"],
118
+ args=params.get("args", ""),
119
+ action=params.get("action", "run"),
120
+ cwd=params.get("cwd"),
121
+ yes=params.get("yes", True)
122
+ )
98
123
 
99
124
 
100
125
  # Create tool instance
@@ -20,11 +20,18 @@ class OpenTool(BaseTool):
20
20
 
21
21
  def register(self, server: FastMCP) -> None:
22
22
  """Register the tool with the MCP server."""
23
- server.tool(name=self.name, description=self.description)(self.call)
23
+ tool_self = self
24
+
25
+ @server.tool(name=self.name, description=self.description)
26
+ async def open(
27
+ ctx: MCPContext,
28
+ path: str
29
+ ) -> str:
30
+ return await tool_self.run(ctx, path)
24
31
 
25
- async def call(self, **kwargs) -> str:
32
+ async def call(self, ctx: MCPContext, **params) -> str:
26
33
  """Call the tool with arguments."""
27
- return await self.run(None, **kwargs)
34
+ return await self.run(ctx, params["path"])
28
35
 
29
36
  @property
30
37
  @override
@@ -120,11 +120,33 @@ process --action logs --id bash_ghi789 --lines 50"""
120
120
 
121
121
  def register(self, server: FastMCP) -> None:
122
122
  """Register the tool with the MCP server."""
123
- server.tool(name=self.name, description=self.description)(self.call)
123
+ tool_self = self
124
+
125
+ @server.tool(name=self.name, description=self.description)
126
+ async def process(
127
+ ctx: MCPContext,
128
+ action: str = "list",
129
+ id: Optional[str] = None,
130
+ signal_type: str = "TERM",
131
+ lines: int = 100,
132
+ ) -> str:
133
+ return await tool_self.run(
134
+ ctx,
135
+ action=action,
136
+ id=id,
137
+ signal_type=signal_type,
138
+ lines=lines
139
+ )
124
140
 
125
- async def call(self, **kwargs) -> str:
141
+ async def call(self, ctx: MCPContext, **params) -> str:
126
142
  """Call the tool with arguments."""
127
- return await self.run(None, **kwargs)
143
+ return await self.run(
144
+ ctx,
145
+ action=params.get("action", "list"),
146
+ id=params.get("id"),
147
+ signal_type=params.get("signal_type", "TERM"),
148
+ lines=params.get("lines", 100)
149
+ )
128
150
 
129
151
 
130
152
  # Create tool instance
@@ -90,11 +90,36 @@ uvx --action background jupyter lab --port 8888"""
90
90
 
91
91
  def register(self, server: FastMCP) -> None:
92
92
  """Register the tool with the MCP server."""
93
- server.tool(name=self.name, description=self.description)(self.call)
93
+ tool_self = self
94
+
95
+ @server.tool(name=self.name, description=self.description)
96
+ async def uvx(
97
+ ctx: MCPContext,
98
+ package: str,
99
+ args: str = "",
100
+ action: str = "run",
101
+ cwd: Optional[str] = None,
102
+ python: Optional[str] = None,
103
+ ) -> str:
104
+ return await tool_self.run(
105
+ ctx,
106
+ package=package,
107
+ args=args,
108
+ action=action,
109
+ cwd=cwd,
110
+ python=python
111
+ )
94
112
 
95
- async def call(self, **kwargs) -> str:
113
+ async def call(self, ctx: MCPContext, **params) -> str:
96
114
  """Call the tool with arguments."""
97
- return await self.run(None, **kwargs)
115
+ return await self.run(
116
+ ctx,
117
+ package=params["package"],
118
+ args=params.get("args", ""),
119
+ action=params.get("action", "run"),
120
+ cwd=params.get("cwd"),
121
+ python=params.get("python")
122
+ )
98
123
 
99
124
 
100
125
  # Create tool instance
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hanzo-mcp
3
- Version: 0.6.1
3
+ Version: 0.6.3
4
4
  Summary: The Zen of Hanzo MCP: One server to rule them all. The ultimate MCP that orchestrates all others.
5
5
  Author-email: Hanzo Industries Inc <dev@hanzo.ai>
6
6
  License: MIT
@@ -15,7 +15,7 @@ Requires-Python: >=3.12
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Requires-Dist: mcp>=1.6.0
18
- Requires-Dist: fastmcp>=2.8.0
18
+ Requires-Dist: fastmcp>=2.9.2
19
19
  Requires-Dist: httpx>=0.27.0
20
20
  Requires-Dist: uvicorn>=0.23.1
21
21
  Requires-Dist: openai>=1.50.0
@@ -26,7 +26,8 @@ Requires-Dist: bashlex>=0.18
26
26
  Requires-Dist: libtmux>=0.39.0
27
27
  Requires-Dist: nbformat>=5.10.4
28
28
  Requires-Dist: psutil>=6.1.0
29
- Requires-Dist: pydantic>=2.10.0
29
+ Requires-Dist: pydantic>=2.11.0
30
+ Requires-Dist: pydantic-settings>=2.7.0
30
31
  Requires-Dist: typing-extensions>=4.12.2
31
32
  Requires-Dist: watchdog>=3.0.0
32
33
  Provides-Extra: dev
@@ -1,4 +1,4 @@
1
- hanzo_mcp/__init__.py,sha256=YJJb_nLjlIMpGqGQaWsjE_3ucmIAfrPit5mNZd9qfh8,89
1
+ hanzo_mcp/__init__.py,sha256=ccvaKEWpqeiCuArUV6xwmYB_BoIoj987XcM2KNVo6tM,89
2
2
  hanzo_mcp/cli.py,sha256=lFKWnoV94MUgtfojNn4DR9RQg-NiFUpF3BIICjbFfLA,10838
3
3
  hanzo_mcp/cli_enhanced.py,sha256=rqh9gqyjMuUznIlPTC5pcIGYZTKAScacMsDb1e68ReE,15819
4
4
  hanzo_mcp/dev_server.py,sha256=_Ti0P7y8VNK5z4NiZ1BN5L_KdWhWYJ4IG2U6GZObzyM,7869
@@ -35,7 +35,7 @@ hanzo_mcp/tools/common/validation.py,sha256=VV3VbDvYlAYl2Bi98xE7gFo0xnmqHHUGJGNP
35
35
  hanzo_mcp/tools/config/__init__.py,sha256=UfpEzxNmysTz4U8r0HS4xlaABDzf3H7DqFBxUwBd17w,242
36
36
  hanzo_mcp/tools/config/config_tool.py,sha256=lWs4HVzZcsIfFn_G_7zUgngKPk1by3bHPvYTyDmAJ5U,6877
37
37
  hanzo_mcp/tools/config/index_config.py,sha256=VNxCrFyBFLAjoial5pZlRNZgrF1iDVl5yy-_czEyfGo,6332
38
- hanzo_mcp/tools/config/palette_tool.py,sha256=L_FToiQq72mIFXyKPDPFl1odJf1DzHO5M5s9qtcDnXs,6103
38
+ hanzo_mcp/tools/config/palette_tool.py,sha256=bbSAfTBD7on0aXWU9Mgm75-gOkxn0q9dWd1iTk9USzk,6512
39
39
  hanzo_mcp/tools/database/__init__.py,sha256=RXHXDyD79a8MbJ5AOuQOgCbCL7cO5yxVH2LbA3lEyGA,2167
40
40
  hanzo_mcp/tools/database/database_manager.py,sha256=urbP3T4QpTPBOH7JKjgjRbgMZAZxGm5Q_skZnZ9aHXQ,8807
41
41
  hanzo_mcp/tools/database/graph.py,sha256=i4yufKM8KNlb4NgsHkZSZ2kLICuJsQfl9m13sTfTZZ4,16964
@@ -54,23 +54,23 @@ hanzo_mcp/tools/editor/neovim_edit.py,sha256=Hq10p1LIHBM_jGIyvjQYtJr8NR5pAeLRM6G
54
54
  hanzo_mcp/tools/editor/neovim_session.py,sha256=H1AhXBod9HzcYv4fQu4pOlBcyfwgjUo24lzenDZfqRU,11962
55
55
  hanzo_mcp/tools/filesystem/__init__.py,sha256=wX3GTjevm-aON_RHs58WawgIn3LRxz4lN1AcqPHW6OI,6735
56
56
  hanzo_mcp/tools/filesystem/base.py,sha256=0_6PBU1yqGRIQ8ggQNMEA2rB4DXTFg7sMJRAoocN9do,3818
57
- hanzo_mcp/tools/filesystem/batch_search.py,sha256=1Z9HLnH-GxRn7CNw6G0vKZsyPg-Rj3c8Q0H9cEoozM8,34475
58
- hanzo_mcp/tools/filesystem/content_replace.py,sha256=l3O7AozQmWGoDcn-kPbNJ96agAWslF_3smUl9Vef57k,9944
59
- hanzo_mcp/tools/filesystem/diff.py,sha256=62_YtzGzeD8s6YlHvCoyza96mMtoJB3id3DScKMPkrM,6643
60
- hanzo_mcp/tools/filesystem/directory_tree.py,sha256=VOCR0N_Agg78eHDg2Nu-tAuLOm4qFH-366tyoGVbvRU,10684
61
- hanzo_mcp/tools/filesystem/edit.py,sha256=0frU8Bob_SypJ3KqKxxUpXHEPzJiGrr9HEmWFq8-Qb4,10628
57
+ hanzo_mcp/tools/filesystem/batch_search.py,sha256=7dx4YNNw23gUD2rEnDlTDlrWUPx2kDMrHFX2xv_X1_Y,34301
58
+ hanzo_mcp/tools/filesystem/content_replace.py,sha256=9GvQhJP1yBJsLQZPHs1UJZ6hxLBh1gCmZaU_CI4kbsA,9958
59
+ hanzo_mcp/tools/filesystem/diff.py,sha256=7ZpVkSy_CjEu3dVfULXQ9Wn8IPKYLlS77fIGHvRQ3wg,7626
60
+ hanzo_mcp/tools/filesystem/directory_tree.py,sha256=H_fuqNot8Qx3eJQXBsFGIUVyASGFjXgnO_viT_gCLwU,10696
61
+ hanzo_mcp/tools/filesystem/edit.py,sha256=jqn1ae3tL5JrHQYm-uWHbXZSuAtw8o2Nj2yYJ1CGg8k,10632
62
62
  hanzo_mcp/tools/filesystem/find.py,sha256=897Lnd2507979hBzkskU5gEj1XDJdr7Gr9hTZIAWkUU,15337
63
63
  hanzo_mcp/tools/filesystem/find_files.py,sha256=BjmDzXvfXLV7_5NSZ7whhxXzJbM-vP1O0xq411PReSk,10959
64
64
  hanzo_mcp/tools/filesystem/git_search.py,sha256=qOOIxuATu6UPdlWokJaifaKLphj1Y3uMREqCMD9weOk,16220
65
65
  hanzo_mcp/tools/filesystem/grep.py,sha256=LDBGEpN2dj5xW1VvfgDxlkx4QqofWeztqwdyf_pSup0,16832
66
66
  hanzo_mcp/tools/filesystem/multi_edit.py,sha256=p6_OJNBn9uzCxVcLJrL88gze_P4O8j2Lm0-DZAESwpY,14242
67
- hanzo_mcp/tools/filesystem/read.py,sha256=-yuabqfZYENQ6-COuDNvQyjT-pdv5KFKe0BK-hZorFc,9331
68
- hanzo_mcp/tools/filesystem/symbols.py,sha256=S-YCLz1mKll0o1drHubI9UU8C8UtkRd6_ew30SbErFI,7274
67
+ hanzo_mcp/tools/filesystem/read.py,sha256=y8FV9S4GZZLNMplrIZrz5FrqQ0xT3OiIHav-a2uDBzs,9342
68
+ hanzo_mcp/tools/filesystem/symbols.py,sha256=gwLwA2PA6YuT7hojjFVHq2xVPuB2xlyTYyVbBow7AXY,7290
69
69
  hanzo_mcp/tools/filesystem/symbols_unified.py,sha256=UETAT3ofVVTFRuyrgKLehigV937cL5CCEbGaysmwXhE,12258
70
70
  hanzo_mcp/tools/filesystem/tree.py,sha256=MPBb3jHWa09DezDILP3FP7S_XCY2dJYQM-zUVYUloQQ,7497
71
71
  hanzo_mcp/tools/filesystem/unified_search.py,sha256=hmLGNWPiLrap7sJdTxJv-UM7A93qoo_cutrFlD_SAHc,26675
72
72
  hanzo_mcp/tools/filesystem/unix_aliases.py,sha256=jagrJbDo97Kpt3Zu3LQcuw_z28MQlADrNPbWgk6_cA0,3162
73
- hanzo_mcp/tools/filesystem/watch.py,sha256=1w6vm0Z2YyZUEQDFowQ_JpOlm-M6UMZrp0caYlwLepQ,6218
73
+ hanzo_mcp/tools/filesystem/watch.py,sha256=hbqDUqlIlWXW4-2S8Z4ui-JSNgcWXxn_YOcZLo44ddc,7073
74
74
  hanzo_mcp/tools/filesystem/write.py,sha256=FwumcJX9RW_Xy8noKh-S3p95KRyOUG59Nl4w5lznV40,4762
75
75
  hanzo_mcp/tools/jupyter/__init__.py,sha256=JVCoHVUkBMvkN_JmfOs63lF7q31bGyPLscHXfqknbOw,2425
76
76
  hanzo_mcp/tools/jupyter/base.py,sha256=cK190wDExYyUFu7qrT-s5sHglPd9k6SrlpA60sLwFFE,10101
@@ -93,15 +93,15 @@ hanzo_mcp/tools/shell/base.py,sha256=Nx9rAE7CO9-Hr5k_qYKUtNFq4twI6Z-lOt0fpkS57i4
93
93
  hanzo_mcp/tools/shell/base_process.py,sha256=KgXA98hFsbU5Y9E6mGLTTwQZowgHGpk5HSALxRICqDI,9495
94
94
  hanzo_mcp/tools/shell/bash_session.py,sha256=YPtdtC0pc6Q04RJqKUy0u0RPTbiT2IGtsvFqejK5Hu4,27271
95
95
  hanzo_mcp/tools/shell/bash_session_executor.py,sha256=zRnrzj4sdQOxO22XXBENT6k2dXt3LDk5fxjWjUYyU_Q,10723
96
- hanzo_mcp/tools/shell/bash_unified.py,sha256=HNkHykgaY5oiRdPPdje2lBECkKCh4TavYFtLY-v6dGg,4148
96
+ hanzo_mcp/tools/shell/bash_unified.py,sha256=vWQbTCgZS9ucD3cMr_ZYlLuGCnmQljRITYKUI-qrJek,4883
97
97
  hanzo_mcp/tools/shell/command_executor.py,sha256=IuoRY48PMmpKHL5CFIExebjoiRRS5ZEl73UDzYTR3kU,36406
98
98
  hanzo_mcp/tools/shell/logs.py,sha256=RahjkEHNwsKbnJ7cTAie70BSb9bV6T9Vf4JJluoZXYo,8468
99
99
  hanzo_mcp/tools/shell/npx.py,sha256=Bs5tKpyJMm6Yfrmuph0btbvSQGbDczR_YToP2iRqhHY,5083
100
100
  hanzo_mcp/tools/shell/npx_background.py,sha256=GNZOYV_jjA9pa7w-ZNy_oX7iSA_VfZRzVUr7dKunfjo,7120
101
- hanzo_mcp/tools/shell/npx_unified.py,sha256=Uzxpc6zvDYMNTONUDHSCRrJqJktW0ccxDtgwbDsiqLI,2823
102
- hanzo_mcp/tools/shell/open.py,sha256=6P13YDtj6FSx5nyPs-aNDKx87iGiPsZf2Q8Aeq5FsF4,3497
101
+ hanzo_mcp/tools/shell/npx_unified.py,sha256=O6mYTwPQCNAR4ICmP3DNJcaNvfAcl0yOhaf26npmwfg,3520
102
+ hanzo_mcp/tools/shell/open.py,sha256=Fo21N-XIosKDfGDIiROTUb8QxaqSddIY44YJgthGQ68,3686
103
103
  hanzo_mcp/tools/shell/pkill.py,sha256=PStKLEhuZhCZAXnn-Wwlut2xjV7GIc7PozuF8y8b7gI,8676
104
- hanzo_mcp/tools/shell/process_unified.py,sha256=YAUws2zvUejtiudnExfwLJzbMnQ2GtNDGoWEgNaAb3I,4358
104
+ hanzo_mcp/tools/shell/process_unified.py,sha256=XEFhyR9dc9vbmNEZUkNzlwytVeL8bKiCGK6PYbTmOVo,5008
105
105
  hanzo_mcp/tools/shell/processes.py,sha256=q2TCVpftV1HJaoEOEWzTOOUvyRemZiG0v8hK9VGM94A,9395
106
106
  hanzo_mcp/tools/shell/run_background.py,sha256=K2SxCF9sDcVxcwzAA77plZMb3wjYTOoSqS6MVyuBFBE,9713
107
107
  hanzo_mcp/tools/shell/run_command.py,sha256=AEH3waGpjbaSxBxSfmDW6hF7aL4pzwEwgUojOEsSNOY,16095
@@ -110,7 +110,7 @@ hanzo_mcp/tools/shell/session_manager.py,sha256=o8iS4PFCnq28vPqYtdtH9M8lfGyzyhtN
110
110
  hanzo_mcp/tools/shell/session_storage.py,sha256=elnyFgn0FwsmVvoWAoJFAqiEeNaK4_yByT8-zXa6r-o,10141
111
111
  hanzo_mcp/tools/shell/uvx.py,sha256=Y74SmbYHYlEoXXMzc9wh405-MD7zKAgFyWDBKastBHI,5034
112
112
  hanzo_mcp/tools/shell/uvx_background.py,sha256=uXeSJ_hjbpWyo2Zm75KJTZI2h_ZV5nEb_rAF7Gl954U,7105
113
- hanzo_mcp/tools/shell/uvx_unified.py,sha256=_m3D9iiWs7TBpt2LFCgOnefkSe45i3C9zof4auu24jw,2841
113
+ hanzo_mcp/tools/shell/uvx_unified.py,sha256=UBuhiiqsfdLML2Y86Av8Wmqh7lB6NVPBIUI5Yc3utAA,3556
114
114
  hanzo_mcp/tools/todo/__init__.py,sha256=p0flShq4Kw9saGQ5NXjTjwFa8BeukACaEJBTqG34H2M,1723
115
115
  hanzo_mcp/tools/todo/base.py,sha256=k0CFZy59YlLAJBVzVA4tr-qGkQ1l5yF04kcmziwQWec,10666
116
116
  hanzo_mcp/tools/todo/todo.py,sha256=y4LM8CIb94tK-lURnVer2WzctKPx_EWS0kEIM1Ut0Os,8218
@@ -126,9 +126,9 @@ hanzo_mcp/tools/vector/project_manager.py,sha256=xrkRl7niWjJrtSNaEOppkPzDFDw9FaE
126
126
  hanzo_mcp/tools/vector/vector.py,sha256=EpKEDkRfSHsDfPewqRwNAulX0BndlK48p-sFSMtt3js,10179
127
127
  hanzo_mcp/tools/vector/vector_index.py,sha256=IqXoEfEk6TOOEThXw4obePZqfvBRiYL_LCrx8z35-h8,4403
128
128
  hanzo_mcp/tools/vector/vector_search.py,sha256=jwX1azf4V4seqJ2CIDloX3lJ5_hkUl7X5e2OOgGXQNk,9647
129
- hanzo_mcp-0.6.1.dist-info/licenses/LICENSE,sha256=mf1qZGFsPGskoPgytp9B-RsahfKvXsBpmaAbTLGTt8Y,1063
130
- hanzo_mcp-0.6.1.dist-info/METADATA,sha256=NBfs-6Mm0SpWtUmb893tNZOK-rgmbE-HRMtnhQ39h9Y,11027
131
- hanzo_mcp-0.6.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
132
- hanzo_mcp-0.6.1.dist-info/entry_points.txt,sha256=Q_g5SzWk47z2b_rE_RgonVqk4-d8VQ6pqwMveYiXJuU,101
133
- hanzo_mcp-0.6.1.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
134
- hanzo_mcp-0.6.1.dist-info/RECORD,,
129
+ hanzo_mcp-0.6.3.dist-info/licenses/LICENSE,sha256=mf1qZGFsPGskoPgytp9B-RsahfKvXsBpmaAbTLGTt8Y,1063
130
+ hanzo_mcp-0.6.3.dist-info/METADATA,sha256=tLEMAj59u6LQV5NzYma_WAx6XjbLJVXhqnYw_mr0cxU,11067
131
+ hanzo_mcp-0.6.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
132
+ hanzo_mcp-0.6.3.dist-info/entry_points.txt,sha256=Q_g5SzWk47z2b_rE_RgonVqk4-d8VQ6pqwMveYiXJuU,101
133
+ hanzo_mcp-0.6.3.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
134
+ hanzo_mcp-0.6.3.dist-info/RECORD,,