accueil / serveurs / Dev & Code / fi.ophis/mcp
fi.ophis/mcp
serveur MCP (Model Context Protocol) · ophis 0.2.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que fi.ophis/mcp est sûr ?
Au dernier audit MCP Hub, le serveur MCP « fi.ophis/mcp » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 13 outils
- build_order≈ 900 tokens
Build a bounded, ready-to-sign CoW order on Ophis. Returns { order, signing:{domain,types,primaryType}, fullAppData, appDataHash, partnerFee, next }. The receiver is ALWAYS PINNED to the owner (proceeds cannot leave the account); this public endpoint exposes no custom-receiver option. Uses the correct per-chain settlement contract (Optimism, Unichain, Robinhood Chain, and Arc are non-canonical) and applies the canonical Ophis fee policy. Apply slippage to the LIMIT side by kind: for kind 'sell' lower buyAmount (your minimum out); for kind 'buy' raise sellAmount (your maximum in). slippageBips is capped at 5000 (50%); when omitted, the enforced backstop defaults to 100 bps (1%). ENFORCED: build_order fetches a live quote and REJECTS the call if the limit is worse than slippageBips vs that quote (or if a quote cannot be fetched; retry). Sign `order` as EIP-712 with `signing`, then call submit_order.
Paramètres, retour & exemple (15)
Paramètreskind· string · requis · sell | buy
'sell' = sellAmount is exact and buyAmount is your minimum out; 'buy' = buyAmount is exact and sellAmount is your maximum in.owner· string · requis
The signer/owner address (receiver defaults to this).chainId· integer · requis
EVM chain id (use a chainId from list_chains `tradeable`).buyToken· string · requis
Buy token address (0x...).buyAmount· string · requis
In atoms. kind 'sell': the MINIMUM you accept (slippage-adjusted DOWN from the quote). kind 'buy': the EXACT amount you want to receive.feeAmount· string · optionnel
Signed feeAmount in atoms. Must be omitted or "0" on this tool (the fee is taken from surplus + the appData partner fee).sellToken· string · requis
Sell token address (0x...).sellAmount· string · requis
In atoms. kind 'sell': the EXACT amount you sell. kind 'buy': the MAXIMUM you'll spend (slippage-adjusted UP from the quote).isStablePair· boolean · optionnel
Optional assertion checked against the server-owned stablecoin registry; omit to auto-classify.referrerCode· string · optionnel
Referral code to embed in appData for attribution of settled trades, including Arc. Defaults to the server's OPHIS_DEFAULT_REFERRER_CODE. An empty string opts out. Grammar: 3-64 chars [a-z0-9_-]; an invalid code errors.slippageBips· integer · optionnel
Max accepted slippage in bips; capped at 5000 (50%); when omitted, the enforced backstop defaults to 100 bps (1%). Recorded in appData. ENFORCED: build_order fetches a live quote and rejects a limit worse than this vs the quote. Fund safety: the receiver is always pinned to the owner.validForSeconds· integer · optionnel
Order lifetime in seconds (default 1200 = 20 min; minimum 60). The enforced live-quote fetch can consume several seconds, so very short lifetimes would return a near-expired order the orderbook rejects.partiallyFillable· boolean · optionnel
Allow partial fills (default false = fill-or-kill).referenceBuyAmount· ? · optionnelreferenceSellAmount· ? · optionnel
Exemple d'appel{"name": "build_order", "arguments": {"kind": "sell", "owner": "texte", "chainId": 1, "buyToken": "texte", "buyAmount": "texte", "sellToken": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - expected_surplus≈ 320 tokens
Estimate how much better Ophis quotes than the open market for a sell: fetches the Ophis orderbook sell-quote and a public all-DEX aggregator (KyberSwap) quote for the same input, and returns `beatBps` (+ = Ophis returns more of the buy token). Use before build_order to show the expected edge. The reference can reflect thin or manipulated liquidity, so treat beatBps as advisory, not a sole execution signal. Sell-side (exact-in) only. Read-only.
Paramètres, retour & exemple (5)
Paramètresfrom· string · requis
The trading account address (quotes are account-aware).chainId· integer · requis
EVM chain id (use a chainId from list_chains `tradeable`).buyToken· string · requis
Buy token address (0x...).sellToken· string · requis
Sell token address (0x...).sellAmount· string · requis
Exact sell amount in atoms (uint256 decimal string).
Exemple d'appel{"name": "expected_surplus", "arguments": {"from": "texte", "chainId": 1, "buyToken": "texte", "sellToken": "texte", "sellAmount": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_balances≈ 268 tokens
Read a wallet's native-token balance plus ERC-20 balances for the given token addresses on one chain, via a public RPC (one multicall). Returns each token's symbol, decimals, raw atoms, and human-readable amount. A token address that is not an ERC-20 is reported with an `error` and does not fail the batch. Read-only; holds no keys. Supported chains are those with a public RPC (most Ophis chains).
Paramètres, retour & exemple (3)
Paramètresowner· string · requis
Wallet address to read balances for (0x...).tokens· array · optionnel
ERC-20 token addresses to read (0x...); max 50. Native balance is always returned.chainId· integer · requis
EVM chain id (use list_chains for Ophis chains).
Exemple d'appel{"name": "get_balances", "arguments": {"owner": "texte", "chainId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_gas≈ 156 tokens
Read a chain's current gas price (EIP-1559 maxFee/maxPriority suggestion when supported, plus an effective gasPrice in wei and gwei). Ophis trades are gasless for the trader, so this mainly bounds the cost of a one-time ERC-20 approval to the VaultRelayer. Read-only.
Paramètres, retour & exemple (1)
ParamètreschainId· integer · requis
EVM chain id.
Exemple d'appel{"name": "get_gas", "arguments": {"chainId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_integrator_earnings≈ 186 tokens
Look up routed volume, the Ophis base fee, and the integrator's own fee on CoW-hosted chains, by appCode (your widget appCode or SDK ophisReferrer code). Routed volume is reported in USD, split by chain and by Ophis-operated versus CoW-hosted chains. Read-only, keyless, cumulative.
Paramètres, retour & exemple (1)
ParamètresappCode· string · requis
Your integrator appCode / referral code (3-64 chars of [a-z0-9_-]).
Exemple d'appel{"name": "get_integrator_earnings", "arguments": {"appCode": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_portfolio≈ 295 tokens
Read a wallet's native and (optionally) ERC-20 balances across multiple chains at once. Pass tokensByChain (chainId -> token addresses) to include token balances; omit chainIds to scan every chain with a public RPC (max 13 chains, and at most 100 token reads total across all chains). Per-chain RPC failures are returned inline so one dead endpoint does not sink the result. Read-only; holds no keys.
Paramètres, retour & exemple (3)
Paramètresowner· string · requis
Wallet address to read (0x...).chainIds· array · optionnel
Chains to read (max 13). Omit to scan all chains with a public RPC.tokensByChain· object · optionnel
Map of chainId -> ERC-20 token addresses to read on that chain (native is always included).
Exemple d'appel{"name": "get_portfolio", "arguments": {"owner": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_quote≈ 429 tokens
Fetch a best-execution quote from the chain's Ophis orderbook (use a chainId from list_chains' `tradeable`). Amounts are in atoms (smallest unit, uint256 decimal string). For kind='sell' the amount is the sell amount before fee; for kind='buy' it is the desired buy amount. Returns the orderbook quote (sellAmount/buyAmount/feeAmount/validTo). Before build_order, apply slippage to the limit side by kind: kind='sell' -> lower buyAmount (min out); kind='buy' -> raise sellAmount (max in).
Paramètres, retour & exemple (8)
Paramètresfrom· string · requis
The trading account address (quotes are account-aware).kind· string · requis · sell | buy
'sell' = you specify the sell amount; 'buy' = you specify the buy amount.amount· string · requis
Amount in atoms (uint256 decimal string).chainId· integer · requis
EVM chain id (use list_chains for supported chains).buyToken· string · requis
Buy token address (0x...).sellToken· string · requis
Sell token address (0x...).isStablePair· boolean · optionnel
Optional assertion checked against the server-owned stablecoin registry; omit to auto-classify.validForSeconds· integer · optionnel
Quote validity window in seconds (default 1200 = 20 min).
Exemple d'appel{"name": "get_quote", "arguments": {"from": "texte", "kind": "sell", "amount": "texte", "chainId": 1, "buyToken": "texte", "sellToken": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_token_chart≈ 344 tokens
Fetch OHLCV price history for a token from the keyless GeckoTerminal market API (resolves the token's deepest pool, then returns candles). Use for an agent to reason about recent price action before quoting. Prices come from a single pool that may be thin or manipulated, so treat them as advisory, not a sole execution signal. The keyless tier is a shared ~30 req/min quota, so cache and do not poll tightly. Read-only.
Paramètres, retour & exemple (5)
Paramètreslimit· integer · optionnel
Number of candles (default 30, max 300).token· string · requis
Token address (0x...).chainId· integer · requis
EVM chain id (GeckoTerminal-mapped: eth/optimism/base/arbitrum/polygon/bsc/avax/linea/gnosis/ink).aggregate· integer · optionnel
Bucket multiple base units into one candle, e.g. timeframe=hour aggregate=4 = 4h candles (default 1).timeframe· string · optionnel · day | hour | minute
Candle timeframe (default 'day').
Exemple d'appel{"name": "get_token_chart", "arguments": {"token": "texte", "chainId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_chains≈ 193 tokens
List configured EVM orderbook chains, split into `tradeable` (orderbook URL configured; only route get_quote/build_order to these) and `paused` (no configured orderbook URL, so those tools reject the chain). This is configuration, not a live health or liquidity check. The standalone app's externally funded NEAR networks are not orderbook chains. Each tradeable chain includes its orderbook host, GPv2Settlement contract (Optimism, Unichain, Robinhood Chain, and Arc are non-canonical), and canonical Ophis fee config. No input.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_chains", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - parse_intent≈ 161 tokens
Parse a plain-English swap request (e.g. "swap 100 USDC for ETH on Optimism") into a structured intent: { intent: "swap"|"unknown", entities: [{type: sellToken|buyToken|amount|chain, value, raw}] }. Backed by the live Ophis parser.
Paramètres, retour & exemple (1)
Paramètrestext· string · requis
The natural-language swap request.
Exemple d'appel{"name": "parse_intent", "arguments": {"text": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - resolve_token≈ 323 tokens
Resolve an ERC-20 token SYMBOL to its CANONICAL on-chain address from the trusted Ophis token list (the same curated list the swap UI uses). Use this BEFORE quoting or building so you never trade an address taken from chat, the web, or memory: a token can spoof the symbol "USDC" at a scam address, and this fails closed. Returns { found, ambiguous, canonical: {address, decimals, name} | null, matches: [...] }. found=false means no trusted match (do NOT guess: confirm any candidate with get_balances and the user). ambiguous=true means several trusted tokens share the symbol (e.g. native vs bridged); confirm which the user means. Native coins are not returned; resolve the wrapped symbol (e.g. WETH). Read-only.
Paramètres, retour & exemple (2)
Paramètressymbol· string · requis
Token symbol to resolve, e.g. "USDC" or "WETH".chainId· integer · requis
EVM chain id (use a chainId from list_chains `tradeable`).
Exemple d'appel{"name": "resolve_token", "arguments": {"symbol": "texte", "chainId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - submit_order≈ 486 tokens
Relay a pre-signed order to the chain's Ophis orderbook. Pass the exact `order` object and `fullAppData` from build_order, plus your EIP-712 `signature` and `from` (owner). Returns the order UID on success and enrolls the owner for indexing, referral attribution, and trade rewards.
Paramètres, retour & exemple (6)
Paramètresfrom· string · requis
The owner address that signed.order· object · requis
The order object returned by build_order.chainId· integer · requis
EVM chain id the order was built for.signature· string · requis
0x EIP-712 signature over the order by the owner.fullAppData· string · requis
The fullAppData string returned by build_order.signingScheme· string · optionnel · eip712 | ethsign
Signature scheme over the order (default 'eip712').
Exemple d'appel{"name": "submit_order", "arguments": {"from": "texte", "order": {}, "chainId": 1, "signature": "texte", "fullAppData": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - validate_order≈ 644 tokens
Offline preflight for an order you built OUTSIDE build_order (no network call, no keys). Catches the documented silent-failure modes before you sign or submit: wrong appCode (prevents Ophis referral attribution), wrong orderbook host (api.cow.fi silently bypasses the Ophis stack on Ophis-operated chains), wrong EIP-712 domain (signing against CoW's canonical settlement on an Ophis-operated chain yields a domain the deployed contract rejects), appData hash mismatch (order.appData must equal keccak256 of the exact fullAppData string), an unpinned receiver (proceeds leaving the owner), an expired or non-zero-fee order, and malformed partnerFee entries. Pass whatever you have (chainId is required; owner, order, fullAppData, signingDomain, orderbookUrl are all optional and each is checked if present). Returns { valid, errors, warnings, expected } where `expected` echoes the correct per-chain orderbook host, settlement, EIP-712 domain, appCode, and partnerFee. Prefer build_order to construct orders; use this to verify externally-built ones.
Paramètres, retour & exemple (6)
Paramètresorder· object · optionnel
The (partial) order about to be signed.owner· string · optionnel
The signing account address; enables the receiver drain-guard check.chainId· integer · requis
EVM chain id the order is for (use list_chains `tradeable`).fullAppData· string · optionnel
The exact appData JSON string that will be submitted with the order.orderbookUrl· string · optionnel
The orderbook base URL the order will be submitted to.signingDomain· object · optionnel
The EIP-712 domain the order will be signed against.
Exemple d'appel{"name": "validate_order", "arguments": {"chainId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».