Borro
REMOTE · BORRO.MARKETS
Stock lending on Robinhood Chain: read markets and prepare lends, loans, shorts and credit lines.
Available components
Last scanned (6 hours ago)
Scores higher than 55% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security77
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability54
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 21924 tokens (~257/item across 85 items; 85 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 9 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "withdraw" implies "withdraw" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 86 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
- New tool “gaix_repay” functional
- New tool “gaix_short_close” functional
- New tool “gaix_short_close_in_kind” functional
- New tool “gaix_borrow” functional
- New tool “gaix_lend” functional
- New tool “gaix_market” functional
- New tool “gaix_short_deposit” functional
- New tool “gaix_short_open” functional
- New tool “gaix_short_quote” functional
- New tool “gaix_withdraw” functional
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
- DNSSEC: fail → pass ▲ security
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 0
- Tool “account_open” rewrote its description, which is the text the model reads security
- Tool “keeper_jobs” rewrote its description, which is the text the model reads security
- Schema quality: 17590 → 20260 ▼ functional
- New tool “bailout” functional
- New tool “bailout_cancel” functional
- New tool “bailout_claim” functional
- New tool “bailout_foreclose” functional
- New tool “bailout_offer” functional
- New tool “bailout_repay” functional
- New tool “bailouts” functional
- “account_open” added an optional parameter “account” cosmetic
- “account_open” added an optional parameter “agent_bailout_max_usdg” cosmetic
- 30 Oct 26 +1
- New tool “payto” functional
- New tool “payto_open” functional
- New tool “payto_sweep” functional
- New tool “payto_withdraw” functional
- 29 Oct 26 0
- Schema quality: 225 → 265 ▼ functional
- New tool “account_open” functional
- New tool “account_status” functional
- New tool “account_trade” functional
- New tool “account_withdraw” functional
- New tool “counterparty_check” functional
- New tool “keeper_jobs” functional
- New tool “liquidate” functional
- New tool “trigger_cancel” functional
- New tool “trigger_fire” functional
- New tool “trigger_list” functional
- New tool “trigger_set” functional
- 28 Oct 26 0
- Schema quality: 10160 → 11947 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- New tool “hold_collect” functional
- New tool “hold_end” functional
- New tool “hold_header” functional
- New tool “hold_open” functional
- New tool “hold_pay” functional
- New tool “hold_status” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://borro.markets/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=borro.markets | CN=WE1,O=Google Trust Services,C=US | 1 Oct 2026 | 30 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 1870f439bdc2664913e3d23eeb08680c |
| SANs: borro.markets, www.borro.markets, *.www.borro.markets | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of borro.markets. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| markets. | present | 58144, 64757 | 8, 8 | Verified |
| borro.markets. | present | 2371 | 13 | Verified |
| borro.markets. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| content-security-policy | default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: https://ipfs.filebase.io https://gateway.pinata.cloud; connect-src 'self' https://yields.llama.fi https://api.hyperliquid.xyz; frame-ancestors 'none'; base-uri 'none'; form-action 'self' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://borro.markets/mcp | Verified | 200 | |
| http (plaintext) | http://borro.markets/mcp | HTTPS enforced | 301 | https://borro.markets/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
hold_header The x402 payment header for a signed voucher ~137
After hold_pay and the payer's signature: the header the merchant reads (PAYMENT-SIGNATURE, or X-PAYMENT for x402 version 1), base64 JSON with the voucher { hold, cumulative, signature }. Reads no chain and sends nothing; recovers a 65-byte signature to the hold's payer. Send the same request again with header.name set to header.value.
| Name | Type | Req | Description |
|---|---|---|---|
| payment_required | – | yes | The same payment_required given to hold_pay |
| signature | string | yes | The payer's signature of hold_pay's typed_data (0x hex) |
| voucher | – | yes | The voucher hold_pay returned, as it returned it |
No output schema declared.
No examples provided.
hold_open Prepare: put a hold on a Borro position ~710
Unsigned transactions putting part of the wallet's Borro position on hold for one payee, up to a cap in USDG and until an expiry, while the shares keep earning (the vault's interest or lending fees, and the $BORRO Drip). vault: "USDG" (the default: usdg, the cap unless given, goes into bUSDG and the hold is those shares, openWithUsdg) or a stock's ticker (shares of its Borro vault the wallet holds, "all" or an amount; worth more than the cap at the vault's cover). mode: "metered" (the default: x402 requests paid with vouchers, hold_pay) or "charge" (the payee charges up to the cap). With payment_required (a merchant's 402 offering the borro-hold scheme) the payee, the vaults it takes, the least cap and life are the merchant's. expiry_seconds: up to 90 days (default the merchant's, else a day). The payer cannot take the shares back before the expiry and a 4-day grace after it, in which the payee may still collect; the payee or its operator can release them any time, and after the grace anyone can reclaim them for the payer. The terms the payer accepts (the stock's desk, the most slippage on its sales, the most fee) come from the vault's listing and the fee now, and max_slip_bps or max_fee_bps tighten them; they are fixed for the hold's life. An exact approval to BorroHolds comes before it when one is missing; simulated from the wallet. Returns the hold's id.
| Name | Type | Req | Description |
|---|---|---|---|
| cap | string | – | The most USDG the payee can ever be paid from the hold, in whole units as a decimal string, like "1.5" |
| expiry_seconds | integer | – | How long the hold lasts, in seconds (60 to 7776000) |
| max_fee_bps | integer | – | The most fee the payer accepts, in basis points (default: BorroHolds' fee now) |
| max_slip_bps | integer | – | The most slippage the payer accepts on a stock hold's sales, in basis points (default: the listing's now) |
| mode | string | – | metered (default) or charge |
| operator | string | – | Charge mode: an address that may charge and release for the payee |
| payee | string | – | Who the hold pays (or give payment_required) |
| payment_required | – | – | A merchant's 402 PaymentRequired (its PAYMENT-REQUIRED header value or JSON body) offering borro-hold |
| salt | string | – | 32 bytes of 0x hex for the hold's id (default: fresh) |
| shares | string | – | Stock (or bUSDG) hold: the vault shares to hold, like "0.5", or "all" |
| usdg | string | – | USDG hold: the USDG to put in (default: the cap and 0.000002 for the vault's rounding), in whole units as a decimal string, like "1.5" |
| vault | string | – | "USDG" (default) or a stock's ticker, like NVDA |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
hold_pay Prepare: pay an x402 request from a hold ~247
The voucher for one x402 request (HTTP 402 offering the borro-hold scheme): the typed data the hold's payer signs, saying what it owes the merchant in all on the hold, counted on from the last voucher Borro's facilitator accepted (or what the hold has paid on chain, if more). Give payment_required and hold (its id), or wallet to use its newest hold the merchant takes. Refused in words when the hold cannot pay it (another payee, a vault the merchant does not take, too close to its expiry, its cap used, too little value) or the request costs more than max_usdg. Nothing is sent: sign typed_data (eth_signTypedData_v4), then hold_header.
| Name | Type | Req | Description |
|---|---|---|---|
| hold | string | – | The hold's id (hold_open returned it) |
| max_usdg | string | – | The most one request may cost, in whole units as a decimal string, like "1.5" |
| payment_required | – | yes | The 402's PaymentRequired (PAYMENT-REQUIRED header value or JSON body) |
| wallet | string | – | The payer: finds its hold for this merchant when hold is not given |
No output schema declared.
No examples provided.
hold_status Holds: one, or a wallet's ~175
A hold on BorroHolds by its id, or the newest 10 a payer opened or that pay a payee: payer, payee, vault, mode, cap, paid, shares and their value in USDG, the cover, the expiry and the payee's 4-day grace after it, the terms fixed when it opened (desk, slippage, fee), USDG BorroHolds credited to the payer with its claim transaction, and for metered holds what Borro's facilitator has accepted in vouchers, what is owed and not collected yet, and the last voucher (hold_collect sends it; it pays the payee).
| Name | Type | Req | Description |
|---|---|---|---|
| hold | string | – | A hold's id |
| payee | string | – | A payee's address |
| payer | string | – | A payer's address |
No output schema declared.
No examples provided.
holder_benefits Hold $BORRO. Borrow for less. ~546
Hold $BORRO. Borrow for less. What a wallet's $BORRO gets it on Agent Credit Lines, with or without lines. Keep $BORRO in the wallet that borrows (its own BorroLock lock counts as held) and its lines get, always: (1) up to half their interest back every Monday, in USDG: the full rate when it holds $BORRO worth a quarter of what its lines owe together, proportionally less with less; (2) liquidation profit back: when Borro's keeper liquidates a line, what it makes comes back, in proportion to the holding, unless the line was left short or left bad debt. And where switched on (rules.gas says whether it is): (3) gas on the house: on a line owing gas.minDebtUsdg (25 USDG by default) or more, while the holder holds at least gas.minShare (half by default) of the $BORRO its lines' full rate needs, Borro tops up the agent's wallet when it runs low on ETH (the owner's, if the agent has not borrowed on the line within 7 days), within weekly limits, if it is a plain wallet (no smart-account code). Send the $BORRO away and it stops (and forfeits that part of the week's unpaid benefits). Nothing to sign, lock or stake. Answers live (false until Borro's keeper publishes its count; until then nothing is counted or paid), counts (what Borro's keeper counted on the last day it counted), share, via, heldBorro, borroForFull ($BORRO for the full rate at today's price) and borro_to_add_for_full, covers_debt_usdg (the most its lines may owe at the full rate), weekSoFarUsdg, interestBackBps, gasOnTheHouse, each line with what it owes and its rate back, each market's Borro-run supply share (interest paid to anyone else's direct supply, or to the wallet's own part of Borro's USDG vault, gets nothing back), the rules and the paid weeks; share and the rates are estimates if held through a whole UTC day. With borrow_usdg: the same for a planned borrow on top. It reads; it builds no transaction.
| Name | Type | Req | Description |
|---|---|---|---|
| borrow_usdg | string | – | Optional: a planned borrow in USDG, to see the $BORRO its full rate needs, in whole units as a decimal string, like "1.5" |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
keeper_jobs Keeper jobs: paid work open now ~293
Every paid job on Borro right now, in one list: the positions past their liquidation limit (from Borro's keeper's /jobs.json), the triggers holding now (from /triggers.json) and the Bailouts offers a rescuer can take now (from /jobs.json). A liquidation is paid from the liquidated position's collateral, a trigger by the tip its owner set, and a rescue by the fee its owner offered; Borro itself pays none of them. Each job says what it pays (an estimate from a simulation or the offer's terms, never a promise), its gas, how long it has been open, when Borro's keeper steps in (borro_keeper_acts_after: it is the backstop for liquidations and triggers, and it may give outside agents a head start; it never rescues, since Borro puts no capital in), and the call that prepares it (liquidate, trigger_fire or bailout). Liquidations need no money of your own: the market's liquidator takes the collateral, sells it, repays the debt and pays you what is left. A rescue is the one job that takes your own USDG: it is lent against the rescued position, owed back ahead of the owner with the offer's fee, and can be lost if the position is liquidated anyway. Reads no chain; says so when the lists are empty or stale.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
liquidate Prepare: liquidate a position ~409
Unsigned transaction liquidating a position past its limit, through the market's own liquidator (anyone may call it, and it pays the caller): no money of the wallet's, Morpho hands over the collateral, it is sold, the debt repaid, and the rest goes to the wallet. market: a stock's symbol with side short or usdg, an agent credit market's symbol (as credit_markets lists them), or a market id (0x and 64 hex) for a coin short or a coin loan (a coin's address with side works too; keeper_jobs gives the arguments). Reads the position fresh from the chain, sizes it as Borro's keeper does, simulates it from the wallet, and sets minProfit to 90% of the simulated profit unless min_profit_usdg is given: under it the transaction reverts and costs the gas alone. Refused in words when the position is healthy, the profit is under min_profit_usdg, the stock vault has lent its stock out (CannotRedeem), or the market is not Borro's.
| Name | Type | Req | Description |
|---|---|---|---|
| borrower | string | yes | The position's owner on Morpho (for a stock short, the shorter's wallet or its BorroShort account) |
| kind | string | – | Optional, as /jobs.json's prepare gives it: checked against the market |
| market | string | yes | A stock's symbol (like "NVDA", with side), an agent credit market's symbol, a market id (0x and 64 hex), or a coin's address (with side) |
| min_profit_usdg | string | – | The least USDG the wallet will take; less and it reverts (default 90% of the simulated profit) |
| side | string | – | For a stock or a coin given by its address: short (it is borrowed) or usdg (USDG borrowed against it) |
| wallet | string | yes | The wallet that sends it and is paid |
No output schema declared.
No examples provided.
market One stock ~55
One stock's full line from the shelf: rates, sizes, limits, open fee and its contracts.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
No output schema declared.
No examples provided.
markets The shelf ~95
Every stock on Borro and the USDG vault: price, what is lent, borrowed and free to short, what lenders earn and what shorters pay a year (one number each, $BORRO included once it has been paid), the USDG borrowing rate against each stock, and the $BORRO Drip to lenders: dollars a day per pool at today's price, and the rate a deposit of a given size would get.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
open_long Prepare: leveraged long ~205
Unsigned transactions for a leveraged long on a stock in one open: USDG margin plus a flash-borrowed debt buy the stock, which is lent (it earns lending fees) and posted, and the debt is borrowed against it in the wallet's own name. Approve the margin and authorize LeverRouter on Morpho if needed, then open. Leverage up to 1.80x on SPY, QQQ and NVDA, 1.35x on the rest.
| Name | Type | Req | Description |
|---|---|---|---|
| leverage | number | yes | Leverage, more than 1, like 1.5 |
| margin | string | yes | USDG margin from the wallet, in whole units as a decimal string, like "1.5" |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
open_pair Prepare: open a pair ~213
Unsigned transactions for a pair trade: buy and lend the long stock in your name (it earns lending fees while held), then short the other, approvals first. Priced now; simulated from the wallet in order.
| Name | Type | Req | Description |
|---|---|---|---|
| deposit | string | – | USDG held against the short beyond the sale (optional), in whole units as a decimal string, like "1.5" |
| long | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| long_amount | string | yes | Long stock to buy, in whole units as a decimal string, like "1.5" |
| short | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| short_amount | string | yes | Stock to short, in whole units as a decimal string, like "1.5" |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
open_short Prepare: open a short ~195
Unsigned transactions to short a stock from the wallet: approve the deposit if needed, then BorroShort.open (borrow the stock, sell it, hold the money plus the deposit). Priced now, with half a percent of slip allowed; simulated from the wallet. The quote's rebate_estimate is what this short puts in the wallet's weekly locker rebate.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Stock to short, in whole units as a decimal string, like "1.5" |
| deposit | string | – | USDG to add to the money held, beyond the sale (optional, default 0), in whole units as a decimal string, like "1.5" |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
options The Options Desk ~147
One stock's options chain for this Friday and next (expiry Friday 8pm New York): per strike and side the series id, Borro's fair value (Black-Scholes from the stock's own measured volatility, a guide), delta, the best ask and bid (checked on chain), the IV the ask implies, the shares written and the last traded IV; the stock's price, its volatility a year and the last traded IV; and whether the desk is live, paused and its fee. Prices are dollars a share, premiums USDG a share.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
No output schema declared.
No examples provided.
payto Receiving address: where to get paid so it earns ~173
A seller's receiving address on Borro: put it as payTo in your x402 offers (or as a payment channel's receiver, or a Borro hold's payee) and whatever USDG it is paid is swept into Borro's USDG vault, bUSDG, straight to the owner's wallet, so takings earn until spent. Gives the address (one per owner, known before it is made), whether it is made, the USDG waiting there, the owner's bUSDG and its worth, and the x402 fields to use. Pass wallet (the owner), or address (a receiving address, to find its owner).
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | – | Or a receiving address (0x...), to read it and its owner |
| wallet | string | – | The owner's wallet (0x...) |
No output schema declared.
No examples provided.
payto_open Prepare: make a receiving address ~116
An unsigned transaction to make the wallet's receiving address (once; anyone may make it, and it always works for the owner and no one else). Payments sent to the address before it is made wait there and are swept once it is. Refuses owners whose address could never be spent from (the zero address, Borro's own contracts, another receiving address). Simulated from the wallet; nothing is sent.
| Name | Type | Req | Description |
|---|---|---|---|
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
payto_sweep Prepare: sweep a receiving address into bUSDG now ~148
An unsigned transaction to sweep the USDG waiting at a receiving address into bUSDG for its owner now (making the address too, if it is not made yet). Borro's keeper sweeps on its own (about every five minutes once 1 USDG waits); this is for sooner. Any wallet may send it; the shares go to the owner. owner defaults to wallet. Simulated from the wallet; nothing is sent.
| Name | Type | Req | Description |
|---|---|---|---|
| owner | string | – | Optional: the owner whose address to sweep (0x...), when it is not the sending wallet |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
payto_withdraw Prepare: take USDG (or a stray token) out of a receiving address ~191
An unsigned transaction for the owner to take what waits at its receiving address out to its own wallet: USDG as USDG before it is swept (token USDG, the default), or ETH or another ERC-20 token sent there by mistake (token ETH, or the token's address). amount is a decimal string, or "all" (the default) for whatever is there when it lands. USDG already swept is the wallet's bUSDG: redeem it from the vault with withdraw. Simulated from the wallet; nothing is sent.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | – | How much, as a decimal string, or "all" (default) |
| token | string | – | "USDG" (default), "ETH", or a token's address (0x...) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
position A wallet on Borro ~191
Everything a wallet has on Borro: stock lent, shorts (owed, money held, the price it is closed for you at, and parts: how much of the stock's one short is the wallet's own, a pair's and a basket leg's), USDG loans, USDG lent, open pairs (each with short_now, its own part of the short), gap covers bought and its part of the gap cover pool, options held, written and on order (with what to do next and one yearly number for premiums over what they locked), bear coins it launched, $BORRO to claim, its locker rebates (the share of Borro's fees it gets back for its $BORRO lock, what is owed and what has been paid), and its ETH and USDG.
| Name | Type | Req | Description |
|---|---|---|---|
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
post_bid Prepare: bid for options ~233
Unsigned transactions to post a bid for a series at a premium a share: the premium for all the shares is locked now in USDG (exact approval, then postBid) and goes to the writer who fills it, less Borro's share; the option tokens come to this wallet. cancel_order takes it back while it is open.
| Name | Type | Req | Description |
|---|---|---|---|
| expiry | string | – | this (default), next, or a Friday's date like 2026-10-16 |
| premium | string | yes | Premium you bid, USDG a share, in whole units as a decimal string, like "1.5" |
| shares | string | yes | Shares to bid for, in whole units as a decimal string, like "1.5" |
| strike | string | yes | The strike in dollars, like "250" |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| type | string | yes | call or put |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
prices Stock tokens against the stock ~152
For each stock token on Borro: the stock's own price (its Chainlink feed while the market is open; Borro's weekend estimate and 95% band while it is shut), the token's executable buy and sell price on chain for $1,000 and $10,000 (what Borro's short desk would pay or get through its own swap route, before Borro's fee), and the gap in percent (gapPct: the token's mid against the stock). Positive: the token trades over the stock (short it on Borro); negative: under it (buy and lend it). Refreshed every 30 seconds; the same as https://borro.markets/prices.json.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
release_collateral Prepare: take back a writer's lock ~87
Unsigned transaction giving a writer back the lock of a settled series less what its written options pay, once: stock vault shares for a call, Steakhouse USDG vault shares for a put.
| Name | Type | Req | Description |
|---|---|---|---|
| series_id | string | yes | The series id (position lists them) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
repay Prepare: repay USDG ~115
Unsigned transactions to repay USDG borrowed against a stock (part, or all with all: true).
| Name | Type | Req | Description |
|---|---|---|---|
| all | boolean | – | Repay everything owed |
| amount | string | – | USDG to repay, in whole units as a decimal string, like "1.5" |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
rules Rules and contracts ~34
Borro's house rules, limits, what can go wrong, and every contract address with what it does, to verify on chain.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
settle_cover Prepare: settle gap cover ~144
Unsigned transaction settling a cover with the feed's first round at or after its reopen (found by walking back from the latest round), with what it pays the buyer. Anyone may send it; the payout always goes to the buyer. When that first print came more than two hours after the reopen, or more than 50% from the reference, or never came in seven days, the transaction voids the cover instead (the premium the pool kept goes back).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The cover's number (position lists a wallet's covers) |
| wallet | string | yes | The address that will send it (any address; the payout goes to the cover's buyer) |
No output schema declared.
No examples provided.
settle_series Prepare: settle an expired series ~220
Unsigned transaction settling a series after its Friday 8pm New York expiry with the feed's last round at or before it, found by walking back from the latest round, once the proof holds (the next round printed after expiry, or it is the feed's latest); when the feed printed nothing in the two days before expiry, with its first round after. Gives the settlement price and what it pays a share. Fourteen days after expiry with no round to prove a price it builds void(id) instead. Anyone may send either.
| Name | Type | Req | Description |
|---|---|---|---|
| expiry | string | – | A Friday's date like 2026-10-16 |
| series_id | string | – | The series id (or symbol, expiry, strike and type instead) |
| strike | string | – | The strike in dollars |
| symbol | string | – | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| type | string | – | call or put |
| wallet | string | yes | The address that will send it (any address) |
No output schema declared.
No examples provided.
supply Prepare: lend ~141
Unsigned transactions to lend a stock to shorters (it earns lending fees) or USDG in the Borro USDG vault (it earns interest). With post: true, a stock is lent and posted in one step so USDG can be borrowed against it.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Amount to lend, in whole units as a decimal string, like "1.5" |
| asset | string | yes | USDG, or a stock symbol |
| post | boolean | – | Stock only: lend and post as collateral in one step |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
trades Recent trades ~19
Borro-wide recent shorts opened and closed, newest first.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
trigger_cancel Prepare: cancel a trigger ~109
Unsigned transaction cancelling a live trigger on the trade account: the owner cancels any, the agent the ones it set. Simulated from the wallet.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account) |
| id | string | yes | The trigger's number (trigger_list shows it) |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
trigger_fire Prepare: fire the triggers that hold now ~695
For executor agents: the triggers that hold right now by the account's own check (on one account, read on chain; or across every trade account as Borro's keeper publishes them at /triggers.json each minute while the market is open, with the few simulated here checked on chain again), each with the unsigned fire transaction from the wallet, simulated from it, and the tip it pays in USDG. Anyone may fire a trigger whose condition holds and is paid its tip: a share of the closed notional at the feed, capped (tip_bps, at most 50 basis points, and never more than the USDG the close returns) (the account's own agent firing earns nothing: its tip goes to the owner). The close goes through the account at the feed's price within the trigger's slip, the rest stays in the account, and nothing else moves. A trigger whose close would fail (slip, the pool, a paused desk) reverts and stays live. Its bound starts at 50 basis points past the feed until the trigger is armed, then widens: when it is not armed yet, the arm transaction (anyone may send it) comes before the fire, and bound says whether the pool's fill fits the bound now or from when. Send a fire with a gas limit of 3,000,000. Triggers do not fire while the stock market is shut or the feed has not printed within 25 hours; a price crossed while it is shut (a weekend, a holiday) fires once the market opens again, at the price the feed prints then, within the trigger's slip, and after a gap that price can be well past the trigger's. With account and id: that one trigger, refused in words when it does not hold. When none holds: the nearest ones and how far they are. Borro's keeper fires them too, by its own rules: Borro's keeper charges all its work on a trigger (screens, checks and simulations, 1 unit each; arms and resets, 5) to the trigger's root owner until the trigger fires, when it is given back. Owners go in this order: owners with a fire on record (a fire Borro's keeper itself sent for them and was paid for, its tip…
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | One trade account (optional; default every account) |
| id | string | – | With account: one trigger's number |
| wallet | string | yes | The executor's address (any address; the tip goes to it) |
No output schema declared.
No examples provided.
trigger_list A trade account's triggers ~222
The live triggers on a trade account (account, or the wallet's own): each with its condition in words, the stock's price now and how far it is from firing (in dollars and percent; a guard's LTV now and about where the price takes it to its LTV), whether it holds now (the account's own check) and why not, who set it, its slip, tip and expiry, and the fire transaction anyone may send once it holds. Triggers do not fire while the stock market is shut or the feed has not printed within 25 hours; a price crossed while it is shut (a weekend, a holiday) fires once the market opens again, at the price the feed prints then, within the trigger's slip, and after a gap that price can be well past the trigger's.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account) |
| wallet | string | – | The account's owner (when account is not given) |
No output schema declared.
No examples provided.
trigger_set Prepare: set a stop-loss, take-profit or liquidation guard ~1,315
Unsigned transaction leaving an order on a position in the trade account, which anyone may execute once the price feed confirms it, for a tip. kind stop (stop-loss: a short's fires at or above price, a long's at or below), take (take-profit: the other way) or guard (liquidation guard: fires when the position's LTV, Morpho's own at the market's oracle, reaches ltv and closes just enough to bring it down to target; target under ltv under the position's LLTV). A stop or take closes percent of the position (default 100). slip_bps: the most the close may come in worse than the feed's price once the trigger is armed and its bound has widened (100 to 300, default 100; the agent's at most its own limit). tip_bps: the executor's tip, a share of the closed notional at the feed, capped (tip_bps, at most 50 basis points, and never more than the USDG the close returns) (default: the smallest that covers a fire's gas at today's gas and ETH prices, at least 10 from the owner; the agent's at most its max tip, 0 unless the owner set one). The answer says who will fire it: Borro's keeper fires a trigger whose tip covers its fire's gas (taken as 1,100,000 gas until the keeper screens the fire). A trigger whose tip does not cover its fire's gas (a zero tip included, any kind; an agent's trigger pays no tip past its daily loss budget until 00:00 UTC) is fired by Borro's keeper from its root owner's low-tip allowance alone: 0.0001 ETH of gas a UTC day (a few fires), its owner's alone. At most 40 root owners hold one a UTC day, by spending from it: a free one goes to a trigger that is ready and about to be fired, and to no other, in the keeper's owner order (a fire on record, then the least keeper work today, then the oldest trade account) and while its owner is under 200 units of keeper work that day, so the owners whose triggers fire earliest may take all 40 that day. Past it, the trigger is left to other executors. A close under $5 (dust) is left to other executors whatever the tip. B…
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account) |
| expiry_seconds | integer | – | How long it stays live, in seconds (0 or left out: until cancelled; at most a year) |
| kind | string | yes | stop (stop-loss), take (take-profit) or guard (liquidation guard) |
| ltv | – | – | guard: the LTV it fires at, a fraction like 0.55 or a percent with its sign like "55%" |
| percent | number | – | stop or take: how much of the position to close, more than 0 to 100 (default 100) |
| price | string | – | stop or take: the stock's feed price in dollars that fires it, like "190.5" |
| side | string | yes | short (the account's short on the stock) or long (its leveraged long) |
| slip_bps | integer | – | The most the close may come in worse than the feed's price, in hundredths of a percent (100 to 300, default 100) |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| target | – | – | guard: the LTV it closes down to, under ltv |
| tip_bps | integer | – | The executor's tip, a share of the closed notional at the feed, capped (tip_bps, at most 50 basis points, and never more than the USDG the close returns), in hundredths of a percent (default: the sma… |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
weekend The Weekend Desk ~164
While the stock market is shut (Friday 8pm to Sunday 8pm New York, and holidays) the price feeds stop at their last print. For each stock: the paused price, Borro's weekend price and 95% band (low, high), its typical Monday gap and the last closures' gaps, and the gap cover quotes per side and strike. Also the market clock (closed since, reopens at) and the gap cover pool: what is in it, free and set aside, Borro's share, and one yearly number for what the pool earned. Nothing on chain reads the weekend price.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | – | One stock (optional), by its ticker, like NVDA; with a pool, its quotes are read from the chain |
No output schema declared.
No examples provided.
withdraw Prepare: take back what is lent ~114
Unsigned transaction to take back lent stock or USDG (part, or all with all: true). Stock on loan to shorters comes back once it is returned.
| Name | Type | Req | Description |
|---|---|---|---|
| all | boolean | – | Take back everything |
| amount | string | – | Amount to take back, in whole units as a decimal string, like "1.5" |
| asset | string | yes | USDG, or a stock symbol |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
withdraw_cover Prepare: withdraw from the gap cover pool ~136
Unsigned transaction to take USDG out of the gap cover pool, an amount or all: true. Capital is locked while covers are live, from the first buy of a closure until Monday's settlement; withdraw during the week. Run from the wallet first to show what comes back.
| Name | Type | Req | Description |
|---|---|---|---|
| all | boolean | – | Withdraw everything this wallet has in the pool (only when it is all free) |
| amount | string | – | USDG to withdraw, in whole units as a decimal string, like "1.5" |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
write_option Prepare: write a call or a put ~379
Unsigned transactions to write options from the wallet: post an ask at a premium (the collateral is locked now; it fills when a buyer takes it), or with order_id sell into that bid now and receive its premium less Borro's share. A call locks one share of the stock's Borro vault per share written: from the stock (lent into its vault in the same transaction, the default) or from vault shares held (bNVDA). A put locks the strike in USDG in the Steakhouse vault: from USDG (the default) or that vault's shares held. Exact approval of the lock, then the call; simulated from the wallet.
| Name | Type | Req | Description |
|---|---|---|---|
| expiry | string | – | this (the nearest Friday still taking orders, the default), next, or a Friday's date like 2026-10-16 |
| from | string | – | Where the lock comes from: a call stock (default) or shares; a put usdg (default) or shares |
| order_id | string | – | Sell into this bid instead of posting an ask (its series, its premium) |
| premium | string | – | Premium you ask, USDG a share (for an ask), in whole units as a decimal string, like "1.5" |
| shares | string | yes | Shares to write (at least 0.001), in whole units as a decimal string, like "1.5" |
| strike | string | – | The strike in dollars, on the $0.25 tick, like "250" |
| symbol | string | yes | A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one) |
| type | string | – | call or put |
| wallet | string | yes | The wallet's address (0x...); the transactions are built for it to sign |
No output schema declared.
No examples provided.
How do I install the Borro MCP server?
Borro is a hosted endpoint at https://borro.markets/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · borro.markets
claude mcp add --transport http markets-borro-borro 'https://borro.markets/mcp'
What is the Borro MCP server?
Borro is an MCP server listed in the public MCP registry as markets.borro/borro. Stock lending on Robinhood Chain: read markets and prepare lends, loans, shorts and credit lines. This page covers its hosted endpoint (https://borro.markets/mcp).
Is the Borro MCP server safe to use?
Borro scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Borro MCP server expose?
Borro exposes 85 tools: markets, market, health, position, trades, and 80 more. Their descriptions and schemas cost roughly 21,861 tokens of context every time the server is loaded.
Does the Borro MCP server require authentication?
No. We connected to Borro without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Borro MCP server still maintained?
Borro is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.