PlainText Wallet Approval Checker MCP server
Commit Oct 29, 2026Translates complex crypto wallet approvals and signature requests into plain language verdicts like SAFE, CAUTION, or RISK.
Also known as Fizzl13/SmartContractExplainer, smartcontractexplainer
- Stars
- 1
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- 1.1.2
- Last commit
- Oct 29, 2026
- License
- —
What is PlainText Wallet Approval Checker MCP?
PlainText Wallet Approval Checker translates complex crypto wallet approvals and signature requests into plain language verdicts like SAFE, CAUTION, or RISK.
Summary generated from the project's README
About PlainText Wallet Approval Checker MCP server
PlainText Wallet Approval Checker helps users understand the security implications of cryptocurrency wallet approvals and signature requests. It translates technical data into simple verdicts such as SAFE, CAUTION, or RISK. The service works by looking up token and NFT approvals via the GoPlus Security API and using Claude to generate human-readable explanations for the findings.
Developers can run this Node.js application locally or deploy it to Render. Setting up the server requires an ANTHROPIC_API_KEY, and an optional GOPLUS_ACCESS_TOKEN can be used to bypass the free tier limit of 30 calls per minute. For advanced users, the system can utilize presign-guard to perform audits on transactions, typed-data signatures, or real approvals using a FIZZL_INTERNAL_KEY. The application is stateless and does not store any user data during the check process.
What you can do with it
- 1Audit transaction securityUse presign-guard integration to check the safety of transactions and typed-data signatures.
- 2Monitor security via APIIntegrate automated security checks into agents that require specific reason codes and verdicts.
Written from the project's README. Every use case is checked against a quote from it.
How to install PlainText Wallet Approval Checker MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall PlainText Wallet Approval Checker MCP in Claude Code
$ claude mcp add --transport http smartcontractexplainer https://plaintext.fizzl.eu/mcpInstall PlainText Wallet Approval Checker MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"smartcontractexplainer": {
"url": "https://plaintext.fizzl.eu/mcp"
}
}
}Install PlainText Wallet Approval Checker MCP in VS Code
.vscode/mcp.json
{
"servers": {
"smartcontractexplainer": {
"type": "http",
"url": "https://plaintext.fizzl.eu/mcp"
}
}
}Install PlainText Wallet Approval Checker MCP in VS Code CLI
$ code --add-mcp '{"name":"smartcontractexplainer","type":"http","url":"https://plaintext.fizzl.eu/mcp"}'Install PlainText Wallet Approval Checker MCP in Codex
$ codex mcp add smartcontractexplainer --url https://plaintext.fizzl.eu/mcpInstall PlainText Wallet Approval Checker MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.smartcontractexplainer] url = "https://plaintext.fizzl.eu/mcp"
Install PlainText Wallet Approval Checker MCP in Gemini CLI
$ gemini mcp add -s user --transport http smartcontractexplainer https://plaintext.fizzl.eu/mcpInstall PlainText Wallet Approval Checker MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"smartcontractexplainer": {
"url": "https://plaintext.fizzl.eu/mcp",
"type": "http"
}
}
}Automated checks
Ran Nov 15, 2026Full report →Not verified yet. A server needs a score of 80, no serious finding, and enough data for us to check. How checks work · What to fix for more points
- Source repository linked and reachablefizzl13/smartcontractexplainer is public and reachablegithub.com/fizzl13/smartcontractexplainer ↗Pass
- Package names this repository as its sourceNot checked
- Build provenance (Sigstore attestation)Not checked
- Open source license (OSI)No licenseFinding
- Commit or release in the last yearLast commit or release 2026-10-29github.com/fizzl13/smartcontractexplainer ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNot checked
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeEndpoint did not answer initialize: HTTP 200Finding
README
View on GitHubPlainText — wallet approval translator
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
Project structure
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)
Feedback
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.
1. Run it locally first
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.
2. Deploy to Render
Option A — one-click via render.yaml (Blueprint)
- Push this folder to a new GitHub repo.
- In the Render dashboard: New + → Blueprint → select your repo.
Render reads
render.yamlautomatically and creates the web service. - When prompted, fill in the environment variables:
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)
- Click Apply — Render builds and deploys automatically.
Option B — manual web service (no render.yaml needed)
- Push this folder to a GitHub repo.
- Render dashboard → New + → Web Service → connect your repo.
- Settings:
- Environment: Node
- Build Command:
npm install - Start Command:
npm start - Instance Type: Free (fine for a prototype)
- Under Environment Variables, add
ANTHROPIC_API_KEY(and optionallyGOPLUS_ACCESS_TOKEN). - Click Create Web Service. Render gives you a
https://<name>.onrender.comURL 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.
Notes on the GoPlus integration
- The wallet check calls
token_approval_securityornft721_approval_securityunderhttps://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. withcurl) against a wallet you control, and compare the actual JSON shape to whatserver.jsexpects — field names occasionally shift between GoPlus API versions. - The free GoPlus tier is capped at 30 calls/minute — plenty for early testing, but rate-limit errors will surface as a plain error message in the UI if you exceed it.
- No user data is stored anywhere in this app — every check is a stateless round trip. If you later add accounts, saved wallets, or history, update this note (and your own privacy policy) accordingly.
Costs to expect
- Render free tier: $0/month, with the cold-start behavior above. A paid tier ($7/month "Starter") removes the spin-down if this gets real usage.
- Anthropic API: pay-per-use, billed to whatever key you provide. A single explanation call is small (well under 1K tokens), so cost per check will be a fraction of a cent — but keep an eye on your usage dashboard if this gets shared widely, since there's no rate limiting built into this prototype yet.
PlainText Wallet Approval Checker MCP questions
How do I add PlainText Wallet Approval Checker MCP to Claude Code?
Run claude mcp add --transport http smartcontractexplainer https://plaintext.fizzl.eu/mcp in your terminal. Add --scope user to make it available in every project.
How do I add PlainText Wallet Approval Checker MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
How does the service determine the safety of a wallet?
It uses the GoPlus Security API to look up token and NFT approvals and utilizes Claude to explain the findings in plain language.
Does the application store any user data?
No, the application is stateless and does not store any user data during the check process.
