Koskamo

Tide API MCP

Provides an MCP server for accessing Sui blockchain data, including parsed transactions, wallet profiles, balances, token info, fund tracing, and SQL queries over the entire chain.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Tide API MCP logo, by TideVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Tide
You need:Pass a key as ?api-key=KEY, header x-api-key: KEY or Authorization: Bearer KEY.Free keys need no email: https://tide.ad/developers/keys, or POST /v0/keys/agent with a signed challenge.
MCP endpoint (Streamable HTTP)
https://api.tide.ad/mcp
Vendor documentation

What its tools do

38 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

38 of 38 have a description · 38 of 38 declare behavior hints · 36 of 36 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to tide.ad ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Explain Sui transactions in plain English
  • Retrieve wallet profiles and transaction history
  • Query token prices and market data
  • Execute SQL SELECT statements on Sui blockchain data

Source and maintenance

Vendor evidenceRegistry 2.0.0

Protocol and capabilities

Server
tide 2.0.0
MCP protocol negotiated in check
2025-11-25
Tools
38 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

tide answers questions about the Sui blockchain from its full history since genesis. Tools return a plain-English summary, compact facts and a link to the tide.ad page; quote the summary and share the link. Start with wallet_profile for an address or name.sui, explain_transaction for a digest, token_info for a coin, and search when you only have a name or symbol. wallet_history pages through a wallet's past, balance_at gives exact past balances, trace_funds follows money between addresses, price gives USD prices, and sql runs SQL over all of Sui (with a key). To act: yield_options and yield_plan find where to earn, build_transaction (or yield_plan with build: true) returns an unsigned transaction already dry-run and checked, withdraw_plan builds exits, and explain_unsigned checks any transaction; the agent's own wallet signs, tide never does. Lists are capped; pass cursor for more. Amounts are in whole coins (SUI, not MIST) unless a field ends in Raw.

Tools

38 advertised

explain_transaction — Explain a transaction
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explain one Sui transaction in plain English: what happened, the steps, who gained or lost which coins (with USD), the fee and the status. Use it whenever you have a transaction digest. Example: { digest: "5ajkuHAnivMiKRne6EYS2bzvHpCHWYx849cmoSHN89Vm" }.

explain_transaction input schema
{
  "type": "object",
  "required": [
    "digest"
  ],
  "properties": {
    "digest": {
      "type": "string",
      "description": "Transaction digest, base58 (43 or 44 characters)."
    }
  },
  "additionalProperties": false
}
explain_transaction annotations
{
  "title": "Explain a transaction",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
wallet_profile — Profile a wallet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything about a wallet in one call: total value with price status, top coins, DeFi and launchpad positions, SuiNS names and labels, who first funded it, its trading record and its latest transactions. Use it first for any question about an address or a .sui name. Example: { address: "example.sui" }.

wallet_profile input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    }
  },
  "additionalProperties": false
}
wallet_profile annotations
{
  "title": "Profile a wallet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
wallet_history — A wallet's transactions
Advertised by the server during the last successful anonymous check.
Advertised read-only

A wallet's transactions since genesis, newest first, each as one decoded sentence with the coins in and out. Filter by coin, direction (in or out) and days. Page with cursor. Spam airdrops are left out. Example: { address: "0x...", limit: 10 }.

wallet_history input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Last day to include, like 2025-06-30 (UTC)."
    },
    "coin": {
      "type": "string",
      "description": "Only transactions that moved this coin (coin type or symbol)."
    },
    "from": {
      "type": "string",
      "description": "First day to include, like 2025-06-01 (UTC)."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Rows per page, 1 to 25. Default 10."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor from the previous result, for the next page."
    },
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    },
    "direction": {
      "enum": [
        "in",
        "out"
      ],
      "type": "string",
      "description": "Only coins coming in, or going out."
    }
  },
  "additionalProperties": false
}
wallet_history annotations
{
  "title": "A wallet's transactions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
balance_at — Balance at a past time
Advertised by the server during the last successful anonymous check.
Advertised read-only

The exact balance a wallet held at a past time or checkpoint, read from full history. With coin, that coin's balance and the transaction that last changed it. Without coin, every coin it held then, valued at that time's prices. Example: { address: "example.sui", coin: "SUI", time: "2025-06-01T00:00:00Z" }.

balance_at input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "coin": {
      "type": "string",
      "description": "Coin type or symbol. Leave it out for all coins."
    },
    "time": {
      "type": [
        "string",
        "integer"
      ],
      "description": "A past time: ISO 8601 like 2025-06-01T00:00:00Z (UTC), or unix seconds."
    },
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    },
    "checkpoint": {
      "type": "integer",
      "minimum": 0,
      "description": "A checkpoint sequence number, instead of time."
    }
  },
  "additionalProperties": false
}
balance_at annotations
{
  "title": "Balance at a past time",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
token_info — Check a coin
Advertised by the server during the last successful anonymous check.
Advertised read-only

A coin's price, market cap, liquidity, volume and holder count, its safety checks (mint authority, deny list, concentration), its top 10 holders with linked-wallet clusters, and a report on its creator's past launches. Use it to judge a coin. Example: { coin: "DEEP" }.

token_info input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string",
      "description": "A coin type like 0x2::sui::SUI, or a symbol like DEEP (verified coins win ties)."
    }
  },
  "additionalProperties": false
}
token_info annotations
{
  "title": "Check a coin",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
trace_funds — Trace where money came from or went
Advertised by the server during the last successful anonymous check.
Advertised read-only

Follow money between addresses. direction in: who sent funds to this address, hop by hop back, plus who first funded it. out: where its funds went, hop by hop forward. both: its largest counterparties either way. Exchanges and protocols end a path. Returns the 15 largest flows. Example: { address: "0x...", direction: "in", depth: 2 }.

trace_funds input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "coin": {
      "type": "string",
      "description": "Only this coin (coin type or symbol)."
    },
    "depth": {
      "type": "integer",
      "maximum": 3,
      "minimum": 1,
      "description": "Hops to follow, 1 to 3. Default 2."
    },
    "minUsd": {
      "type": "number",
      "description": "Skip flows smaller than this many USD. Default 10."
    },
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    },
    "direction": {
      "enum": [
        "in",
        "out",
        "both"
      ],
      "type": "string",
      "description": "in (sources), out (destinations) or both (top counterparties). Default in."
    }
  },
  "additionalProperties": false
}
trace_funds annotations
{
  "title": "Trace where money came from or went",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search — Search Sui
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find anything on Sui by text: coins by symbol or name, SuiNS names, perps markets, pools, packages, addresses, objects and digests. Returns ids to pass to the other tools. Example: { query: "deep" }.

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 15,
      "minimum": 1,
      "description": "Matches to return, 1 to 15. Default 8."
    },
    "query": {
      "type": "string",
      "description": "Search text, a symbol, a name.sui, an id or a digest."
    }
  },
  "additionalProperties": false
}
search annotations
{
  "title": "Search Sui",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
perp_market — A perps market
Advertised by the server during the last successful anonymous check.
Advertised read-only

One perpetual futures market on Sui (Aftermath, Bluefin or Parchment): mark and index price, 24h change and volume, open interest, funding (last, estimated next, when), max leverage, fees, the latest trades and pools it backs. Pass a symbol; venue is optional (the busiest market wins). Example: { market: "BTC", venue: "aftermath" }.

perp_market input schema
{
  "type": "object",
  "required": [
    "market"
  ],
  "properties": {
    "venue": {
      "enum": [
        "aftermath",
        "bluefin",
        "parchment"
      ],
      "type": "string",
      "description": "aftermath, bluefin or parchment. Leave it out for the busiest."
    },
    "market": {
      "type": "string",
      "description": "Market symbol like BTC, META or SUI-PERP."
    }
  },
  "additionalProperties": false
}
perp_market annotations
{
  "title": "A perps market",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
price — Coin prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

USD prices for up to 50 coins, now or at a past time. Pass coin types or symbols. Example: { coins: ["SUI", "DEEP"] }.

price input schema
{
  "type": "object",
  "required": [
    "coins"
  ],
  "properties": {
    "at": {
      "type": "string",
      "description": "Optional past time: ISO 8601 or unix seconds."
    },
    "coins": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "minItems": 1,
      "description": "Coin types or symbols, up to 50 (up to 10 symbols)."
    }
  },
  "additionalProperties": false
}
price annotations
{
  "title": "Coin prices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
sql — Run SQL over all of Sui
Advertised by the server during the last successful anonymous check.
Advertised read-only

Run one SQL SELECT over every Sui transaction, event, object version and balance change since genesis. Needs an API key. Returns up to 100 rows; page with execution_id and offset. If it is still running, call again with execution_id. Tables and columns: https://api.tide.ad/v1/sql/schema. Example: { query: "SELECT sequence_number, total_transaction_blocks FROM sui.checkpoints ORDER BY sequence_number DESC LIMIT 5" }. Needs an API key.

sql input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Rows to return, 1 to 100. Default 50."
    },
    "query": {
      "type": "string",
      "description": "One SQL SELECT statement."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Rows to skip, for the next page."
    },
    "execution_id": {
      "type": "string",
      "description": "The execution_id of an earlier run, to get its rows or more of them."
    }
  },
  "additionalProperties": false
}
sql annotations
{
  "title": "Run SQL over all of Sui",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
explain_unsigned — Check a transaction before signing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check a Sui transaction before signing it: tide simulates it, explains what it would do in plain words, and checks every recipient, coin and package against full history. Returns safe, caution or danger with findings and evidence links. Block on danger. Pass tx_bytes (base64 TransactionData, or TransactionKind bytes with sender). Example: { tx_bytes: "AAAC..." }.

explain_unsigned input schema
{
  "type": "object",
  "required": [
    "tx_bytes"
  ],
  "properties": {
    "sender": {
      "type": "string",
      "description": "The signer. Required with TransactionKind bytes; with TransactionData it runs the check as this address."
    },
    "tx_bytes": {
      "type": "string",
      "description": "The unsigned transaction as base64: TransactionData, or TransactionKind bytes with sender."
    }
  },
  "additionalProperties": false
}
explain_unsigned annotations
{
  "title": "Check a transaction before signing",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
yield_options — Where to earn yield on Sui
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every place on Sui to earn yield (lending, pools, liquid staking, native staking) with the APY each actually paid over 7 and 30 days, deposits, exit liquidity and a risk tier from 1 (lowest) to 5 with reasons. Filter by asset, kind, protocol, max_tier, min_apy; sort by tvl, apy, tier or exit. Example: { asset: "USDC", max_tier: 2, sort: "apy" }.

yield_options input schema
{
  "type": "object",
  "properties": {
    "kind": {
      "enum": [
        "lending",
        "lp",
        "liquid_staking",
        "staking",
        "vault"
      ],
      "type": "string",
      "description": "lending, lp, liquid_staking, staking or vault."
    },
    "sort": {
      "enum": [
        "tvl",
        "apy",
        "tier",
        "exit"
      ],
      "type": "string",
      "description": "tvl (default), apy, tier or exit."
    },
    "asset": {
      "type": "string",
      "description": "A coin symbol (USDC, SUI) or coin type. USDC and SUI mean the native coins."
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Rows, default 15, at most 50."
    },
    "min_apy": {
      "type": "number",
      "description": "Lowest realized APY plus rewards, in percent."
    },
    "max_tier": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Highest risk tier to include, 1 to 5."
    },
    "protocol": {
      "type": "string",
      "description": "A protocol id or name, like navi, suilend, scallop or cetus."
    }
  },
  "additionalProperties": false
}
yield_options annotations
{
  "title": "Where to earn yield on Sui",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
yield_plan — Plan where to put an amount
Advertised by the server during the last successful anonymous check.
Advertised read-only

A ranked menu of 3 to 6 yield options on Sui for an amount: the realized APY used (never the advertised one), expected USD over the horizon, cost to get in and out at that size, risk tier with reasons, plain steps and links. Ranks options that reach target_apy first, then lowest risk. With build: true and sender it also returns the unsigned transaction for the top option, already dry-run and checked, ready for the wallet to sign. Example: { amount_usd: 5000, asset: "USDC", target_apy: 6, max_risk_tier: 2, build: true, sender: "0x..." }.

yield_plan input schema
{
  "type": "object",
  "required": [
    "amount_usd"
  ],
  "properties": {
    "pass": {
      "type": "string",
      "description": "With build: an Agent Pass id instead of sender; builds for the pass's agent within the owner's rules, with a signed receipt."
    },
    "asset": {
      "type": "string",
      "description": "The coin held: a symbol (USDC, SUI) or coin type."
    },
    "build": {
      "type": "boolean",
      "description": "Also build the unsigned transaction for the top option (or build_ranks), checked on current mainnet state. Needs sender."
    },
    "amount": {
      "type": [
        "number",
        "string"
      ],
      "description": "With build: amount of asset in whole coins. Default amount_usd at today's price."
    },
    "sender": {
      "type": "string",
      "description": "With build: the wallet that holds asset and will sign."
    },
    "amount_usd": {
      "type": "number",
      "minimum": 1,
      "description": "Amount in USD."
    },
    "target_apy": {
      "type": "number",
      "minimum": 0,
      "description": "Target APY in percent."
    },
    "build_ranks": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 6,
        "minimum": 1
      },
      "description": "With build: option ranks to build, default [1], at most 3."
    },
    "horizon_days": {
      "type": "integer",
      "maximum": 3650,
      "minimum": 1,
      "description": "Days you plan to stay, default 365."
    },
    "slippage_pct": {
      "type": "number",
      "description": "With build: slippage for a swap into the option's coin, percent, default 0.5."
    },
    "max_risk_tier": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Highest risk tier to accept, 1 (lowest) to 5. For the lowest risk, pass 1 or 2."
    }
  },
  "additionalProperties": false
}
yield_plan annotations
{
  "title": "Plan where to put an amount",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
build_transaction — Build a transaction to sign
Advertised by the server during the last successful anonymous check.
Advertised read-only

Build an unsigned Sui transaction for an action and get it back already checked: tide adds the protocol's own calls, picks the sender's gas coins, sets the budget, dry-runs the exact bytes on current mainnet state and runs the pre-sign check. Returns tx_bytes, a plain description, what leaves and enters the wallet, gas and the verdict. If it would fail or the check says danger you get the reason and no bytes. Amounts are whole coins. Actions: stake {amount, validator}; unstake {staked_sui_id, validator, amount}; lst_mint {lst, amount}; lst_redeem {lst, amount}; swap {from, to, amount, slippage_pct}; supply {protocol, asset, amount}; withdraw {protocol, asset, amount}. Lending protocols: suilend, navi, scallop. Swaps use the Aftermath router with slippage_pct (default 0.5) enforced on chain. steps runs several actions in one transaction; a step without amount takes the previous output. tide never signs: sign tx_bytes with your own wallet. Example: { sender: "0x...", action: "supply", protocol: "navi", asset: "USDC", amount: 100 }.

build_transaction input schema
{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "swap: coin to buy."
    },
    "lst": {
      "type": "string",
      "description": "lst_mint / lst_redeem: afSUI, haSUI, vSUI, sSUI, stSUI."
    },
    "from": {
      "type": "string",
      "description": "swap: coin to sell."
    },
    "pass": {
      "type": "string",
      "description": "Agent Pass id: build for the pass's agent within the owner's rules (allowance, venues, caps, price floor), prechecked, with a signed receipt. Actions: swap, supply (NAVI), stake (validator address), transfer (listed recipient name); each step needs an amount."
    },
    "asset": {
      "type": "string",
      "description": "supply / withdraw: the coin (USDC, SUI or a coin type)."
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Instead of action: [{ action, ...fields }, ...] in one transaction."
    },
    "action": {
      "enum": [
        "stake",
        "unstake",
        "lst_mint",
        "lst_redeem",
        "swap",
        "supply",
        "withdraw"
      ],
      "type": "string",
      "description": "What to do."
    },
    "amount": {
      "type": [
        "number",
        "string"
      ],
      "description": "Whole coins, or \"all\" where allowed."
    },
    "sender": {
      "type": "string",
      "description": "The wallet that will sign (0x address). Not needed with pass."
    },
    "protocol": {
      "type": "string",
      "description": "supply / withdraw: suilend, navi or scallop."
    },
    "validator": {
      "type": "string",
      "description": "stake / unstake: validator address or name (stake picks one when left out)."
    },
    "slippage_pct": {
      "type": "number",
      "description": "swap: percent, default 0.5."
    },
    "staked_sui_id": {
      "type": "string",
      "description": "unstake: one StakedSui object id."
    }
  },
  "additionalProperties": true
}
build_transaction annotations
{
  "title": "Build a transaction to sign",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
withdraw_plan — Exit a wallet's positions
Advertised by the server during the last successful anonymous check.
Advertised read-only

List a wallet's staking, liquid staking and lending positions (native stakes, afSUI, haSUI, vSUI, sSUI, stSUI, Suilend, NAVI, Scallop), each with an id and the step that exits it, and with exit build the exit transactions: unsigned, gassed and checked on current mainnet state, or the reason one would fail. to swaps the proceeds into one coin in the same transaction. Example: { wallet: "0x...", exit: "all", to: "USDC" }.

withdraw_plan input schema
{
  "type": "object",
  "required": [
    "wallet"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Swap each exit's proceeds into this coin."
    },
    "exit": {
      "type": [
        "array",
        "string"
      ],
      "items": {
        "type": "string"
      },
      "description": "Position ids to build exits for, or \"all\". Left out: only the list."
    },
    "wallet": {
      "type": "string",
      "description": "The wallet that holds the positions and will sign (0x address)."
    },
    "slippage_pct": {
      "type": "number",
      "description": "For that swap, percent, default 0.5."
    }
  },
  "additionalProperties": false
}
withdraw_plan annotations
{
  "title": "Exit a wallet's positions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
receipt_for_transaction — Signed receipt before signing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Before you sign: send the exact unsigned bytes and your intent; tide dry-runs them on mainnet and returns a receipt signed by tide (ed25519) with the digest Sui will give them, every simulated balance change, object and event, what Sui itself enforces (Agent Pass caps, listed pools, price floor, budget), checks of your intent (max_spend, min_receive, nothing else leaves the wallet) and a verdict. Give your human the url. After sending, call confirm_execution. Example: { tx_bytes: "AAAC...", intent: { action: "swap", max_spend: { USDC: "5" }, min_receive: { SUI: "4.9" } } }.

receipt_for_transaction input schema
{
  "type": "object",
  "required": [
    "tx_bytes"
  ],
  "properties": {
    "intent": {
      "type": "object",
      "description": "What you mean to do. Optional fields: action, pass (Agent Pass id), wallet, max_spend { coin: amount }, min_receive { coin: amount }, deadline_ms. Amounts in whole coins."
    },
    "tx_bytes": {
      "type": "string",
      "description": "Full unsigned TransactionData, base64 (sender, gas and budget set)."
    }
  },
  "additionalProperties": false
}
receipt_for_transaction annotations
{
  "title": "Signed receipt before signing",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
confirm_execution — Did it do what the receipt said?
Advertised by the server during the last successful anonymous check.
Advertised read-only

After execution: give the executed digest and the receipt (its id, or the receipt object). tide reads the transaction from the chain and compares status, balance changes, objects and events with the receipt. Returns match, or each difference in one plain sentence to report to your human (also not_executed, or other_transaction when the signed bytes were not the receipt's). Example: { digest: "CRDt...", receipt: "8e56072be767fadb73a18169d8dcfc3c" }.

confirm_execution input schema
{
  "type": "object",
  "required": [
    "digest",
    "receipt"
  ],
  "properties": {
    "digest": {
      "type": "string",
      "description": "Executed transaction digest."
    },
    "receipt": {
      "type": [
        "string",
        "object"
      ],
      "description": "Receipt id, or the receipt object."
    }
  },
  "additionalProperties": false
}
confirm_execution annotations
{
  "title": "Did it do what the receipt said?",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_receipt — Verify a tide receipt
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check a receipt's ed25519 signature against tide's published key (https://api.tide.ad/.well-known/tide-attest.json), that its id matches its content, and that its digest is the blake2b digest of the bytes inside it. Pass the receipt id or the receipt object with its signature. Example: { receipt: "8e56072be767fadb73a18169d8dcfc3c" }.

verify_receipt input schema
{
  "type": "object",
  "required": [
    "receipt"
  ],
  "properties": {
    "receipt": {
      "type": [
        "string",
        "object"
      ],
      "description": "Receipt id, or the receipt object (or the whole answer of receipt_for_transaction)."
    },
    "signature": {
      "type": "object",
      "description": "The signature object, when the receipt object is passed alone."
    },
    "public_key": {
      "type": "string",
      "description": "Check against this ed25519 public key (base64) instead of tide's."
    }
  },
  "additionalProperties": false
}
verify_receipt annotations
{
  "title": "Verify a tide receipt",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
agent_pass_report — What agents did under Agent Passes
Advertised by the server during the last successful anonymous check.
Advertised read-only

A report for a human on Agent Pass (Sui's on-chain agent authorization): for an owner, an agent or one pass, each pass's status, its rules in plain words (pools, caps, price floor, recipients), budgets left, today's usage and every transaction signed under it, including what Sui refused and why. Example: { owner: "0x1eb7...e0b1" } or { pass: "0x03c7...7bac" }.

agent_pass_report input schema
{
  "type": "object",
  "properties": {
    "pass": {
      "type": "string",
      "description": "Pass object id."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Transactions per pass, 1 to 100. Default 15."
    },
    "owner": {
      "type": "string",
      "description": "Owner or agent address."
    }
  },
  "additionalProperties": false
}
agent_pass_report annotations
{
  "title": "What agents did under Agent Passes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
agent_pass_precheck — Will the pass accept this?
Advertised by the server during the last successful anonymous check.
Advertised read-only

Before building: check one action against an Agent Pass's rules as they stand now (active, signer is the agent, rule for the coin or pair, per-action and daily limits, listed pools, price floor, named recipient, budget left). Returns accept or the rule that would refuse it. Example: { pass: "0x03c7...7bac", step: { action: "swap", coin_in: "USDC", coin_out: "SUI", amount: "0.2" } }.

agent_pass_precheck input schema
{
  "type": "object",
  "required": [
    "pass",
    "step"
  ],
  "properties": {
    "pass": {
      "type": "string",
      "description": "Pass object id."
    },
    "step": {
      "type": "object",
      "description": "{ action: swap|transfer|stake|supply, coin_in, coin_out, coin, amount, min_out, recipient (a name the owner listed), validator }"
    },
    "sender": {
      "type": "string",
      "description": "Your agent address."
    }
  },
  "additionalProperties": false
}
agent_pass_precheck annotations
{
  "title": "Will the pass accept this?",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
agents_overview — What AI agents do on Sui now
Advertised by the server during the last successful anonymous check.
Advertised read-only

The agent world on Sui: agent wallets active in 24 hours, their transactions and volume, Agent Passes, sui::allowance spend, Sui Agent Payments (testnet, mainnet when live), gasless and sponsored transactions, every agent product with its status (mainnet, testnet, announced), the latest agent actions in plain English and the most active agents this week. Example: {}.

agents_overview input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
agents_overview annotations
{
  "title": "What AI agents do on Sui now",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
agent_wallet — One AI agent wallet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Is this address an AI agent, who does it act for and under what limits (Agent Pass, sui::allowance, Sui Agent Payments grant, t2000, Talus), how much of each limit is used, who pays its gas, and what it did lately in plain English. Example: { address: "0xb569f5371380e339038c0cdce2729621d36bfc89e740c28e3976bf04357edab6" }.

agent_wallet input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "A 0x Sui address or a .sui name."
    }
  },
  "additionalProperties": false
}
agent_wallet annotations
{
  "title": "One AI agent wallet",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
owner_agents — Agents an address runs
Advertised by the server during the last successful anonymous check.
Advertised read-only

The AI agents one address runs on Sui: Agent Passes, allowances it granted, Sui Agent Payments grants, t2000 wallets it funded and agent wallets it pays gas for; per agent the limits in words, how much is used, payments refused on chain, and their latest actions. Example: { address: "adeniyi.sui" }.

owner_agents input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "A 0x Sui address or a .sui name."
    }
  },
  "additionalProperties": false
}
owner_agents annotations
{
  "title": "Agents an address runs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
billing_status — Credits left and USDC top-ups
Advertised by the server during the last successful anonymous check.
Advertised read-only

Your credits: what the plan has left this month, prepaid credits bought with USDC, the rate ($3 per million credits, so 1 USDC buys 333,333 credits), auto top-up settings and the latest payments. Needs an API key. Free. Example: {}. Needs an API key.

billing_status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
billing_status annotations
{
  "title": "Credits left and USDC top-ups",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
billing_topup — Buy credits with USDC
Advertised by the server during the last successful anonymous check.
Advertised read-only

Build an unsigned transaction that pays USDC on Sui to tide's treasury for credits ($3 per million credits; 1 USDC buys 333,333). Returns base64 tx_bytes that need no SUI for gas (unless gas: true). Sign them with the paying address and send them, or POST them with the signature to https://api.tide.ad/v1/billing/topup/submit. Credits land on the paying address's account about a second after the transaction is final. With an API key the key's account pays; without one pass address. Free. Example: { usd: "10" }.

billing_topup input schema
{
  "type": "object",
  "required": [
    "usd"
  ],
  "properties": {
    "gas": {
      "type": "boolean",
      "description": "true to pay gas in SUI instead of building a gasless transaction."
    },
    "usd": {
      "type": "string",
      "description": "USD of USDC to pay, at least 1, like \"10\" or \"25.50\"."
    },
    "address": {
      "type": "string",
      "description": "The paying Sui address, when you have no API key."
    }
  },
  "additionalProperties": false
}
billing_topup annotations
{
  "title": "Buy credits with USDC",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_object — Read an object
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read any Sui object by id: type, owner, version and fields, with its recent change history (which transactions changed it). Example: { id: "0x..." }.

get_object input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Object id."
    }
  },
  "additionalProperties": false
}
get_object annotations
{
  "title": "Read an object",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_object_at — Read an object at a past time
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a Sui object as it was at a version, checkpoint or time: its fields and owner then, or whether it was deleted or wrapped. Use it for what a pool, vault or position looked like before a change. Example: { id: "0x...", time: "2026-10-30T00:00:00Z" }.

get_object_at input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Object id."
    },
    "time": {
      "type": [
        "string",
        "integer"
      ],
      "description": "A past time: ISO 8601 like 2025-06-01T00:00:00Z (UTC), or unix seconds."
    },
    "version": {
      "type": "integer",
      "description": "Object version."
    },
    "checkpoint": {
      "type": "integer",
      "minimum": 0,
      "description": "A checkpoint sequence number, instead of time."
    }
  },
  "additionalProperties": false
}
get_object_at annotations
{
  "title": "Read an object at a past time",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
object_children — List an object's dynamic fields
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the dynamic fields of an object with decoded names and values (tables, bags, kiosks, pools, registries), or with depth 1 to 3, its tree of children. Page with cursor. Example: { id: "0x..." }.

object_children input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Parent object id."
    },
    "depth": {
      "type": "integer",
      "maximum": 3,
      "minimum": 1,
      "description": "1 to 3 for the tree of children instead of one page of fields."
    },
    "limit": {
      "type": "integer",
      "description": "Fields per page, up to 50."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor from the previous result, for the next page."
    }
  },
  "additionalProperties": false
}
object_children annotations
{
  "title": "List an object's dynamic fields",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
package_info — Read a Move package
Advertised by the server during the last successful anonymous check.
Advertised read-only

A Move package. With only id: its modules, functions and upgrade history. With module and function: how to call it, each parameter explained, with a TypeScript snippet. With window (24h, 7d or 30d): calls per day and per function, failures and top callers. Example: { id: "0x2", module: "coin", function: "split" }.

package_info input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Package id."
    },
    "module": {
      "type": "string",
      "description": "Module name, with function."
    },
    "window": {
      "enum": [
        "24h",
        "7d",
        "30d"
      ],
      "type": "string",
      "description": "24h, 7d or 30d, for usage."
    },
    "function": {
      "type": "string",
      "description": "Function name, with module."
    }
  },
  "additionalProperties": false
}
package_info annotations
{
  "title": "Read a Move package",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
events — List events
Advertised by the server during the last successful anonymous check.
Advertised read-only

List on-chain events by Move event type or by package, newest first, with an optional time or checkpoint range. Page with cursor. Example: { type: "0x...::pool::SwapEvent", limit: 10 }.

events input schema
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Full Move event type."
    },
    "limit": {
      "type": "integer",
      "description": "Rows per page, up to 50. Default 10."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor from the previous result, for the next page."
    },
    "toTime": {
      "type": "string",
      "description": "End time, ISO 8601."
    },
    "package": {
      "type": "string",
      "description": "Package id, instead of type."
    },
    "fromTime": {
      "type": "string",
      "description": "Start time, ISO 8601."
    }
  },
  "additionalProperties": false
}
events annotations
{
  "title": "List events",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
checkpoint — Read a checkpoint
Advertised by the server during the last successful anonymous check.
Advertised read-only

One checkpoint by sequence number, or the newest with seq "latest": time, epoch, gas totals and its transactions as one-line sentences. Use it to see what is happening on chain right now. Example: { seq: "latest" }.

checkpoint input schema
{
  "type": "object",
  "properties": {
    "seq": {
      "type": "string",
      "description": "Checkpoint sequence number, or latest."
    }
  },
  "additionalProperties": false
}
checkpoint annotations
{
  "title": "Read a checkpoint",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
candles — Price candles
Advertised by the server during the last successful anonymous check.
Advertised read-only

OHLCV price candles for a coin, in USD. Pick interval and an optional from and to. Example: { coin: "SUI", interval: "1h" }.

candles input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "End time."
    },
    "coin": {
      "type": "string",
      "description": "A coin type like 0x2::sui::SUI, or a symbol like DEEP (verified coins win ties)."
    },
    "from": {
      "type": "string",
      "description": "Start time, ISO 8601 or unix seconds."
    },
    "interval": {
      "type": "string",
      "description": "Candle size: 1m, 5m, 15m, 1h, 4h or 1d. Default 1h."
    }
  },
  "additionalProperties": false
}
candles annotations
{
  "title": "Price candles",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
nfts — NFTs a wallet owns
Advertised by the server during the last successful anonymous check.
Advertised read-only

The NFTs and kiosk items an address owns: name, collection, image and listing state. Page with cursor. Example: { address: "example.sui" }.

nfts input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Items per page, up to 50. Default 10."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor from the previous result, for the next page."
    },
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    }
  },
  "additionalProperties": false
}
nfts annotations
{
  "title": "NFTs a wallet owns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
staking — Stakes and validators
Advertised by the server during the last successful anonymous check.
Advertised read-only

With address: the wallet's staked SUI, per stake its validator, principal, rewards and status. With validator: that validator's stake, commission and APY per epoch. Example: { address: "example.sui" }.

staking input schema
{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    },
    "validator": {
      "type": "string",
      "description": "Validator address, for its history."
    }
  },
  "additionalProperties": false
}
staking annotations
{
  "title": "Stakes and validators",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
order_book — DeepBook order books
Advertised by the server during the last successful anonymous check.
Advertised read-only

DeepBook order books. With nothing: every pool with best bid, ask and 24h volume. With pool: its depth and latest trades. With address: the wallet's open orders and recent fills. Example: { pool: "0x..." }.

order_book input schema
{
  "type": "object",
  "properties": {
    "pool": {
      "type": "string",
      "description": "Pool object id."
    },
    "levels": {
      "type": "integer",
      "description": "Price levels per side for depth. Default 10."
    },
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    }
  },
  "additionalProperties": false
}
order_book annotations
{
  "title": "DeepBook order books",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
walrus_blob — Read a Walrus blob
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything about one Walrus blob: status (registered, certified, expired, deleted), owner and uploader, size, the register and certify transactions, start and end epoch with an estimated end date, deletable or permanent, shared blob funds, extensions, WAL paid, attributes, and what the content is (image, video, audio, pdf, json, markdown, csv, code, text, html, quilt with its patches, Seal encrypted with its policy package, binary), with a preview URL. Takes a blob id, a quilt patch id, the u256 or a Blob object id. Example: { id: "FHQl1gK7Rb5X5X3Q-DiNe4qvyTojL262p0JUn-ijQkQ" }.

walrus_blob input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Blob id (43 characters), quilt patch id (50 characters), u256 in decimal or 0x hex, or a Blob object id."
    }
  },
  "additionalProperties": false
}
walrus_blob annotations
{
  "title": "Read a Walrus blob",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
address_kind — What kind of address
Advertised by the server during the last successful anonymous check.
Advertised read-only

Tell what an address is: a plain key (ed25519, secp256k1, secp256r1), a passkey, a zkLogin address (with its provider), a multisig (members and threshold), an object, a package, or an address that never signed. Example: { address: "0x..." }.

address_kind input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "A Sui address (0x...), a SuiNS name like example.sui, or @example."
    }
  },
  "additionalProperties": false
}
address_kind annotations
{
  "title": "What kind of address",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
docs — Find the right tide API method
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the tide API docs for the method that answers a question, with its parameters, credits and a curl example. Use it when no other tool fits; then call the method over REST at https://api.tide.ad. Example: { question: "transfers of a coin between two times" }.

docs input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 8,
      "minimum": 1,
      "description": "Matches, 1 to 8. Default 3."
    },
    "question": {
      "type": "string",
      "description": "What you want to do, in plain words."
    }
  },
  "additionalProperties": false
}
docs annotations
{
  "title": "Find the right tide API method",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1196 ms
95th percentile latency
1196 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1196 ms · metadata changed · 38 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http tide-api-mcp https://api.tide.ad/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add tide-api-mcp --url https://api.tide.ad/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable tide-api-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "tide-api-mcp": {
      "url": "https://api.tide.ad/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "tide-api-mcp": {
      "type": "streamableHttp",
      "url": "https://api.tide.ad/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start tide-api-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "tide-api-mcp": {
      "type": "http",
      "url": "https://api.tide.ad/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http tide-api-mcp https://api.tide.ad/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.tide.ad/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "tide-api-mcp": {
      "serverUrl": "https://api.tide.ad/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Tide API MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Tide API MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing