Skip to content
MurkFun

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 init

The 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 link

The 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 add command.
  • 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.md

4. First run

  1. 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, then baw auth signin), turn on Developer Mode in the Binance App, and set MURKFUN_SIGNER=baw in the MCP config: the agent wallet then signs every order (it has no key to export).
  2. setup creates 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.
  3. 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.
  4. Wait until status shows 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.
  5. 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)

  1. 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.
  2. buy returns 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, and submit_railgun has MurkFun's relayer send it, so no wallet of yours sends the buy.
  3. 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.

  1. deposit at 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.
  2. 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 status every 5–10 minutes.
  3. Each buy with 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_bnb pays it to an address you give, at any time unless the market is paused; withdraw_token works 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

ToolWhat it does
setupCreates 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_recoveryAn encrypted copy of the vault, and a plaintext file with the wallet key (the tool returns only its path).
depositOnly 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.
statusNotes with their ASP approval, positions, recent orders.
list_launches · token_infoNew tokens, price, curve progress, the venue after graduation, and your own balances.
buyAny 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_pseudonymReturns 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.
sellSells to the curve or the PancakeSwap venue. Proceeds stay inside MurkFun.
withdraw_bnb · withdraw_tokenPays BNB out, tokens after graduation, to the address you give (not while the market is paused).
graduateRetries the graduation of a sold-out curve whose automatic graduation (in the buy that sold it out) failed. Anyone can call it.
order_statusThe state of a submitted order, and why it failed.
upload_token_metadataPuts 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_recipientLaunch 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_walletThe wallet signs again: same pseudonyms, same 0xbow notes, found on-chain on a new machine.
restore · recoverBring 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 containsWhat to do
set MURKFUN_DEPLOYMENTThe 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 vaultWrong passphrase file in the MCP config. Fix the config; never create a new vault.
has no BNB for gasSend about 0.003 BNB to the wallet (0xbow keystore and deposit).
NO_AGENT_NFTThe wallet holds no SPACE ID Agent ID. Claim one in the Binance Agentic Wallet; MurkFun cannot mint it.
NOT_A_HOLDER_YETThe 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_MINIMUMRaise the amount: a deposit is at least 0.02 BNB, and a 0xbow buy must be more than the relayer fee.
NOTE_TOO_SMALLNo single 0xbow note holds that much. Buy at most the largest note, split the buy, or deposit more.
OVER_CAPOver the 1% cap per pseudonym on the curve. Buy less, or wait for graduation.
MARKET_PAUSEDThe 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 containsWhat to do
BAW_CONFIRMATION_REQUIREDThe Binance App would have to approve it. Change the limit or security setting, then ask your agent to retry.
351802Developer 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 containsWhat to do
fee_too_lowThe 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.
busyA previous order is still pending. The agent checks order_status, then retries.
broadcast_failedNothing 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_underfundedThe relayer cannot pay gas right now. Nothing was sent; try later.
simulation_failedThe 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 containsWhat to do
SlippageThe price moved. Retry once; raise the slippage limit only if you want to.
PrivacyPoolRequiredDuring 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.
WrongTokenThe 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.
WrongNonceAnother 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.
WrongPrivacyPoolAmountMurkFun'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 outThe curve is sold out and its automatic graduation failed: buys wait until anyone retries it with graduate. Sells still work.
NotGraduatedTokens can leave MurkFun only after graduation. Keep them, or sell.

The privacy pool (0xbow or Railgun)

Message containsWhat to do
WAITING_FOR_ASPNormal 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.
RailgunA 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

  1. 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.
  2. The same tools as shell commands, for agents whose client has no MCP support (Codex, Cursor, OpenClaw, scripts): murkfun-mcp <tool> --arg value or --json '{…}'. Same code, same environment, same vault, same JSON output; errors go to stderr with exit code 1. murkfun-mcp tools lists 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.
  3. 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 …
ActionMCP toolCLIBecomes
Set up the vaultsetupmurkfun-mcp setuplocal files only
Notes, positions, ordersstatus, holders_lookupmurkfun-mcp statusreads of the chain and your vault
Deposit into 0xbow (only for 0xbow buys)depositmurkfun-mcp deposit --amountBnb 1a transaction from your wallet
Launch a token (create + your first buy)upload_token_metadata, create_tokenmurkfun-mcp create_token --name … --symbol … --metadataURI … --devFeeRecipient 0x… --bnbAmount 0.5relayer order privacyPoolLaunch + railgunLaunch
Launch without a buycreate_tokenmurkfun-mcp create_token --name … --symbol … --metadataURI … --devFeeRecipient 0x…relayer order launch
Buy from Railgun (default)buy, submit_railgunmurkfun-mcp buy --token 0x… --bnbAmount 0.1relayer order railgunBuy
Buy from a 0xbow notebuymurkfun-mcp buy --token 0x… --bnbAmount 0.1 --source noterelayer order privacyPoolBuy
Buy an exact number of tokens from a 0xbow notebuymurkfun-mcp buy --token 0x… --tokens cap --source noterelayer order privacyPoolBuy
Buy from the token's balancebuymurkfun-mcp buy --token 0x… --bnbAmount 0.1 --source balancerelayer order buy
Buy an exact number of tokens from the token's balancebuymurkfun-mcp buy --token 0x… --tokens 1000000 --source balancerelayer order buyExactOut
Quote a buy without sending itbuymurkfun-mcp buy --token 0x… --bnbAmount 0.1 --dryRuna fee quote from the relayer and reads of the chain; nothing is sent
Sellsellmurkfun-mcp sell --token 0x… --percent 50relayer order sell
Withdraw BNBwithdraw_bnbmurkfun-mcp withdraw_bnb --token 0x… --to 0x…relayer order withdrawBnb
Withdraw tokenswithdraw_tokenmurkfun-mcp withdraw_token --token 0x… --to 0x…relayer order withdrawTokens
Fund a pseudonymfund_pseudonymmurkfun-mcp fund_pseudonym --token 0x… --amountBnb 0.5relayer order railgunFund
Claim feesclaim_lp_feesmurkfun-mcp claim_lp_fees --token 0x…relayer order collectLpFees + claimDevFees
Change the dev fee recipientset_fee_recipientmurkfun-mcp set_fee_recipient --token 0x… --recipient 0x…relayer order setDevRecipient
Retry a graduationgraduatemurkfun-mcp graduate --token 0x…relayer order graduate
Market datalist_launches, token_infomurkfun-mcp list_launches --limit 20the read API (or the chain)
Order statusorder_statusmurkfun-mcp order_status --id …a status request to the relayer
Back upbackup, export_recoverymurkfun-mcp export_recovery --path … --confirmlocal files only
Restorerestore, recover_from_wallet, recovermurkfun-mcp recover_from_walletlocal 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/params

Uploads, 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.

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