Repository navigation
Releases: paranoiddotred/paranoid-mcp
Release list
v1.4.1
Tor or a relay, measured
bench/ times a new conversation over the connector's relay and over a fresh Tor circuit, the way paranoid mode gives each conversation its own. Everything else is the same: the seal, the proof, the gateway chip and the model. Median of ten runs: the first word of the answer arrived after 8.8 seconds through the relay and after 17.6 seconds over Tor. The script and every run are in the folder.
Fix: a membership shared with a URL
A membership that a paranoid.red/mcp URL also spends from showed 0 questions left in the connector, because the URL's spends at the top were read as ours. The connector now finds where the URL's spending ends and keeps 16 questions clear of it, as the docs describe. Nothing was ever spent twice: the connector refused before making a proof.
Install
- Claude Desktop: download
paranoid.mcpbbelow and double-click it. - Claude Code:
claude mcp add paranoid -- npx -y github:paranoiddotred/paranoid-mcp#v1.4.1 mcp
SHA-256
connect.mjs:fa03efa74a72b9fe9f3bc17307e0609ffed530d0922c13cbc9080fb74e60535bparanoid.mcpb:a0848a435b4008b0efdf21c67c2a30aee356e67459ff6038061b5202e0808636
v1.4.0
Sealed to the gateway's chip
Before the first question, and every ten minutes after, the connector now checks the gateway the way the paranoid.red app does:
- Intel's signature on the chip's TDX quote, verified with
@phala/dcap-qvl-web0.3.3, pinned by hash like the prover - the quote binds the sealing key to a nonce made on your computer, and the chip is not in debug mode
- the chip's build is on the list PARANOID's 2-of-3 multisig keeps on Solana in p2UnUp...Sfw8, read from a public Solana RPC that PARANOID does not run
Every question is then sealed to that chip with Oblivious HTTP and carried by an independent relay. Nothing between your computer and the chip, paranoid.red included, can read the question or the answer, and the gateway sees the relay's address instead of yours. If any check fails, nothing is sent. test/gate-live.mjs plays a lying site, RPC and relay against the live gateway: 15 of 15 refused or thrown away.
From the terminal
node connect.mjs check
node connect.mjs ask "your question"
git diff | node connect.mjs ask "Review this change"
node connect.mjs chatInstall
- Claude Desktop: download
paranoid.mcpbbelow and double-click it. - Claude Code:
claude mcp add paranoid -- npx -y github:paranoiddotred/paranoid-mcp#v1.4.0 mcp
SHA-256
connect.mjs:db6c0615fce42bf1833af42e675ed42d678d8c6cf72498193fe0d07d8cf4ca52, the same bytes paranoid.red servesparanoid.mcpb:67d9963b9d5a87629f66da71caecc706d87f8d23deff25eac2e08c09f49a0aca
v1.3.0
Install in one step
- Claude Desktop: download
paranoid.mcpbbelow and double-click it, or drag it into the Claude window. Paste the connector code from the Keys tab on paranoid.red into its settings, or choose a Solana wallet file holding USDC so the buy tool can get questions. - Cursor: the Add to Cursor button in the README.
- Claude Code:
claude mcp add paranoid -- npx -y github:paranoiddotred/paranoid-mcp#v1.3.0 mcp
connect.mjs itself is unchanged from v1.2.2 and still reports version 1.2.2. The new bin.mjs starts it and, when PARANOID_CODE is set, first saves that membership the way pasting the code into node connect.mjs does.
SHA-256
connect.mjs:8f90ee28b74883a46dcf928efaecfcd452591753851283210edf2788cbdd73c1, the same bytes paranoid.red servesparanoid.mcpb:5030e5b3c7690009b71600692aecae724947318646bb2ac4e6b445c1aaac1c26
The extension is a zip, so you can check the connector inside it too:
unzip -p paranoid.mcpb server/connect.mjs | shasum -a 256v1.2.2
connect.mjs, the PARANOID connector and MCP server. It is one file with no packages to install and runs on
Node.js 20.18, 22.8 or newer.
SHA-256: 8f90ee28b74883a46dcf928efaecfcd452591753851283210edf2788cbdd73c1
mkdir -p ~/paranoid && curl -o ~/paranoid/connect.mjs https://paranoid.red/connect.mjs \
&& echo "8f90ee28b74883a46dcf928efaecfcd452591753851283210edf2788cbdd73c1 $HOME/paranoid/connect.mjs" | shasum -a 256 -cOr build it yourself (CI does the same on every push): bash scripts/fetch-zk.sh && node build.mjs && git diff --exit-code connect.mjs
What changed
buyreads the price it agrees to from Solana itself, throughPARANOID_RPCor a public Solana node, never
through paranoid.red, and checks that the account belongs to the PARANOID program. A quote it cannot read gets
nothing signed.- Every request goes out on a connection of its own, so two requests never share a socket.
- Several unanswered keys can wait for a retry at once, so concurrent requests that hit a server error all keep
their question numbers. - CI now checks that, with
HTTPS_PROXYandNODE_USE_ENV_PROXY=1, the requests really go through the proxy. - The circuit files are fetched from a fixed commit of paranoiddotred/paranoid, and the install line checks the
download before it runs.
v1.2.1
connect.mjs, the PARANOID connector and MCP server. It is one file with no packages to install and runs on
Node.js 20.18, 22.8 or newer.
SHA-256: ed49f60f77e3a6561b31826b1712489a83924e4666fd94c3c2fefa35365581e3
paranoid.red serves the same bytes. Check the copy you have before you run it:
echo "ed49f60f77e3a6561b31826b1712489a83924e4666fd94c3c2fefa35365581e3 $HOME/paranoid/connect.mjs" | shasum -a 256 -cOr build it yourself from src/ with the prover and circuit files from where they are published, which CI also
does on every push:
bash scripts/fetch-zk.sh && node build.mjs && git diff --exit-code connect.mjsWhat changed
- The source and the build script are in this repository now, and CI rebuilds
connect.mjsfrom snarkjs 0.7.6
on npm and the circuit in paranoiddotred/paranoid, failing if a single byte differs. - If a proxy is set but this Node.js would send requests around it, the connector refuses to start instead of
leaving from your own address. - A key the gateway never answered keeps its question numbers for the next request, and the gateway itself now
spends questions only once the model starts answering. - Pasting a different connector code keeps the membership that was there in a file beside the new one, and an
old membership file is removed after a purchase only once it has no questions left. - Counting spent questions now starts from where this connector left off instead of from zero.
v1.2.0
connect.mjs, the PARANOID connector and MCP server. It is one file with no packages to install and runs on
Node.js 20.18, 22.8 or newer.
SHA-256: 3484c2951a973aabdb25009f1ac6109b76c09074f36c16de2588d534bc7225f4
paranoid.red serves the same bytes. Check the copy you have before you run it:
curl -s https://paranoid.red/connect.mjs | shasum -a 256
shasum -a 256 ~/paranoid/connect.mjsWhat changed
- The prover now runs in a separate JavaScript realm that holds no Node.js object, so it has no network, files
or process to reach. The secret goes in as numbers and only the proof comes out. buysigns only a USDC payment to the PARANOID gateway wallet for no more than the price the program on
chain sets plus the 0.30 USDC setup fee. Any other quote gets nothing signed.- When the gateway refuses a key because the member list changed, the same question numbers are proven again
with the same random value, so the refusal costs no questions. A proof that fails before anything is sent
gives its numbers back. - SECURITY.md now says exactly what the proofs hide and what stays visible (your network address, which wallet
bought), with how to route the connector through Tor or a VPN.
v1.1.0
connect.mjs, the PARANOID connector and MCP server. It is one file with no dependencies and runs on
Node.js 20 or newer.
SHA-256: 0446f886d6f77cb2f253b6aa16b28d297e61b88c493726a3e41ea5615427c631
paranoid.red serves the same bytes. Check the copy you have before you run it:
curl -s https://paranoid.red/connect.mjs | shasum -a 256
shasum -a 256 ~/paranoid/connect.mjsWhat it does
node connect.mjskeeps any OpenAI-compatible app connected to PARANOID through a local endpoint, with a
fresh anonymous key for every request. The local port answers programs on your computer and refuses web pages.node connect.mjs mcpgives Claude Code, Cursor and other MCP clients the tools ask, models, balance and buy.PARANOID_PAYER=wallet.json node connect.mjs buy 500buys questions with x402 from that wallet.