# Vitro (remote · vitro-agent.fly.dev)

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

- Trust score: 69/100 (medium)
- Registry status: deprecated
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Deprecated**: this server is marked deprecated in the MCP registry. The registry records this reason: "Withdrawn by the owner."

## Components

- remote · `vitro-agent.fly.dev`: 69/100 (this document), [markdown](https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent.md), [page](https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent)

## Channel facts

- Endpoint: `https://vitro-agent.fly.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (good).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 92% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 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.
  - An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

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

### Claude

```bash
claude mcp add --transport http kadirzarex-vitro 'https://vitro-agent.fly.dev/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "kadirzarex-vitro": {
      "url": "https://vitro-agent.fly.dev/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "kadirzarex-vitro": {
      "type": "http",
      "url": "https://vitro-agent.fly.dev/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.kadirzarex-vitro]
url = "https://vitro-agent.fly.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kadirzarex-vitro": {
      "type": "remote",
      "url": "https://vitro-agent.fly.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add kadirzarex-vitro --url 'https://vitro-agent.fly.dev/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  kadirzarex-vitro:
    url: "https://vitro-agent.fly.dev/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "kadirzarex-vitro": {
      "Transport": "http",
      "Url": "https://vitro-agent.fly.dev/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add kadirzarex-vitro -t streamable-http -u 'https://vitro-agent.fly.dev/mcp'
```

### Other

```json
{
  "mcpServers": {
    "kadirzarex-vitro": {
      "type": "http",
      "url": "https://vitro-agent.fly.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 69, +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.

### 2026-11-02 (score 68, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-11-01 (score 67)

First indexed and scored.

## MCP tools (30)

### `list_markets` (~36 tokens)

List markets

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

Input parameters:

- `status` (string)

### `get_market` (~50 tokens)

Get market

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

Input parameters:

- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA

### `list_series` (~43 tokens)

List series

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

Input parameters:

- `asset` (string): Ticker, e.g. NVDA
- `state` (string)

### `get_series_settlement` (~59 tokens)

Series settlement

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

Input parameters:

- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA

### `get_position` (~93 tokens)

Get position

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.

Input parameters:

- `market` (string): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `get_events` (~138 tokens)

Get events

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

Input parameters:

- `account` (string)
- `cursor` (string)
- `fromBlock` (integer)
- `limit` (integer)
- `market` (string): Market address (0x...) or symbol, e.g. NO-NVDA
- `order` (string)
- `toBlock` (integer)
- `type` (string): Comma-separated: mint, deposit, repay, withdrawal, fee, liquidation, settlement, closeout, redemption, residual, transfer, admin

### `get_stats` (~25 tokens)

Get stats

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

### `get_health` (~19 tokens)

Get health

Proof indexer progress and lag versus the chain head.

### `quote_position` (~191 tokens)

Quote a position

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.

Input parameters:

- `collateral` (string, required): Collateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `mintTokens` (string): Synth to mint, in synth tokens as a decimal string, e.g. "0.0189"
- `mintValueUsdg` (string): Exposure to mint, converted to tokens at the current price, in USDG as a decimal string, e.g. "11" or "25.5"
- `owner` (string): Optional: include this wallet's existing position

### `explain_risk` (~164 tokens)

Explain risk

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.

Input parameters:

- `collateral` (string): Hypothetical collateral, in USDG as a decimal string, e.g. "11" or "25.5"
- `debtTokens` (string): Hypothetical debt, in synth tokens as a decimal string, e.g. "0.0189"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `prepare_create_position` (~205 tokens)

Prepare create position

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.

Input parameters:

- `collateral` (string, required): Collateral to deposit, in USDG as a decimal string, e.g. "11" or "25.5"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `mintTokens` (string, required): Synth to mint ("0" for collateral only), in synth tokens as a decimal string, e.g. "0.0189"
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `prepare_deposit` (~150 tokens)

Prepare deposit

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.

Input parameters:

- `amount` (string, required): Collateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `prepare_repay` (~138 tokens)

Prepare repay

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.

Input parameters:

- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.
- `tokens` (string, required): Synth to repay as a decimal string, or "all"

### `prepare_withdraw` (~152 tokens)

Prepare withdraw

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.

Input parameters:

- `amount` (string, required): USDG to withdraw as a decimal string, or "max"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `prepare_close_and_redeem` (~134 tokens)

Prepare close and redeem

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.

Input parameters:

- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.

### `prepare_settle` (~204 tokens)

Prepare settle

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.

Input parameters:

- `from` (string): Optional: the address that will send it, used as the simulated sender. Ignored for guardianSettle, which is simulated from the guardian Safe.
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA

### `prepare_mandate_create` (~146 tokens)

Prepare mandate account

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.

Input parameters:

- `owner` (string, required): The user's wallet address (0x...). Used to read the position and as the simulated sender; nothing is signed.
- `salt` (string): Optional: a whole number or 32 bytes of hex, to create more than one account

### `prepare_mandate_set_limits` (~280 tokens)

Prepare mandate limits

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `approvalThreshold` (string, required): Above this, the owner must approve the exact action, in USDG as a decimal string, e.g. "11" or "25.5"
- `marketCaps` (array)
- `maxActionSize` (string, required): Largest single action. Nothing above this runs, approved or not, in USDG as a decimal string, e.g. "11" or "25.5"
- `minCollateralRatioPct` (string, required): Minimum ratio after a risk-increasing action, as a percentage, e.g. "250"
- `mintBudget` (string, required): Total value one session may mint over its life, in USDG as a decimal string, e.g. "11" or "25.5"
- `totalCollateralCap` (string, required): Total collateral across all markets, in USDG as a decimal string, e.g. "11" or "25.5"

### `prepare_mandate_grant_session` (~164 tokens)

Prepare session grant

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `actions` (array): Optional: narrow the actions. Default all nine
- `markets` (array, required): Markets the key may use. Each needs a cap from prepare_mandate_set_limits
- `sessionKey` (string, required): The key to allow (0x...)
- `validForSeconds` (integer, required): How long the session lasts, from now

### `prepare_mandate_revoke_session` (~99 tokens)

Prepare session revoke

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `all` (boolean): Stop every session key
- `sessionKey` (string): The key to stop (0x...)

### `prepare_mandate_withdraw` (~111 tokens)

Prepare owner withdraw

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `amount` (string, required): Amount as a decimal string, or "all"
- `token` (string): Optional: token address. Default USDG

### `prepare_mandate_create_position` (~279 tokens)

Prepare mandate position

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `collateral` (string, required): Collateral to deposit, in USDG as a decimal string, e.g. "11" or "25.5"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `mintTokens` (string, required): Synth to mint ("0" for collateral only), in synth tokens as a decimal string, e.g. "0.0189"
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server

### `prepare_mandate_deposit` (~228 tokens)

Prepare mandate deposit

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `amount` (string, required): Collateral to add, in USDG as a decimal string, e.g. "11" or "25.5"
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server

### `prepare_mandate_repay` (~234 tokens)

Prepare mandate repay

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server
- `tokens` (string, required): Synth to repay as a decimal string, or "all"

### `prepare_mandate_withdraw_collateral` (~237 tokens)

Prepare mandate collateral withdraw

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `amount` (string, required): USDG to withdraw as a decimal string, or "max"
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server

### `prepare_mandate_close_and_redeem` (~207 tokens)

Prepare mandate close and redeem

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server

### `prepare_mandate_settle` (~227 tokens)

Prepare mandate settle

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `approval` (object): Only above the approval threshold: the nonce and deadline from typedData, plus the owner's signature
- `approvalTtlSeconds` (integer): Optional: how long a new approval stays valid. Default 1 hour
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `sessionKey` (string, required): The session key that will send it (0x...). Not held by this server

### `prepare_mandate_owner_repay` (~174 tokens)

Prepare owner repay

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The account's owner, who will send it (0x...). Refused for any other address
- `tokens` (string, required): Synth to repay as a decimal string, or "all"

### `prepare_mandate_owner_withdraw_collateral` (~176 tokens)

Prepare owner collateral withdraw

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `amount` (string, required): USDG to withdraw as a decimal string, or "max"
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The account's owner, who will send it (0x...). Refused for any other address

### `prepare_mandate_owner_withdraw_residual` (~154 tokens)

Prepare owner residual withdraw

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.

Input parameters:

- `account` (string, required): Mandate account address (0x...)
- `market` (string, required): Market address (0x...) or symbol, e.g. NO-NVDA
- `owner` (string, required): The account's owner, who will send it (0x...). Refused for any other address

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent#diagnostics

## Score history

- 2026-11-05: 69
- 2026-11-04: 69
- 2026-11-03: 68
- 2026-11-02: 68
- 2026-11-01: 67

## 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://vitro-agent.fly.dev/mcp
- Website: https://vitromarkets.xyz/
- Changelog RSS feed: https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent.xml
- Changelog JSON feed: https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent.json
- HTML version of this page: https://verifymcp.io/servers/kadirzarex-vitro/vitro-agent
