zap-mdns — mDNS auto-discovery for ZAP services
Replaces the hard-coded [9999..9995] port-probe in browser extensions
and the lock-file dance in ~/.hanzo/extension/config.json with proper
multicast DNS service discovery (_hanzo._tcp.local., canonical per HIP-0069).
Why
- ZAP currently fixed-ports collide between agents, hosts, and accidentally
mature
lqd-checktest daemons. - Lock-file registry is single-host and fragile (stale PIDs, race on finally-cleanup).
- mDNS works across the LAN, multi-MCP, multi-host. Bonjour/Avahi gives us service-type browsing for free on every modern OS.
Service definition
type: _hanzo._tcp.local.
name: <server_id>._hanzo._tcp.local.
port: <bound port>
txt:
server_id = mcp-py-12345
agent_label = osage-screenshot-test
version = 0.5.0
capabilities = tabs,navigate,screenshot,evaluate,...
proto = zap/1
Layout
python/ Python publisher + browser via `zeroconf`
ts/ TypeScript publisher (Node) + browser shim
ext/ Browser-extension polyfill (native-messaging helper)
README.md this file
Backwards compat
Existing port-probe path remains in the extension as a fallback. mDNS is attempted FIRST; if zero services found within 2s, fall through to the fixed-port probe. Once mDNS adoption is stable, port-probe is removed.
Install
pip install zap-mdns
# or
uv pip install zap-mdns
Status
Published on PyPI: https://pypi.org/project/zap-mdns/ — wired into
~/work/zap/ for cross-org reuse (hanzo / lux / zoo / liquidity all
consume the same package).
Metadata
Release files for zap-mdns 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zap_mdns-0.1.1.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zap_mdns-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.6 kB
Release files / zap_mdns-0.1.1.tar.gz
| Download URL | zap_mdns-0.1.1.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7cd9f515d50d2398fa20d48f1b8e1b53a1bd326aa77908ff2e774980465dad77
|
|
BLAKE2b-256 checksum How to use checksums |
0cebea26b3cc72c2582d640d5ede5e303d713eb76c98dcfef84826389e9e377c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / zap_mdns-0.1.1-py3-none-any.whl
| Download URL | zap_mdns-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f66d2945c5d435c37465286a7bc250eb97504362f735a96ec8eb5b96f2fd2a0
|
|
BLAKE2b-256 checksum How to use checksums |
1f68e133149f50f33eddc3214e44d2e52e8cce2bdba9bb006500c4b390fc0ec1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|