cluby-mcp
The boundary is the point
flowchart LR
A["Agent"] <-->|stdio| M["cluby-mcp<br/><i>reads only</i>"]
M -->|"eth_call"| C["Robinhood Chain"]
M -.->|"history only, optional"| I["Indexer"]
A -->|"transaction"| W["User's wallet"]
W --> C
style M fill:#03926B,color:#fff
style W fill:#8a6d1f,color:#fffIt reads. It does not sign anything and holds no key. An agent that wants to act gets the numbers here and the transaction from a wallet its user controls.
That boundary is what lets this be run against a live protocol without anyone having to trust it.
Everything about the present comes from the chain. Only history and past liquidations need the indexer, which is optional.
Tools
Tool | Answers |
| Every market, with price, rates, and whether it actually exists on chain |
| One market in detail — oracle, LLTV, caps, utilisation, liquidity |
| A borrower's collateral, debt, health factor and liquidation price |
| What a borrow would do, and whether it exceeds the cap the app enforces |
| Exposure, debt, LTV, health factor and liquidation price of a leveraged position |
| The Earn side, with fee and timelock |
| Addresses, fee split, LLTV tiers, how to take a free flash loan |
The quotes are the same arithmetic the interface signs against, not a second implementation that
can drift from it. Both import @cluby/sdk.
Run it
pnpm install
CLUBY_RPC_URL=<rpc> pnpm startPoint a client at it:
{
"mcpServers": {
"cluby": {
"command": "node",
"args": ["--experimental-strip-types", "/path/to/cluby-mcp/src/index.ts"],
"env": { "CLUBY_RPC_URL": "https://rpc.mainnet.chain.robinhood.com" }
}
}
}The public RPC is enough for everything except history.
What a quote_multiply actually returns
Not a marketing number. The leverage a market can fund is bounded by exit liquidity as well as by the tier, and the smaller bound wins:
$$\text{max multiple} = \min\left(\frac{1}{1 - \text{LLTV}},\ 1 + \frac{\text{liquidity}{USD}}{\text{collateral value}{USD}}\right)$$
An agent asking for 3× on a long-tail market gets told the market cannot fund it, and why — rather than a quote that reverts when it is signed.
bigint values are serialised as strings, so a client never silently loses precision on a wei
amount.
Layout
src/index.ts tool definitions and the stdio server
src/markets.ts describeMarket, describePosition, quoteBorrow, quoteMultiply, protocolFacts
src/chain.ts the RPC client and the optional indexer fetch
vendor/ @cluby/config, @cluby/abi, @cluby/sdkPart of Cluby
Repository | What it holds |
cluby-mcp | ← you are here |
The arithmetic behind every quote | |
The on-chain contract the reads go through | |
Where the prices come from |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/clubytech/cluby-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server