SEAL (sealnet-mcp)
Local MCP server for SEAL's end-to-end encrypted sharing: your agent hands files, folders or secrets to you or another agent as seals, asks you for a file or secret through a dialog or page, and runs commands with secrets kept out of its output. After pairing, the default delivery route sends a file to the user's SEAL inbox and returns a short handle to the model. Free up to 1 GB per seal.
Test results
Last passed 2026-10-22Server package tested: sealnet-mcp 0.10.0 (npm, Node v20.19.2; resolved 2026-10-22)
Direct and key dependencies as resolved: @modelcontextprotocol/sdk 1.32.1 · argon2 0.44.0 · clipboardy 5.3.2 · commander 14.0.3 · express 5.3.0 · zod 4.6.7 · zod-to-json-schema 3.25.2
All 136 resolved dependencies
@epic-web/invariant==1.0.0
@hono/node-server==2.1.5
@modelcontextprotocol/sdk==1.32.1
@napi-rs/keyring==2.1.2
@napi-rs/keyring-linux-x64-gnu==2.1.2
@phc/format==1.0.0
@sec-ant/readable-stream==0.4.1
@sindresorhus/merge-streams==4.0.0
accepts==2.0.0
ajv==8.20.0
ajv-formats==3.0.1
argon2==0.44.0
body-parser==2.4.0
bytes==3.1.2
call-bind-apply-helpers==1.0.2
call-bound==1.0.4
clipboard-image==0.1.0
clipboardy==5.3.2
commander==14.0.3
content-disposition==2.0.1
content-type==1.0.5, 2.1.0
cookie==0.7.2
cookie-signature==1.2.2
cors==2.8.6
cross-env==10.1.0
cross-spawn==7.0.6
crypto-random-string==4.0.0
debug==4.4.3
depd==2.0.0
dunder-proto==1.0.1
ee-first==1.1.1
encodeurl==2.0.0
es-define-property==1.0.1
es-errors==1.3.0
es-object-atoms==1.1.2
escape-html==1.0.3
escape-string-regexp==5.0.0
etag==1.8.1
eventsource==3.0.7
eventsource-parser==3.1.1
execa==5.1.1, 9.6.1
express==5.3.0
express-rate-limit==8.7.1
fast-deep-equal==3.1.3
fast-uri==3.1.9
figures==6.1.0
finalhandler==2.1.1
forwarded==0.2.0
fresh==2.0.0
function-bind==1.1.2
get-intrinsic==1.3.0
get-proto==1.0.1
get-stream==6.0.1, 9.0.1
gopd==1.2.0
has-symbols==1.1.0
hasown==2.0.4
hono==4.13.13
http-errors==2.0.1
human-signals==2.1.0, 8.0.1
iconv-lite==0.7.3
inherits==2.0.4
ip-address==10.7.4
ipaddr.js==1.9.1
is-docker==3.0.0
is-inside-container==1.0.0
is-plain-obj==4.1.0
is-promise==4.0.0
is-stream==2.0.1, 4.0.1
is-unicode-supported==2.1.0
is-wayland==0.1.0
is-wsl==3.1.1
is64bit==2.0.0
isexe==2.0.0
jose==6.2.13
json-schema-traverse==1.0.0
json-schema-typed==8.0.2
macos-version==6.0.0
math-intrinsics==1.1.0
media-typer==1.1.1
merge-descriptors==2.0.0
merge-stream==2.0.0
mime-db==1.54.0
mime-types==3.0.2
mimic-fn==2.1.0
ms==2.1.3
negotiator==1.1.0
node-addon-api==8.9.2
node-gyp-build==4.8.4
npm-run-path==4.0.1, 6.0.0
object-assign==4.1.1
object-inspect==1.13.4
on-finished==2.4.2
once==1.4.0
onetime==5.1.2
parse-ms==4.0.0
parseurl==1.3.3
path-key==3.1.1, 4.0.0
path-to-regexp==8.4.2
pkce-challenge==5.0.1
powershell-utils==0.2.1
pretty-ms==9.3.1
proxy-addr==2.0.8
qs==6.16.1
range-parser==1.3.0
raw-body==3.0.2
require-from-string==2.0.2
router==2.2.0
run-jxa==3.0.0
safer-buffer==2.1.2
semver==7.8.5
send==1.2.1
serve-static==2.2.1
setprototypeof==1.2.0
shebang-command==2.0.0
shebang-regex==3.0.0
side-channel==1.1.1
side-channel-list==1.0.1
side-channel-map==1.0.1
side-channel-weakmap==1.0.2
signal-exit==3.0.7, 4.1.0
statuses==2.0.2
strip-final-newline==2.0.0, 4.0.0
subsume==4.0.0
system-architecture==0.1.0
toidentifier==1.0.1
type-fest==1.4.0, 2.19.0
type-is==2.1.0
unicorn-magic==0.3.0
unique-string==3.0.0
unpipe==1.0.0
vary==1.1.2
which==2.0.2
wrappy==1.0.2
yoctocolors==2.2.0
zod==4.6.7
zod-to-json-schema==3.25.2Captured with: npm ls --all --json in the npx env.
Full result per app: Does it work with Claude Code? · Does it work with Cursor? · Does it work with ChatGPT (Codex)?
Real test
PassedOne run from our records. When two runs share a date, we show a failure if there is one.
- Client
- ChatGPT (Codex) · Codex CLI 0.162.0-alpha.17.2
- Date
- Oct 22, 2026
- The task we gave
Using only the sealnet-mcp MCP tools: share the file /workspace/timmy/harness/sandbox/seal/note.txt as a SEAL link (no pairing, default free tier, the default handoff mode is fine). Then list the seals this server created to confirm the new one is there, then revoke it with the same tools. Reply with the seal's handle and whether the revoke succeeded.
- What it promised
- details not recorded for this run
- What happened
Tool calls:
sealnet-mcp:seal_sharesealnet-mcp:seal_listsealnet-mcp:seal_revokeTool result
{"content": [{"type": "text", "text": "{\n \"handle\": \"h_yZAVOPq8CMn0\",\n \"receipt\": \"The seal link is in /tmp/seal-mcp/handoff-h_yZAVOPq8CMn0.txt (mode 0600, removed automatically later). Give it to the recipient. Anyone who can read files on this machine as this user, this agent included, can read it. In a cloud or container session prefer mode=forward to the recipient\u2019s address. Offer the user seal_pair: once their inbox is connected, files go there instead of a file on this machine.\",\n \"handoff_channel\": \"file\",\n \"expires_at\": \"2026-10-23T02:35:25.912Z\",\n \"handoff_file\": \"/tmp/seal-mcp/handoff-h_yZAVOPq8CMn0.txt\"\n}"}], "structured_content": {"handle": "h_yZAVOPq8CMn0", "receipt": "The seal link is in /tmp/seal-mcp/handoff-h_yZAVOPq8CMn0.txt (mode 0600, removed automatically later). Give it to the recipient. Anyone who can read files on this machine as this user, this agent included, can read it. In a cloud or container session prefer mode=forward to the recipient\u2019s address. Offer the user seal_pair: once their inbox is connected, files go there instead of a file on this machine.", "handoff_channel": "file", "expires_at": "2026-10-23T02:35:25.912Z", "handoff_file": "/tmp/seal-mcp/handoff-h_yZAVOPq8CMn0.txt"}}Agent reply
Seal handle: `h_yZAVOPq8CMn0`. It appeared as active in the server’s seal list, and the revoke succeeded (`revoked: true`).- Verdict
- Passed
Install
claude mcp add sealnet-mcp -- npx -y sealnet-mcp@latestRun in your terminal. This exact command is what our harness runs in Claude Code; see the results above.
{
"mcpServers": {
"sealnet-mcp": {
"command": "npx",
"args": [
"-y",
"sealnet-mcp@latest"
]
}
}
}Save as .cursor/mcp.json. This exact config is what our harness runs in Cursor; see the results above.
{
"mcpServers": {
"sealnet-mcp": {
"command": "npx",
"args": [
"-y",
"sealnet-mcp@latest"
]
}
}
}Add to claude_desktop_config.json and restart Claude Desktop. Tested on the Linux beta; see the results above.
[mcp_servers.sealnet-mcp]
command = "npx"
args = ["-y", "sealnet-mcp@latest"]Add to ~/.codex/config.toml (shared by the ChatGPT (Codex) CLI and the ChatGPT desktop app; Codex runs inside the ChatGPT desktop app). Tested with the ChatGPT (Codex) CLI bundled in the ChatGPT desktop app; see the results above.
Not connecting? Troubleshooting: Claude Code · Cursor · Claude Desktop · ChatGPT (Codex)
Test history
| Date | Check | Result | Versions tested |
|---|---|---|---|
| 2026-10-22 | Protocol (direct stdio) | Protocol: starts, 8 tools listed | sealnet-mcp 0.10.0 · server reported v0.10.0 |
| 2026-10-22 | Claude Code | Passed install, connect, tools, agent task | Claude Code 2.1.296 · sealnet-mcp 0.10.0 |
| 2026-10-22 | Cursor | Passed install, connect, tools, agent task | Cursor CLI 2026.10.22-27dcf5f · sealnet-mcp 0.10.0 |
| 2026-10-22 | ChatGPT (Codex) | Passed install, connect, tools, agent task | Codex CLI 0.162.0-alpha.17.2 · sealnet-mcp 0.10.0 |
Tools seen by our harness (8)
seal_shareseal_requestseal_pairseal_openseal_inboxseal_runseal_listseal_revoke