sallyport
The Python MCP-server half of Sallyport — a security-first bridge between Claude Code (or any MCP client) and your Chrome, with explicit trust boundaries instead of implicit ones.
Claude Code ── MCP/stdio ──▶ daemon (this package) ── WS+HMAC ──▶ extension (MV3) ── CDP ──▶ Chrome
The daemon speaks MCP on stdio and hosts an HMAC-authenticated WebSocket server
on 127.0.0.1:10086 that the companion Chrome extension connects into. Every
frame is signed (HMAC-SHA256 + timestamp + nonce); the extension enforces a
per-domain allowlist and a per-domain opt-in for arbitrary JS.
Install
pip install sallyport
The package installs the sallyport-daemon console command.
Quickstart
sallyport-daemon doctor # check Python, secret file + perms, port; print the pairing block
claude mcp add sallyport sallyport-daemon # register with Claude Code
Then load the unpacked extension (or the release zip) from the main repository and paste the pairing block into its popup.
sallyport-daemon list-tools— print the tool catalogue (no daemon start)sallyport-daemon serve— WS-only mode (no MCP) for wire testingsallyport-daemon exec <tool> k=v …— fire one tool from the shell
Security
The full threat model, the load-bearing invariants, and known limitations live
in SECURITY.md.
In short: loopback-only bind, HMAC on every frame, a domain allowlist enforced
in the extension, per-domain evaluate opt-in, password-field gates, and
daemon-side filesystem sandboxes for upload/save_to_file.
License
MIT — see LICENSE.
Metadata
Release files for sallyport 0.26.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sallyport-0.26.0.tar.gz | 100.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sallyport-0.26.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 207.7 kB
Release files / sallyport-0.26.0.tar.gz
| Download URL | sallyport-0.26.0.tar.gz |
|---|---|
| Size | 100.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0d6156ac9672e2adf86949128bb41ce9579c4e13482f5fe71c1212d6eb677fb0
|
|
BLAKE2b-256 checksum How to use checksums |
85cf902c9c1fabca934c87295ec0ff5dde4ba1a348d99566adad6843641100d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / sallyport-0.26.0-py3-none-any.whl
| Download URL | sallyport-0.26.0-py3-none-any.whl |
|---|---|
| Size | 107.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c79fb5234eaa9c6d74169f4dbfb24e53fbfeba1ee0961ea22bd1b249d1210a58
|
|
BLAKE2b-256 checksum How to use checksums |
0a8b4997699227ecef625e158206830a52aec7c552b37f52bf66b1a62ccd53f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log