$JACKBAY launches on Pons 29 Oct · 15:00 UTCNo token yet; any CA you see is fake.
jackbay

Reference

API reference

Base URL https://jackbay.xyz. JSON in, JSON out, CORS open, nothing cached. Guides are in Docs.

Try it in 10 seconds

Free helper, no key needed.

try it · no key needed
curl -s https://jackbay.xyz/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:

terminal
curl -s https://jackbay.xyz/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"}}}'
Response (trimmed)
{"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):

terminal
curl -s https://jackbay.xyz/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
Response (trimmed)
{"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):

terminal
curl -s https://jackbay.xyz/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"jackbay__search","arguments":{"query":"stock price"}}}'
Response (trimmed)
{"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):

terminal
curl -s "https://jackbay.xyz/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"}}}'
Response (trimmed)
{"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.

terminal
curl -s https://jackbay.xyz/api/config
terminal
{"chainId":4663,"explorer":"https://robinhoodchain.blockscout.com",
 "usdg":{"address":"0x5fc5...d168","decimals":6,"name":"Global Dollar","version":"1"},
 "relayer":"0x...","mcpUrl":"https://jackbay.xyz/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.

terminal
curl -s https://jackbay.xyz/api/stats
terminal
{"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.

terminal
curl -s https://jackbay.xyz/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.

terminal
curl -s "https://jackbay.xyz/api/tools?category=markets&sort=cheap"
terminal
{"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}]}

GET/api/tools/:slug

One listing, same fields as above plus recentCalls (up to 20). Unknown slug returns 404 {"error":"not_found"}.

terminal
curl -s https://jackbay.xyz/api/tools/rh-stocks
terminal
{ ...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.

terminal
curl -s https://jackbay.xyz/api/calls/recent
{"items":[{"at":"...","payer":"0x...","slug":"...","tool":"...","maker":"0x...","priceUsdg":"0.002","tx":"0x...","explorer":"https://...","status":"paid","source":"..."}]}

GET/api/makers/:address

Listings owned by a wallet, including upstream URL. Bad address returns 400 bad_address.

terminal
curl -s https://jackbay.xyz/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.

terminal
{"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.

terminal
{"key":"pk_ab12cd34_...","id":"pk_ab12cd34","mcpUrl":"https://jackbay.xyz/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.

terminal
{"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.

terminal
{"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.

terminal
curl -s https://jackbay.xyz/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):

terminal
Jackbay: launch a listing
Listing: <slug>
Server: <url>
Price: <priceUsdg> USDG per call
Wallet: <your address>
Nonce: <nonce>
Issued: <issued>
Response
{"ok":true,"slug":"my-tool","mcpNames":["my-tool__lookup"],"page":"https://jackbay.xyz/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:

terminal
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.

terminal
{"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.

GET/api/health

Liveness: {"ok":true,"listings":3,"relayer":{"address":"0x...","eth":"0.004","usdg":"1.5"}}

Errors from the JSON API look like {"error":"code","message":"optional"}.