Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.inkyswap.com/llms.txt

Use this file to discover all available pages before exploring further.

InkyPump ships a Model Context Protocol server so that an LLM client (Claude Code, Codex CLI, Cursor, etc.) can create tokens, preview launch economics, and read live launch state through structured tools — without leaving the editor.
The MCP signs createLaunch transactions with a hot wallet whose private key the operator supplies. Always load a burner wallet with only enough ETH for prebuys + gas. Writes are off by default — you must opt in explicitly per environment.

Tools

ToolPurpose
launch_tokenBroadcasts createLaunch / createLaunchWithReferral on the InkyPump V2 hook. Requires explicit confirm + writes opt-in.
preview_launchDry-run: resolves on-chain params and reports expected creator-fee economics. No transaction.
wallet_infoReturns the MCP signer address and its current Ink ETH balance.
recent_launchesFetches recent V2 launches. Returns a sanitized, allowlisted field set.
launch_statusReads getLaunchState(launchId) and reports funding progress.

Install

The MCP is published to npm as @inkyswap/pump-mcp; source lives at InkySwap/pump-mcp. npx handles the install and update for you — no clone or build required.

Stash the burner key in a 0600 file

umask 077
printf '%s' '0xYOUR_BURNER_PRIVATE_KEY' > ~/.inkypump-mcp-key
chmod 600 ~/.inkypump-mcp-key
The MCP refuses to read this file if it’s group- or world-readable.

Register the MCP with Claude Code

claude mcp add inkypump \
  --command npx \
  --args "-y @inkyswap/pump-mcp" \
  --env INKYPUMP_MCP_PRIVATE_KEY_FILE=$HOME/.inkypump-mcp-key \
  --env INKYPUMP_MCP_ENABLE_WRITES=true
For Codex CLI, drop the equivalent block into ~/.codex/config.toml:
[mcp_servers.inkypump]
command = "npx"
args = ["-y", "@inkyswap/pump-mcp"]

[mcp_servers.inkypump.env]
INKYPUMP_MCP_PRIVATE_KEY_FILE = "/Users/you/.inkypump-mcp-key"
INKYPUMP_MCP_ENABLE_WRITES = "true"
Prefer to run from source? Clone InkySwap/pump-mcp and run pnpm install --frozen-lockfile && pnpm build && node dist/index.js.

Environment

VariableDefaultRequiredPurpose
INKYPUMP_MCP_PRIVATE_KEY_FILEone of these twoPath to a chmod 600 file containing the hex private key. Preferred.
INKYPUMP_MCP_PRIVATE_KEYone of these twoRaw hex private key. Stored plaintext in your MCP config — only use if that config is encrypted.
INKYPUMP_MCP_ENABLE_WRITESfalseyes for launch_tokenMust be true / 1 / yes to permit broadcasting transactions.
INKYPUMP_MCP_MAX_PREBUY_ETH0.1noPer-call cap on prebuyEth. Operator hard limit.
INKYPUMP_MCP_MAX_RAISE_ETH5noPer-call cap on targetRaiseEth. Defaults to the contract max.
INKYPUMP_MCP_RPC_URLhttps://rpc-gel.inkonchain.comnoOverride the Ink RPC endpoint. Rejected if it contains userinfo, query, or fragment.
INKYPUMP_BASE_URLhttps://inkypump.comnoOrigin used to build trade URLs and call /api/tokens/recent-v2. Must be an origin (no path).

Safety model

The MCP signs on-chain transactions, so it’s treated as a hot-wallet boundary. Defense in depth, in order:

Writes opt-in

launch_token refuses unless INKYPUMP_MCP_ENABLE_WRITES=true. The read-only tools always work.

Explicit confirm

Every launch_token call requires confirm: "YES". The LLM must include it deliberately — hallucinated calls fail closed.

Operator spend caps

MAX_PREBUY_ETH and MAX_RAISE_ETH clamp every call regardless of what the LLM passes.

Error sanitizing

Tool errors are stripped of long hex blobs (signed-tx payloads) and URL credentials before being returned to the model.

Untrusted input handling

recent_launches allowlists fields, clips strings, and tells the model the data is creator-controlled.

URL validation

Image / social URLs must be https://, must not point at localhost, *.local, or private IPv4 / IPv6. Once on-chain these fields are permanent.

Example session

> wallet_info
{ "address": "0x…", "balanceEth": "0.4", "chainId": 57073 }

> preview_launch {
    "name": "Anita",
    "ticker": "ANITA",
    "description": "Test launch",
    "imageUrl": "https://example.com/anita.png",
    "targetRaiseEth": 3,
    "curveGainMultiplier": 6,
    "creatorFeeSplitBps": 5000
  }
{
  "feeMath": {
    "creatorEarningsAsPctOfVolume": 0.495,
    "protocolFeePct": 1,
    "variableFeePctOfAfterProtocol": 1
  },
  ...
}

> launch_token { …same args plus "confirm": "YES" }
{
  "transactionHash": "0x…",
  "tokenAddress": "0x…",
  "tradeUrl": "https://inkypump.com/trade/0x…",
  "explorerUrl": "https://explorer.inkonchain.com/tx/0x…"
}

launch_token parameters

name
string
required
Token display name (1-48 chars).
ticker
string
required
Ticker symbol without $ (1-12 chars).
description
string
required
Short pitch (1-500 chars).
imageUrl
https URL
required
Public square image. localhost, *.local, private IPs, and non-https are rejected.
targetRaiseEth
number
required
1-5 ETH. Bounded further by INKYPUMP_MCP_MAX_RAISE_ETH.
confirm
"YES"
required
Must be the literal string "YES". This is the final-write gate.
telegram
https URL
Optional. Empty string disables.
twitter
https URL
Optional. Empty string disables.
website
https URL
Optional. Empty string disables.
curveGainMultiplier
number
default:"6"
End/start price ratio. 1 = fair launch, 21 = contract max.
creatorFeeSplitBps
integer
default:"5000"
Creator share of variable fee in bps. 5000 = 50/50 with burn, 10000 = all creator.
antiSnipeSeconds
integer
default:"0"
Anti-snipe duration. 0 disables.
startTimestamp
integer
default:"0"
Unix start timestamp. 0 = launch immediately.
prebuyEth
number
default:"0"
Creator prebuy. Must be ≤ targetRaiseEth and ≤ INKYPUMP_MCP_MAX_PREBUY_ETH.
referralCode
string
Optional. Alphanumeric (with - / _), 1-64 chars.

Contract surface

launch_token calls these functions on the InkyPumpHook contract:
  • createLaunch(CreateLaunchParams) when referralCode is empty
  • createLaunchWithReferral(CreateLaunchParams, string) otherwise
Both are documented in detail in the contracts integration guide.