Reference
API reference
Base URL https://jackbay.fun.
JSON in, JSON out, CORS open, nothing cached. Guides are in
Docs.
Try it in 10 seconds
Free helper, no key needed.
curl -s https://jackbay.fun/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"jackbay__search","arguments":{"query":"stock price"}}}'
MCP endpoint
POST/mcp
JSON-RPC 2.0 over HTTP. Responses are plain JSON (no SSE
stream); a batch array is accepted; notifications return
202. Key via ?key=pk_… or
Authorization: Bearer pk_…. GET and DELETE return 405.
Methods: initialize, ping,
tools/list, tools/call,
resources/list, prompts/list; anything else returns
-32601.
Initialize:
curl -s https://jackbay.fun/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
{"jsonrpc":"2.0","id":1,"result":{
"protocolVersion":"2025-06-18",
"capabilities":{"tools":{"listChanged":false}},
"serverInfo":{"name":"jackbay","version":"1.0.0"},
"instructions":"Jackbay lists paid MCP tools. ..."}}
List tools (helpers first, then every live tool as
slug__tool):
curl -s https://jackbay.fun/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
{"jsonrpc":"2.0","id":2,"result":{"tools":[
{"name":"jackbay__search","description":"Free. Search the Jackbay directory ...","inputSchema":{...}},
{"name":"jackbay__account","description":"Free. Shows the wallet behind this Jackbay key ...","inputSchema":{...}},
{"name":"rh-stocks__price","description":"[0.002 USDG per call · ...] ...","inputSchema":{...}}
]}}
Call a free helper (jackbay__search works
without a key):
curl -s https://jackbay.fun/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"jackbay__search","arguments":{"query":"stock price"}}}'
{"jsonrpc":"2.0","id":3,"result":{
"content":[{"type":"text","text":"[ ... ]"}],
"structuredContent":{"results":[
{"tool":"rh-stocks__price","listing":"...","does":"...","priceUsdg":"0.002","maker":"0x..."}]}}}
Call a paid tool (needs a key):
curl -s "https://jackbay.fun/mcp?key=YOUR_KEY" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"rh-stocks__price","arguments":{"symbol":"NVDA"}}}'
{"jsonrpc":"2.0","id":4,"result":{
"content":[{"type":"text","text":"..."},
{"type":"text","text":"Jackbay: paid 0.002 USDG to 0x... · https://robinhoodchain.blockscout.com/tx/0x..."}],
"_meta":{"jackbay/receipt":{"priceUsdg":"0.002","payer":"0x...","payTo":"0x...","tx":"0x...","explorer":"https://..."}}}}
Failures come back as a normal result with
isError: true and cost nothing. Examples: no
key (the result also carries
_meta["jackbay/payment-required"]
with price, asset, chainId, payTo), an unknown, revoked or
expired key, Spending cap used up, a wallet
balance too low, or did not answer when the
upstream fails.
Directory
GET/api/config
Chain, token and limits.
curl -s https://jackbay.fun/api/config
{"chainId":4663,"explorer":"https://robinhoodchain.blockscout.com",
"usdg":{"address":"0x5fc5...d168","decimals":6,"name":"Global Dollar","version":"1"},
"relayer":"0x...","mcpUrl":"https://jackbay.fun/mcp",
"priceMin":0.001,"priceMax":1,"capDefault":2,"capMax":20,"deadlineDaysMax":30,
"platformFeePct":0,"categories":["markets","onchain","data","web","dev"]}
GET/api/stats
Totals from the Jackbay ledger.
curl -s https://jackbay.fun/api/stats
{"listings":3,"tools":5,"makers":1,"paidCalls":0,"paidUsdg":"0","payers":0,
"platformFeePct":0,"source":"...","updatedAt":"2026-10-29T12:00:00.000Z"}
GET/api/categories
Live listing count per category.
curl -s https://jackbay.fun/api/categories
[{"id":"markets","listings":1},{"id":"onchain","listings":2}, ...]
GET/api/tools
Query params, all optional: category,
q (text search), sort =
used (default) | new |
cheap.
curl -s "https://jackbay.fun/api/tools?category=markets&sort=cheap"
{"items":[{
"slug":"rh-stocks","name":"...","description":"...","category":"markets",
"maker":"0x...","byJackbay":true,"priceUsdg":"0.002",
"tools":[{"name":"price","mcpName":"rh-stocks__price","description":"...","inputSchema":{...}}],
"calls30d":0,"paid30dUsdg":"0","status":"live","createdAt":1761700000000,
"health":{"status":"up","uptime24h":100,"checks24h":12,"lastCheckAt":"2026-10-29T12:00:00.000Z",
"lastMs":63,"lastError":null,"lastOkAt":"2026-10-29T12:00:00.000Z","verified":true}}]}
health.status is up,
flaky, down or
unchecked. See
Uptime checks.
GET/api/tools/:slug
One listing, same fields as above plus
recentCalls (up to 20). Unknown slug returns
404 {"error":"not_found"}.
curl -s https://jackbay.fun/api/tools/rh-stocks
{ ...listing,
"recentCalls":[{"at":"2026-10-29T12:00:00.000Z","payer":"0x...","slug":"rh-stocks","tool":"price",
"maker":"0x...","priceUsdg":"0.002","tx":"0x...","explorer":"https://...","status":"paid","source":"..."}]}
GET/api/calls/recent
The 25 most recent calls. tx and
explorer are null until a payment is sent.
curl -s https://jackbay.fun/api/calls/recent
{"items":[{"at":"...","payer":"0x...","slug":"...","tool":"...","maker":"0x...","priceUsdg":"0.002","tx":"0x...","explorer":"https://...","status":"paid","source":"..."}]}
GET/api/leaderboard?days=30
Top tools and makers by paid calls. days is 1
to 90 (default 30). Playground calls are paid by the Jackbay
demo wallet and are counted separately.
curl -s "https://jackbay.fun/api/leaderboard?days=7"
{"days":7,
"tools":[{"slug":"rh-stocks","name":"RH Stock Tokens","agentCalls":0,"playgroundCalls":0,"paidUsdg":"0"}],
"makers":[{"maker":"0x...","calls":0,"listings":1,"paidUsdg":"0"}],
"note":"..."}
GET/api/makers/:address
Listings owned by a wallet, including
upstream URL. Bad address returns 400
bad_address.
curl -s https://jackbay.fun/api/makers/0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
{"items":[{ ...listing, "upstream":"https://..." }]}
Agent keys
GET/api/permit?owner=0x…&cap=2&days=7
Returns the EIP-712 permit for the wallet to sign.
owner required; cap in USDG,
greater than 0 up to 20 (default 2); days 1-30
(default 7). Errors: bad_address,
bad_cap, bad_days, 503
relayer_not_configured.
{"typedData":{"domain":{...},"types":{...},"primaryType":"Permit","message":{"owner":"0x...","spender":"<relayer>","value":"2000000","nonce":"0","deadline":"1762300000"}},
"balanceUsdg":"12.5","allowanceUsdg":"0"}
POST/api/keys
Body: owner, value (raw, 6
decimals), deadline (unix seconds, at most 31
days out), signature, optional
label. Jackbay submits the permit and returns
the key once.
{"key":"pk_ab12cd34_...","id":"pk_ab12cd34","mcpUrl":"https://jackbay.fun/mcp?key=pk_...",
"capUsdg":"2","expires":"2026-11-05T12:00:00.000Z","permitTx":"0x...","explorer":"https://..."}
Errors: bad_request, bad_cap,
bad_deadline, 422 permit_failed /
permit_not_applied.
GET/api/keys?owner=0x…
Keys for a wallet (never the secret) plus live on-chain allowance and balance.
{"owner":"0x...","relayer":"0x...","allowanceUsdg":"2","balanceUsdg":"12.5",
"keys":[{"id":"pk_ab12cd34","label":"","capUsdg":"2","expires":"2026-11-05T12:00:00.000Z","revoked":false,"permitTx":"0x..."}]}
POST/api/keys/:id/revoke
Wallet-signed (see below). Response:
{"ok":true,"note":"Key revoked. To also zero the on-chain
allowance, approve 0 USDG to the relayer from your
wallet."}
Makers
GET/api/nonce
One-time nonce and timestamp for a signed action. Signatures are valid for 10 minutes.
{"nonce":"9f3a...","issued":"2026-10-29T12:00:00.000Z"}
POST/api/launch/preview
Body {"url":"https://your-server.example/mcp"}.
Checks the URL and lists the tools it exposes. 20 per hour
per IP.
curl -s https://jackbay.fun/api/launch/preview -H 'content-type: application/json' -d '{"url":"https://your-server.example/mcp"}'
{"url":"https://your-server.example/mcp","tools":[{"name":"...","description":"...","inputSchema":{...}}]}
Errors: 422 upstream_failed or
no_tools (with message), 429
rate_limited.
POST/api/launch
Body: slug, url,
name, description,
category, priceUsdg (string), plus
address, nonce, issued, signature. The wallet signs this text
(EIP-191 personal sign):
Jackbay: launch a listing
Listing: <slug>
Server: <url>
Price: <priceUsdg> USDG per call
Wallet: <your address>
Nonce: <nonce>
Issued: <issued>
{"ok":true,"slug":"my-tool","mcpNames":["my-tool__lookup"],"page":"https://jackbay.fun/explore/my-tool"}
Errors: bad_slug, bad_text,
bad_category, bad_price, 401
(stale_signature,
signature_mismatch, nonce_used,
…), 409 slug_taken, 422
upstream_failed / no_tools /
bad_tool_name, 429
rate_limited (10 per hour per IP).
POST/api/tools/:slug/status
Pause or resume your listing. Body: status =
live | paused, plus
address, nonce,
issued, signature. Signed text:
Jackbay: set listing status
Listing: <slug>
Status: <live|paused>
Wallet: <your address>
Nonce: <nonce>
Issued: <issued>
Response {"ok":true}, or 404
not_yours.
Playground
POST/api/playground
Body {"question":"price of NVDA"} (3-200
chars). A simple router, not an LLM: it searches, picks a
tool, calls it and pays from Jackbay’s playground wallet. 6
runs per hour per IP (429 rate_limited). Try it
live in the
playground.
{"steps":[
{"step":"search","query":"price of NVDA","found":[{"tool":"rh-stocks__price","listing":"...","does":"...","priceUsdg":"0.002","maker":"0x..."}]},
{"step":"choose","tool":"rh-stocks__price","args":{"symbol":"NVDA"},"priceUsdg":"0.002","payTo":"0x..."},
{"step":"call","ok":true,"ms":412},
{"step":"pay","paid":true,"priceUsdg":"0.002","from":"0x...","to":"0x...","tx":"0x...","explorer":"https://...","note":"Paid by Jackbay's playground wallet, not by you."}
],
"result":{"content":[...],"structuredContent":{...}}}
When nothing matches, the response has
steps and an answer string instead
of result.
POST/api/check
Free token report for people: body
{"address":"0x…"} (a Pons token). 10 checks per
hour per IP (429 rate_limited); a bad address
returns 400 bad_address, a token Pons does not
know returns 422 check_failed. A check can take
up to about 15 seconds. Agents call the paid MCP tool
token-check__report instead (0.005 USDG per
call). Try it on
/check.
curl -s https://jackbay.fun/api/check -H 'content-type: application/json' -d '{"address":"0xe83c85e1ead16fcfe85401e2b337fb4fb5b5cc96"}'
{"token":{"name":"...","symbol":"...","stage":"...","marketCapUsd":0,"volumeEth":0,"trades":0,"creatorTaxPct":0,"pons":"https://..."},
"dev":{"wallet":"0x...","holdsPct":0,"burnedPct":0,"boughtEth":0,"soldEth":0,"sold":false,"soldCheckedOver":"full trade history"},
"buyers":{"total":0,"organic":0,"knownBots":0,"firstMinute":{"wallets":0,"knownBots":0}},
"topHolders":[{"wallet":"0x...","holdsPct":0,"boughtEth":0,"soldEth":0,"label":null}],
"top10HoldPct":0,"flags":[],"coverage":{"tradesRead":0,"complete":true,"note":"..."},
"sources":["..."],"disclaimer":"..."}
GET/api/health
Liveness:
{"ok":true,"listings":3,"relayer":{"address":"0x...","eth":"0.004","usdg":"1.5"}}
Uptime checks
Jackbay checks every listed MCP server every 5 minutes. A listing is verified when its newest check passed, it has at least 3 checks in 24 hours and uptime is 95% or better. After 3 failed checks in a row it is hidden from agents until one check passes. The upstream timeout for a tool call is 20 s.
Example paid tools: rh-stocks__price,
token-check__report (0.005 USDG per
call).
Errors from the JSON API look like
{"error":"code","message":"optional"}.