A Model Context Protocol (MCP) server that gives any AI agent onchain tools for the Cookie Chain blockchain — read the market, swap, launch tokens, manage liquidity, stake, trade NFTs, and bridge to Solana.
It runs locally over stdio and signs with your key on your machine, so it is non-custodial by design. It is a community project for the whole Cookie Chain ecosystem.
- What it can do
- Install — Claude Code · Claude Desktop · Cursor
- Enable trading (add a key)
- Try it
- Configuration
- Tools
- Safety
- Development
- Read the market — chain health, pools, token info, token search, swap quotes, and wallet balances. No key needed.
- Swap any Cookie Chain token pair through the Candy Shop aggregator, which routes across all Cookie Chain DEX liquidity for the best fill.
- Transfer COOK or any SPL / Token-2022 token.
- Launch tokens on the MomoSwap launchpad — create a token on a COOK bonding curve, buy / sell the curve, claim after graduation, and sweep your creator fees.
- Manage liquidity — create pools, add / remove liquidity, claim fees, and permanently lock positions across Cookiebox DAMM v2, Cookiebox CLMM, and CookieSwap SAMM (venue auto-detected).
- Liquid-stake COOK for bCOOK and redeem it instantly.
- Trade NFTs on Baked Bazaar — search, browse, buy, list, and make / accept offers (Cookie Chain's Metaplex Auction House marketplace).
- Bridge COOK 1:1 between Cookie Chain and Solana mainnet over Hyperlane.
- Own a name — register, transfer, and resolve
.cooknames on the CookOven name service, and use them anywhere an address is expected (transfer to: "bot.cook").
Safe by default: read-only until you add a key, and every money-moving action is simulated before it is sent.
Requires Node ≥ 22. There is nothing to install or build — npx fetches the published package on
first run. Pick your client below. All three use the same server; the only difference is where the
config lives.
The quickest way — one command, available in every project:
claude mcp add --scope user --transport stdio cookie-mcp -- npx -y cookie-mcpThis registers the server read-only (no key). See Enable trading to add a wallet.
Scopes — claude mcp add writes to one of three places; choose with --scope:
--scope |
Available in | Stored in |
|---|---|---|
user |
all your projects | ~/.claude.json |
(omitted) local |
the current project dir | ~/.claude.json (per-folder) |
project |
anyone who clones a repo | .mcp.json at the repo root |
Use --scope project only when you want the server committed into a specific repo — it writes a
.mcp.json that teammates must approve on first use. For a general-purpose tool like this, --scope user is the right default.
Verify it registered:
claude mcp list # all servers
claude mcp get cookie-mcp # this one's details
# or run /mcp inside a Claude Code sessionEdit the config file (create it if missing), then restart Claude Desktop:
- macOS —
~/Library/Application Support/Claude/claude_desktop_config.json - Windows —
%APPDATA%\Claude\claude_desktop_config.json
Add the server block below under mcpServers.
Edit ~/.cursor/mcp.json (applies everywhere) or .cursor/mcp.json in a project (project wins if
both exist), then add the server block.
Claude Desktop, Cursor, and a Claude Code .mcp.json all use the identical shape:
{
"mcpServers": {
"cookie-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "cookie-mcp"],
"env": {
"COOKIE_RPC_URL": "https://rpc.cookiescan.io",
"COOKIE_PRIVATE_KEY": ""
}
}
}
}Reads work with no key. To let the agent swap, transfer, launch, stake, LP, buy NFTs, or bridge,
provide a wallet via COOKIE_PRIVATE_KEY — a base58 secret, a solana-keygen JSON byte array, or a
path to a keypair file.
-
Config-file clients (Desktop / Cursor /
.mcp.json): put it in theenvblock above. -
Claude Code: re-run the add with
--env(note: this is saved to~/.claude.json; avoid leaving the raw secret in your shell history):claude mcp add --scope user --transport stdio cookie-mcp \ --env COOKIE_RPC_URL=https://rpc.cookiescan.io \ --env COOKIE_PRIVATE_KEY=<your-key-or-path> \ -- npx -y cookie-mcp
Your key never leaves your machine, is used only to sign locally, and is redacted from all output. Every money-moving action is simulated before it is sent.
Once it's registered, just talk to your agent naturally:
- "What's the health of Cookie Chain right now?" →
chain_health - "Find the cookhouse token and show me its price and liquidity." →
search_tokens→get_token_info - "Quote swapping 10 COOK for bCOOK." →
get_quote - "Swap 10 COOK for bCOOK." →
get_quote→trade(needs a key; simulated first) - "What COOKHOUSE NFTs are listed, and buy the cheapest under 50 COOK." →
search_nfts→buy_nft - "Which wallet are you about to trade from?" →
get_wallet
The agent resolves names to mint addresses with search_tokens / search_nfts, then acts on the mint —
it never turns a name straight into a trade.
| Variable | Default | Purpose |
|---|---|---|
COOKIE_RPC_URL |
https://rpc.cookiescan.io |
Cookie Chain RPC. |
COOKIE_PRIVATE_KEY |
— | Wallet key for money-moving tools. Read-only if unset. |
COOKIE_SLIPPAGE_BPS |
500 |
Default slippage (bps). |
SOLANA_RPC_URL |
https://api.mainnet-beta.solana.com |
Solana mainnet RPC (bridge only). |
COOKIE_REFERRER |
mcp treasury |
Referral wallet (MomoSwap only). |
Reads (no key): chain_health, get_pools, get_token_info, search_tokens (resolve a token
name/ticker to its mint), get_quote, get_wallet (which key this server signs with, and the RPC it
uses — no RPC call, so it works when the chain is down), get_balance, stake_info (bCOOK liquid-staking rate / TVL /
APY / fees), launchpad reads get_launchpad_pools / get_launchpad_token /
get_launchpad_positions, and NFT reads
get_nft_listings, search_nfts (resolve an NFT/collection name to a listed mint), get_nft,
get_wallet_nfts, get_nft_offers, get_nft_market_stats, and .cook name reads
resolve_domain / get_owned_domains.
Money (need COOKIE_PRIVATE_KEY): trade (swap via Candy Shop), transfer (COOK or any token),
stake / unstake (COOK ⇄ bCOOK liquid staking).
Launchpad (need COOKIE_PRIVATE_KEY, MomoSwap): deploy_token launches a
token on a COOK bonding curve (a logo is required — pass imageBase64 and it is pinned to IPFS, or
set noLogo: true to launch without one; the metadata is immutable, so a logo cannot be added later.
Costs the launchpad creation fee, read from its config at call time, plus any
devBuyCook), launchpad_buy / launchpad_sell trade that curve, claim_launchpad
settles a position (the real SPL token after graduation, a Fair-mode refund, or a Jackpot/Survivor payout),
and claim_creator_fees sweeps the creator's share of trading fees from a launch you created.
⚠️ Before graduation, holdings are program-tracked curve shares, not SPL tokens — they do not appear inget_balanceandtradecannot route them. Exit withlaunchpad_sell, or claim the real token withclaim_launchpadonce the pool graduates; from then on it trades like any other token.
Because those shares are invisible to get_balance, get_launchpad_positions is the portfolio
view: every launch a wallet has a position in, what it is worth on a live curve, and what is unclaimed
(tokens after graduation, a Fair-mode refund, a settlement payout, creator fees or vesting). It reads
the UserPosition accounts straight from the chain in batches, so it costs about one RPC round trip
per 100 launches. Pass owner for any wallet, or omit it for your own.
A pre-graduation token also has no DEX pool at all, so get_quote / trade would just report "no
route". They now recognise that case and point at the launchpad tools instead, and get_token_info
adds a launchpad field when a mint shows no price or liquidity because it is still on a curve.
Liquidity (need COOKIE_PRIVATE_KEY): create_pool, add_liquidity, remove_liquidity,
claim_fees (Cookiebox DAMM v2, Cookiebox CLMM, and CookieSwap SAMM, venue auto-detected),
lock_liquidity (Cookiebox DAMM v2 and Cookiebox CLMM, permanent and irreversible — CLMM locks the
whole position; fees stay claimable either way). Concentrated-liquidity venues (CLMM / SAMM) open a
full-range position by default.
NFT marketplace (need COOKIE_PRIVATE_KEY, Baked Bazaar): buy_nft,
list_nft, cancel_listing, make_offer, accept_offer, cancel_offer. Built on the Cookie Chain
Metaplex Auction House (1% marketplace fee + creator royalties); every action is built and signed
locally.
Bridge (need COOKIE_PRIVATE_KEY): bridge moves COOK 1:1 between Cookie Chain and Solana mainnet
over the Hyperlane warp route (direction = cookie-to-solana |
solana-to-cookie). One source-chain signature dispatches the transfer; a relayer delivers on the far
side in a few minutes — check with bridge_status (a read, by Hyperlane message id). Cookie native COOK
is 9-decimal; Solana COOK is a 6-decimal Token-2022 mint — amounts are in COOK either way. Simulates
first. The mainnet warp-route program ids ship as defaults, so bridge works
out of the box — override COOKIE_WARP_PROGRAM_ID / SOLANA_WARP_PROGRAM_ID only for a different
deployment.
.cook names (CookOven): resolve_domain looks a name up — owner,
registration date, resolver/metadata pointers — or reports it as available with the live price;
get_owned_domains lists every name a wallet holds and which is its primary. Writes need
COOKIE_PRIVATE_KEY: register_domain, set_primary_domain (or clear: true to unset),
transfer_domain, update_domain. Everything is read and built straight from the on-chain registry —
no API, no indexer. The suffix is optional everywhere: chef and chef.cook are the same name.
Once you own a name you can use it instead of an address: transfer, get_balance,
get_wallet_nfts, get_nft_offers, get_launchpad_positions and transfer_domain all accept a
.cook name wherever they take a Cookie Chain wallet. A plain base58 address costs no extra lookup.
Use the COOK / native mint So11111111111111111111111111111111111111112 for COOK. Every tool returns
JSON; failures return { error, hint } — never a stack trace, never your key.
Non-custodial and local: no hosted server, no remote key storage. The key stays in COOKIE_PRIVATE_KEY,
signs locally, and is redacted from all output. Read-only until a key is set; every money-moving action
is simulated before it is sent.
yarn install
yarn test # lint + format + typecheck + unit tests + boot smoke
yarn mcp # run the server on stdio from source (tsx)
yarn build # bundle to dist/mcp/server.js (what gets published)To point an agent at a local checkout instead of the published package, set the command to
npx tsx /ABS/PATH/cookie-mcp/src/mcp/server.ts.
This project is licensed under the terms of the MIT license. See the LICENSE file.