Perpetual futures
Perps desk
OptimistFi's perps desk: its stories, the traders directory with checked calls, and the Hyperliquid wallets it covered.
TOOL
get_perps_deskcurl https://mcp.optimistfi.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_perps_desk","arguments":{"view":"news","market":"BTC","limit":3}}}'When a model calls it
Models choose a tool from its description. This is the one the server publishes:
OptimistFi's perps desk: its stories, the traders directory with checked calls, and the Hyperliquid wallets it covered. Use when the user asks: latest perps news on X; is trader Y worth following. Args: view; market; trader; wallet; limit.
- latest perps news on X
- is trader Y worth following
Parameters
viewstringdefault "news"
news- the desk's published perps stories, newest first
traders- the perps traders directory, with the desk's checked calls on each
wallets- the Hyperliquid wallets the desk has covered, with their stories
Accepts news, traders, wallets.
marketstring
news and traders: one market (BTC, NVDA, gold).
traderstring
traders: one trader by name or X handle.
walletstring
wallets: one 0x address; adds what it holds now.
limitintegerdefault 10
Rows, up to 25.
Response
A real response to the example call, trimmed: lists cut to two items, long text cut short. The result's content holds the answer as JSON text; parsed, it reads:
{
"type": "perps_desk",
"as_of": "2026-10-11T18:34:37.678Z",
"confidence": "reported",
"source": {
"name": "OptimistFi perps desk",
"url": "https://optimistfi.com/perps/news",
"license": "computed"
},
"data": {
"view": "news",
"count": 3,
"news": [
{
"slug": "the-largest-accounts-are-still-short-bitcoin-and-ether-and-today-the-shorts-are-paying",
"url": "https://optimistfi.com/perps/news/the-largest-accounts-are-still-short-bitcoin-and-ether-and-today-the-shorts-are-paying",
"headline": "The largest accounts are still short bitcoin and ether, and today the shorts are paying",
"dek": "The biggest accounts hold 68% of their major-coin money short, with $2.38 billion short against $1.16 billion long. In bitcoin and ether, funding has turned negative today, so the crowded side is the one paying to stay in.",
"publishedAt": "2026-10-11T18:30:35.338Z",
"eventDate": "2026-10-11",
"dataAsOf": "2026-10-11T18:00:00.000Z",
"format": "big-trades",
"author": "Luke Jacobi",
"markets": [
"BTC",
"ETH",
"… 1 more"
],
"keyFacts": [
{
"label": "Major coins",
"value": "68% short",
"detail": "$2.38B short across 368 account positions, $1.16B long across 316"
},
{
"label": "Bitcoin funding",
"value": "-4.49% a year",
"detail": "Hyperliquid's settled average today, positive in 3 of 19 hours"
},
"… 2 more"
],
"sources": [
{
"name": "OptimistFi perps data API",
"url": "https://optimistfi.com/api/perps/builds"
},
{
"name": "Hyperliquid public market data",
"url": "https://api.hyperliquid.xyz/info"
},
"… 1 more"
]
},
{
"slug": "this-account-bought-two-falling-days-sold-each-in-minutes-and-now-holds-only-cash",
"url": "https://optimistfi.com/perps/news/this-account-bought-two-falling-days-sold-each-in-minutes-and-now-holds-only-cash",
"headline": "This account bought two falling days, sold each in minutes and now holds only cash",
"dek": "An account on Hyperliquid, a perps venue, closed $4.3 million of trading profit since 21 September on one bitcoin long and one ether long. It bought both on a down day, sold each in one sitting, and has sat in dollars since this morning.",
"publishedAt": "2026-10-11T18:20:50.344Z",
"eventDate": "2026-10-11",
"dataAsOf": "2026-10-11T18:30:00.000Z",
"format": "big-trades",
"author": "Luke Jacobi",
"markets": [
"BTC",
"ETH"
],
"keyFacts": [
{
"label": "Closed profit",
"value": "$4.32M",
"detail": "Every trade the account closed from 21 September to 11 October, before $50,418 of fees and $177,728 of funding"
},
{
"label": "Bitcoin",
"value": "+$3.43M",
"detail": "400 BTC bought at a $78,565 average, sold at $87,142 on 21 September"
},
"… 2 more"
],
"sources": [
{
"name": "Hyperliquid info API",
"url": "https://api.hyperliquid.xyz/info"
},
{
"name": "The account's public page",
"url": "https://app.hyperliquid.xyz/explorer/address/0x237152b038d88f4156a0cd71090462de7e3f0883"
},
"… 1 more"
]
},
"… 1 more"
]
}
}Fields are explained in Reading a response.
Errors
A call the server cannot run (a missing or invalid argument) comes back with
isError: true and the reason in words. A company or market the server cannot match comes back as a result naming what was not found. See Errors and limits.