hanzo-mcp 0.8.3__tar.gz → 0.8.4__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.8.4/PKG-INFO +411 -0
- hanzo_mcp-0.8.4/README.md +341 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/__init__.py +1 -1
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/cli.py +45 -21
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/core/base_agent.py +4 -5
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/core/model_registry.py +2 -2
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/__init__.py +55 -28
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/agent_tool.py +12 -1
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/cli_tools.py +1 -2
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/network_tool.py +11 -55
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/unified_cli_tools.py +3 -3
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/llm_unified.py +2 -2
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/__init__.py +7 -1
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/bash_tool.py +14 -28
- hanzo_mcp-0.8.4/hanzo_mcp/tools/shell/zsh_tool.py +266 -0
- hanzo_mcp-0.8.4/hanzo_mcp.egg-info/PKG-INFO +411 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp.egg-info/SOURCES.txt +2 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/pyproject.toml +1 -2
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_cli_tools.py +10 -10
- hanzo_mcp-0.8.4/tests/test_shell_tools.py +253 -0
- hanzo_mcp-0.8.3/PKG-INFO +0 -526
- hanzo_mcp-0.8.3/README.md +0 -456
- hanzo_mcp-0.8.3/hanzo_mcp.egg-info/PKG-INFO +0 -526
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/__main__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/analytics/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/analytics/posthog_analytics.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/bridge.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/cli_enhanced.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/cli_plugin.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/compute_nodes.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/config/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/config/settings.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/config/tool_config.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/dev_server.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/compact_conversation.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/create_release.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/enhanced_prompts.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/example_custom_prompt.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/project_system.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/project_todo_reminder.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/tool_explorer.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/prompts/utils.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/server.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/server_enhanced.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/agent.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/clarification_protocol.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/clarification_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/claude_cli_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/claude_desktop_auth.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/cli_agent_base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/code_auth.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/code_auth_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/codex_cli_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/critic_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/gemini_cli_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/grok_cli_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/iching_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/prompt.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/review_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/swarm_alias.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/swarm_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/agent/tool_adapter.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/batch_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/config_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/context.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/context_fix.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/critic_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/decorators.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/enhanced_base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/fastmcp_pagination.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/forgiving_edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/mode.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/mode_loader.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/paginated_base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/paginated_response.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/pagination.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/permissions.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/personality.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/plugin_loader.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/stats.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/test_helpers.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/thinking_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/tool_disable.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/tool_enable.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/tool_list.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/truncate.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/common/validation.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/config/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/config/config_tool.py +1 -1
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/config/index_config.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/config/mode_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/database_manager.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph_add.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph_query.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph_remove.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/graph_stats.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/sql.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/sql_query.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/sql_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/database/sql_stats.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/editor/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/editor/neovim_command.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/editor/neovim_edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/editor/neovim_session.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/ast_multi_edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/ast_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/batch_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/content_replace.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/diff.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/directory_tree.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/directory_tree_paginated.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/find.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/find_files.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/git_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/grep.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/multi_edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/read.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/rules_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/search_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/symbols_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/tree.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/unix_aliases.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/watch.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/filesystem/write.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/jupyter/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/jupyter/base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/jupyter/jupyter.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/jupyter/notebook_edit.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/jupyter/notebook_read.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/consensus_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/llm_manage.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/llm_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/llm/provider_tools.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/lsp/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/lsp/lsp_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/mcp/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/mcp/mcp_add.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/mcp/mcp_remove.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/mcp/mcp_stats.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/mcp/mcp_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/memory/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/memory/knowledge_tools.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/memory/memory_tools.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/search/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/search/find_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/search/unified_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/auto_background.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/base_process.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/bash_session.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/bash_session_executor.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/command_executor.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/logs.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/npx.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/npx_background.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/npx_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/open.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/pkill.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/process_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/processes.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/run_background.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/run_command.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/run_command_windows.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/session_manager.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/session_storage.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/streaming_command.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/uvx.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/uvx_background.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/shell/uvx_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/todo/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/todo/base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/todo/todo.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/todo/todo_read.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/todo/todo_write.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/__init__.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/ast_analyzer.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/git_ingester.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/index_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/infinity_store.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/mock_infinity.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/project_manager.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/vector.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/vector_index.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/tools/vector/vector_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp/types.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp.egg-info/dependency_links.txt +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp.egg-info/entry_points.txt +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp.egg-info/requires.txt +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/hanzo_mcp.egg-info/top_level.txt +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/setup.cfg +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_agent_tools_ci.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_async_support.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_batch_tool_edge_cases.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_cli.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_cli_agents_consolidated.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_e2e_demo.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_e2e_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_failure_cases.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_find_tool_ffind.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_find_tool_integration.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_find_tool_registration.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_git_ingestion.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_hanzo_agents_integration.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_hanzo_mcp_integration.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_hanzo_mcp_local.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_hanzo_mcp_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_hanzo_network_integration.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_litellm_warnings.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_lsp_tool.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_manual.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_memory_base.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_memory_basic.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_memory_consolidated.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_memory_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_memory_utils.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_new_tools.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_performance.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_search_quality.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_shell_features.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_stdio_protocol.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_stdio_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_streaming_command.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_swarm_simple.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_tools_suite.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_unified_search.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_utils.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_vector_store.py +0 -0
- {hanzo_mcp-0.8.3 → hanzo_mcp-0.8.4}/tests/test_web3_integration.py +0 -0
hanzo_mcp-0.8.4/PKG-INFO
ADDED
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hanzo-mcp
|
|
3
|
+
Version: 0.8.4
|
|
4
|
+
Summary: The Zen of Hanzo MCP: One server to rule them all. The ultimate MCP that orchestrates all others.
|
|
5
|
+
Author-email: Hanzo Industries Inc <dev@hanzo.ai>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/hanzoai/mcp
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/hanzoai/mcp/issues
|
|
9
|
+
Project-URL: Documentation, https://mcp.hanzo.ai
|
|
10
|
+
Keywords: mcp,claude,hanzo,code,agent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Requires-Python: >=3.12
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
Requires-Dist: mcp>=1.9.4
|
|
17
|
+
Requires-Dist: fastmcp>=2.9.2
|
|
18
|
+
Requires-Dist: httpx>=0.28.1
|
|
19
|
+
Requires-Dist: uvicorn>=0.34.0
|
|
20
|
+
Requires-Dist: openai>=1.62.0
|
|
21
|
+
Requires-Dist: python-dotenv>=1.0.1
|
|
22
|
+
Requires-Dist: litellm>=1.73.2
|
|
23
|
+
Requires-Dist: grep-ast>=0.8.1
|
|
24
|
+
Requires-Dist: bashlex>=0.18
|
|
25
|
+
Requires-Dist: libtmux>=0.39.0
|
|
26
|
+
Requires-Dist: nbformat>=5.10.4
|
|
27
|
+
Requires-Dist: psutil>=6.0.0
|
|
28
|
+
Requires-Dist: pydantic>=2.9.2
|
|
29
|
+
Requires-Dist: pydantic-settings>=2.7.0
|
|
30
|
+
Requires-Dist: typing-extensions>=4.13.0
|
|
31
|
+
Requires-Dist: watchdog>=6.0.0
|
|
32
|
+
Requires-Dist: keyring>=24.0.0
|
|
33
|
+
Requires-Dist: ffind>=1.3.0
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: black>=23.3.0; extra == "dev"
|
|
39
|
+
Requires-Dist: sphinx>=8.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "dev"
|
|
41
|
+
Requires-Dist: myst-parser>=4.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: sphinx-copybutton>=0.5.0; extra == "dev"
|
|
43
|
+
Requires-Dist: mypy>=1.10.0; extra == "dev"
|
|
44
|
+
Requires-Dist: types-aiofiles>=23.2.0; extra == "dev"
|
|
45
|
+
Requires-Dist: types-psutil>=5.9.5; extra == "dev"
|
|
46
|
+
Requires-Dist: types-setuptools>=69.5.0; extra == "dev"
|
|
47
|
+
Provides-Extra: docs
|
|
48
|
+
Requires-Dist: sphinx>=8.0.0; extra == "docs"
|
|
49
|
+
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "docs"
|
|
50
|
+
Requires-Dist: myst-parser>=4.0.0; extra == "docs"
|
|
51
|
+
Requires-Dist: sphinx-copybutton>=0.5.0; extra == "docs"
|
|
52
|
+
Provides-Extra: analytics
|
|
53
|
+
Requires-Dist: posthog>=3.0.0; extra == "analytics"
|
|
54
|
+
Provides-Extra: test
|
|
55
|
+
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
56
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
57
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
|
|
58
|
+
Requires-Dist: pytest-asyncio>=0.25.3; extra == "test"
|
|
59
|
+
Requires-Dist: twisted; extra == "test"
|
|
60
|
+
Provides-Extra: agents
|
|
61
|
+
Requires-Dist: hanzo-agents>=0.1.0; extra == "agents"
|
|
62
|
+
Provides-Extra: memory
|
|
63
|
+
Requires-Dist: hanzo-memory>=1.0.0; extra == "memory"
|
|
64
|
+
Provides-Extra: performance
|
|
65
|
+
Requires-Dist: ujson>=5.7.0; extra == "performance"
|
|
66
|
+
Requires-Dist: orjson>=3.9.0; extra == "performance"
|
|
67
|
+
Provides-Extra: publish
|
|
68
|
+
Requires-Dist: twine>=4.0.2; extra == "publish"
|
|
69
|
+
Requires-Dist: build>=1.0.3; extra == "publish"
|
|
70
|
+
|
|
71
|
+
# Hanzo Model Context Protocol (MCP)
|
|
72
|
+
|
|
73
|
+
[](https://pypi.org/project/hanzo-mcp/)
|
|
74
|
+
[](https://pypi.org/project/hanzo-mcp/)
|
|
75
|
+
|
|
76
|
+
Model Context Protocol implementation for advanced tool use and context management.
|
|
77
|
+
|
|
78
|
+
## Installation
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install hanzo-mcp
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Features
|
|
85
|
+
|
|
86
|
+
- **Tool Management**: Register and manage AI tools
|
|
87
|
+
- **File Operations**: Read, write, edit files
|
|
88
|
+
- **Code Intelligence**: AST analysis, symbol search
|
|
89
|
+
- **Shell Execution**: Run commands safely
|
|
90
|
+
- **Agent Delegation**: Recursive agent capabilities
|
|
91
|
+
- **Memory Integration**: Persistent context storage
|
|
92
|
+
- **Batch Operations**: Execute multiple tools efficiently
|
|
93
|
+
|
|
94
|
+
## Quick Start
|
|
95
|
+
|
|
96
|
+
### Basic Usage
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
from hanzo_mcp import create_mcp_server
|
|
100
|
+
|
|
101
|
+
# Create MCP server
|
|
102
|
+
server = create_mcp_server()
|
|
103
|
+
|
|
104
|
+
# Register tools
|
|
105
|
+
server.register_filesystem_tools()
|
|
106
|
+
server.register_shell_tools()
|
|
107
|
+
server.register_agent_tools()
|
|
108
|
+
|
|
109
|
+
# Start server
|
|
110
|
+
await server.start()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Tool Categories
|
|
114
|
+
|
|
115
|
+
#### Filesystem Tools
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# Read file
|
|
119
|
+
content = await server.tools.read(file_path="/path/to/file.py")
|
|
120
|
+
|
|
121
|
+
# Write file
|
|
122
|
+
await server.tools.write(
|
|
123
|
+
file_path="/path/to/new.py",
|
|
124
|
+
content="print('Hello')"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# Edit file
|
|
128
|
+
await server.tools.edit(
|
|
129
|
+
file_path="/path/to/file.py",
|
|
130
|
+
old_string="old code",
|
|
131
|
+
new_string="new code"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Multi-edit
|
|
135
|
+
await server.tools.multi_edit(
|
|
136
|
+
file_path="/path/to/file.py",
|
|
137
|
+
edits=[
|
|
138
|
+
{"old_string": "foo", "new_string": "bar"},
|
|
139
|
+
{"old_string": "baz", "new_string": "qux"}
|
|
140
|
+
]
|
|
141
|
+
)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Search Tools
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
# Unified search (grep + AST + semantic)
|
|
148
|
+
results = await server.tools.search(
|
|
149
|
+
pattern="function_name",
|
|
150
|
+
path="/project"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# AST-aware search
|
|
154
|
+
results = await server.tools.grep_ast(
|
|
155
|
+
pattern="class.*Service",
|
|
156
|
+
path="/src"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
# Symbol search
|
|
160
|
+
symbols = await server.tools.symbols(
|
|
161
|
+
pattern="def test_",
|
|
162
|
+
path="/tests"
|
|
163
|
+
)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### Shell Tools
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
# Run command
|
|
170
|
+
result = await server.tools.bash(
|
|
171
|
+
command="ls -la",
|
|
172
|
+
cwd="/project"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# Run with auto-backgrounding
|
|
176
|
+
result = await server.tools.bash(
|
|
177
|
+
command="python server.py",
|
|
178
|
+
timeout=120000 # Auto-backgrounds after 2 min
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Manage processes
|
|
182
|
+
processes = await server.tools.process(action="list")
|
|
183
|
+
logs = await server.tools.process(
|
|
184
|
+
action="logs",
|
|
185
|
+
id="bash_abc123"
|
|
186
|
+
)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Agent Tools
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
# Dispatch agent for complex tasks
|
|
193
|
+
result = await server.tools.dispatch_agent(
|
|
194
|
+
prompt="Analyze the codebase architecture",
|
|
195
|
+
path="/project"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Network of agents
|
|
199
|
+
result = await server.tools.network(
|
|
200
|
+
task="Implement user authentication",
|
|
201
|
+
agents=["architect", "developer", "tester"]
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
# CLI tool integration
|
|
205
|
+
result = await server.tools.claude(
|
|
206
|
+
args=["--analyze", "main.py"]
|
|
207
|
+
)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### Batch Operations
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
# Execute multiple tools in parallel
|
|
214
|
+
results = await server.tools.batch(
|
|
215
|
+
description="Read multiple files",
|
|
216
|
+
invocations=[
|
|
217
|
+
{"tool_name": "read", "input": {"file_path": "file1.py"}},
|
|
218
|
+
{"tool_name": "read", "input": {"file_path": "file2.py"}},
|
|
219
|
+
{"tool_name": "grep", "input": {"pattern": "TODO"}}
|
|
220
|
+
]
|
|
221
|
+
)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Advanced Features
|
|
225
|
+
|
|
226
|
+
### Custom Tools
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
from hanzo_mcp import Tool
|
|
230
|
+
|
|
231
|
+
class MyCustomTool(Tool):
|
|
232
|
+
name = "my_tool"
|
|
233
|
+
description = "Custom tool"
|
|
234
|
+
|
|
235
|
+
async def call(self, ctx, **params):
|
|
236
|
+
# Tool implementation
|
|
237
|
+
return "Result"
|
|
238
|
+
|
|
239
|
+
# Register custom tool
|
|
240
|
+
server.register_tool(MyCustomTool())
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Permission Management
|
|
244
|
+
|
|
245
|
+
```python
|
|
246
|
+
from hanzo_mcp import PermissionManager
|
|
247
|
+
|
|
248
|
+
# Create permission manager
|
|
249
|
+
pm = PermissionManager()
|
|
250
|
+
|
|
251
|
+
# Set permission mode
|
|
252
|
+
pm.set_mode("review") # review, auto_approve, auto_deny
|
|
253
|
+
|
|
254
|
+
# Check permission
|
|
255
|
+
allowed = await pm.check_permission(
|
|
256
|
+
tool="write",
|
|
257
|
+
params={"file_path": "/etc/passwd"}
|
|
258
|
+
)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Context Management
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
from hanzo_mcp import ToolContext
|
|
265
|
+
|
|
266
|
+
# Create context
|
|
267
|
+
ctx = ToolContext(
|
|
268
|
+
cwd="/project",
|
|
269
|
+
env={"API_KEY": "secret"},
|
|
270
|
+
timeout=30000
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
# Use with tools
|
|
274
|
+
result = await tool.call(ctx, **params)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Configuration
|
|
278
|
+
|
|
279
|
+
### Environment Variables
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# API keys for agent tools
|
|
283
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
284
|
+
OPENAI_API_KEY=sk-...
|
|
285
|
+
|
|
286
|
+
# Tool settings
|
|
287
|
+
MCP_PERMISSION_MODE=review
|
|
288
|
+
MCP_MAX_FILE_SIZE=10485760
|
|
289
|
+
MCP_TIMEOUT=120000
|
|
290
|
+
|
|
291
|
+
# Search settings
|
|
292
|
+
MCP_SEARCH_IGNORE=node_modules,*.pyc
|
|
293
|
+
MCP_SEARCH_MAX_RESULTS=100
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Configuration File
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
tools:
|
|
300
|
+
filesystem:
|
|
301
|
+
enabled: true
|
|
302
|
+
max_file_size: 10MB
|
|
303
|
+
allowed_paths:
|
|
304
|
+
- /home/user/projects
|
|
305
|
+
- /tmp
|
|
306
|
+
|
|
307
|
+
shell:
|
|
308
|
+
enabled: true
|
|
309
|
+
timeout: 120000
|
|
310
|
+
auto_background: true
|
|
311
|
+
|
|
312
|
+
agent:
|
|
313
|
+
enabled: true
|
|
314
|
+
models:
|
|
315
|
+
- claude-3-opus
|
|
316
|
+
- gpt-4
|
|
317
|
+
|
|
318
|
+
search:
|
|
319
|
+
ignore_patterns:
|
|
320
|
+
- node_modules
|
|
321
|
+
- "*.pyc"
|
|
322
|
+
- .git
|
|
323
|
+
max_results: 100
|
|
324
|
+
|
|
325
|
+
permissions:
|
|
326
|
+
mode: review # review, auto_approve, auto_deny
|
|
327
|
+
whitelist:
|
|
328
|
+
- read
|
|
329
|
+
- grep
|
|
330
|
+
- search
|
|
331
|
+
blacklist:
|
|
332
|
+
- rm
|
|
333
|
+
- sudo
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## CLI Usage
|
|
337
|
+
|
|
338
|
+
### Installation to Claude Desktop
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
# Install to Claude Desktop
|
|
342
|
+
hanzo-mcp install-desktop
|
|
343
|
+
|
|
344
|
+
# Serve MCP
|
|
345
|
+
hanzo-mcp serve --port 3000
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Standalone Server
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
# Start MCP server
|
|
352
|
+
hanzo-mcp serve
|
|
353
|
+
|
|
354
|
+
# With custom config
|
|
355
|
+
hanzo-mcp serve --config mcp-config.yaml
|
|
356
|
+
|
|
357
|
+
# With specific tools
|
|
358
|
+
hanzo-mcp serve --tools filesystem,shell,agent
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Development
|
|
362
|
+
|
|
363
|
+
### Setup
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
cd pkg/hanzo-mcp
|
|
367
|
+
uv sync --all-extras
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Testing
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
# Unit tests
|
|
374
|
+
pytest tests/ -v
|
|
375
|
+
|
|
376
|
+
# Integration tests
|
|
377
|
+
pytest tests/ -m integration
|
|
378
|
+
|
|
379
|
+
# With coverage
|
|
380
|
+
pytest tests/ --cov=hanzo_mcp
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Building
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
uv build
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
## Architecture
|
|
390
|
+
|
|
391
|
+
### Tool Categories
|
|
392
|
+
|
|
393
|
+
- **Filesystem**: File operations (read, write, edit)
|
|
394
|
+
- **Search**: Code search (grep, AST, semantic)
|
|
395
|
+
- **Shell**: Command execution and process management
|
|
396
|
+
- **Agent**: AI agent delegation and orchestration
|
|
397
|
+
- **Memory**: Context and knowledge persistence
|
|
398
|
+
- **Config**: Configuration management
|
|
399
|
+
- **LLM**: Direct LLM interactions
|
|
400
|
+
|
|
401
|
+
### Security
|
|
402
|
+
|
|
403
|
+
- Permission system for dangerous operations
|
|
404
|
+
- Path validation and sandboxing
|
|
405
|
+
- Command injection protection
|
|
406
|
+
- Rate limiting on operations
|
|
407
|
+
- Audit logging
|
|
408
|
+
|
|
409
|
+
## License
|
|
410
|
+
|
|
411
|
+
Apache License 2.0
|