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.
- hanzo_mcp/__init__.py +7 -1
- hanzo_mcp/__main__.py +1 -1
- hanzo_mcp/analytics/__init__.py +2 -2
- hanzo_mcp/analytics/posthog_analytics.py +76 -82
- hanzo_mcp/cli.py +31 -36
- hanzo_mcp/cli_enhanced.py +94 -72
- hanzo_mcp/cli_plugin.py +27 -17
- hanzo_mcp/config/__init__.py +2 -2
- hanzo_mcp/config/settings.py +112 -88
- hanzo_mcp/config/tool_config.py +32 -34
- hanzo_mcp/dev_server.py +66 -67
- hanzo_mcp/prompts/__init__.py +94 -12
- hanzo_mcp/prompts/enhanced_prompts.py +809 -0
- hanzo_mcp/prompts/example_custom_prompt.py +6 -5
- hanzo_mcp/prompts/project_todo_reminder.py +0 -1
- hanzo_mcp/prompts/tool_explorer.py +10 -7
- hanzo_mcp/server.py +17 -21
- hanzo_mcp/server_enhanced.py +15 -22
- hanzo_mcp/tools/__init__.py +56 -28
- hanzo_mcp/tools/agent/__init__.py +16 -19
- hanzo_mcp/tools/agent/agent.py +82 -65
- hanzo_mcp/tools/agent/agent_tool.py +152 -122
- hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +66 -62
- hanzo_mcp/tools/agent/clarification_protocol.py +55 -50
- hanzo_mcp/tools/agent/clarification_tool.py +11 -10
- hanzo_mcp/tools/agent/claude_cli_tool.py +21 -20
- hanzo_mcp/tools/agent/claude_desktop_auth.py +130 -144
- hanzo_mcp/tools/agent/cli_agent_base.py +59 -53
- hanzo_mcp/tools/agent/code_auth.py +102 -107
- hanzo_mcp/tools/agent/code_auth_tool.py +28 -27
- hanzo_mcp/tools/agent/codex_cli_tool.py +20 -19
- hanzo_mcp/tools/agent/critic_tool.py +86 -73
- hanzo_mcp/tools/agent/gemini_cli_tool.py +21 -20
- hanzo_mcp/tools/agent/grok_cli_tool.py +21 -20
- hanzo_mcp/tools/agent/iching_tool.py +404 -139
- hanzo_mcp/tools/agent/network_tool.py +89 -73
- hanzo_mcp/tools/agent/prompt.py +2 -1
- hanzo_mcp/tools/agent/review_tool.py +101 -98
- hanzo_mcp/tools/agent/swarm_alias.py +87 -0
- hanzo_mcp/tools/agent/swarm_tool.py +246 -161
- hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +134 -92
- hanzo_mcp/tools/agent/tool_adapter.py +21 -11
- hanzo_mcp/tools/common/__init__.py +1 -1
- hanzo_mcp/tools/common/base.py +3 -5
- hanzo_mcp/tools/common/batch_tool.py +46 -39
- hanzo_mcp/tools/common/config_tool.py +120 -84
- hanzo_mcp/tools/common/context.py +1 -5
- hanzo_mcp/tools/common/context_fix.py +5 -3
- hanzo_mcp/tools/common/critic_tool.py +4 -8
- hanzo_mcp/tools/common/decorators.py +58 -56
- hanzo_mcp/tools/common/enhanced_base.py +29 -32
- hanzo_mcp/tools/common/fastmcp_pagination.py +91 -94
- hanzo_mcp/tools/common/forgiving_edit.py +91 -87
- hanzo_mcp/tools/common/mode.py +15 -17
- hanzo_mcp/tools/common/mode_loader.py +27 -24
- hanzo_mcp/tools/common/paginated_base.py +61 -53
- hanzo_mcp/tools/common/paginated_response.py +72 -79
- hanzo_mcp/tools/common/pagination.py +50 -53
- hanzo_mcp/tools/common/permissions.py +4 -4
- hanzo_mcp/tools/common/personality.py +186 -138
- hanzo_mcp/tools/common/plugin_loader.py +54 -54
- hanzo_mcp/tools/common/stats.py +65 -47
- hanzo_mcp/tools/common/test_helpers.py +31 -0
- hanzo_mcp/tools/common/thinking_tool.py +4 -8
- hanzo_mcp/tools/common/tool_disable.py +17 -12
- hanzo_mcp/tools/common/tool_enable.py +13 -14
- hanzo_mcp/tools/common/tool_list.py +36 -28
- hanzo_mcp/tools/common/truncate.py +23 -23
- hanzo_mcp/tools/config/__init__.py +4 -4
- hanzo_mcp/tools/config/config_tool.py +42 -29
- hanzo_mcp/tools/config/index_config.py +37 -34
- hanzo_mcp/tools/config/mode_tool.py +175 -55
- hanzo_mcp/tools/database/__init__.py +15 -12
- hanzo_mcp/tools/database/database_manager.py +77 -75
- hanzo_mcp/tools/database/graph.py +137 -91
- hanzo_mcp/tools/database/graph_add.py +30 -18
- hanzo_mcp/tools/database/graph_query.py +178 -102
- hanzo_mcp/tools/database/graph_remove.py +33 -28
- hanzo_mcp/tools/database/graph_search.py +97 -75
- hanzo_mcp/tools/database/graph_stats.py +91 -59
- hanzo_mcp/tools/database/sql.py +107 -79
- hanzo_mcp/tools/database/sql_query.py +30 -24
- hanzo_mcp/tools/database/sql_search.py +29 -25
- hanzo_mcp/tools/database/sql_stats.py +47 -35
- hanzo_mcp/tools/editor/neovim_command.py +25 -28
- hanzo_mcp/tools/editor/neovim_edit.py +21 -23
- hanzo_mcp/tools/editor/neovim_session.py +60 -54
- hanzo_mcp/tools/filesystem/__init__.py +31 -30
- hanzo_mcp/tools/filesystem/ast_multi_edit.py +329 -249
- hanzo_mcp/tools/filesystem/ast_tool.py +4 -4
- hanzo_mcp/tools/filesystem/base.py +1 -1
- hanzo_mcp/tools/filesystem/batch_search.py +316 -224
- hanzo_mcp/tools/filesystem/content_replace.py +4 -4
- hanzo_mcp/tools/filesystem/diff.py +71 -59
- hanzo_mcp/tools/filesystem/directory_tree.py +7 -7
- hanzo_mcp/tools/filesystem/directory_tree_paginated.py +49 -37
- hanzo_mcp/tools/filesystem/edit.py +4 -4
- hanzo_mcp/tools/filesystem/find.py +173 -80
- hanzo_mcp/tools/filesystem/find_files.py +73 -52
- hanzo_mcp/tools/filesystem/git_search.py +157 -104
- hanzo_mcp/tools/filesystem/grep.py +8 -8
- hanzo_mcp/tools/filesystem/multi_edit.py +4 -8
- hanzo_mcp/tools/filesystem/read.py +12 -10
- hanzo_mcp/tools/filesystem/rules_tool.py +59 -43
- hanzo_mcp/tools/filesystem/search_tool.py +263 -207
- hanzo_mcp/tools/filesystem/symbols_tool.py +94 -54
- hanzo_mcp/tools/filesystem/tree.py +35 -33
- hanzo_mcp/tools/filesystem/unix_aliases.py +13 -18
- hanzo_mcp/tools/filesystem/watch.py +37 -36
- hanzo_mcp/tools/filesystem/write.py +4 -8
- hanzo_mcp/tools/jupyter/__init__.py +4 -4
- hanzo_mcp/tools/jupyter/base.py +4 -5
- hanzo_mcp/tools/jupyter/jupyter.py +67 -47
- hanzo_mcp/tools/jupyter/notebook_edit.py +4 -4
- hanzo_mcp/tools/jupyter/notebook_read.py +4 -7
- hanzo_mcp/tools/llm/__init__.py +5 -7
- hanzo_mcp/tools/llm/consensus_tool.py +72 -52
- hanzo_mcp/tools/llm/llm_manage.py +101 -60
- hanzo_mcp/tools/llm/llm_tool.py +226 -166
- hanzo_mcp/tools/llm/provider_tools.py +25 -26
- hanzo_mcp/tools/lsp/__init__.py +1 -1
- hanzo_mcp/tools/lsp/lsp_tool.py +228 -143
- hanzo_mcp/tools/mcp/__init__.py +2 -3
- hanzo_mcp/tools/mcp/mcp_add.py +27 -25
- hanzo_mcp/tools/mcp/mcp_remove.py +7 -8
- hanzo_mcp/tools/mcp/mcp_stats.py +23 -22
- hanzo_mcp/tools/mcp/mcp_tool.py +129 -98
- hanzo_mcp/tools/memory/__init__.py +39 -21
- hanzo_mcp/tools/memory/knowledge_tools.py +124 -99
- hanzo_mcp/tools/memory/memory_tools.py +90 -108
- hanzo_mcp/tools/search/__init__.py +7 -2
- hanzo_mcp/tools/search/find_tool.py +297 -212
- hanzo_mcp/tools/search/unified_search.py +366 -314
- hanzo_mcp/tools/shell/__init__.py +8 -7
- hanzo_mcp/tools/shell/auto_background.py +56 -49
- hanzo_mcp/tools/shell/base.py +1 -1
- hanzo_mcp/tools/shell/base_process.py +75 -75
- hanzo_mcp/tools/shell/bash_session.py +2 -2
- hanzo_mcp/tools/shell/bash_session_executor.py +4 -4
- hanzo_mcp/tools/shell/bash_tool.py +24 -31
- hanzo_mcp/tools/shell/command_executor.py +12 -12
- hanzo_mcp/tools/shell/logs.py +43 -33
- hanzo_mcp/tools/shell/npx.py +13 -13
- hanzo_mcp/tools/shell/npx_background.py +24 -21
- hanzo_mcp/tools/shell/npx_tool.py +18 -22
- hanzo_mcp/tools/shell/open.py +19 -21
- hanzo_mcp/tools/shell/pkill.py +31 -26
- hanzo_mcp/tools/shell/process_tool.py +32 -32
- hanzo_mcp/tools/shell/processes.py +57 -58
- hanzo_mcp/tools/shell/run_background.py +24 -25
- hanzo_mcp/tools/shell/run_command.py +5 -5
- hanzo_mcp/tools/shell/run_command_windows.py +5 -5
- hanzo_mcp/tools/shell/session_storage.py +3 -3
- hanzo_mcp/tools/shell/streaming_command.py +141 -126
- hanzo_mcp/tools/shell/uvx.py +24 -25
- hanzo_mcp/tools/shell/uvx_background.py +35 -33
- hanzo_mcp/tools/shell/uvx_tool.py +18 -22
- hanzo_mcp/tools/todo/__init__.py +6 -2
- hanzo_mcp/tools/todo/todo.py +50 -37
- hanzo_mcp/tools/todo/todo_read.py +5 -8
- hanzo_mcp/tools/todo/todo_write.py +5 -7
- hanzo_mcp/tools/vector/__init__.py +40 -28
- hanzo_mcp/tools/vector/ast_analyzer.py +176 -143
- hanzo_mcp/tools/vector/git_ingester.py +170 -179
- hanzo_mcp/tools/vector/index_tool.py +96 -44
- hanzo_mcp/tools/vector/infinity_store.py +283 -228
- hanzo_mcp/tools/vector/mock_infinity.py +39 -40
- hanzo_mcp/tools/vector/project_manager.py +88 -78
- hanzo_mcp/tools/vector/vector.py +59 -42
- hanzo_mcp/tools/vector/vector_index.py +30 -27
- hanzo_mcp/tools/vector/vector_search.py +64 -45
- hanzo_mcp/types.py +6 -4
- {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/METADATA +1 -1
- hanzo_mcp-0.8.0.dist-info/RECORD +185 -0
- hanzo_mcp-0.7.6.dist-info/RECORD +0 -182
- {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/WHEEL +0 -0
- {hanzo_mcp-0.7.6.dist-info → hanzo_mcp-0.8.0.dist-info}/entry_points.txt +0 -0
- {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
|
|
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__(
|
|
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
|
hanzo_mcp/tools/lsp/__init__.py
CHANGED