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.

Vitro

REMOTE · VITRO-AGENT.FLY.DEV

Read Vitro markets on Robinhood Chain and prepare unsigned transactions. Unaudited, capped launch.

69 Trust /100

Last scanned (20 hours ago)

Scores higher than 54% of remote servers

Reachable. Last reached 4 Nov 2026.

Deprecated

This server is marked deprecated in the MCP registry. The registry records this reason: Withdrawn by the owner.

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 Security74
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 4593 tokens (~153/item across 30 items; 30 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 Management10
  • Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 92% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "prepare_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 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
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.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Nov 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 1 Nov 26 67

    First indexed and scored.

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 4 Nov 2026 · Probed https://vitro-agent.fly.dev/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.fly.dev CN=YE1,O=Let's Encrypt,C=US 20 Oct 2026 18 Jan 2027 ECDSA 256 ECDSA-SHA384 5e6e25e6df778e81cd07b85fc9f12d4df7d
SANs: *.fly.dev
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of vitro-agent.fly.dev. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
fly.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
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
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://vitro-agent.fly.dev/mcp Verified 200
http (plaintext) http://vitro-agent.fly.dev/mcp HTTPS enforced 301 https://vitro-agent.fly.dev/mcp
MCP tools · 30 exposed · ~4,517 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
explain_risk ~164

Plain-language risk for a position: distance to liquidation, weekend gaps, expiry, settlement rules, USDG pause and freeze risk. Pass owner for a real position, or collateral and debtTokens for a hypothetical one.

NameTypeReqDescription
collateralstring–Hypothetical collateral, in USDG as a decimal string, e.g. "11" or "25.5"
debtTokensstring–Hypothetical debt, in synth tokens as a decimal string, e.g. "0.0189"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstring–The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

get_events ~138

Indexed events (mints, repays, withdrawals, liquidations, settlements, redemptions, ...), filterable and paginated.

NameTypeReqDescription
accountstring––
cursorstring––
fromBlockinteger––
limitinteger––
marketstring–Market address (0x...) or symbol, e.g. NO-NVDA
orderstring––
toBlockinteger––
typestring–Comma-separated: mint, deposit, repay, withdrawal, fee, liquidation, settlement, closeout, redemption, residual, transfer, admin

No output schema declared.

No examples provided.

get_health ~19

Proof indexer progress and lag versus the chain head.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_market ~50

One market in detail (Proof API) plus a live price and phase check from the chain.

NameTypeReqDescription
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA

No output schema declared.

No examples provided.

get_position ~93

A wallet's position: indexed history from Proof plus live collateral, debt, residual, claimable and synth balance from the chain. Omit market for all markets.

NameTypeReqDescription
marketstring–Market address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

get_series_settlement ~59

How a series settled (round id, price, path, caller), or which settlement window applies now and when the next opens.

NameTypeReqDescription
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA

No output schema declared.

No examples provided.

get_stats ~25

TVL, fees to the treasury, liquidations and per-market use of caps.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_markets ~36

All Vitro markets with status, expiry, caps, totals and price (from the Proof API).

NameTypeReqDescription
statusstring––

No output schema declared.

No examples provided.

list_series ~43

Current and past series with settlement round, price and who settled.

NameTypeReqDescription
assetstring–Ticker, e.g. NVDA
statestring––

No output schema declared.

No examples provided.

prepare_close_and_redeem ~134

After settlement: withdrawResidual (closes the sponsor position and pays the residual), redeem the wallet's synth if redemption is open, or claim a top-up. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

prepare_create_position ~205

Open or add to a position: USDG approval (if needed) and create(collateral, tokens). Enforces the 11 USDG minimum for a new position, both caps and a fresh price. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
collateralstringyesCollateral to deposit, in USDG as a decimal string, e.g. "11" or "25.5"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
mintTokensstringyesSynth to mint ("0" for collateral only), in synth tokens as a decimal string, e.g. "0.0189"
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

prepare_deposit ~150

Add collateral to an existing position: approval (if needed) and deposit(amount). Checks both caps. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
amountstringyesCollateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

prepare_mandate_close_and_redeem ~207

After settlement: withdrawResidual, redeem and claim, paid to the account. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
sessionKeystringyesThe session key that will send it (0x...). Not held by this server

No output schema declared.

No examples provided.

prepare_mandate_create ~146

Create a mandate account: a smart account that is itself a sponsor, so limits can bind a session key. Existing positions can't be moved into it. The owner can never change: there is no owner recovery. Unaudited. Refused while mandates aren't enabled on this server. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.
saltstring–Optional: a whole number or 32 bytes of hex, to create more than one account

No output schema declared.

No examples provided.

prepare_mandate_create_position ~279

Open or add to the account's position: create(collateral, tokens) through the account, which sets its own allowance. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
collateralstringyesCollateral to deposit, in USDG as a decimal string, e.g. "11" or "25.5"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
mintTokensstringyesSynth to mint ("0" for collateral only), in synth tokens as a decimal string, e.g. "0.0189"
sessionKeystringyesThe session key that will send it (0x...). Not held by this server

No output schema declared.

No examples provided.

prepare_mandate_deposit ~228

Add collateral to the account's position. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
amountstringyesCollateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
sessionKeystringyesThe session key that will send it (0x...). Not held by this server

No output schema declared.

No examples provided.

prepare_mandate_grant_session ~164

Let a session key act for the account, inside its limits, on the listed markets until it expires. Replacing a session restarts its mint budget. The key is never held by this server. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
actionsarray–Optional: narrow the actions. Default all nine
marketsarrayyesMarkets the key may use. Each needs a cap from prepare_mandate_set_limits
sessionKeystringyesThe key to allow (0x...)
validForSecondsintegeryesHow long the session lasts, from now

No output schema declared.

No examples provided.

prepare_mandate_owner_repay ~174

Burn synth held by the account to reduce its debt. "all" repays the whole debt. For the owner only: works with every session key revoked, ignores session limits, and still follows the market's rules. It prepares exactly this one market call and nothing else. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe account's owner, who will send it (0x...). Refused for any other address
tokensstringyesSynth to repay as a decimal string, or "all"

No output schema declared.

No examples provided.

prepare_mandate_owner_withdraw_collateral ~176

Move collateral from the position to the account. "max" is the most the market allows. For the owner only: works with every session key revoked, ignores session limits, and still follows the market's rules. It prepares exactly this one market call and nothing else. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
amountstringyesUSDG to withdraw as a decimal string, or "max"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe account's owner, who will send it (0x...). Refused for any other address

No output schema declared.

No examples provided.

prepare_mandate_owner_withdraw_residual ~154

After settlement: close the account's position and pay the residual to the account. For the owner only: works with every session key revoked, ignores session limits, and still follows the market's rules. It prepares exactly this one market call and nothing else. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe account's owner, who will send it (0x...). Refused for any other address

No output schema declared.

No examples provided.

prepare_mandate_repay ~234

Burn synth held by the account to reduce its debt. "all" repays the whole debt. Works while the price is stale. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
sessionKeystringyesThe session key that will send it (0x...). Not held by this server
tokensstringyesSynth to repay as a decimal string, or "all"

No output schema declared.

No examples provided.

prepare_mandate_revoke_session ~99

Stop one session key, or all of them with all: true. Takes effect in the next transaction. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
allboolean–Stop every session key
sessionKeystring–The key to stop (0x...)

No output schema declared.

No examples provided.

prepare_mandate_set_limits ~280

Set an account's limits and, optionally, the markets it may use with a cap for each. Refuses a minimum ratio at or below any market's own minimum. Binds session keys, not the owner. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
approvalThresholdstringyesAbove this, the owner must approve the exact action, in USDG as a decimal string, e.g. "11" or "25.5"
marketCapsarray––
maxActionSizestringyesLargest single action. Nothing above this runs, approved or not, in USDG as a decimal string, e.g. "11" or "25.5"
minCollateralRatioPctstringyesMinimum ratio after a risk-increasing action, as a percentage, e.g. "250"
mintBudgetstringyesTotal value one session may mint over its life, in USDG as a decimal string, e.g. "11" or "25.5"
totalCollateralCapstringyesTotal collateral across all markets, in USDG as a decimal string, e.g. "11" or "25.5"

No output schema declared.

No examples provided.

prepare_mandate_settle ~227

After expiry: settle(proof) through the account, only while the first round landed inside the lag. Other settlement paths are not agent actions: use prepare_settle from an ordinary wallet. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
sessionKeystringyesThe session key that will send it (0x...). Not held by this server

No output schema declared.

No examples provided.

prepare_mandate_withdraw ~111

Send idle tokens from the account to its owner, the only address the contract can send them to. Collateral in a position is not idle. Returns UNSIGNED transaction data for the owner's own wallet; simulated first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
amountstringyesAmount as a decimal string, or "all"
tokenstring–Optional: token address. Default USDG

No output schema declared.

No examples provided.

prepare_mandate_withdraw_collateral ~237

Move collateral from the position back to the account, never to any other address. "max" stops at the account's minimum ratio. Checks the account's limits, then returns UNSIGNED transaction data for the session key, simulated first. Above the approval threshold it returns EIP-712 typed data for the owner instead, which only works when the owner is an ordinary wallet: it refuses when the owner is a contract, such as a Safe. Never signs or sends.

NameTypeReqDescription
accountstringyesMandate account address (0x...)
amountstringyesUSDG to withdraw as a decimal string, or "max"
approvalobject–Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
approvalTtlSecondsinteger–Optional: how long a new approval stays valid. Default 1 hour
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
sessionKeystringyesThe session key that will send it (0x...). Not held by this server

No output schema declared.

No examples provided.

prepare_repay ~138

Burn synth from the wallet to reduce debt: repay(tokens). "all" repays the whole debt. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.
tokensstringyesSynth to repay as a decimal string, or "all"

No output schema declared.

No examples provided.

prepare_settle ~204

After expiry: finds the first Chainlink round at or after expiry, encodes the proof as abi.encode(uint80 roundId) and picks the path that applies now: settle(proof) if that round landed within expiry + maxSettleLag; otherwise guardianSettle(proof) for the guardian Safe, or settleBackstop(proof) for anyone from expiry + maxSettleLag + 7 days. Refused before expiry, once settled, and until the round has printed. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
fromstring–Optional: the address that will send it, used as the simulated sender. Ignored for guardianSettle, which is simulated from the guardian Safe.
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA

No output schema declared.

No examples provided.

prepare_withdraw ~152

Withdraw collateral: withdraw(amount). "max" withdraws the most the minimum ratio and 10 USDG floor allow. Needs a fresh price when the position has debt. Returns UNSIGNED transaction data (to, data, value, gas) for the user's own wallet; simulated against the latest block first and refused if it would revert. Never signs or sends.

NameTypeReqDescription
amountstringyesUSDG to withdraw as a decimal string, or "max"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
ownerstringyesThe user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

No output schema declared.

No examples provided.

quote_position ~191

Fee, collateral ratio, liquidation price and headroom for depositing collateral and minting, with the contracts' exact math at the current oracle price. Warns when the price is stale or the market is closed. Read-only.

NameTypeReqDescription
collateralstringyesCollateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
marketstringyesMarket address (0x...) or symbol, e.g. NO-NVDA
mintTokensstring–Synth to mint, in synth tokens as a decimal string, e.g. "0.0189"
mintValueUsdgstring–Exposure to mint, converted to tokens at the current price, in USDG as a decimal string, e.g. "11" or "25.5"
ownerstring–Optional: include this wallet's existing position

No output schema declared.

No examples provided.

Install

How do I install the Vitro MCP server?

Vitro is a hosted endpoint at https://vitro-agent.fly.dev/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 · vitro-agent.fly.dev

# add to Claude Code
claude mcp add --transport http kadirzarex-vitro 'https://vitro-agent.fly.dev/mcp'
Common questions

What is the Vitro MCP server?

Vitro is an MCP server listed in the public MCP registry as io.github.kadirzarex/vitro. Read Vitro markets on Robinhood Chain and prepare unsigned transactions. Unaudited, capped launch. This page covers its hosted endpoint (https://vitro-agent.fly.dev/mcp).

Is the Vitro MCP server safe to use?

Vitro scores 69 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 Vitro MCP server expose?

Vitro exposes 30 tools: list_markets, get_market, list_series, get_series_settlement, get_position, and 25 more. Their descriptions and schemas cost roughly 4,517 tokens of context every time the server is loaded.

Does the Vitro MCP server require authentication?

No. We connected to Vitro without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Vitro MCP server still maintained?

Vitro is marked deprecated in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.