hanzo-mcp 0.6.2__tar.gz → 0.6.3__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.
Potentially problematic release.
This version of hanzo-mcp might be problematic. Click here for more details.
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/PKG-INFO +3 -2
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/__init__.py +1 -1
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/config/palette_tool.py +16 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/batch_search.py +6 -10
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/content_replace.py +3 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/diff.py +32 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/directory_tree.py +3 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/edit.py +2 -2
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/read.py +3 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/symbols.py +3 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/watch.py +30 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/bash_unified.py +28 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/npx_unified.py +28 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/open.py +10 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/process_unified.py +25 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/uvx_unified.py +28 -3
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/PKG-INFO +3 -2
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/requires.txt +2 -1
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/pyproject.toml +3 -2
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/LICENSE +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/README.md +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/cli.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/cli_enhanced.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/config/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/config/settings.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/config/tool_config.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/dev_server.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/compact_conversation.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/create_release.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/project_system.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/project_todo_reminder.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/prompts/utils.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/server.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/agent/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/agent/agent.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/agent/agent_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/agent/prompt.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/agent/tool_adapter.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/base.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/batch_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/config_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/context.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/palette.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/palette_loader.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/permissions.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/stats.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/thinking_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/tool_disable.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/tool_enable.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/tool_list.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/common/validation.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/config/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/config/config_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/config/index_config.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/database_manager.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph_add.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph_query.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph_remove.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/graph_stats.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/sql.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/sql_query.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/sql_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/database/sql_stats.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/editor/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/editor/neovim_command.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/editor/neovim_edit.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/editor/neovim_session.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/base.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/find.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/find_files.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/git_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/grep.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/multi_edit.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/symbols_unified.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/tree.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/unified_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/unix_aliases.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/filesystem/write.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/jupyter/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/jupyter/base.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/jupyter/jupyter.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/jupyter/notebook_edit.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/jupyter/notebook_read.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/consensus_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/llm_manage.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/llm_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/llm_unified.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/llm/provider_tools.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/mcp/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/mcp/mcp_add.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/mcp/mcp_remove.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/mcp/mcp_stats.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/mcp/mcp_unified.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/base.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/base_process.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/bash_session.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/bash_session_executor.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/command_executor.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/logs.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/npx.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/npx_background.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/pkill.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/processes.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/run_background.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/run_command.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/run_command_windows.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/session_manager.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/session_storage.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/uvx.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/shell/uvx_background.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/todo/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/todo/base.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/todo/todo.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/todo/todo_read.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/todo/todo_write.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/__init__.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/ast_analyzer.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/git_ingester.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/index_tool.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/infinity_store.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/mock_infinity.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/project_manager.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/vector.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/vector_index.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp/tools/vector/vector_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/SOURCES.txt +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/dependency_links.txt +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/entry_points.txt +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/hanzo_mcp.egg-info/top_level.txt +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/setup.cfg +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/setup.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_async_support.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_cli.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_git_ingestion.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_new_tools.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_search_quality.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_unified_search.py +0 -0
- {hanzo_mcp-0.6.2 → hanzo_mcp-0.6.3}/tests/test_vector_store.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hanzo-mcp
|
|
3
|
-
Version: 0.6.
|
|
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
|
|
@@ -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.
|
|
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
|
|
@@ -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
|
-
|
|
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, **
|
|
169
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
161
170
|
"""Call the tool with arguments."""
|
|
162
|
-
return await self.run(
|
|
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
|
|
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
|
|
791
|
+
async def batch_search(
|
|
792
792
|
ctx: MCPContext,
|
|
793
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, **
|
|
199
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
179
200
|
"""Call the tool with arguments."""
|
|
180
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
44
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
26
45
|
"""Call the tool with arguments."""
|
|
27
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
41
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
24
42
|
"""Call the tool with arguments."""
|
|
25
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
113
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
96
114
|
"""Call the tool with arguments."""
|
|
97
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
32
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
26
33
|
"""Call the tool with arguments."""
|
|
27
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
141
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
126
142
|
"""Call the tool with arguments."""
|
|
127
|
-
return await self.run(
|
|
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
|
-
|
|
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, **
|
|
113
|
+
async def call(self, ctx: MCPContext, **params) -> str:
|
|
96
114
|
"""Call the tool with arguments."""
|
|
97
|
-
return await self.run(
|
|
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.
|
|
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
|
|
@@ -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.
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hanzo-mcp"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.3"
|
|
8
8
|
description = "The Zen of Hanzo MCP: One server to rule them all. The ultimate MCP that orchestrates all others."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -29,7 +29,8 @@ dependencies = [
|
|
|
29
29
|
"libtmux>=0.39.0",
|
|
30
30
|
"nbformat>=5.10.4",
|
|
31
31
|
"psutil>=6.1.0",
|
|
32
|
-
"pydantic>=2.
|
|
32
|
+
"pydantic>=2.11.0",
|
|
33
|
+
"pydantic-settings>=2.7.0",
|
|
33
34
|
"typing-extensions>=4.12.2",
|
|
34
35
|
"watchdog>=3.0.0",
|
|
35
36
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|