Shinjuku Shield
Shinjuku Shield is a privacy-only x402 payment facilitator on Solana. An agent pays an x402 endpoint from a balance that it holds itself. The chain does not show who paid.
- Privacy-only. We do not offer a cheaper path that is not private.
- You keep your keys. The wallet makes your keys on your machine. We never hold them, and we never hold your money.
- We relay and pay the fees. Our relayer sends your relayed deposits and exits and pays their network fees. Our facilitator pays the network fee of each payment that it settles.
- One balance. Your Shinjuku Shielded balance is a set of redeemable notes that you hold. The wallet shows it as one number.
- Outside sellers work. Any Solana x402
exactseller that takes USDC gets paid, whichever facilitator it uses (Coinbase CDP, PayAI, or any other). The seller changes nothing. Your wallet pays us privately, and we pay the seller from our own float. The chain shows Shinjuku paying the seller, never your wallet.
What your agent gets
The private x402 facilitator, inside your agent.
Shinjuku Shield settles x402 payments from a shielded USDC balance on Solana: on chain, a shielded payment does not show who paid. This MCP server is how your agent uses it. It runs on your machine, under caps that only you set.
- Self-custody. The server runs on your machine. Your keys never leave it. We never run it, and we never hold your money.
- Shielded payments. Your agent pays from a shielded balance. Add
--torand no server sees your IP. - Two commands to set up.
npm install -g [email protected], thenshinjuku setup. Setup makes the wallet, a private passphrase file, and the checked proof tools, and prints the line that adds the wallet to your agent host. - Add funds from 0.01 USDC. Ask your agent to add funds.
wallet_add_fundsgives a one-time address. Send USDC to it from any wallet or exchange, and it becomes private by itself. - Caps that only you set. Spending limits are optional; by default there is none (only the balance bounds a payment). Setup records the ones you set. A tool call can only lower them, never raise them.
- Find sellers.
x402_discoversearches public x402 listings (Coinbase x402 Bazaar, PayAI, Dexter, and others) on your machine. - Pay any Solana
exactseller. A seller on Coinbase CDP, PayAI, or any other facilitator is paid through Shinjuku: your wallet pays us privately, and we pay the seller from our own float. Nothing to fill or set aside. - Look before you pay.
x402_previewshows the price and whether your caps allow it. It pays nothing. - No SOL.
wallet_add_fundsandwallet_shieldneed only USDC. Our facilitator's relayer pays the network fee. - Never twice. A retry with the same
request_idresumes the same payment, deposit, or unshield. It never starts a second one. - No RPC, no sign-up, no API key. Reads go through our relay by default. Your own RPC always wins if you give one.
This repository holds the setup guide, the examples, the docs, the changelog, and the published SHA-256 hashes of every wallet file and its proof tools (Releases). It holds no server code, no circuit code, and no wallet source code.
Docs
- How it works: x402, our three schemes, the flow of one payment, and what runs where.
- Privacy model: what the chain, the seller, our facilitator, the RPC, and the MCP host see, with each limit.
- Sell with Shinjuku Shielded: get paid by Shinjuku Shielded buyers with stock x402 middleware, and get listed.
- Proof: live mainnet transactions, and what each one shows and hides.
- FAQ: custody, cost, networks, Tor, recovery, and audits.
- Changelog: what changed in each release. The first
changelog of the wallet file, up to
08a4b56f(npm 0.3.8): changelog-to-0.3.8.md.
Release 0.3.86
Stable version, pinned 2026-10-23. A self-custody wallet for AI agents. It pays any x402 endpoint from a shielded balance, so the chain does not show which wallet paid. Two commands set it up. Your agent does the rest from plain requests.
Get started
You need Node.js 22.21 or newer, or Node.js 24 (node --version shows
which one your node command runs). Tor is optional: run it if
you also want to hide your IP address.
-
Set up the wallet. In a terminal:
npm install -g [email protected] shinjuku setupType the two lines as they are.
npx install shinjukudoes not work: npx readsinstallas the name of another npm package.Setup asks two questions, Tor and private AI (Enter keeps the default). It makes the wallet on your machine and a private passphrase file, and downloads every proof file it needs (about 191 MB, checked by hash).
-
Add it to your agent host. At the end, setup prints the exact line for Claude Code and the config for Claude Desktop, Cursor and other MCP hosts. Run the line, or paste the config, once. Your agent host then starts the wallet by itself.
-
Add money. Ask your agent "Add 1 USDC to my private balance." It gives you a one-time address. Send USDC on Solana to it from any wallet or exchange. You need no SOL. A few minutes after it arrives, the money is private.
-
Use it. Ask your agent to pay a URL, find a paid API, send money out, or ask an AI model. Every feature below works from a plain request.
In a terminal, shinjuku help lists every command.
Features
Every feature here passed a live run on the published 0.3.86 package, on production, with real USDC, on 2026-10-23.
Add money
- Add funds (
wallet_add_funds,shinjuku add-funds). A new one-time address for each deposit, from 0.01 USDC. Send from any wallet or exchange; no SOL needed. The wallet makes it private by itself after it lands, even if your agent app closed. Ask: "Add 1 USDC to my private balance." Terminal:shinjuku add-funds --route exchange --amount 1 - Make public USDC private (
wallet_shield). USDC that sits on the wallet's own public address moves into the shielded balance. The facilitator pays the network fee. Ask: "Make the USDC on my address private." - Send any token privately (
wallet_transfer_token,wallet_transfer_token_status). Any token on the wallet's own address is sold for USDC, made private, and sent on in pieces. The receiver gets USDC with no link to the token wallet. Ask: "Sell my JUP for USDC and send it privately to my main wallet."
Pay
- Pay any x402 endpoint (
x402_pay,shinjuku pay,shinjuku curl). Pays an x402 URL from the shielded balance and returns the answer. The seller gets paid as usual; the chain does not show which wallet paid. The price and the fee show in the answer. Ask: "Pay for this endpoint and show me what it returns: " - Price preview (
x402_preview). Shows what a URL costs before you pay. Nothing is paid or signed. Ask: "How much does this URL cost?" - Find paid APIs (
x402_discover). Searches public x402 endpoints for a job. Your search words stay on your machine; nothing is paid. Ask: "Find a paid API for Brazil inflation data." - Automatic refunds (
x402_pay). If the seller fails before it takes the money, the full amount comes back to the private balance by itself. If the seller took the money and gave nothing, the receipt says so with the seller's transaction. Nothing to ask: the receipts show each refund and its transaction. - Slow sellers, never paid twice (
x402_pay). When a seller is slow, the wallet answers early and keeps waiting. Asking again with the same request continues the same payment. It never pays twice. Ask again with the same request when the agent tells you the seller is still working. - Images and files (
x402_pay). A paid answer that is an image or a file is saved in the wallet folder, with its path and hash. Ask: "Buy a QR code for this text from ." - Cancel (
wallet_cancel,shinjuku cancel). Closes a payment that can no longer settle, so its reserved money comes back. A finished payment cannot be taken back, and the wallet says so. Ask: "Cancel that payment."
Send money out
- Send to an address (
wallet_unshield,shinjuku unshield). Sends some or all of the private balance to any Solana wallet as plain USDC. The facilitator pays the network fee. Ask: "Send my whole private balance to my main wallet." Terminal:shinjuku unshield --amount all --to <address> - Send in pieces at random times (
wallet_unshieldwith a time window). Splits a send into pieces that leave at random times, so the amount and the time do not match one payment. The pieces go out in the background, even after your agent app closes. Ask: "Send 0.02 USDC to my main wallet in 2 pieces within the next 10 minutes." The candidate 0.3.116 no longer splits a send: each send leaves in one transfer. - Send all of it (
wallet_unshield,shinjuku unshield --amount all). A balance from several deposits is readied by itself when you send all of it. You do nothing extra. Ask: "Send all of it." - Spend a received payment (
wallet_unshield). A wallet that only received private payments can send them out directly, with no extra step. Ask: "Send what I received to ."
Your wallet
- Balance (
wallet_balance,shinjuku balance). One number: what you can spend. It also shows any public USDC on the wallet's own address and any money still on its way. Ask: "What is my private balance?" - Receipts (
wallet_receipts). Every payment, refund, deposit and send, newest first, with the seller, the price, the fee and the transactions. Ask: "Show my receipts from today. Did I get my money back on failed payments?" - Spending limits (
--max-payment,--max-session,shinjuku limits). Optional limits per payment and per 24 hours. A payment over a limit is refused before anything is paid, and the answer says how to change the limit. Set them in setup or in your host's MCP entry, for example--max-payment 0.05. - Version pin and update notice (
npx ... [email protected] mcp). Your host runs the exact version it names. When a new release is ready, the wallet tells you to restart. Nothing to ask.
Private AI
- Ask an AI model (
inference_chat). Your agent asks an AI model and pays for the answer from the shielded balance. The chain does not show which wallet paid. Ask: "Ask a private AI model: what is the capital of France?" - Terminal chat (
shinjuku chat). A private AI chat in your terminal. The conversation stays in memory only and is gone when you exit. Terminal:shinjuku chat, then/costand/exit - One question (
shinjuku infer). One question, one paid answer, no setup flags. Terminal:shinjuku infer "Say hello"orecho "Say hello" | shinjuku infer - - Private AI address for your apps (
shinjuku infer start,inference_server). A local OpenAI-compatible address (http://127.0.0.1:11402/v1) with an API key. Any app that speaks the OpenAI chat API, streaming included, gets private paid answers. It runs in the background after the terminal closes, but not after the computer restarts: then runshinjuku infer startagain (the API key stays the same). Ask: "Start my local private AI address." Terminal:shinjuku infer start,shinjuku infer status,shinjuku infer stop
Privacy and setup
- Tor (
setup --tor,--tor,--no-tor). With Tor, every request goes through Tor and reaches the facilitator through its onion service, so no server sees your IP address. After a Tor setup, every command uses Tor by itself. Run Tor withHTTPTunnelPort 127.0.0.1:9080, thensetup --tor. - Self-custody (
shinjuku setup,backup-export). The keys are made and kept on your machine. Only your keys move your balance. The facilitator settles and pays network fees; it never holds your money. Back up after setup:shinjuku help backup-export - The terminal command
(
npm install -g [email protected]). Every wallet action from a terminal: setup, add-funds, balance, pay, unshield, chat, infer and more. Terminal:shinjuku help
Speed
The time from "pay" to the seller's data, for the first payment to a seller the wallet never paid before (a fresh wallet process, production, 2026-10-23):
Known issues
None of these loses money. Each one gets its own fix release, tested live before the next.
- When a seller fails before it takes the money, the answer starts with "Paid". The money is not taken and comes back by itself.
- The terminal send prints one internal line that starts with
SELLER_STORE. shinjuku chatcan print raw Tor lines while Tor is slow.- When the spending limit comes from the host's MCP entry, the refusal names setup as the place to change it.
- Before a send that needs the balance readied first, the agent may not tell you it takes about 2 minutes.
- In a terminal, balance, infer and unshield print internal Tor, RPC and history lines.
- A plain
shinjuku balanceright after a deposit can show no number.shinjuku balance --refreshshows it.
Payments to outside sellers show the price and the seller on chain as any x402 payment does; what the chain does not show is which wallet paid. Every release and its changes: CHANGELOG.md.
Talk to it in plain words
Ask your agent the way you would ask a person:
Each answer tells the agent the exact next call. The wallet reads the chain and writes an encrypted backup by itself, so you never run a command for upkeep.
Tools
SETUP
On a machine with no wallet, the server starts in setup mode.
In setup mode, every money tool answers wallet_not_set_up and does
nothing.
FUND
PAY
UNSHIELD
WALLET
RECEIVE AND TRADE
wallet_shield and wallet_unshield always appear in the tool list. When
one is off, it answers "error": "mcp_tool_disabled" and tells the agent
what to ask you.
The tool list shows 12 of the tools above: wallet_receive_shielded is not
in the list from 0.3.54 (it comes back with private escrow deals), but it
still answers when an agent calls it by name. Some older tools are not in
the list either, and they also answer by name:
wallet_shield_from_elsewhere, wallet_pay_me, wallet_pay_me_status,
wallet_unshield_cancel, wallet_move_status, and inference_models.
What it pays:
shielded-exact, from your shielded balance, whenever the seller offers it.- Standard Solana
exact, through Shinjuku (float pay). For a seller on any facilitator (Coinbase CDP, PayAI, or any other),x402_paypays us privately from your shielded balance: the seller's price plus a flat fee (feeAtomic, 0.001 USDC on 2026-10-22). We pay the seller at once from our own shared float. The chain shows Shinjuku paying the seller, never your wallet.max_payment_atomicmust cover price plus fee. The largest price that one request can pay islargestAtomicinGET https://pay.shinjukustaition.com/api/x402/float/config(10 USDC on 2026-10-22). - A retry with the same
request_idnever pays twice.
Hidden amounts (scheme confidential, the V0b vault) are retired: the V0b
program was closed on chain on 2026-10-11.
Value that an older version put in pockets still counts in the one balance.
When the server has --proof-tools, --exit-proof-tools, and --profile,
it returns that value to the shielded balance by itself while it is idle.
shinjuku pocket reshield does the same by hand.
A balance from several deposits: one payment can spend only a few of them
at once. The server gathers them into one by itself (a private payment to
itself; nothing leaves the shielded balance, and our facilitator pays the
network fee). When no single deposit covers a price yet, x402_pay says
so, the gathering starts within about a minute, and the answer says when
to pay again.
Privacy modes
Setup
You need Node.js 22.21 or later (or Node.js 24 or later), on Windows or Linux. macOS is not supported yet.
The stable version is 0.3.86 (pinned 2026-10-23), and every command here
names it. Setup prints host lines that name this exact version. A candidate,
0.3.116, is out for testing (npm tag next, 2026-10-28): Status
and the changelog say what it changes.
A later stable version gets its own row in the Releases table: run its setup once and put its version in your host's config. Your wallet, its address, and its balance stay the same.
1. Run the setup in a terminal
npm install -g [email protected]
shinjuku setup
It asks two questions, Tor and private AI (Enter keeps the default), and at
the end it offers to add funds (Enter skips). --yes asks nothing. --add-to claude-code (or claude-desktop, cursor) also adds
the server to that host's config. In our runs, setup took about 10-16 s on a
fast line, with the proof-tool download of about 191 MB. Over Tor (--tor),
it took 89 s to 5 min in our 0.3.86 tests (2026-10-23). At the end it prints a
summary, for example:
Shinjuku Shielded is set up.
limits no limit per payment, no limit in any 24 hours, no limit for the life of the wallet
config <home>/config.json
passphrase <home>/passphrase.txt (a new random passphrase; only you can read the file; it is never printed)
proof tools <home>/proof-tools/a9af32df (29 files downloaded, every hash checked)
wallet created; your public address (solanaFeePayer): <address>
recovery <home>/recovery-<time>.txt
Setup writes to ~/.carbon-shielded-wallet (or SHIELDED_WALLET_HOME):
- The wallet, and a recovery file with the seed and the key. Copy the recovery file to two offline places, then delete it from this machine.
passphrase.txt: a new random passphrase, readable by you alone. It is never printed, and no tool takes or returns it. Keep it: the wallet file opens only with it.- The proof tools. Setup checks every file against the set that this wallet release pins.
config.json: the caps, the paths, and Tor. With it,mcpneeds no flags. A flag on the command line still wins.
Spending limits are optional and off by default: with none, only the balance
bounds a payment. To set them, give --max-payment, --max-session, or
--max-cumulative, in USDC (0.05 = 5 cents). A setup rerun lifts the
old default caps (0.05 / 1 / 20 USDC) of earlier versions. --prefer-tor
records Tor (see Privacy modes).
You can run setup again at any time. It never changes an existing wallet,
and it checks every proof-tool file again.
2. Add the server to your agent host
If you gave --add-to, this step is done. Setup also prints these lines.
Claude Code:
claude mcp add --scope user shinjuku-shielded -- npx -y --no-audit --no-fund [email protected] mcp
--no-audit --no-fund stop npx from asking npm's audit and funding
services when it starts a new version. Once, that request held the start for
5 minutes.
On native Windows, the line that setup prints puts cmd /c before npx.
With a wallet folder that is not the default, it adds
-e SHIELDED_WALLET_HOME=<home> (or an "env" block in JSON).
Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json),
and other JSON-config hosts:
{
"mcpServers": {
"shinjuku-shielded": {
"command": "npx",
"args": ["-y", "--no-audit", "--no-fund", "[email protected]", "mcp"]
}
}
}
Or: start the server first and accept the setup
You can also add the server first, with no wallet on the machine. Then the server starts in setup mode. Ask your agent "what is my balance". Your MCP client asks you to confirm: create a Shinjuku Shielded wallet on this machine. Accept, and the setup runs (with the proof-tool download of about 191 MB). Then the same server switches to the wallet tools. You do not restart it. A client that cannot ask is told to run the setup in a terminal.
In a terminal, shinjuku mcp asks "Set up Shinjuku Shield now? (y/n)".
3. Add funds
The wallet starts empty. Ask your agent "Add 0.50 USDC to my shielded
balance". It calls wallet_add_funds and gives a one-time address. Send
that USDC on Solana from any wallet or exchange. Amounts from 0.01 USDC
work, and you need no SOL. The USDC becomes private by itself while the MCP
server runs: our relayer pays every fee.
From an exchange, in a terminal, whole USDC only:
shinjuku add-funds --route exchange --amount 2
It prints a one-time address. Withdraw exactly that amount of USDC (Solana
SPL) from the exchange to it, and it shields the USDC by itself. --amount
is a whole number of USDC (2 = 2 USDC).
USDC that is already on the wallet's own address (ownAddress in
wallet_balance) goes in with wallet_shield. The steps are in
First 10 minutes.
Advanced: download the file and check it
Download the release file and check its SHA-256 before you run it. The current file and hash are also in the Releases table and in section 7b of https://shinjukustaition.com/skill.md.
curl -fsSLO https://shinjukustaition.com/wallet/b650bf06/shinjuku-wallet.mjs
echo "b650bf0682830e05207f52bad2ba426ec7f8fa1bbbfdb7e028057865e3d83d24 shinjuku-wallet.mjs" | sha256sum -c -
node shinjuku-wallet.mjs setup
With the file, replace shinjuku with node /abs/path/shinjuku-wallet.mjs.
Advanced: flags instead of config.json
mcp reads config.json only when you give no --pool and no --wallet.
To give the flags yourself (for example, for a wallet that you made with
init before 0.2.0):
claude mcp add --scope user shinjuku-shielded -- npx -y --no-audit --no-fund [email protected] mcp \
--max-payment 0.05 --max-session 0.2 --tor \
--pool <pool> \
--program 8PYPw3FSFTMbvSneXdcoH6jNoN4VD23nHwPY2A2riUy1 \
--memo-service https://pay.shinjukustaition.com \
--proof-tools /abs/path/shinjuku-proof-tools/proof-tools.json \
--exit-proof-tools /abs/path/shinjuku-proof-tools/exit-proof-tools.json \
--profile /abs/path/shinjuku-proof-tools/public-profile.json \
--passphrase-file /abs/path/passphrase.txt
With --pool, --program and --memo-service are required. Setup writes the pool, the program, and the
facilitator into config.json: <pool> is the pool in your config.json.
shinjuku help mcp prints every flag.
Use absolute paths: a host starts the server from its own folder. On Windows,
write C:/Users/you/.... --proof-tools turns wallet_shield on.
--exit-proof-tools and --profile turn wallet_unshield on.
For an older wallet, you can also run setup once with
SHIELDED_WALLET_HOME set to your wallet folder and --passphrase-file
set to your passphrase file. It keeps your wallet and writes config.json
beside it.
A send to a new address needs a host that supports MCP elicitation (it shows
you the confirmation). With a host that does not, name each address with
--unshield-to.
Examples
examples/ has complete configs and a walkthrough:
- Claude Code: the setup command, the
claude mcp addcommand, Tor, each flag explained, and how to check it works. - Claude Desktop and Cursor: complete JSON configs.
- Hermes Agent: the
config.yamlentry. - Vercel AI SDK: the server's tools in
generateTextthrough@ai-sdk/mcp, with no other package. - Solana Agent Kit:
npm
solana-agent-kit-plugin-shinjuku, the wallet as Solana Agent Kit v2 actions. - First 10 minutes: set it up, add the server, add funds, pay, send, and check the balance.
- Plain requests: 13 requests, the tool each one calls, and the shape of the answer.
Caps and flags
After setup, config.json holds the caps and the paths. You can add any of
these flags to the mcp command. A flag wins over config.json.
The passphrase comes from --passphrase-file or SHIELDED_WALLET_PASSPHRASE
at start, never from a tool call. A refusal is a normal answer
({"ok": false, "error", "detail", "next"}); the agent does what next
says. A cap refusal tells the agent to ask you: only you set the caps.
An unshield is your own money, so it does not count against the payment
budget of the wallet file (init --max-payment, --max-cumulative).
Payments to sellers still count. To show, change, or remove those
wallet-file caps, run shinjuku limits (none removes a cap). A
refusal by one of them tells the agent to ask you for this.
Upkeep is automatic. After a deposit lands, and before a payment or unshield
when the local balance is stale, the server reads the chain itself. By
default it reads the pool history through our facilitator's https history
proxy: a new wallet is ready in about 60 s. After
each shield and unshield, the wallet writes an encrypted backup to
<SHIELDED_WALLET_HOME>/auto-backups/<pool>/. It keeps the newest 5
complete, verified backups. They are on the same disk as the wallet: copy
one to another place.
What others can see
- The seller sees your request, the price, the time, and your IP unless you
use
--tor. - Your agent host and its model provider see every URL, body, price, paid answer, amount, and unshield address the agent handles. A local model removes that observer.
- Your MCP client app (Claude Code, Claude Desktop, Cursor, ...) answers the
confirmation of a send, not the model. So a prompt-injected agent cannot
approve a send. But the wallet trusts the client app to show the dialog to
you: a malicious or modified client app could answer "accept" by itself.
For a strict setup, name your addresses with
--unshield-toand use a client without elicitation. Then any other address is refused. - Our facilitator processes your payment. It keeps no access logs.
- On chain, a
shielded-exactpayment does not show who paid. A float pay payment is a pool payment to us (the payer hidden), then a normal USDC transfer from a Shinjuku float pocket to the seller. Many buyers pay from the same float pockets. The transfer lands seconds after the pool payment, so time can pair the two. - For a float payment, our server sees which private payment paid which seller, the price, the URL, and the time, until the payment is final or refunded. It does not see your wallet.
wallet_add_funds: the chain shows the USDC that arrives at the one-time address, the amount, and the time. Use each address for one payer.wallet_shieldis a public step: the chain shows USDC leave the wallet's own key, the amount, and the time.wallet_unshieldis a public step: the chain shows the amount, the address that receives it, and the time.inference_chat: usePod and the model provider see the prompt and the answer.- The UNSHIELDED line of
wallet_balancereads the wallet's own key. The RPC (our relay by default) sees which key it reads. - Privacy needs a crowd. With few users, timing can still link payments.
Which endpoints you can pay
- A seller whose 402 offers
shielded-exact. The wallet pays it from your shielded balance, and our facilitator settles the payment. - Any other Solana x402
exactendpoint that takes USDC, whichever facilitator settles it (float pay).pay(or the MCPx402_pay) pays us privately from your shielded balance: the seller's price plus a flat fee of 0.001 USDC. We then pay the seller at once from our own shared float. You fill nothing and set nothing aside. If the seller does not take the payment, we refund price and fee to your shielded balance by ourselves. This path, and every other payment, needs wallet release08a4b56f(npm[email protected]) or later: the pool program was upgraded on 2026-10-11, and earlier releases refuse to pay.
The largest price that float pay can pay for one request is the size of our largest float pocket. Read it, and the fee, before you pay:
curl -fsS https://pay.shinjukustaition.com/api/x402/float/config
feeAtomic is the fee and largestAtomic is the largest price, in atomic
USDC (1000000 = 1 USDC). On 2026-10-22 they were 1000 (0.001 USDC) and
10000000 (10 USDC). A higher price is refused before anything is paid
(p03_float_price_above_capacity).
The 3D market game Shinjuku Undermarket is our first customer and our live demo.
Status
- Stable version (pinned 2026-10-23): wallet release
b650bf06, npm[email protected](the same files as[email protected]). Install that exact version. It adds private AI in the terminal and for agent apps. Every feature and how to use it: the 0.3.86 release notes. Hash: theb650bf06row of Releases. - The stable version before it: wallet release
98296ff0(npm 0.3.80). - Candidate (2026-10-28, not the stable version): wallet release
458187f8, npm[email protected]under the tagnext. It fixes known issues 1 to 7 of 0.3.86, shows a QR code for a deposit, takes any amount from 0.01 USDC in a terminal, keeps every tool text short enough for agent apps to read in full, asks "Use Tor?" when an agent app sets up the wallet, waits for your answer in the setup box, names your recovery file when setup ends, says when you confirmed a send, and asks for each value in a terminal instead of a flag. It adds slash commands in Claude Code (type / and pick a command, then add its value, or press Enter and the agent asks), one default AI model (qwen3-8-flash, 4096 tokens for an answer) for the chat and the private AI address, and the time when a refund lands after a seller refuses at once. It says when a seller works too long before it charges (about 30 s) for any wallet to pay it. A private send keeps the money that its next payments need, so its last payment no longer waits until you cancel it. The balance then says when one payment can use the change of your last payment, and a request id that an earlier payment used gets one new request id named. A new deposit or send leaves its request id out, so an old send never answers for a new one. A new payment or AI question leaves it out too. Answers show you no request id, and the balance names a private send by its amount and address. A payment can go while a private send in parts runs from the same money, and it waits for one step of a part, not the whole part. A refund notice names its payment and stays until an answer shows it. A send that the agent app cut finishes at the next start without holding up the first payment, and a part that finishes before the chain marks it final waits and tries again. A new private send leaves in one transfer, and a terminal send of money you received goes straight to the address. The wallet reads the chain before it says your balance is 0, and a terminal command with no money says how to add money before it asks anything. The words of an answer name no tool and no field. The history reads go in fewer, shared requests. shielded-exactpayments from the shielded balance: live on mainnet.- Float pay to any Solana x402
exactendpoint that takes USDC: live on mainnet since 2026-10-11 (wallet releasee3348092and later). On 2026-10-11 it paid two stock sellers on the PayAI facilitator, 0.10 USDC in 15 s and 1.50 USDC in 20 s, and a stock seller on our own facilitator (488372b4and later), 0.01 USDC in 16 s and 17 s: see proof.md. - Faster pool anchors: live on mainnet since the pool program upgrade of
2026-10-11 (wallet release
08a4b56fand later). The pool takes an anchor about every 30 s when it grew. In our test, 12 of 12 new deposits could pay within 45 s (median 18 s). - Pool moves: live from wallet release
701809bd(npm[email protected]). When we open a new pool, the old pool keeps serving until it is empty, andmovemoves your whole balance to the new pool privately: you pay our float in the old pool, and the float pays you in the new pool. Nothing goes through a public address. - Per-user pockets: replaced by float pay. The wallet fills no new pocket
for a payment.
pocket reshieldreturns the USDC of an old pocket to your shielded balance. - Hidden amounts (scheme
confidential, the V0b vault): retired. The V0b program was closed on chain on 2026-10-11. - The wallet file and its proof tools, served from our site and our onion service with SHA-256 hashes: live.
- Key ceremonies: a multi-party ceremony: not yet.
- Independent audit: none yet.
Listed in the official MCP Registry
as io.github.ShinjukuStaition/shinjuku-mcp. npm: shinjuku-shield (also as shinjuku-shielded),
published from this repository's workflow with npm provenance (from 0.1.1).
Live on Solana mainnet. The current wallet release is b650bf06 (npm
0.3.86, pinned 2026-10-23). Every feature and how to use it: Release 0.3.86.
Every release and its changes: CHANGELOG.md.
Float pay paid two stock sellers on the PayAI facilitator on production on 2026-10-11, 0.10 USDC and 1.50 USDC, and a stock seller on our own facilitator, 0.01 USDC twice: the transactions are in proof.md.
These transactions were made with real money through this MCP
server, against our production facilitator, on an earlier pool (retired
2026-10-10). The first two came from a new wallet with the default
setup and no SOL at any time (wallet release 94a357bc). The others used
wallet release 1a336885 (2026-10-08).
No unshield transaction contains the wallet that shielded; our facilitator paid every network fee of each unshield.
Full guide: https://shinjukustaition.com/skill.md · Onion: http://2kfhlfuyuwvhmibjrpxqsg4nrbcxasjgjq7kmnfzgfwzptkhhznz3dad.onion/skill.md · X: @Shin_StAItion
Releases
Each release is one file, shinjuku-wallet.mjs, and a set of proof tools.
Our website serves the files and their SHA-256 hashes at
https://shinjukustaition.com/wallet/<sha8>/ and
https://shinjukustaition.com/proof-tools/<sha8>/. This repository is a
second, separate place for those hashes: each release adds its row here.
The stable version is b650bf06, on npm as [email protected] and
[email protected] (pinned 2026-10-23). Use it for a new install. A row marked "candidate" is a newer
release served beside the stable version and published on npm under the
tag next, not latest; it becomes the stable version only when we say so here. Rows
marked "no longer served" are gone from the website; the other older rows
stay for the record. Some short-lived releases served between 2026-10-05 and
2026-10-07 have no row here. What changed in each release after 08a4b56f
is in the changelog.