Explains wallet approvals and signature requests in plain language: SAFE, CAUTION or RISK.
One address for any MCP client. No sign-in needed on this server.

2 read1 other
Grouped by tool name. At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Built on presign-guard: PlainText's verdicts now come from presign-guard (the same checks, sanctions list, wallet age and signed receipt); PlainText adds the explanation in plain language for people.
POST /api/check-wallet($0.04) uses presign-guard's approval audit,POST /api/explain($0.03) its pre-sign check when the payload is a real approval, transaction or typed-data signature (anything else is explained by the model alone,source: "model"). Agents that only need the verdict and reason codes can call presign-guard directly ($0.01–$0.02). NeedsFIZZL_INTERNAL_KEY(the same value on both services, Render only); without it the old path (GoPlus + Claude) runs.
A small Node.js app that looks up a wallet's token/NFT approvals via the GoPlus Security API and asks Claude to explain them in plain language.
▶ Watch the 1-minute explainer · Live: https://plaintext.fizzl.eu
plaintext-wallet/
├── server.js Express backend (GoPlus + Anthropic calls)
├── media.js Serves the explainer video from the explainer-video branch
├── feedback.js POST /feedback and the MCP tool feedback (same file in every Fizzl service)
├── media/explainer/ Script and pipeline for the explainer video
├── package.json
├── render.yaml Render deploy config (optional, see below)
├── .env.example Copy to .env for local dev
└── public/
└── index.html Frontend (wallet check + demo scenarios)
Found a bug, or missing something? Send it with POST /feedback (free, no payment) or the MCP tool feedback:
curl -X POST https://plaintext.fizzl.eu/feedback \
-H 'content-type: application/json' \
-d '{"type": "feature", "message": "Support Solana wallets", "endpoint": "/api/check-wallet"}'
type is bug, feature or other; message is required (up to 2000 characters); endpoint and contact are optional. The answer is 202 with an id. At most 10 reports per hour per caller. Reports go to the usage log, and a person reads every one; nothing in a report is run or changed automatically. GET /feedback shows the schema.
cd plaintext-wallet
npm install
cp .env.example .env
# edit .env and paste your ANTHROPIC_API_KEY
npm start
Open http://localhost:3000 — try the "Try a sample" tab first (no API keys needed besides Anthropic), then "Check a wallet" with a real address once you're happy it works.
Option A — one-click via render.yaml (Blueprint)
render.yaml automatically and creates the web service.ANTHROPIC_API_KEY — required, from console.anthropic.comGOPLUS_ACCESS_TOKEN — optional, only needed if you outgrow GoPlus's
free 30 calls/minute limit (see console.gopluslabs.io)Option B — manual web service (no render.yaml needed)
npm installnpm startANTHROPIC_API_KEY (and optionally
GOPLUS_ACCESS_TOKEN).https://<name>.onrender.com
URL once the build finishes.Render's free tier spins the service down after inactivity — the first request after idling will take ~30-50 seconds to wake up. That's normal and fine for a prototype you're sharing for feedback.
token_approval_security or nft721_approval_security
under https://api.gopluslabs.io/api/v2/.... This is documented but the
GoPlus docs site is JS-rendered, so before you rely on this in front of
real users, do one manual test call (e.g. with curl) against a wallet
you control, and compare the actual JSON shape to what server.js expects
— field names occasionally shift between GoPlus API versions.