Skip to main content
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

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

The MCP refuses to read this file if it’s group- or world-readable.

Register the MCP with Claude Code

For Codex CLI, drop the equivalent block into ~/.codex/config.toml:
Prefer to run from source? Clone InkySwap/pump-mcp and run bun install --frozen-lockfile && bun run build && node dist/index.js.

Environment

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, MAX_RAISE_ETH, and MAX_GAS_GWEI clamp every write regardless of what the LLM or the RPC passes.

Chain assertion

Every write checks the RPC reports chain ID 57073 before signing. Defends against a hijacked or misconfigured INKYPUMP_MCP_RPC_URL.

Nonce + receipt timeout

Every write pins the nonce via getTransactionCount({ blockTag: "pending" }) and times out the receipt wait at 120s with no retries.

Error sanitizing

Tool errors are stripped of private keys, signed-tx payloads, URL credentials, and RPC API keys in the path before reaching the model.

Untrusted input handling

recent_launches allowlists fields, clips strings, re-validates image URLs, and warns the model the data is creator-controlled.

URL validation

Image and social URLs must be https://, must not use reserved TLDs (.local, .internal, .localhost, .test, .example, .invalid), and must resolve via DNS to a public IP (covers RFC1918, loopback, link-local, CGNAT, IPv6 unique-local, hex-form IPv4-mapped).

Example session

launch_token parameters

string
required
Token display name (1-48 chars).
string
required
Ticker symbol without $ (1-12 chars).
string
required
Short pitch (1-500 chars).
https URL
required
Public square image. Rejected if the URL is non-https, contains credentials, uses a reserved TLD, or resolves to a private IP.
number
required
1-5 ETH. Bounded further by INKYPUMP_MCP_MAX_RAISE_ETH.
"YES"
required
Must be the literal string "YES". This is the final-write gate.
https URL
Optional. Empty string disables.
https URL
Optional. Empty string disables.
https URL
Optional. Empty string disables.
number
default:"6"
End/start price ratio. 1 = flat, 21 = contract max.
integer
default:"5000"
Creator share of variable fee in bps. 5000 = 50/50 with burn, 10000 = all creator.
integer
default:"0"
Anti-snipe duration. 0 disables.
integer
default:"0"
Unix start timestamp. 0 = launch immediately.
number
default:"0"
Creator prebuy. Must be ≤ targetRaiseEth and ≤ INKYPUMP_MCP_MAX_PREBUY_ETH.
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.