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

Files changed (178) hide show
  1. hanzo_mcp/__init__.py +7 -1
  2. hanzo_mcp/__main__.py +1 -1
  3. hanzo_mcp/analytics/__init__.py +2 -2
  4. hanzo_mcp/analytics/posthog_analytics.py +76 -82
  5. hanzo_mcp/cli.py +31 -36
  6. hanzo_mcp/cli_enhanced.py +94 -72
  7. hanzo_mcp/cli_plugin.py +27 -17
  8. hanzo_mcp/config/__init__.py +2 -2
  9. hanzo_mcp/config/settings.py +112 -88
  10. hanzo_mcp/config/tool_config.py +32 -34
  11. hanzo_mcp/dev_server.py +66 -67
  12. hanzo_mcp/prompts/__init__.py +94 -12
  13. hanzo_mcp/prompts/enhanced_prompts.py +809 -0
  14. hanzo_mcp/prompts/example_custom_prompt.py +6 -5
  15. hanzo_mcp/prompts/project_todo_reminder.py +0 -1
  16. hanzo_mcp/prompts/tool_explorer.py +10 -7
  17. hanzo_mcp/server.py +17 -21
  18. hanzo_mcp/server_enhanced.py +15 -22
  19. hanzo_mcp/tools/__init__.py +56 -28
  20. hanzo_mcp/tools/agent/__init__.py +16 -19
  21. hanzo_mcp/tools/agent/agent.py +82 -65
  22. hanzo_mcp/tools/agent/agent_tool.py +152 -122
  23. hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +66 -62
  24. hanzo_mcp/tools/agent/clarification_protocol.py +55 -50
  25. hanzo_mcp/tools/agent/clarification_tool.py +11 -10
  26. hanzo_mcp/tools/agent/claude_cli_tool.py +21 -20
  27. hanzo_mcp/tools/agent/claude_desktop_auth.py +130 -144
  28. hanzo_mcp/tools/agent/cli_agent_base.py +59 -53
  29. hanzo_mcp/tools/agent/code_auth.py +102 -107
  30. hanzo_mcp/tools/agent/code_auth_tool.py +28 -27
  31. hanzo_mcp/tools/agent/codex_cli_tool.py +20 -19
  32. hanzo_mcp/tools/agent/critic_tool.py +86 -73
  33. hanzo_mcp/tools/agent/gemini_cli_tool.py +21 -20
  34. hanzo_mcp/tools/agent/grok_cli_tool.py +21 -20
  35. hanzo_mcp/tools/agent/iching_tool.py +404 -139
  36. hanzo_mcp/tools/agent/network_tool.py +89 -73
  37. hanzo_mcp/tools/agent/prompt.py +2 -1
  38. hanzo_mcp/tools/agent/review_tool.py +101 -98
  39. hanzo_mcp/tools/agent/swarm_alias.py +87 -0
  40. hanzo_mcp/tools/agent/swarm_tool.py +246 -161
  41. hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +134 -92
  42. hanzo_mcp/tools/agent/tool_adapter.py +21 -11
  43. hanzo_mcp/tools/common/__init__.py +1 -1
  44. hanzo_mcp/tools/common/base.py +3 -5
  45. hanzo_mcp/tools/common/batch_tool.py +46 -39
  46. hanzo_mcp/tools/common/config_tool.py +120 -84
  47. hanzo_mcp/tools/common/context.py +1 -5
  48. hanzo_mcp/tools/common/context_fix.py +5 -3
  49. hanzo_mcp/tools/common/critic_tool.py +4 -8
  50. hanzo_mcp/tools/common/decorators.py +58 -56
  51. hanzo_mcp/tools/common/enhanced_base.py +29 -32
  52. hanzo_mcp/tools/common/fastmcp_pagination.py +91 -94
  53. hanzo_mcp/tools/common/forgiving_edit.py +91 -87
  54. hanzo_mcp/tools/common/mode.py +15 -17
  55. hanzo_mcp/tools/common/mode_loader.py +27 -24
  56. hanzo_mcp/tools/common/paginated_base.py +61 -53
  57. hanzo_mcp/tools/common/paginated_response.py +72 -79
  58. hanzo_mcp/tools/common/pagination.py +50 -53
  59. hanzo_mcp/tools/common/permissions.py +4 -4
  60. hanzo_mcp/tools/common/personality.py +186 -138
  61. hanzo_mcp/tools/common/plugin_loader.py +54 -54
  62. hanzo_mcp/tools/common/stats.py +65 -47
  63. hanzo_mcp/tools/common/test_helpers.py +31 -0
  64. hanzo_mcp/tools/common/thinking_tool.py +4 -8
  65. hanzo_mcp/tools/common/tool_disable.py +17 -12
  66. hanzo_mcp/tools/common/tool_enable.py +13 -14
  67. hanzo_mcp/tools/common/tool_list.py +36 -28
  68. hanzo_mcp/tools/common/truncate.py +23 -23
  69. hanzo_mcp/tools/config/__init__.py +4 -4
  70. hanzo_mcp/tools/config/config_tool.py +42 -29
  71. hanzo_mcp/tools/config/index_config.py +37 -34
  72. hanzo_mcp/tools/config/mode_tool.py +175 -55
  73. hanzo_mcp/tools/database/__init__.py +15 -12
  74. hanzo_mcp/tools/database/database_manager.py +77 -75
  75. hanzo_mcp/tools/database/graph.py +137 -91
  76. hanzo_mcp/tools/database/graph_add.py +30 -18
  77. hanzo_mcp/tools/database/graph_query.py +178 -102
  78. hanzo_mcp/tools/database/graph_remove.py +33 -28
  79. hanzo_mcp/tools/database/graph_search.py +97 -75
  80. hanzo_mcp/tools/database/graph_stats.py +91 -59
  81. hanzo_mcp/tools/database/sql.py +107 -79
  82. hanzo_mcp/tools/database/sql_query.py +30 -24
  83. hanzo_mcp/tools/database/sql_search.py +29 -25
  84. hanzo_mcp/tools/database/sql_stats.py +47 -35
  85. hanzo_mcp/tools/editor/neovim_command.py +25 -28
  86. hanzo_mcp/tools/editor/neovim_edit.py +21 -23
  87. hanzo_mcp/tools/editor/neovim_session.py +60 -54
  88. hanzo_mcp/tools/filesystem/__init__.py +31 -30
  89. hanzo_mcp/tools/filesystem/ast_multi_edit.py +329 -249
  90. hanzo_mcp/tools/filesystem/ast_tool.py +4 -4
  91. hanzo_mcp/tools/filesystem/base.py +1 -1
  92. hanzo_mcp/tools/filesystem/batch_search.py +316 -224
  93. hanzo_mcp/tools/filesystem/content_replace.py +4 -4
  94. hanzo_mcp/tools/filesystem/diff.py +71 -59
  95. hanzo_mcp/tools/filesystem/directory_tree.py +7 -7
  96. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +49 -37
  97. hanzo_mcp/tools/filesystem/edit.py +4 -4
  98. hanzo_mcp/tools/filesystem/find.py +173 -80
  99. hanzo_mcp/tools/filesystem/find_files.py +73 -52
  100. hanzo_mcp/tools/filesystem/git_search.py +157 -104
  101. hanzo_mcp/tools/filesystem/grep.py +8 -8
  102. hanzo_mcp/tools/filesystem/multi_edit.py +4 -8
  103. hanzo_mcp/tools/filesystem/read.py +12 -10
  104. hanzo_mcp/tools/filesystem/rules_tool.py +59 -43
  105. hanzo_mcp/tools/filesystem/search_tool.py +263 -207
  106. hanzo_mcp/tools/filesystem/symbols_tool.py +94 -54
  107. hanzo_mcp/tools/filesystem/tree.py +35 -33
  108. hanzo_mcp/tools/filesystem/unix_aliases.py +13 -18
  109. hanzo_mcp/tools/filesystem/watch.py +37 -36
  110. hanzo_mcp/tools/filesystem/write.py +4 -8
  111. hanzo_mcp/tools/jupyter/__init__.py +4 -4
  112. hanzo_mcp/tools/jupyter/base.py +4 -5
  113. hanzo_mcp/tools/jupyter/jupyter.py +67 -47
  114. hanzo_mcp/tools/jupyter/notebook_edit.py +4 -4
  115. hanzo_mcp/tools/jupyter/notebook_read.py +4 -7
  116. hanzo_mcp/tools/llm/__init__.py +5 -7
  117. hanzo_mcp/tools/llm/consensus_tool.py +72 -52
  118. hanzo_mcp/tools/llm/llm_manage.py +101 -60
  119. hanzo_mcp/tools/llm/llm_tool.py +226 -166
  120. hanzo_mcp/tools/llm/provider_tools.py +25 -26
  121. hanzo_mcp/tools/lsp/__init__.py +1 -1
  122. hanzo_mcp/tools/lsp/lsp_tool.py +228 -143
  123. hanzo_mcp/tools/mcp/__init__.py +2 -3
  124. hanzo_mcp/tools/mcp/mcp_add.py +27 -25
  125. hanzo_mcp/tools/mcp/mcp_remove.py +7 -8
  126. hanzo_mcp/tools/mcp/mcp_stats.py +23 -22
  127. hanzo_mcp/tools/mcp/mcp_tool.py +129 -98
  128. hanzo_mcp/tools/memory/__init__.py +39 -21
  129. hanzo_mcp/tools/memory/knowledge_tools.py +124 -99
  130. hanzo_mcp/tools/memory/memory_tools.py +90 -108
  131. hanzo_mcp/tools/search/__init__.py +7 -2
  132. hanzo_mcp/tools/search/find_tool.py +297 -212
  133. hanzo_mcp/tools/search/unified_search.py +366 -314
  134. hanzo_mcp/tools/shell/__init__.py +8 -7
  135. hanzo_mcp/tools/shell/auto_background.py +56 -49
  136. hanzo_mcp/tools/shell/base.py +1 -1
  137. hanzo_mcp/tools/shell/base_process.py +75 -75
  138. hanzo_mcp/tools/shell/bash_session.py +2 -2
  139. hanzo_mcp/tools/shell/bash_session_executor.py +4 -4
  140. hanzo_mcp/tools/shell/bash_tool.py +24 -31
  141. hanzo_mcp/tools/shell/command_executor.py +12 -12
  142. hanzo_mcp/tools/shell/logs.py +43 -33
  143. hanzo_mcp/tools/shell/npx.py +13 -13
  144. hanzo_mcp/tools/shell/npx_background.py +24 -21
  145. hanzo_mcp/tools/shell/npx_tool.py +18 -22
  146. hanzo_mcp/tools/shell/open.py +19 -21
  147. hanzo_mcp/tools/shell/pkill.py +31 -26
  148. hanzo_mcp/tools/shell/process_tool.py +32 -32
  149. hanzo_mcp/tools/shell/processes.py +57 -58
  150. hanzo_mcp/tools/shell/run_background.py +24 -25
  151. hanzo_mcp/tools/shell/run_command.py +5 -5
  152. hanzo_mcp/tools/shell/run_command_windows.py +5 -5
  153. hanzo_mcp/tools/shell/session_storage.py +3 -3
  154. hanzo_mcp/tools/shell/streaming_command.py +141 -126
  155. hanzo_mcp/tools/shell/uvx.py +24 -25
  156. hanzo_mcp/tools/shell/uvx_background.py +35 -33
  157. hanzo_mcp/tools/shell/uvx_tool.py +18 -22
  158. hanzo_mcp/tools/todo/__init__.py +6 -2
  159. hanzo_mcp/tools/todo/todo.py +50 -37
  160. hanzo_mcp/tools/todo/todo_read.py +5 -8
  161. hanzo_mcp/tools/todo/todo_write.py +5 -7
  162. hanzo_mcp/tools/vector/__init__.py +40 -28
  163. hanzo_mcp/tools/vector/ast_analyzer.py +176 -143
  164. hanzo_mcp/tools/vector/git_ingester.py +170 -179
  165. hanzo_mcp/tools/vector/index_tool.py +96 -44
  166. hanzo_mcp/tools/vector/infinity_store.py +283 -228
  167. hanzo_mcp/tools/vector/mock_infinity.py +39 -40
  168. hanzo_mcp/tools/vector/project_manager.py +88 -78
  169. hanzo_mcp/tools/vector/vector.py +59 -42
  170. hanzo_mcp/tools/vector/vector_index.py +30 -27
  171. hanzo_mcp/tools/vector/vector_search.py +64 -45
  172. hanzo_mcp/types.py +6 -4
  173. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/METADATA +1 -1
  174. hanzo_mcp-0.8.0.dist-info/RECORD +185 -0
  175. hanzo_mcp-0.7.6.dist-info/RECORD +0 -182
  176. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/WHEEL +0 -0
  177. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/entry_points.txt +0 -0
  178. {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,13 @@
1
1
  """Provider-specific LLM tools."""
2
2
 
3
- import os
4
- from typing import Annotated, Optional, TypedDict, Unpack, final, override, Dict, Any
3
+ from typing import Dict, Unpack, Optional, Annotated, TypedDict, final, override
5
4
 
6
- from mcp.server.fastmcp import Context as MCPContext
7
5
  from pydantic import Field
6
+ from mcp.server.fastmcp import Context as MCPContext
8
7
 
9
8
  from hanzo_mcp.tools.common.base import BaseTool
10
- from hanzo_mcp.tools.common.context import create_tool_context
11
9
  from hanzo_mcp.tools.llm.llm_tool import LLMTool
12
10
 
13
-
14
11
  Prompt = Annotated[
15
12
  str,
16
13
  Field(
@@ -73,10 +70,12 @@ class ProviderToolParams(TypedDict, total=False):
73
70
 
74
71
  class BaseProviderTool(BaseTool):
75
72
  """Base class for provider-specific LLM tools."""
76
-
77
- def __init__(self, provider: str, default_model: str, model_variants: Dict[str, str]):
73
+
74
+ def __init__(
75
+ self, provider: str, default_model: str, model_variants: Dict[str, str]
76
+ ):
78
77
  """Initialize provider tool.
79
-
78
+
80
79
  Args:
81
80
  provider: Provider name
82
81
  default_model: Default model to use
@@ -92,11 +91,11 @@ class BaseProviderTool(BaseTool):
92
91
  """Get full model name from short name or default."""
93
92
  if not model:
94
93
  return self.default_model
95
-
94
+
96
95
  # Check if it's a short name
97
96
  if model in self.model_variants:
98
97
  return self.model_variants[model]
99
-
98
+
100
99
  # Return as-is if not found (assume full name)
101
100
  return model
102
101
 
@@ -110,16 +109,16 @@ class BaseProviderTool(BaseTool):
110
109
  if not self.is_available:
111
110
  env_vars = LLMTool.API_KEY_ENV_VARS.get(self.provider, [])
112
111
  return f"Error: {self.provider.title()} API key not found. Set one of: {', '.join(env_vars)}"
113
-
112
+
114
113
  # Get full model name
115
114
  model = self.get_full_model_name(params.get("model"))
116
-
115
+
117
116
  # Prepare LLM tool parameters
118
117
  llm_params = {
119
118
  "model": model,
120
119
  "prompt": params["prompt"],
121
120
  }
122
-
121
+
123
122
  # Add optional parameters
124
123
  if "system_prompt" in params:
125
124
  llm_params["system_prompt"] = params["system_prompt"]
@@ -129,7 +128,7 @@ class BaseProviderTool(BaseTool):
129
128
  llm_params["max_tokens"] = params["max_tokens"]
130
129
  if "json_mode" in params:
131
130
  llm_params["json_mode"] = params["json_mode"]
132
-
131
+
133
132
  # Call the LLM tool
134
133
  return await self.llm_tool.call(ctx, **llm_params)
135
134
 
@@ -141,7 +140,7 @@ class BaseProviderTool(BaseTool):
141
140
  @final
142
141
  class OpenAITool(BaseProviderTool):
143
142
  """OpenAI-specific LLM tool."""
144
-
143
+
145
144
  def __init__(self):
146
145
  super().__init__(
147
146
  provider="openai",
@@ -154,7 +153,7 @@ class OpenAITool(BaseProviderTool):
154
153
  "o1-mini": "o1-mini",
155
154
  "4-turbo": "gpt-4-turbo-preview",
156
155
  "4-vision": "gpt-4-vision-preview",
157
- }
156
+ },
158
157
  )
159
158
 
160
159
  @property
@@ -185,7 +184,7 @@ Examples:
185
184
  @final
186
185
  class AnthropicTool(BaseProviderTool):
187
186
  """Anthropic-specific LLM tool."""
188
-
187
+
189
188
  def __init__(self):
190
189
  super().__init__(
191
190
  provider="anthropic",
@@ -197,7 +196,7 @@ class AnthropicTool(BaseProviderTool):
197
196
  "2.1": "claude-2.1",
198
197
  "2": "claude-2",
199
198
  "instant": "claude-instant-1.2",
200
- }
199
+ },
201
200
  )
202
201
 
203
202
  @property
@@ -228,7 +227,7 @@ Examples:
228
227
  @final
229
228
  class GeminiTool(BaseProviderTool):
230
229
  """Google Gemini-specific LLM tool."""
231
-
230
+
232
231
  def __init__(self):
233
232
  super().__init__(
234
233
  provider="google",
@@ -239,7 +238,7 @@ class GeminiTool(BaseProviderTool):
239
238
  "1.5-pro": "gemini/gemini-1.5-pro-latest",
240
239
  "1.5-flash": "gemini/gemini-1.5-flash-latest",
241
240
  "ultra": "gemini/gemini-ultra",
242
- }
241
+ },
243
242
  )
244
243
 
245
244
  @property
@@ -270,7 +269,7 @@ Examples:
270
269
  @final
271
270
  class GroqTool(BaseProviderTool):
272
271
  """Groq-specific LLM tool."""
273
-
272
+
274
273
  def __init__(self):
275
274
  super().__init__(
276
275
  provider="groq",
@@ -281,7 +280,7 @@ class GroqTool(BaseProviderTool):
281
280
  "llama3-8b": "groq/llama3-8b-8192",
282
281
  "llama2-70b": "groq/llama2-70b-4096",
283
282
  "gemma-7b": "groq/gemma-7b-it",
284
- }
283
+ },
285
284
  )
286
285
 
287
286
  @property
@@ -312,7 +311,7 @@ Examples:
312
311
  @final
313
312
  class MistralTool(BaseProviderTool):
314
313
  """Mistral-specific LLM tool."""
315
-
314
+
316
315
  def __init__(self):
317
316
  super().__init__(
318
317
  provider="mistral",
@@ -323,7 +322,7 @@ class MistralTool(BaseProviderTool):
323
322
  "medium": "mistral/mistral-medium-latest",
324
323
  "large": "mistral/mistral-large-latest",
325
324
  "embed": "mistral/mistral-embed",
326
- }
325
+ },
327
326
  )
328
327
 
329
328
  @property
@@ -353,7 +352,7 @@ Examples:
353
352
  @final
354
353
  class PerplexityTool(BaseProviderTool):
355
354
  """Perplexity-specific LLM tool."""
356
-
355
+
357
356
  def __init__(self):
358
357
  super().__init__(
359
358
  provider="perplexity",
@@ -363,7 +362,7 @@ class PerplexityTool(BaseProviderTool):
363
362
  "sonar-medium": "perplexity/sonar-medium-online",
364
363
  "sonar-small-chat": "perplexity/sonar-small-chat",
365
364
  "sonar-medium-chat": "perplexity/sonar-medium-chat",
366
- }
365
+ },
367
366
  )
368
367
 
369
368
  @property
@@ -2,4 +2,4 @@
2
2
 
3
3
  from .lsp_tool import LSPTool, create_lsp_tool
4
4
 
5
- __all__ = ["LSPTool", "create_lsp_tool"]
5
+ __all__ = ["LSPTool", "create_lsp_tool"]