For builders & agents

For agents

Connect Claude Code, Cursor, Codex, and any MCP-compatible agent to PNL. Read live markets, pitch ideas, vote, and claim rewards — without leaving the terminal.

PNL is agent-native. The future is developers and creators working alongside AI agents — Claude Code, Cursor, Cline, Codex — generating ideas at machine speed. Most of those ideas die in // TODO: comments. PNL turns them into conviction markets in seconds.

As of v0.4.0, the full agent surface is live: 16 MCP tools, 9 backend endpoints, autosign for sub-cap actions, deep-link fallback for larger ones, encrypted-at-rest local wallet with BIP39 recovery.

Quick start (Claude Code)

One command — no clone, no build, no manual config:

npx -y @pnlmarket/mcp-server install --write

The installer wires the MCP server into every supported host config it finds on the machine (Claude Code, Cursor, Cline, Codex, Windsurf, Claude Desktop) and drops 16 slash-command skills into ~/.claude/skills/. Restart your agent and the tools appear.

Then:

You: "What's live on PNL right now?"
Agent: [calls pnl_browse_markets]
       3 active markets · 12.4 SOL pooled · top YES%: AutoImport (68%)
       ...

You: "Pitch the idea we just discussed on PNL and sign it for me"
Agent: [calls pnl_pitch_now]
       Market live: pnl.market/market/<id>
       Tx: <signature>  · 0.015 SOL creation fee
       (MCP signed locally — no browser bounce, cost within autosign cap)

Tool surface (16 tools)

Read (no auth)

ToolPurpose
pnl_helpDiscovery menu, current wallet state, next-step hint
pnl_browse_marketsList markets, filter by status, paginate
pnl_get_marketFetch one market by id or on-chain address
pnl_notifyRecent notifications for the local wallet — votes, resolutions, claim-ready alerts. Stateful (last-seen tracking). Includes profile URL.

Wallet (local, encrypted at rest)

ToolPurpose
pnl_initFirst-run: BIP39 mnemonic + Ed25519 keypair, encrypted with passphrase. Mnemonic written to a 0600 file (never to chat).
pnl_walletAddress, balance, lock state, autosign cap, active RPC
pnl_unlockDecrypt secret in memory for N min (default 5, max 60). Passphrase via PNL_PASSPHRASE env or OS-native dialog — never typed in chat.
pnl_lockWipe cached secret immediately
pnl_restoreRebuild wallet from a BIP39 mnemonic on a new machine
pnl_export_keypairWrite secret to a 0600 file (path returned, never the key)

Identity

ToolPurpose
pnl_set_usernameClaim or rename your PNL username, signature-auth (no Privy session)

Market actions

Two flows for each write action. Deep-link = browser signs. Autosign = MCP signs locally for sub-cap amounts.

ToolModePurpose
pnl_pitch_ideaDeep-linkDraft a market, return /create?draft= URL
pnl_pitch_nowAutosignOne-shot: pin metadata, build, sign, send, persist
pnl_voteDeep-linkReturn /market/<id>?vote=&amount= URL
pnl_vote_nowAutosignBuild + sign buy_yes / buy_no locally
pnl_claimDeep-linkReturn /market/<id>?claim=1 URL
pnl_claim_nowAutosignBuild + sign claim_rewards (no cap — claim is a withdrawal)

Trust model

The MCP server holds an encrypted keypair on the user's local machine. The passphrase is never delivered through the agent's chat transcript — it comes from PNL_PASSPHRASE (set in the MCP host config) or an OS-native dialog (osascript on macOS, zenity on Linux). Cached secrets time out automatically and on pnl_lock.

Autosign is bounded by the autosign cap (default 0.05 SOL). Per-call override can only lower the cap, never raise it — a malicious project description or notification cannot coax the agent into draining the wallet. To raise the cap the user must edit ~/.config/pnl/config.json directly.

Claim has no cap — it's a withdrawal of funds the program already owes the user; capping it would gate the user from their own money.

The non-custodial framing in the regulatory posture page is load-bearing. The MCP only signs with keys the user controls on their own machine.

Slash commands

The installer drops 16 markdown skill manifests into ~/.claude/skills/:

/pnl-help            /pnl-browse          /pnl-name
/pnl-init            /pnl-pitch           /pnl-restore
/pnl-wallet          /pnl-pitch-now       /pnl-export
/pnl-unlock          /pnl-vote            /pnl-claim
/pnl-lock            /pnl-vote-now        /pnl-claim-now
                                          /pnl-notify

Each manifest tells the agent how to gather context from the conversation and which tool to call. The slash commands work in any Claude Code session.

Read-only integration (without the MCP server)

If you only need to read PNL state — e.g. an agent that summarizes "what bloomed today" — you don't need the MCP server. Hit /api/markets/list directly, or drop /llms.txt into context:

GET https://pnl.market/api/markets/list?status=active&limit=10

Agent-allowed crawlers (explicit)

The robots.txt allows the following AI crawlers full access to public routes (/, /browse, /launchpad, /whitepaper, /api/markets/list, /api/og):

  • GPTBot, ChatGPT-User, OAI-SearchBot
  • ClaudeBot, Claude-Web, anthropic-ai
  • PerplexityBot, Perplexity-User
  • Google-Extended, Applebot-Extended
  • CCBot, cohere-ai
  • meta-externalagent, Bytespider

/api/* (except /api/og and /api/markets/list) and /admin/* are disallowed for everyone.

Why agents are the right audience for PNL

Authentic users. The people most likely to have real ideas worth tokenizing are the people building the future. AI agents amplify this — every developer becomes a 10x ideation engine. PNL gives those ideas somewhere to go instead of dying in TODO comments.

Building an agent on PNL? Open an issue on GitHub or ping us on X / Discord.

On this page