Agent guide
On MurkFun you trade only through your own AI agent, running on your own computer. This website cannot trade, holds no keys and never asks you to sign.
Let your AI buy
Paste this into an AI agent that can run commands on your computer (Claude Code, Codex, Cursor…). A chat-only AI can't do it.
Read https://murk.fun/skill.md, follow its steps to set up MurkFun, then buy 0.1 BNB of <token address> from Railgun for me.
The sentence above sends your agent to the skill file, which walks it through everything below. To do it by hand, or to check what your agent is doing, follow the steps.
1. Install the MCP server
On your own computer, with Node 20 or newer, from the MCP server's GitHub release. No sudo with a user-level npm prefix (nvm, for example); everything goes under ~/.murkfun. murkfun-mcp init creates a random vault passphrase file (it keeps one that already exists), downloads and checks the 0xbow circuits and prints the config for your MCP client. Running it again is safe.
npm install -g https://github.com/murkfun/murkfun-mcp/releases/latest/download/murkfun-mcp.tgz
murkfun-mcp initThe same command updates it to the latest release. To build it from source instead:
git clone https://github.com/murkfun/murkfun-mcp && cd murkfun-mcp && npm ci && npm run build && npm linkThe server keeps your keys and notes in an encrypted vault on your computer, has your wallet sign each order, makes the zero-knowledge proofs locally and sends only signed, proved orders to the relayer. Keep a copy of ~/.murkfun/passphrase offline: encrypted backups are useless without it.
2. Connect it to your agent
Print the config again at any time:
murkfun-mcp config claude-code
murkfun-mcp config json- Claude Code: run the printed
claude mcp addcommand. - Cursor, Claude Desktop and other clients: merge the JSON into their mcpServers config (~/.cursor/mcp.json, claude_desktop_config.json).
- Codex: put the same values into ~/.codex/config.toml:
[mcp_servers.murkfun]
command = "murkfun-mcp"
args = []
env = { MURKFUN_PASSPHRASE_FILE = "<...>", MURKFUN_RELAYER_URL = "<...>", MURKFUN_DEPLOYMENT = "<...>" }If the printed config holds a value in angle brackets (MURKFUN_RELAYER_URL, MURKFUN_DEPLOYMENT), replace it with the real one. If your client cannot find murkfun-mcp (it starts servers without your shell's PATH, as with nvm), print the config with murkfun-mcp config json --absolute. Then restart the agent so it loads the murkfun tools.
No MCP support in your agent's client? It can run every tool as a shell command instead (how your agent talks to MurkFun).
3. Add the skill file
SKILL.md tells your agent the setup steps, the order of operations and the hard rules. It is a file for AIs: skill.md (also at /skills/murkfun/SKILL.md). For Claude Code:
mkdir -p ~/.claude/skills/murkfun
curl -fsSL https://murk.fun/skill.md -o ~/.claude/skills/murkfun/SKILL.md4. First run
- MurkFun requires a SPACE ID Agent ID: claim one in the Binance Agentic Wallet (Binance App → Wallet → AI agent / Agent ID). Then install its CLI (
npm install -g @binance/agentic-wallet, thenbaw auth signin), turn on Developer Mode in the Binance App, and setMURKFUN_SIGNER=bawin the MCP config: the agent wallet then signs every order (it has no key to export). setupcreates the vault, shows your wallet address and has the wallet sign the MurkFun seed message once. This wallet is public and linked to you; it never sends a MurkFun transaction. Your pseudonyms come from that signature: your wallet is your backup.- Guard the wallet. If the agent created it, save its key at once with
export_recovery(a plaintext file; move it offline and delete it from the computer). You can also use your own wallet. - Wait until
statusshows holderSet.inAcceptedRoot: true. New Agent ID holders join MurkFun's holder set in batches, without any transaction from you, and can trade 1 h after their batch is posted. - With Railgun (the default) the wallet needs no BNB: it only signs. For 0xbow, send BNB to the wallet: the amount you want to deposit plus about 0.003 BNB for gas.
5. Buy: two privacy pools
Railgun (default)
- Shield BNB into a Railgun wallet on BNB Chain (a public transaction; Railgun charges 0.25% to shield and to unshield). A new shield can be spent after Railgun's standby of about an hour.
buyreturns a proved direct-buy order for any amount and the Railgun transaction that pays it: an unshield to MurkFun's Railgun adapter, bound to that order. You build and prove it with a Railgun wallet or SDK, andsubmit_railgunhas MurkFun's relayer send it, so no wallet of yours sends the buy.- Railgun unshields exactly that amount and the buy happens in the same transaction; the rest stays shielded. During the curve, MurkFun only accepts BNB from the privacy-pool contracts on the allowlist (MurkFun's 0xbow adapter and MurkFun's Railgun adapter), so a plain wallet cannot fund or buy; after graduation the token also trades publicly on PancakeSwap.
0xbow Privacy Pools
Notice (Nov 8, 2026): 0xbow's ASP on BNB Chain is currently not approving new deposits. Use Railgun. BNB already deposited into 0xbow is safe and can be taken back to your wallet any time with 0xbow's ragequit.
depositat least 0.02 BNB from the wallet (a public transaction). Round amounts like 0.5, 1 or 5 BNB blend in with everyone else's.- Wait for 0xbow's ASP to approve the deposit. This can take hours or much longer, and the ASP may not approve a deposit at all: if you want to buy soon, use Railgun. The agent checks
statusevery 5–10 minutes. - Each
buywith source "note" takes the amount you choose out of the note in one step: MurkFun's 0xbow adapter withdraws exactly that amount and buys with it in the same transaction. The change stays in 0xbow for the next buy. Don't buy exactly the amount you deposited.
Either way, sells, withdrawals, caps and fees are the same. See How it works and Privacy.
6. Trade and withdraw
- Before each buy or sell your agent tells you the amount, the expected fill, the slippage limit (3% by default) and the relayer fee, and waits for your OK.
- While a token is on the curve, one pseudonym can hold at most 1% of supply. The buy that sells out the curve gets exactly what is left and graduates the token in the same transaction; the BNB it does not need stays in the token's balance. If that graduation fails, buys wait until anyone retries it with
graduate, while sells and withdrawals keep working as long as the market is not paused (a sell reopens the curve). - Sale proceeds stay in MurkFun as the token's BNB balance.
withdraw_bnbpays it to an address you give, at any time unless the market is paused;withdraw_tokenworks after graduation. A fresh address keeps you private. Use an address you control: the contracts refuse only some destinations where funds are lost (a MurkFun contract or token, WBNB), not all (a burn address), so the tools refuse every one of them, and ask you to confirm any other contract address (a Safe, for example).
Safety rules your agent follows
- It never asks for, prints or sends the seed, the wallet key, the signature of the MurkFun message, the passphrase, the recovery file or the vault. No MurkFun tool returns them. Never sign the message "MurkFun seed" anywhere else: that signature is your MurkFun key.
- It confirms the amount, token and destination before every deposit, buy, sell, withdrawal or launch, and never raises slippage without asking.
- It never overwrites an existing vault, and runs one MurkFun action at a time.
- It withdraws only to an address you give it, never to a MurkFun contract, a MurkFun token or WBNB, sends to another contract only after you confirm it is yours, and reminds you that deposits, withdrawal addresses and timing are public.
MCP tools
| Tool | What it does |
|---|---|
setup | Creates the encrypted vault, checks that the wallet holds a SPACE ID Agent ID (MurkFun never mints it) and has the wallet sign the MurkFun seed message once. Your pseudonyms come from that signature, so the wallet is your backup. Nothing is sent: there is no registration. |
backup · export_recovery | An encrypted copy of the vault, and a plaintext file with the wallet key (the tool returns only its path). |
deposit | Only for 0xbow buys: deposits BNB into 0xbow from the wallet (public). At least 0.02 BNB; round amounts (0.5, 1, 5 BNB) blend in. Railgun, the default, needs no deposit here. |
status | Notes with their ASP approval, positions, recent orders. |
list_launches · token_info | New tokens, price, curve progress, the venue after graduation, and your own balances. |
buy | Any amount. From Railgun (the default: a proved order and the Railgun transaction that pays it, which submit_railgun has the relayer send), from an approved 0xbow note (source "note"; the change stays in 0xbow), or from the token's balance in MurkFun (source "balance"). Or an exact number of tokens for at most a BNB amount, e.g. exactly up to the 1% cap or the end of the curve. BNB a buy does not need (an exact-out buy, or the buy that sells out the curve) stays in the token's balance in MurkFun. |
fund_pseudonym | Returns a proved order that credits BNB to the token's pseudonym and the Railgun transaction that pays it (an unshield to MurkFun's Railgun adapter). During the curve, MurkFun only accepts BNB from the privacy-pool contracts on the allowlist (MurkFun's 0xbow adapter and MurkFun's Railgun adapter), so a plain-wallet version is only returned after graduation, when the token also trades publicly on PancakeSwap. Sends nothing itself. |
sell | Sells to the curve or the PancakeSwap venue. Proceeds stay inside MurkFun. |
withdraw_bnb · withdraw_token | Pays BNB out, tokens after graduation, to the address you give (not while the market is paused). |
graduate | Retries the graduation of a sold-out curve whose automatic graduation (in the buy that sold it out) failed. Anyone can call it. |
order_status | The state of a submitted order, and why it failed. |
upload_token_metadata | Puts the token's image and description on IPFS, pinned by MurkFun, so a launch needs no pinning account. |
create_token · claim_lp_fees · set_fee_recipient | Launch a token as its dev. Creating a token is your first buy: create + buy up to 30% of supply (the platform's dev limit; you do not set it) in one transaction, paid from 0xbow or Railgun with one relayer fee, so nobody can buy before you. Collect fees, change the fee recipient. |
recover_from_wallet | The wallet signs again: same pseudonyms, same 0xbow notes, found on-chain on a new machine. |
restore · recover | Bring back a vault from a backup or a recovery file. |
Troubleshooting
Most errors are not MurkFun's servers failing. They come from five places: your own setup, your wallet, MurkFun's relayer, MurkFun's contracts on the chain, and the privacy pool.
Your own setup, checked by the MCP server on your computer (nothing was sent)
| Message contains | What to do |
|---|---|
set MURKFUN_DEPLOYMENT | The MCP config has no value for MURKFUN_DEPLOYMENT or MURKFUN_RELAYER_URL where the package's network file has a placeholder. Put the real value in the config; never a guessed one. |
cannot decrypt the vault | Wrong passphrase file in the MCP config. Fix the config; never create a new vault. |
has no BNB for gas | Send about 0.003 BNB to the wallet (0xbow keystore and deposit). |
NO_AGENT_NFT | The wallet holds no SPACE ID Agent ID. Claim one in the Binance Agentic Wallet; MurkFun cannot mint it. |
NOT_A_HOLDER_YET | The wallet is not in MurkFun's holder set yet: new Agent ID holders are added in batches, usable 1 h after they are posted. Nothing was signed or sent; try again later. |
BELOW_MINIMUM | Raise the amount: a deposit is at least 0.02 BNB, and a 0xbow buy must be more than the relayer fee. |
NOTE_TOO_SMALL | No single 0xbow note holds that much. Buy at most the largest note, split the buy, or deposit more. |
OVER_CAP | Over the 1% cap per pseudonym on the curve. Buy less, or wait for graduation. |
MARKET_PAUSED | The emergency pause is on: every MurkFun action waits (launches, buys, sells, funding, graduation, withdrawals, fee claims). Balances stay where they are; retry after the unpause. |
The Binance Agentic Wallet (your wallet's CLI, nothing was executed)
| Message contains | What to do |
|---|---|
BAW_CONFIRMATION_REQUIRED | The Binance App would have to approve it. Change the limit or security setting, then ask your agent to retry. |
351802 | Developer Mode is off or expired: turn it on in the Binance App (Agentic Wallet → Settings → Developer Mode). |
MurkFun's relayer (a refused order was not executed)
| Message contains | What to do |
|---|---|
fee_too_low | The fee no longer covers the gas: the gas price rose, or the buy now sells out the curve and also pays for the graduation (the completing-buy fee, several times a normal buy's). The agent quotes again and tells you the new fee. |
busy | A previous order is still pending. The agent checks order_status, then retries. |
broadcast_failed | Nothing was sent. The MCP server already resent the identical order a few times (also when the relayer was overloaded, unreachable, or dropped the order); try again later. |
relayer_underfunded | The relayer cannot pay gas right now. Nothing was sent; try later. |
simulation_failed | The contract would refuse the order, so it was not sent. The reason follows it (below). |
The chain: MurkFun's contracts refuse the transaction (nothing was spent)
| Message contains | What to do |
|---|---|
Slippage | The price moved. Retry once; raise the slippage limit only if you want to. |
PrivacyPoolRequired | During the curve, BNB must come from a privacy pool on MurkFun's allowlist (Railgun or 0xbow, each through MurkFun's adapter). Buy through Railgun or from a 0xbow note. |
WrongToken | The launch did not create the address its order names (the platform terms changed meanwhile; also WrongRecipient, NotLaunchKey). The agent launches again with a new order. |
WrongNonce | Another action of the pseudonym landed first, or the order was already used (also NullifierUsed, UnknownRoot, InvalidProof). Nothing was spent; the agent signs and proves a new order. |
WrongPrivacyPoolAmount | MurkFun's 0xbow adapter refused a withdrawal that did not match its order (also NotProcessor). The note is unspent; the agent retries with a new order. |
curve sold out | The curve is sold out and its automatic graduation failed: buys wait until anyone retries it with graduate. Sells still work. |
NotGraduated | Tokens can leave MurkFun only after graduation. Keep them, or sell. |
The privacy pool (0xbow or Railgun)
| Message contains | What to do |
|---|---|
WAITING_FOR_ASP | Normal after a 0xbow deposit. Nothing was spent. Wait (it can take hours or much longer), or buy from Railgun instead. |
PoolVault_ | 0xbow's contracts refused the withdrawal (the note was spent meanwhile, or a root moved). The agent checks status, then retries. |
Railgun | A new shield stays in Railgun's standby for about an hour before your Railgun wallet can spend it. If the price or the cap stops a Railgun buy, the whole transaction reverts and nothing is unshielded. |
If a tool fails partway, the agent calls status before retrying: notes and balances are read from the chain.
Backups and recovery
Your wallet is your backup: everything secret is derived from its signature of one fixed message. On a new computer, install as above and run recover_from_wallet: the same wallet signs again, and your pseudonyms, balances and 0xbow notes come back from the chain. Guard that wallet; whoever holds its key can sign orders and controls your MurkFun funds.
How your agent talks to MurkFun
- MCP tools (preferred). The MurkFun MCP server on your computer gives your agent the tools above. It keeps your secrets in the encrypted vault, makes every proof locally and sends only proved orders.
- The same tools as shell commands, for agents whose client has no MCP support (Codex, Cursor, OpenClaw, scripts):
murkfun-mcp <tool> --arg valueor--json '{…}'. Same code, same environment, same vault, same JSON output; errors go to stderr with exit code 1.murkfun-mcp toolslists every tool with its JSON Schema. The safety rules are the same: no tool prints a secret, secrets are passed as file paths and never typed on the command line, and export_recovery still needs --confirm. Calls on one vault run one at a time. - The HTTP APIs underneath. The read API (
https://api.murk.fun/v1/launches?sort=new,/tokens/<address>,/tokens/<address>/trades) needs no keys: read market data from it directly. The relayer API accepts only orders with proofs made from your vault: use it only through a client that makes them, such as the MCP server. Both are described on the API page.
export MURKFUN_PASSPHRASE_FILE=~/.murkfun/passphrase
murkfun-mcp status
murkfun-mcp buy --token 0x… --bnbAmount 0.1
murkfun-mcp order_status --id …| Action | MCP tool | CLI | Becomes |
|---|---|---|---|
| Set up the vault | setup | murkfun-mcp setup | local files only |
| Notes, positions, orders | status, holders_lookup | murkfun-mcp status | reads of the chain and your vault |
| Deposit into 0xbow (only for 0xbow buys) | deposit | murkfun-mcp deposit --amountBnb 1 | a transaction from your wallet |
| Launch a token (create + your first buy) | upload_token_metadata, create_token | murkfun-mcp create_token --name … --symbol … --metadataURI … --devFeeRecipient 0x… --bnbAmount 0.5 | relayer order privacyPoolLaunch + railgunLaunch |
| Launch without a buy | create_token | murkfun-mcp create_token --name … --symbol … --metadataURI … --devFeeRecipient 0x… | relayer order launch |
| Buy from Railgun (default) | buy, submit_railgun | murkfun-mcp buy --token 0x… --bnbAmount 0.1 | relayer order railgunBuy |
| Buy from a 0xbow note | buy | murkfun-mcp buy --token 0x… --bnbAmount 0.1 --source note | relayer order privacyPoolBuy |
| Buy an exact number of tokens from a 0xbow note | buy | murkfun-mcp buy --token 0x… --tokens cap --source note | relayer order privacyPoolBuy |
| Buy from the token's balance | buy | murkfun-mcp buy --token 0x… --bnbAmount 0.1 --source balance | relayer order buy |
| Buy an exact number of tokens from the token's balance | buy | murkfun-mcp buy --token 0x… --tokens 1000000 --source balance | relayer order buyExactOut |
| Quote a buy without sending it | buy | murkfun-mcp buy --token 0x… --bnbAmount 0.1 --dryRun | a fee quote from the relayer and reads of the chain; nothing is sent |
| Sell | sell | murkfun-mcp sell --token 0x… --percent 50 | relayer order sell |
| Withdraw BNB | withdraw_bnb | murkfun-mcp withdraw_bnb --token 0x… --to 0x… | relayer order withdrawBnb |
| Withdraw tokens | withdraw_token | murkfun-mcp withdraw_token --token 0x… --to 0x… | relayer order withdrawTokens |
| Fund a pseudonym | fund_pseudonym | murkfun-mcp fund_pseudonym --token 0x… --amountBnb 0.5 | relayer order railgunFund |
| Claim fees | claim_lp_fees | murkfun-mcp claim_lp_fees --token 0x… | relayer order collectLpFees + claimDevFees |
| Change the dev fee recipient | set_fee_recipient | murkfun-mcp set_fee_recipient --token 0x… --recipient 0x… | relayer order setDevRecipient |
| Retry a graduation | graduate | murkfun-mcp graduate --token 0x… | relayer order graduate |
| Market data | list_launches, token_info | murkfun-mcp list_launches --limit 20 | the read API (or the chain) |
| Order status | order_status | murkfun-mcp order_status --id … | a status request to the relayer |
| Back up | backup, export_recovery | murkfun-mcp export_recovery --path … --confirm | local files only |
| Restore | restore, recover_from_wallet, recover | murkfun-mcp recover_from_wallet | local files only |
Endpoints
Market data: a read-only API, no keys, GET only, JSON. Base URL https://api.murk.fun/v1:
curl -s 'https://api.murk.fun/v1/launches?sort=new&limit=20'
curl -s https://api.murk.fun/v1/tokens/<address>
curl -s 'https://api.murk.fun/v1/tokens/<address>/trades?limit=50'
curl -s https://api.murk.fun/v1/tokens/<address>/holders
curl -s 'https://api.murk.fun/v1/tokens/<address>/candles?interval=5m'
curl -s https://api.murk.fun/v1/tokens/<address>/graduation
curl -s https://api.murk.fun/v1/stats
curl -s https://api.murk.fun/v1/paramsUploads, on the same host: POST /v1/ipfs/image and POST /v1/ipfs/metadata put a token's image and metadata on IPFS (upload_token_metadata uses them).
Relayer: GET /v1/info, GET /v1/quote, POST /v1/orders, GET /v1/orders/:id at the relayer URL. Every order carries zero-knowledge proofs made on your computer from your vault, so orders go through the MCP tools (or their shell commands), never as hand-written HTTP requests.
The URLs the MCP server uses ship with it, in the package's networks/bsc.json; murkfun-mcp network prints them. Every route and field: the API page.
Contracts on BNB Chain
BSC mainnet (chain 56), deployed at block 132262524. Source verified on Sourcify; the links open BscScan.
- MurkFunFactory0x11e02275559FEDd72a0B578cc5b4c0F766aCa25ASourcify
- MurkFunMarket0x9717126512c5a4D3b5c0E13421639ea80DACaa91Sourcify
- MurkFunOrders0xCc09A7772aDAf0586040a933b70B1248F432eb87Sourcify
- OrderVerifier0xfA99009F7c850294aDd481cD6764f60F547076b7Sourcify
- MurkFunDex0x69d0B74c1b6C835e212E6EDe9AfB1e7286DD3FF4Sourcify
- MurkFunInfinityHook0x833eAEe7102Ea77C5Bb0C6B2Fb3F64F9032B45e6Sourcify
- MurkFunLocker0xFD25D90f151193A795E4a9De6F0bBB9dD5AA32A8Sourcify
- MurkFunPrivacyPoolAdapter0x0242771ba1758554fa6C806d9219c7dF891c9879Sourcify
- MurkFunRailgunAdapter0x2ba9978Ba84dB605c1b6a7F0885f84Af340Ad249Sourcify
- MurkFunHolderRoots0xD59867DADC96202284Fa54d016C6d66a0adBaE24Sourcify
- BatchVerifier0x3BA574b3d102800c3E08E2F978A4d802C15b8C9ESourcify
Verify it yourself
The holder set every order proves membership in is checkable by anyone, from the chain alone: github.com/murkfun/holder-roots rebuilds the tree from the contract's Batch events, compares every root with MurkFunHolderRoots, audits the set against the SPACE ID registry, checks that the deployed bytecode is its sources, and sends fraud proofs. Install it and rebuild the tree as below, or browse the set on the holders page.
npm install -g https://github.com/murkfun/holder-roots/releases/latest/download/murkfun-holders.tgz
murkfun-holders tree