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