Penrose docs.
A triangle is one coin launched on flap (BNB Chain), Pons (Robinhood Chain) and pump.fun (Solana) in the same minute. The engine keeps stock of the coin on every chain. When one chain trades more than 3% above another, it sells there and buys on the cheap chain, then spends the profit buying the corner with the smallest market cap. No bridging per trade; stock is rebalanced across chains from time to time through Relay.
Launch and trading costs are shown in the flow before you sign. Your keys stay in your wallets: one EVM wallet for BNB Chain and Robinhood Chain, one Solana wallet for the third corner.
API
JSON over HTTPS at https://api.penrose-triangle.xyz. Reads are open; launches are signed by the creator's wallet.
/trianglesEvery triangle with its three legs, combined cap and spread. ?sort=cap|spread|profit|new
/triangles/:idOne triangle: price, cap and CA on each chain, the spread, the weakest corner.
/triangles/:id/arbsThe arb log: dear corner, cheap corner, size, profit and the buyback.
/quoteA trade quote on one corner. ?triangle=tess&chain=sol&side=buy&amount=0.5
/launchA signed launch: name, ticker, image, socials, pay chain. Returns the payment to sign.
/streamServer-sent events: prices on all three chains and every arb as it lands.
/contractsLaunchpads, Penrose contracts and maker wallets, per chain.
curl https://api.penrose-triangle.xyz/triangles/tess
{
"id": "tess", "ticker": "TESS", "spread": 2.6, "band": 3,
"legs": {
"bsc": { "pad": "flap", "price": 0.001652, "mcap": 1652000 },
"rh": { "pad": "pons", "price": 0.001611, "mcap": 1611000 },
"sol": { "pad": "pump.fun", "price": 0.001598, "mcap": 1598000 }
},
"weakest": "sol"
}MCP
Give any agent the triangle. Add the server, then ask in plain words: "launch Tess on all three chains" or "which corner is cheapest right now".
{
"mcpServers": {
"penrose": { "url": "https://api.penrose-triangle.xyz/mcp" }
}
}
tools: list_triangles, get_triangle, quote,
launch_triangle, list_arbs, list_contractsSDK
One file, no install. Works in Node and the browser.
import { penrose } from 'https://api.penrose-triangle.xyz/sdk.mjs';
const t = await penrose.triangle('tess');
console.log(t.spread, t.weakest); // 2.6 'sol'
for await (const arb of penrose.arbs('tess')) {
console.log(arb.sell, '->', arb.buy, arb.profit);
}Launchpads
Every triangle is three real launches on these public contracts. Nothing is wrapped or bridged; each leg is a native coin on its chain.
Penrose contracts and maker wallets
The launchers, the three maker wallets that hold stock on each chain, and the buyback vault. Every address goes here the day mainnet opens, with its full history on the explorer.

Calls the flap Portal for every triangle launch and records the three CAs.

Calls the Pons V2 factory with the same name, ticker and image.

Creates the pump.fun coin in the same minute.

Holds stock on BSC. Sells when BSC is dear, buys when it is cheap.

Holds stock on Robinhood Chain. Same rule, same band.

Holds stock on Solana. Same rule, same band.

Arb profit lands here, then buys the weakest corner.
