Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Borro

REMOTE · BORRO.MARKETS

Stock lending on Robinhood Chain: read markets and prepare lends, loans, shorts and credit lines.

Available components

+5 this week 70 Trust /100

Last scanned (6 hours ago)

Scores higher than 55% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

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
Transport & Reachability100
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
Changelog

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
Diagnostics

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
MCP tools · 85 exposed · ~21,861 tokens

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 →

Tool Tokens
hold_header ~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.

NameTypeReqDescription
payment_required–yesThe same payment_required given to hold_pay
signaturestringyesThe payer's signature of hold_pay's typed_data (0x hex)
voucher–yesThe voucher hold_pay returned, as it returned it

No output schema declared.

No examples provided.

hold_open ~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.

NameTypeReqDescription
capstring–The most USDG the payee can ever be paid from the hold, in whole units as a decimal string, like "1.5"
expiry_secondsinteger–How long the hold lasts, in seconds (60 to 7776000)
max_fee_bpsinteger–The most fee the payer accepts, in basis points (default: BorroHolds' fee now)
max_slip_bpsinteger–The most slippage the payer accepts on a stock hold's sales, in basis points (default: the listing's now)
modestring–metered (default) or charge
operatorstring–Charge mode: an address that may charge and release for the payee
payeestring–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
saltstring–32 bytes of 0x hex for the hold's id (default: fresh)
sharesstring–Stock (or bUSDG) hold: the vault shares to hold, like "0.5", or "all"
usdgstring–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"
vaultstring–"USDG" (default) or a stock's ticker, like NVDA
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

hold_pay ~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.

NameTypeReqDescription
holdstring–The hold's id (hold_open returned it)
max_usdgstring–The most one request may cost, in whole units as a decimal string, like "1.5"
payment_required–yesThe 402's PaymentRequired (PAYMENT-REQUIRED header value or JSON body)
walletstring–The payer: finds its hold for this merchant when hold is not given

No output schema declared.

No examples provided.

hold_status ~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).

NameTypeReqDescription
holdstring–A hold's id
payeestring–A payee's address
payerstring–A payer's address

No output schema declared.

No examples provided.

holder_benefits ~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.

NameTypeReqDescription
borrow_usdgstring–Optional: a planned borrow in USDG, to see the $BORRO its full rate needs, in whole units as a decimal string, like "1.5"
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

keeper_jobs ~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 ~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.

NameTypeReqDescription
borrowerstringyesThe position's owner on Morpho (for a stock short, the shorter's wallet or its BorroShort account)
kindstring–Optional, as /jobs.json's prepare gives it: checked against the market
marketstringyesA 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_usdgstring–The least USDG the wallet will take; less and it reverts (default 90% of the simulated profit)
sidestring–For a stock or a coin given by its address: short (it is borrowed) or usdg (USDG borrowed against it)
walletstringyesThe wallet that sends it and is paid

No output schema declared.

No examples provided.

market ~55

One stock's full line from the shelf: rates, sizes, limits, open fee and its contracts.

NameTypeReqDescription
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)

No output schema declared.

No examples provided.

markets ~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 ~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.

NameTypeReqDescription
leveragenumberyesLeverage, more than 1, like 1.5
marginstringyesUSDG margin from the wallet, in whole units as a decimal string, like "1.5"
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

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

NameTypeReqDescription
depositstring–USDG held against the short beyond the sale (optional), in whole units as a decimal string, like "1.5"
longstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
long_amountstringyesLong stock to buy, in whole units as a decimal string, like "1.5"
shortstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
short_amountstringyesStock to short, in whole units as a decimal string, like "1.5"
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

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

NameTypeReqDescription
amountstringyesStock to short, in whole units as a decimal string, like "1.5"
depositstring–USDG to add to the money held, beyond the sale (optional, default 0), in whole units as a decimal string, like "1.5"
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

options ~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.

NameTypeReqDescription
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)

No output schema declared.

No examples provided.

payto ~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).

NameTypeReqDescription
addressstring–Or a receiving address (0x...), to read it and its owner
walletstring–The owner's wallet (0x...)

No output schema declared.

No examples provided.

payto_open ~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.

NameTypeReqDescription
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

payto_sweep ~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.

NameTypeReqDescription
ownerstring–Optional: the owner whose address to sweep (0x...), when it is not the sending wallet
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

payto_withdraw ~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.

NameTypeReqDescription
amountstring–How much, as a decimal string, or "all" (default)
tokenstring–"USDG" (default), "ETH", or a token's address (0x...)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

position ~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.

NameTypeReqDescription
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

post_bid ~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.

NameTypeReqDescription
expirystring–this (default), next, or a Friday's date like 2026-10-16
premiumstringyesPremium you bid, USDG a share, in whole units as a decimal string, like "1.5"
sharesstringyesShares to bid for, in whole units as a decimal string, like "1.5"
strikestringyesThe strike in dollars, like "250"
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
typestringyescall or put
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

prices ~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 ~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.

NameTypeReqDescription
series_idstringyesThe series id (position lists them)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

repay ~115

Unsigned transactions to repay USDG borrowed against a stock (part, or all with all: true).

NameTypeReqDescription
allboolean–Repay everything owed
amountstring–USDG to repay, in whole units as a decimal string, like "1.5"
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

rules ~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 ~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).

NameTypeReqDescription
idstringyesThe cover's number (position lists a wallet's covers)
walletstringyesThe address that will send it (any address; the payout goes to the cover's buyer)

No output schema declared.

No examples provided.

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

NameTypeReqDescription
expirystring–A Friday's date like 2026-10-16
series_idstring–The series id (or symbol, expiry, strike and type instead)
strikestring–The strike in dollars
symbolstring–A stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
typestring–call or put
walletstringyesThe address that will send it (any address)

No output schema declared.

No examples provided.

supply ~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.

NameTypeReqDescription
amountstringyesAmount to lend, in whole units as a decimal string, like "1.5"
assetstringyesUSDG, or a stock symbol
postboolean–Stock only: lend and post as collateral in one step
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

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

NameTypeReqDescription
accountstring–A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account)
idstringyesThe trigger's number (trigger_list shows it)
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

trigger_fire ~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…

NameTypeReqDescription
accountstring–One trade account (optional; default every account)
idstring–With account: one trigger's number
walletstringyesThe executor's address (any address; the tip goes to it)

No output schema declared.

No examples provided.

trigger_list ~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.

NameTypeReqDescription
accountstring–A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account)
walletstring–The account's owner (when account is not given)

No output schema declared.

No examples provided.

trigger_set ~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…

NameTypeReqDescription
accountstring–A trade account's address (default: the wallet's own, as its owner; an agent gives its owner's account)
expiry_secondsinteger–How long it stays live, in seconds (0 or left out: until cancelled; at most a year)
kindstringyesstop (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%"
percentnumber–stop or take: how much of the position to close, more than 0 to 100 (default 100)
pricestring–stop or take: the stock's feed price in dollars that fires it, like "190.5"
sidestringyesshort (the account's short on the stock) or long (its leveraged long)
slip_bpsinteger–The most the close may come in worse than the feed's price, in hundredths of a percent (100 to 300, default 100)
symbolstringyesA 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_bpsinteger–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…
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

weekend ~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.

NameTypeReqDescription
symbolstring–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 ~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.

NameTypeReqDescription
allboolean–Take back everything
amountstring–Amount to take back, in whole units as a decimal string, like "1.5"
assetstringyesUSDG, or a stock symbol
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

withdraw_cover ~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.

NameTypeReqDescription
allboolean–Withdraw everything this wallet has in the pool (only when it is all free)
amountstring–USDG to withdraw, in whole units as a decimal string, like "1.5"
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

write_option ~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.

NameTypeReqDescription
expirystring–this (the nearest Friday still taking orders, the default), next, or a Friday's date like 2026-10-16
fromstring–Where the lock comes from: a call stock (default) or shares; a put usdg (default) or shares
order_idstring–Sell into this bid instead of posting an ask (its series, its premium)
premiumstring–Premium you ask, USDG a share (for an ask), in whole units as a decimal string, like "1.5"
sharesstringyesShares to write (at least 0.001), in whole units as a decimal string, like "1.5"
strikestring–The strike in dollars, on the $0.25 tick, like "250"
symbolstringyesA stock on Borro by its ticker, like NVDA or AAPL (markets lists every one)
typestring–call or put
walletstringyesThe wallet's address (0x...); the transactions are built for it to sign

No output schema declared.

No examples provided.

Install

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

# add to Claude Code
claude mcp add --transport http markets-borro-borro 'https://borro.markets/mcp'
Common questions

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.