pnl.memedocs

Connect your agent

One URL for Claude, ChatGPT, Grok, Hermes, Cursor and every MCP client, with the exact line for each.

MCP server

Streamable HTTP
Server URL
https://pnl.meme/v1/mcp
  • one JSON-RPC message per POST
  • JSON answers
  • no session to keep

Pick your client

18 clients
Claude CodeAnthropic

Your terminal. One command; the server is there in the next session.

No key · TERMINAL
claude mcp add --transport http pnl https://pnl.meme/v1/mcp
Your key · TERMINAL
claude mcp add --transport http pnl https://pnl.meme/v1/mcp \
  --header "Authorization: Bearer pnl_..."

Add --scope user to reach it from every project. Run /mcp inside a session to see it connected.

Claude Code · MCP

One question, end to end

Your agent turns the question into one tool call. PNL answers it from its own records, and every figure comes back with the clock it was read at.

  1. YOU“should I touch this token?”
  2. YOUR AGENTcalls get_token
  3. PNLanswers from its own records
  4. THE ANSWERevery figure with its clock
The call · tools/call
{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "get_token",
    "arguments": {
      "token": "<mint>",
      "callers": true
    }
  }
}
The answer · content[0].text
{
  "read_at": "<ISO time>",
  "token": { "ticker": "<ticker>" },
  "market": {
    "market_cap_usd": <number>,
    "liquidity_usd": <number>,
    "holders": <number>,
    "market_cap_at": "<ISO time>"
  },
  "call": {
    "entry_cap_usd": <number>,
    "peak_cap_usd": <number>,
    "below_entry": <boolean>
  },
  "callers": { "count_24h": <number> },
  "risks": [ … ],
  "flags": { "dead_under_7k": <boolean> }
}
The same call over REST: GET https://pnl.meme/v1/tools/get_token?token=<mint>&callers=true, answered as { "skill": "token.verdict", "cost_usd": 0, "result": { … } }.

Talk to it by hand

The server is plain JSON-RPC over HTTPS, so curl is a client too. Useful when a client says it cannot connect.

initialize
curl https://pnl.meme/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}'

Prompts

Three prompts ship with the server. A client that shows prompts (Claude, VS Code and others) lists them under the server's name.

PromptWhat it asksArguments
vetVet a token. Should I touch this token: the reading, the callers behind it and their records, the flags.token
profileTrader profile. Who is this trader: the board, the record, the newest plays, every account tied to them.handle
morning_briefMorning brief. What happened on my watchlist since I last asked, and what is moving now.

No key, a free key, a plan

  • No key20 rows a call · 30 a minuteThe free reads, on a shared daily allowance. Nothing to sign up for.
  • A free key500 calls a day · 30 a minuteYour own allowance, the full rows, a watchlist and a changes cursor.MINT A FREE KEY
  • A planNOWfrom 49 USDC · 30 daysMore calls, open streams and the live reads.Every plan

The server lists each caller what it may call: a tool your key cannot run is not on its list, and get_started says who you are to it.

When it does not connect

The client saysIt meansDo this
401 · not authorizedA key was sent and it does not authenticate: mistyped, revoked, or the placeholder left in.Paste the key again, or drop the header to read on the public tier.
-32602 · Unknown toolThe tool is not on the list for this caller: it needs a key, or a plan above yours.Call get_started: it says who you are to the server. Plans are on /docs/data-key.
isError · quota_exceededThe day's allowance is spent: your key's, or the public tier's shared one.It resets at 00:00 UTC. A key of your own has an allowance nobody else draws on.
isError · Too many requestsThe per-minute pace for your key, or your address on the public tier.Wait the seconds the message names. A key paces on its own.
400 · Unsupported MCP-Protocol-VersionThe client asked for a revision this server does not speak.Use 2026-07-28, 2025-06-18 or 2025-03-26. Most clients pick it themselves.
405 on GETThe client tried to open an SSE stream. The server answers every call in the POST itself.Use the Streamable HTTP transport. Gemini CLI: httpUrl. Cline: streamableHttp.
NORMALsigned outpolling? keys