Metadata-Version: 2.4
Name: hanzo-mcp
Version: 0.15.20
Summary: The Zen of Hanzo MCP: One server to rule them all. The ultimate MCP that orchestrates all others.
Author-email: Hanzo Industries Inc <dev@hanzo.ai>
License: MIT
Project-URL: Homepage, https://github.com/hanzoai/mcp
Project-URL: Bug Tracker, https://github.com/hanzoai/mcp/issues
Project-URL: Documentation, https://mcp.hanzo.ai
Keywords: mcp,claude,hanzo,code,agent
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: hanzoai>=8.5.624
Requires-Dist: mcp<2,>=1.25.0
Requires-Dist: fastmcp>=2.14.4
Requires-Dist: pydantic>=2.12.5
Requires-Dist: pydantic-settings>=2.12.0
Requires-Dist: typing-extensions>=4.13.0
Requires-Dist: hanzo-async>=0.1.3
Requires-Dist: uvloop>=0.22.1; sys_platform != "win32"
Requires-Dist: hanzo-tools>=0.3.9
Requires-Dist: hanzo-tools-fs>=0.3.4
Requires-Dist: hanzo-tools-shell>=0.6.5
Requires-Dist: hanzo-tools-core>=0.3.1
Requires-Dist: hanzo-tools-browser[playwright]>=0.5.12
Requires-Dist: hanzo-tools-memory>=0.2.0
Requires-Dist: hanzo-tools-todo>=0.1.0
Requires-Dist: hanzo-tools-reasoning>=0.1.0
Requires-Dist: hanzo-tools-lsp>=0.1.0
Requires-Dist: hanzo-tools-computer>=0.5.5
Requires-Dist: hanzo-tools-config>=0.2.1
Requires-Dist: hanzo-tools-refactor>=0.1.0
Requires-Dist: hanzo-tools-llm>=0.2.2
Requires-Dist: hanzo-tools-code>=0.1.0
Requires-Dist: hanzo-tools-vcs>=0.1.3
Requires-Dist: hanzo-tools-net>=0.1.0
Requires-Dist: hanzo-tools-agent>=0.3.1
Requires-Dist: hanzo-tools-api>=0.3.2
Requires-Dist: hanzo-tools-auth>=0.1.0
Requires-Dist: hanzo-tools-mpc>=0.1.0
Requires-Dist: hanzo-tools-ui>=0.1.0
Requires-Dist: hanzo-tools-devserver>=0.1.0
Requires-Dist: hanzo-persona>=1.0.0
Provides-Extra: memory
Requires-Dist: hanzo-tools-memory[full]>=0.2.2; extra == "memory"
Requires-Dist: sqlite-vec>=0.1.0; extra == "memory"
Requires-Dist: fastembed>=0.4.0; extra == "memory"
Provides-Extra: repl
Requires-Dist: hanzo-tools-repl>=0.1.0; extra == "repl"
Requires-Dist: jupyter-client>=8.6.0; extra == "repl"
Requires-Dist: ipykernel>=6.29.0; extra == "repl"
Provides-Extra: ide
Requires-Dist: hanzo-tools-ide>=0.1.0; extra == "ide"
Provides-Extra: interactive
Requires-Dist: hanzo-mcp[ide,repl]; extra == "interactive"
Requires-Dist: hanzo-tools-browser>=0.2.1; extra == "interactive"
Provides-Extra: dev
Requires-Dist: watchdog>=3.0.0; extra == "dev"
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: ruff>=0.14.0; extra == "dev"
Requires-Dist: black>=23.3.0; extra == "dev"
Requires-Dist: mypy>=1.10.0; extra == "dev"
Requires-Dist: types-aiofiles>=23.2.0; extra == "dev"
Requires-Dist: types-psutil>=5.9.5; extra == "dev"
Requires-Dist: types-setuptools>=69.5.0; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx>=8.0.0; extra == "docs"
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "docs"
Requires-Dist: myst-parser>=4.0.0; extra == "docs"
Requires-Dist: sphinx-copybutton>=0.5.0; extra == "docs"
Provides-Extra: test
Requires-Dist: pytest>=7.0.0; extra == "test"
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
Requires-Dist: pytest-asyncio<1.0.0,>=0.26.0; extra == "test"
Provides-Extra: performance
Requires-Dist: ujson>=5.7.0; extra == "performance"
Requires-Dist: orjson>=3.9.0; extra == "performance"
Provides-Extra: publish
Requires-Dist: twine>=4.0.2; extra == "publish"
Requires-Dist: build>=1.0.3; extra == "publish"

# hanzo-mcp

[![PyPI](https://img.shields.io/pypi/v/hanzo-mcp.svg)](https://pypi.org/project/hanzo-mcp/)
[![Python Version](https://img.shields.io/pypi/pyversions/hanzo-mcp.svg)](https://pypi.org/project/hanzo-mcp/)

A Model Context Protocol server. It gives an MCP client — Claude Desktop, an
editor, an agent — filesystem, shell, search and agent tools over one
connection.

## Install

```bash
pip install hanzo-mcp
```

## Run

```bash
hanzo-mcp                                   # stdio, the transport clients speak
hanzo-mcp --transport sse --host 127.0.0.1 --port 8888
hanzo-mcp --install                         # write the config into Claude Desktop
```

Point it at what it may touch, and nothing else:

```bash
hanzo-mcp --allow-path ~/work/project --project-dir ~/work/project
```

`--allow-path` may be repeated. Every filesystem tool refuses a path outside the
set, and `..` and `~` are refused before resolution.

## Flags

| flag | what it does |
|---|---|
| `--transport {stdio,sse}` | how the client connects; `stdio` by default |
| `--allow-path PATH` | grant access to a path; repeatable |
| `--project-dir DIR` | the project root, also granted |
| `--enable-agent` | let the server delegate to sub-agents |
| `--agent-model`, `--agent-api-key`, `--agent-base-url` | which model the agent tool calls |
| `--disable-write-tools` | read-only: no write, edit or shell mutation |
| `--disable-search-tools` | drop the search family |
| `--command-timeout`, `--search-timeout`, `--find-timeout`, `--ast-timeout` | per-family limits, in seconds |
| `--shell`, `--force-shell`, `--all-shells` | which shell the shell tools use |
| `--log-level LEVEL` | server logging |

`hanzo-mcp --help` prints the whole set; `--version` prints the build.

## Tools

The server registers what the installed `hanzo-tools-*` packages provide — each
one publishes a `TOOLS` list under the `hanzo.tools` entry point, and the server
loads every package it finds. `hanzo-tools-fs`, `hanzo-tools-shell` and
`hanzo-tools-core` come with this package; install another and its tools appear
on the next start.

```bash
pip install hanzo-tools-git hanzo-tools-sql
```

## In a client

Claude Desktop, `claude_desktop_config.json` — or `hanzo-mcp --install`, which
writes it for you:

```json
{
  "mcpServers": {
    "hanzo": {
      "command": "hanzo-mcp",
      "args": ["--allow-path", "/Users/you/work"]
    }
  }
}
```

## Embedding it

```python
from hanzo_mcp.server import HanzoMCPServer

server = HanzoMCPServer(name="hanzo", allowed_paths=["/Users/you/work"])
server.run(transport="stdio")
```

`run` blocks, and takes the transport. The rest of what the CLI accepts —
`allowed_paths`, `project_dir`, `enable_agent_tool`, `disable_write_tools`,
`disable_search_tools`, the timeouts — are constructor keywords.

## Development

```bash
uv sync
uv run pytest tests/ -v
```

## License

Apache-2.0.
