hanzo-mcp 0.3.1__tar.gz → 0.3.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.3.1 → hanzo_mcp-0.3.4}/PKG-INFO +20 -3
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/README.md +15 -1
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/__init__.py +1 -1
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/cli.py +37 -9
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/logging_config.py +39 -8
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/command_executor.py +3 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/PKG-INFO +20 -3
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/requires.txt +3 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/pyproject.toml +3 -3
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/LICENSE +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/server.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/agent_tool.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/base_provider.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/litellm_provider.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/lmstudio_agent.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/lmstudio_provider.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/prompt.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/provider_registry.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/agent/tool_adapter.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/base.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/context.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/error_handling.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/permissions.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/session.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/think_tool.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/validation.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/common/version_tool.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/base.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/content_replace.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/directory_tree.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/edit_file.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/get_file_info.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/read_files.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/search_content.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/filesystem/write_file.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/jupyter/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/jupyter/base.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/jupyter/edit_notebook.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/jupyter/notebook_operations.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/jupyter/read_notebook.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/project/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/project/analysis.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/project/base.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/project/project_analyze.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/__init__.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/base.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/run_command.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/run_script.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp/tools/shell/script_tool.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/SOURCES.txt +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/dependency_links.txt +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/entry_points.txt +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/hanzo_mcp.egg-info/top_level.txt +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/setup.cfg +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/setup.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/tests/test_cli.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/tests/test_server.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/tests/test_tools_registration.py +0 -0
- {hanzo_mcp-0.3.1 → hanzo_mcp-0.3.4}/tests/test_validation.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hanzo-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: MCP implementation of Hanzo capabilities
|
|
5
5
|
Author-email: Hanzo Industries Inc <dev@hanzo.ai>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/hanzoai/mcp
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/hanzoai/mcp/issues
|
|
9
|
-
Project-URL: Documentation, https://github.com/hanzoai/mcp/
|
|
9
|
+
Project-URL: Documentation, https://github.com/hanzoai/mcp/tree/main/docs
|
|
10
10
|
Keywords: mcp,claude,hanzo,code,agent
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -25,6 +25,9 @@ Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
|
25
25
|
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
26
26
|
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
27
27
|
Requires-Dist: black>=23.3.0; extra == "dev"
|
|
28
|
+
Requires-Dist: sphinx>=8.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "dev"
|
|
30
|
+
Requires-Dist: myst-parser>=2.0.0; extra == "dev"
|
|
28
31
|
Provides-Extra: test
|
|
29
32
|
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
30
33
|
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
@@ -93,7 +96,7 @@ uv pip install hanzo-mcp
|
|
|
93
96
|
pip install hanzo-mcp
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
For detailed installation and configuration instructions, please refer to [
|
|
99
|
+
For detailed installation and configuration instructions, please refer to the [documentation](./docs/).
|
|
97
100
|
|
|
98
101
|
Of course, you can also read [USEFUL_PROMPTS](./doc/USEFUL_PROMPTS.md) for some inspiration on how to use hanzo-mcp.
|
|
99
102
|
|
|
@@ -106,6 +109,20 @@ This implementation follows best practices for securing access to your filesyste
|
|
|
106
109
|
- Input validation and sanitization
|
|
107
110
|
- Proper error handling and reporting
|
|
108
111
|
|
|
112
|
+
## Documentation
|
|
113
|
+
|
|
114
|
+
Comprehensive documentation is available in the [docs](./docs/) directory. You can build and view the documentation locally:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Build the documentation
|
|
118
|
+
make docs
|
|
119
|
+
|
|
120
|
+
# Start a local server to view the documentation
|
|
121
|
+
make docs-serve
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Then open http://localhost:8000/ in your browser to view the documentation.
|
|
125
|
+
|
|
109
126
|
## Development
|
|
110
127
|
|
|
111
128
|
### Setup Development Environment
|
|
@@ -52,7 +52,7 @@ uv pip install hanzo-mcp
|
|
|
52
52
|
pip install hanzo-mcp
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
For detailed installation and configuration instructions, please refer to [
|
|
55
|
+
For detailed installation and configuration instructions, please refer to the [documentation](./docs/).
|
|
56
56
|
|
|
57
57
|
Of course, you can also read [USEFUL_PROMPTS](./doc/USEFUL_PROMPTS.md) for some inspiration on how to use hanzo-mcp.
|
|
58
58
|
|
|
@@ -65,6 +65,20 @@ This implementation follows best practices for securing access to your filesyste
|
|
|
65
65
|
- Input validation and sanitization
|
|
66
66
|
- Proper error handling and reporting
|
|
67
67
|
|
|
68
|
+
## Documentation
|
|
69
|
+
|
|
70
|
+
Comprehensive documentation is available in the [docs](./docs/) directory. You can build and view the documentation locally:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Build the documentation
|
|
74
|
+
make docs
|
|
75
|
+
|
|
76
|
+
# Start a local server to view the documentation
|
|
77
|
+
make docs-serve
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then open http://localhost:8000/ in your browser to view the documentation.
|
|
81
|
+
|
|
68
82
|
## Development
|
|
69
83
|
|
|
70
84
|
### Setup Development Environment
|
|
@@ -133,6 +133,14 @@ def main() -> None:
|
|
|
133
133
|
default=False,
|
|
134
134
|
help="Disable logging to file (logs to console only)"
|
|
135
135
|
)
|
|
136
|
+
|
|
137
|
+
_ = parser.add_argument(
|
|
138
|
+
"--enable-console-logging",
|
|
139
|
+
dest="enable_console_logging",
|
|
140
|
+
action="store_true",
|
|
141
|
+
default=False,
|
|
142
|
+
help="Enable logging to console (stdout/stderr). By default, logs to file only."
|
|
143
|
+
)
|
|
136
144
|
|
|
137
145
|
_ = parser.add_argument(
|
|
138
146
|
"--disable-write-tools",
|
|
@@ -166,13 +174,25 @@ def main() -> None:
|
|
|
166
174
|
disable_write_tools: bool = cast(bool, args.disable_write_tools)
|
|
167
175
|
log_level: str = cast(str, args.log_level)
|
|
168
176
|
disable_file_logging: bool = cast(bool, args.disable_file_logging)
|
|
177
|
+
enable_console_logging: bool = cast(bool, args.enable_console_logging)
|
|
169
178
|
allowed_paths: list[str] = (
|
|
170
179
|
cast(list[str], args.allowed_paths) if args.allowed_paths else []
|
|
171
180
|
)
|
|
172
181
|
|
|
173
182
|
# Setup logging
|
|
174
|
-
|
|
175
|
-
|
|
183
|
+
# Ensure absolutely NO logging when using stdio transport to avoid protocol corruption
|
|
184
|
+
# For sse transport, use file logging by default and console logging only if explicitly requested
|
|
185
|
+
# Only set up logging if not using stdio transport or explicitly requested
|
|
186
|
+
if transport != "stdio" or (enable_console_logging or not disable_file_logging):
|
|
187
|
+
setup_logging(
|
|
188
|
+
log_level=log_level,
|
|
189
|
+
log_to_file=not disable_file_logging and transport != "stdio", # Disable file logging for stdio transport
|
|
190
|
+
log_to_console=enable_console_logging and transport != "stdio", # Only enable console logging if requested AND not using stdio
|
|
191
|
+
transport=transport, # Pass the transport to ensure it's properly handled
|
|
192
|
+
testing="pytest" in sys.modules
|
|
193
|
+
)
|
|
194
|
+
logger.debug(f"Hanzo MCP CLI started with arguments: {args}")
|
|
195
|
+
# No logging setup at all for stdio transport unless explicitly requested
|
|
176
196
|
|
|
177
197
|
|
|
178
198
|
if install:
|
|
@@ -200,10 +220,11 @@ def main() -> None:
|
|
|
200
220
|
elif allowed_paths:
|
|
201
221
|
project_dir = allowed_paths[0]
|
|
202
222
|
|
|
203
|
-
# Run the server
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
223
|
+
# Run the server - only log if not using stdio transport or logging is explicitly enabled
|
|
224
|
+
if transport != "stdio" or (enable_console_logging or not disable_file_logging):
|
|
225
|
+
logger.info(f"Starting Hanzo MCP server with name: {name}")
|
|
226
|
+
logger.debug(f"Allowed paths: {allowed_paths}")
|
|
227
|
+
logger.debug(f"Project directory: {project_dir}")
|
|
207
228
|
|
|
208
229
|
try:
|
|
209
230
|
server = HanzoServer(
|
|
@@ -220,12 +241,19 @@ def main() -> None:
|
|
|
220
241
|
host=host,
|
|
221
242
|
port=port
|
|
222
243
|
)
|
|
223
|
-
|
|
244
|
+
|
|
245
|
+
# Only log if not using stdio transport or logging is explicitly enabled
|
|
246
|
+
if transport != "stdio" or (enable_console_logging or not disable_file_logging):
|
|
247
|
+
logger.info(f"Server initialized successfully, running with transport: {transport}")
|
|
248
|
+
|
|
224
249
|
# Transport will be automatically cast to Literal['stdio', 'sse'] by the server
|
|
225
250
|
server.run(transport=transport)
|
|
226
251
|
except Exception as e:
|
|
227
|
-
|
|
228
|
-
|
|
252
|
+
# Only log if not using stdio transport or logging is explicitly enabled
|
|
253
|
+
if transport != "stdio" or (enable_console_logging or not disable_file_logging):
|
|
254
|
+
logger.error(f"Error starting server: {str(e)}")
|
|
255
|
+
logger.exception("Server startup failed with exception:")
|
|
256
|
+
# For stdio transport, we want a clean exception without any logging
|
|
229
257
|
# Re-raise the exception for proper error handling
|
|
230
258
|
raise
|
|
231
259
|
|
|
@@ -8,14 +8,23 @@ import os
|
|
|
8
8
|
import sys
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
from pathlib import Path
|
|
11
|
+
from typing import Optional
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
def setup_logging(
|
|
14
|
+
def setup_logging(
|
|
15
|
+
log_level: str = "INFO",
|
|
16
|
+
log_to_file: bool = True,
|
|
17
|
+
log_to_console: bool = False, # Changed default to False
|
|
18
|
+
transport: Optional[str] = None,
|
|
19
|
+
testing: bool = False
|
|
20
|
+
) -> None:
|
|
14
21
|
"""Set up logging configuration.
|
|
15
22
|
|
|
16
23
|
Args:
|
|
17
24
|
log_level: The logging level ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
|
|
18
|
-
log_to_file: Whether to log to a file in addition to the console
|
|
25
|
+
log_to_file: Whether to log to a file in addition to the console (default: True)
|
|
26
|
+
log_to_console: Whether to log to the console (default: False to avoid stdio transport conflicts)
|
|
27
|
+
transport: The transport mechanism being used ("stdio" or "sse")
|
|
19
28
|
testing: Set to True to disable file operations for testing
|
|
20
29
|
"""
|
|
21
30
|
# Convert string log level to logging constant
|
|
@@ -35,12 +44,14 @@ def setup_logging(log_level: str = "INFO", log_to_file: bool = True, testing: bo
|
|
|
35
44
|
# Base configuration
|
|
36
45
|
handlers = []
|
|
37
46
|
|
|
38
|
-
# Console handler
|
|
39
|
-
console
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
# Console handler - Always use stderr to avoid interfering with stdio transport
|
|
48
|
+
# Disable console logging when using stdio transport to avoid protocol corruption
|
|
49
|
+
if log_to_console and (transport != "stdio"):
|
|
50
|
+
console = logging.StreamHandler(sys.stderr)
|
|
51
|
+
console.setLevel(numeric_level)
|
|
52
|
+
console_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
53
|
+
console.setFormatter(console_formatter)
|
|
54
|
+
handlers.append(console)
|
|
44
55
|
|
|
45
56
|
# File handler (if enabled)
|
|
46
57
|
if log_to_file and not testing:
|
|
@@ -68,6 +79,8 @@ def setup_logging(log_level: str = "INFO", log_to_file: bool = True, testing: bo
|
|
|
68
79
|
root_logger.info(f"Logging initialized at level {log_level}")
|
|
69
80
|
if log_to_file and not testing:
|
|
70
81
|
root_logger.info(f"Log file: {log_file}")
|
|
82
|
+
if not log_to_console or transport == "stdio":
|
|
83
|
+
root_logger.info("Console logging disabled")
|
|
71
84
|
|
|
72
85
|
|
|
73
86
|
def get_log_files() -> list[str]:
|
|
@@ -82,3 +95,21 @@ def get_log_files() -> list[str]:
|
|
|
82
95
|
|
|
83
96
|
log_files = [str(f) for f in log_dir.glob("hanzo-mcp-*.log")]
|
|
84
97
|
return sorted(log_files, reverse=True)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_current_log_file() -> Optional[str]:
|
|
101
|
+
"""Get the path to the current log file.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
The path to the current log file, or None if no log file exists
|
|
105
|
+
"""
|
|
106
|
+
log_dir = Path.home() / ".hanzo" / "logs"
|
|
107
|
+
if not log_dir.exists():
|
|
108
|
+
return None
|
|
109
|
+
|
|
110
|
+
current_time = datetime.now().strftime("%Y-%m-%d")
|
|
111
|
+
log_file = log_dir / f"hanzo-mcp-{current_time}.log"
|
|
112
|
+
|
|
113
|
+
if log_file.exists():
|
|
114
|
+
return str(log_file)
|
|
115
|
+
return None
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hanzo-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: MCP implementation of Hanzo capabilities
|
|
5
5
|
Author-email: Hanzo Industries Inc <dev@hanzo.ai>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/hanzoai/mcp
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/hanzoai/mcp/issues
|
|
9
|
-
Project-URL: Documentation, https://github.com/hanzoai/mcp/
|
|
9
|
+
Project-URL: Documentation, https://github.com/hanzoai/mcp/tree/main/docs
|
|
10
10
|
Keywords: mcp,claude,hanzo,code,agent
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -25,6 +25,9 @@ Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
|
25
25
|
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
26
26
|
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
27
27
|
Requires-Dist: black>=23.3.0; extra == "dev"
|
|
28
|
+
Requires-Dist: sphinx>=8.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "dev"
|
|
30
|
+
Requires-Dist: myst-parser>=2.0.0; extra == "dev"
|
|
28
31
|
Provides-Extra: test
|
|
29
32
|
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
30
33
|
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
@@ -93,7 +96,7 @@ uv pip install hanzo-mcp
|
|
|
93
96
|
pip install hanzo-mcp
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
For detailed installation and configuration instructions, please refer to [
|
|
99
|
+
For detailed installation and configuration instructions, please refer to the [documentation](./docs/).
|
|
97
100
|
|
|
98
101
|
Of course, you can also read [USEFUL_PROMPTS](./doc/USEFUL_PROMPTS.md) for some inspiration on how to use hanzo-mcp.
|
|
99
102
|
|
|
@@ -106,6 +109,20 @@ This implementation follows best practices for securing access to your filesyste
|
|
|
106
109
|
- Input validation and sanitization
|
|
107
110
|
- Proper error handling and reporting
|
|
108
111
|
|
|
112
|
+
## Documentation
|
|
113
|
+
|
|
114
|
+
Comprehensive documentation is available in the [docs](./docs/) directory. You can build and view the documentation locally:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Build the documentation
|
|
118
|
+
make docs
|
|
119
|
+
|
|
120
|
+
# Start a local server to view the documentation
|
|
121
|
+
make docs-serve
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Then open http://localhost:8000/ in your browser to view the documentation.
|
|
125
|
+
|
|
109
126
|
## Development
|
|
110
127
|
|
|
111
128
|
### Setup Development Environment
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hanzo-mcp"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "MCP implementation of Hanzo capabilities"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -21,10 +21,10 @@ dependencies = ["mcp>=1.6.0", "httpx>=0.27.0", "uvicorn>=0.23.1", "openai>=1.50.
|
|
|
21
21
|
[project.urls]
|
|
22
22
|
"Homepage" = "https://github.com/hanzoai/mcp"
|
|
23
23
|
"Bug Tracker" = "https://github.com/hanzoai/mcp/issues"
|
|
24
|
-
"Documentation" = "https://github.com/hanzoai/mcp/
|
|
24
|
+
"Documentation" = "https://github.com/hanzoai/mcp/tree/main/docs"
|
|
25
25
|
|
|
26
26
|
[project.optional-dependencies]
|
|
27
|
-
dev = ["pytest>=7.0.0", "pytest-cov>=4.1.0", "ruff>=0.1.0", "black>=23.3.0"]
|
|
27
|
+
dev = ["pytest>=7.0.0", "pytest-cov>=4.1.0", "ruff>=0.1.0", "black>=23.3.0", "sphinx>=8.0.0", "sphinx-rtd-theme>=1.3.0", "myst-parser>=2.0.0"]
|
|
28
28
|
test = [
|
|
29
29
|
"pytest>=7.0.0",
|
|
30
30
|
"pytest-cov>=4.1.0",
|
|
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
|