Skip to main content
Glama
iran-crypto-mcp

iran-crypto-mcp

by sepehr071

iran-crypto-mcp: Iranian crypto exchanges MCP server for AI agents

Compare any coin across twelve Iranian crypto exchanges, in Toman, from Claude, Cursor or Copilot. An unofficial, read-only MCP server (model context protocol) for the public market data of Nobitex, Wallex, Bitpin, Ramzinex, Tabdeal, OMPFinex, Exir, Bit24, Aban Tether, Kifpool, OK-EX and Tetherland: prices, order books, recent trades, candles and top movers.

PyPI Python CI License: MIT mcpfarsi

Install in VS Code

For AI agents · Why · Quick start · Exchanges · Tools · FAQ · فارسی


For AI agents

  • What: unofficial MCP server for the public market data of 12 Iranian crypto exchanges and brokers (Nobitex, Wallex, Bitpin, Ramzinex, Tabdeal, OMPFinex, Exir, Bit24, Aban Tether, Kifpool, OK-EX, Tetherland).

  • Install: uvx iran-crypto-mcp or claude mcp add iran-crypto -- uvx iran-crypto-mcp. Transport: stdio. Needs uv (Python 3.10+).

  • Auth: none, no API key or account. Optional IRAN_CRYPTO_MCP_PROXY (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.

  • Access: read-only. No login, balances, orders or trading, so no confirmation is needed before calling any tool.

  • Tools: 8, all prefixed ic_. Start with ic_compare_price. Typical sequence: ic_compare_price -> ic_get_orderbook -> ic_candles.

  • Use when: comparing a coin's price across Iranian exchanges, checking a spread, reading an order book or recent trades, or listing 24h movers.

  • Do not use when: the user wants to buy, sell or transfer, needs account data, or wants non-Iranian exchanges.

  • Output: compact JSON. Every IRT price is in Toman (field names say *_toman); USDT markets say *_usdt.

  • Machine-readable: server.json and the iran-mcp catalog.

Related MCP server: Arzbin MCP Server

Why

  • Rial vs Toman. Nobitex, Ramzinex and OMPFinex publish Rial; Wallex, Bitpin, Tabdeal and Exir publish Toman. The same BTC price differs 10x between them. This server converts everything to Toman, so the numbers compare directly.

  • Seven sites to check by hand. Each exchange has its own app, its own symbols and its own API shape. One call to ic_compare_price returns the coin on every exchange, cheapest first, with the spread.

  • Persian names. Every exchange row carries name_fa, the exchange's own Persian name, so answers in Persian do not depend on the model spelling it.

What it can do

  • Compare one coin's price on all twelve exchanges, in Toman or USDT, cheapest first, with the spread

  • Get a ticker: last price, 24h range and change, volume, and best bid/ask where the exchange publishes them

  • Read order books (up to 20 levels per side) and recent public trades

  • Pull OHLC candles (15m, 1h, 4h, 1d) from all eight order-book exchanges (and Aban Tether for USDT/IRT)

  • Rank the biggest 24h gainers and losers on an exchange, with illiquid coins filtered out

  • List the coins an exchange trades against Toman or USDT

  • Find the best exchange for a buy or sell of a given size, walking each order book for slippage

  • Scan all coins for price gaps between exchanges (arbitrage), on real bid/ask prices

  • Compare trading fees and each coin's withdrawal networks, fees and minimums across exchanges

  • Get a one-call market overview: the Tether rate and major coins, median price and range across exchanges

Example prompts:

  • "Compare the BTC price on all Iranian exchanges in Toman. Where is it cheapest?"

  • "What is the Tether (USDT) rate in Toman on each exchange right now?"

  • "Show the Nobitex ETH order book. Is the spread real?"

  • "Top 5 gainers on Wallex in the last 24 hours."

  • "Give me 1-hour BTC candles from Wallex for the last two days."

  • "Where do I get the most USDT for 50 million Toman?"

  • "Which exchange has the cheapest USDT withdrawal on TRC20?"

  • "Any arbitrage between Iranian exchanges right now?"

  • با ۵۰ میلیون تومان کجا بیشترین تتر را می‌گیرم؟

  • قیمت بیت‌کوین را در همه صرافی‌های ایرانی به تومان مقایسه کن.

  • قیمت تتر الان در کدام صرافی ارزان‌تر است؟

  • دفتر سفارش اتریوم در نوبیتکس را نشان بده.

Supported exchanges

Exchange

Persian name

Site

Published unit

Ticker

Order book

Trades

Candles

Nobitex

نوبیتکس

nobitex.ir

Rial

full

yes

yes

yes (not USDT/IRT)

Wallex

والکس

wallex.ir

Toman

full

yes

yes

yes

Bitpin

بیت‌پین

bitpin.ir

Toman

no bid/ask

yes

yes

yes

Ramzinex

رمزینکس

ramzinex.ir

Rial

full

yes

yes

yes

Tabdeal

تبدیل

tabdeal.org

Toman

no bid/ask, no volume

yes

yes

yes

OMPFinex

او ام پی فینکس

ompfinex.com

Rial

no bid/ask

yes

no

yes

Exir

اکسیر

exir.io

Toman

no bid/ask

yes

yes

yes

Bit24

بیت ۲۴

bit24.cash

Toman

no bid/ask

yes

yes (no side)

yes

Aban Tether (broker)

آبان تتر

abantether.ir

Toman

buy/sell price, no high/low

no

no

USDT/IRT only (1h+)

Kifpool (broker)

کیف پول من

kifpool.me

Toman

sell price only; no USDT/IRT

no

no

no

OK-EX (broker)

اوکی اکسچنج

ok-ex.io

Toman

buy/sell price, no high/low

no

no

no

Tetherland (broker)

تترلند

tetherland.com

Toman

one price, no high/low

no

no

no

  • All twelve give prices in both quotes: Toman (IRT) and USDT. USDT markets stay in USDT.

  • "Full" means last price, bid, ask, 24h high and low, change and volume.

  • Bitpin volume comes from a best-effort second call; if it fails, the ticker has no volume.

  • Exir publishes base volume only, so quote volume is approximated as volume times last price.

  • Use ic_get_orderbook for the best bid and ask where the ticker lacks them.

  • Nobitex refuses USDT/IRT candles (its CDN answers HTTP 403, browsers included): use Wallex for those.

  • ic_fees: every exchange has trading fees; all but Aban Tether and OK-EX also publish withdrawal networks and fees. Ramzinex, OMPFinex, Bit24, Aban Tether and Tetherland publish trading fees only on a web page, so those values are fixed in the server (checked 2026-10-28).

Quick start

You need uv. No API key or account.

claude mcp add iran-crypto -- uvx iran-crypto-mcp

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "iran-crypto": { "command": "uvx", "args": ["iran-crypto-mcp"] }
  }
}

Add the Claude Desktop block to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

Click Install in VS Code above, or add to .vscode/mcp.json:

{
  "servers": {
    "iran-crypto": { "type": "stdio", "command": "uvx", "args": ["iran-crypto-mcp"] }
  }
}
codex mcp add iran-crypto -- uvx iran-crypto-mcp

Or in ~/.codex/config.toml:

[mcp_servers.iran-crypto]
command = "uvx"
args = ["iran-crypto-mcp"]

Add the Claude Desktop block to ~/.gemini/settings.json, or run:

gemini mcp add iran-crypto uvx iran-crypto-mcp

Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.

It is a standard stdio MCP server: run uvx iran-crypto-mcp, or pip install iran-crypto-mcp and run iran-crypto-mcp.

Tools

All 8 tools are read-only. Exchange ids: nobitex, wallex, bitpin, ramzinex, tabdeal, ompfinex, exir. quote is IRT (Toman, default) or USDT.

Tool

What it does

ic_list_exchanges

The supported exchanges, their native price unit and what each can answer

ic_list_markets

Coins an exchange trades against Toman (IRT) or USDT

ic_compare_price

One coin's price on every exchange in one call, cheapest first, with the spread (an exchange that fails is reported, not fatal)

ic_get_ticker

Live price, best bid and ask, 24h range, change and volume of a coin on one exchange

ic_get_orderbook

Top bids and asks (1 to 20 levels) with the spread

ic_recent_trades

Latest public trades, newest first (1 to 50; every order-book exchange except OMPFinex)

ic_candles

OHLC candles, 15m / 1h / 4h / 1d, up to 100 (order-book exchanges, Aban Tether for USDT/IRT)

ic_top_movers

Biggest 24h gainers or losers on one exchange, illiquid coins filtered out (up to 25)

ic_best_deal

Ranks exchanges by what a buy or sell of a given size gets, with order-book slippage and fill

ic_arbitrage

Biggest cross-exchange price gaps over all coins, buy at the lowest ask and sell at the highest bid

ic_fees

Trading fees per exchange and, for one coin, withdrawal networks, fees and minimums, with the cheapest per network

ic_market_overview

Tether rate and major coins in one call: median Toman price, cheapest and dearest exchange, median change

How it works

  AI agent  (Claude, Cursor, Copilot, ...)
      │
      │  MCP over stdio
      ▼
  iran-crypto-mcp  (runs on your machine)
      │
      │  HTTPS
      └──────▶  public market-data endpoints of the 12 exchanges
  • Runs locally and calls the public endpoints the exchanges' own websites use. No hosted server in between, no API key.

  • Uses a Chrome-like HTTP client and sends each exchange's own Origin and Referer, like its website does.

  • Answers are cached for 15 seconds and at most 2 requests run at once. Failed GET requests are retried.

  • Read-only: it never calls account, order or trading endpoints.

Good to know

  • Units are normalized. IRT prices are Toman (Rial exchanges are divided by 10); USDT prices are unchanged. The unit is in the field name: price_toman, price_usdt.

  • name_fa on every exchange row is the exchange's own Persian name.

  • One exchange can fail alone. ic_compare_price reports a failing exchange under errors and still compares the rest. HTTP 403 means that exchange's CDN refuses your network. Set IRAN_CRYPTO_MCP_PROXY to an Iranian HTTP proxy and try again.

  • A spread is not always real. Quotes differ for real reasons (fees, liquidity, a stale last trade). Check the order book on both exchanges before acting on it.

  • Reply sizes are capped to stay under about 15 KB: order books 20 levels, trades 50, candles 100, movers 25.

  • Top movers skip coins below a 24h volume floor (default 100,000,000 Toman or 10,000 USDT; set min_volume to change it). Tabdeal publishes no volume, so its coins are not filtered.

  • Prices are informational. They are live-ish (15 s cache), not a quote you can trade at.

FAQ

iran-crypto-mcp is an unofficial MCP server with 8 read-only tools over the public endpoints of Nobitex, Wallex, Bitpin, Ramzinex, Tabdeal, OMPFinex, Exir, Bit24, Aban Tether, Kifpool, OK-EX and Tetherland. It needs no API key.

Add the server (see Quick start) and ask, for example, "compare BTC on all Iranian exchanges in Toman". The agent calls ic_compare_price, which returns every exchange's price in Toman, cheapest first, with the spread.

Some exchanges publish Rial and others Toman (1 Toman = 10 Rial). This server converts everything to Toman. If you still see a big gap, it is a real difference or a stale quote: check the order book.

No. It has no login or keys and never calls account, order or trading endpoints. It only reads public market data.

That exchange's CDN refuses requests from your network. The other exchanges still work. Set IRAN_CRYPTO_MCP_PROXY to an HTTP proxy with an Iranian exit and retry. System proxy variables are ignored on purpose.

Bitpin, Tabdeal, OMPFinex, Exir, Bit24 and Tetherland publish no bid/ask in their ticker feeds, and Tabdeal publishes no volume. Call ic_get_orderbook for the best bid and ask. The brokers (Aban Tether, Kifpool, OK-EX, Tetherland) have no public order book.

Instant-swap brokers publish no price history of their own (Aban Tether only for USDT/IRT). Every order-book exchange has candles. Nobitex refuses USDT/IRT candles; use Wallex for those.

Use the full path to uvx (where uvx on Windows, which uvx on macOS/Linux) as command.

Configuration

Variable

Default

Meaning

IRAN_CRYPTO_MCP_PROXY

unset

Optional HTTP proxy URL for exchange requests; system proxy settings are ignored. A comma-separated list is used one at a time: the next proxy takes over when one is blocked or fails to connect

فارسی

iran-crypto-mcp یک سرور MCP غیررسمی و فقط‌خواندنی برای داده‌های عمومی بازار صرافی‌های ارز دیجیتال ایرانی است: نوبیتکس، والکس، بیت‌پین، رمزینکس، تبدیل، او ام پی فینکس و اکسیر. به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد قیمت یک ارز را در همه صرافی‌ها به تومان مقایسه کند.

چه کارهایی می‌کند

  • مقایسه قیمت صرافی‌ها: قیمت بیت‌کوین، تتر و بقیه ارزها در هر هفت صرافی با یک درخواست، از ارزان به گران، همراه با اختلاف قیمت.

  • قیمت تتر و بیت‌کوین به تومان: قیمت صرافی‌هایی که ریال می‌دهند تقسیم بر ۱۰ می‌شود، پس همه عددها قابل مقایسه‌اند.

  • دفتر سفارش (تا ۲۰ سطح)، معاملات اخیر و کندل‌ها (۱۵ دقیقه، ۱ ساعت، ۴ ساعت، روزانه؛ فقط نوبیتکس و والکس).

  • بیشترین رشد و افت ۲۴ ساعته هر صرافی، بدون ارزهای کم‌حجم.

نکته‌ها

  • فقط داده عمومی بازار؛ بدون ورود به حساب، کلید API، خرید و فروش.

  • اگر یک صرافی خطای ۴۰۳ بدهد، یعنی شبکه شما را نمی‌پذیرد؛ بقیه صرافی‌ها کار می‌کنند. متغیر IRAN_CRYPTO_MCP_PROXY را روی یک پروکسی HTTP ایرانی بگذارید.

  • اختلاف قیمت همیشه فرصت واقعی نیست؛ قبل از هر تصمیم دفتر سفارش را ببینید.

  • قیمت‌ها ۱۵ ثانیه نگه داشته می‌شوند و توصیه مالی نیستند.

نصب (اول uv را نصب کنید). در Claude Code:

claude mcp add iran-crypto -- uvx iran-crypto-mcp

در Claude Desktop، Cursor و بقیه برنامه‌ها همان تنظیم بخش Quick start را بگذارید.

نمونه پرسش‌ها

  • «قیمت بیت‌کوین را در همه صرافی‌ها به تومان مقایسه کن.»

  • «تتر در کدام صرافی ارزان‌تر است؟»

  • «دفتر سفارش اتریوم در نوبیتکس را نشان بده.»

  • «بیشترین رشد ۲۴ ساعته در والکس چیست؟»

Development

git clone https://github.com/sepehr071/iran-crypto-mcp && cd iran-crypto-mcp
uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q          # offline unit tests
uv run python -m pytest -m live -q  # calls the real exchange APIs
uv build

Tools live in src/iran_crypto_mcp/markets.py, the per-exchange adapters in exchanges.py. Issues and PRs are welcome. Releases: bump the version in pyproject.toml and server.json, then push a v* tag.

Disclaimer

Unofficial and not affiliated with or endorsed by any exchange. It reads public market data only: no keys, no account access, no trading. Prices are informational, not financial advice, and the endpoints can change without notice.

Author

Built and maintained by Sepehr Radmard (سپهر رادمرد). Connect on LinkedIn or follow @sepehr071 on GitHub for more MCP servers for Iranian websites, all listed in iran-mcp. If this saves you time, a star on the repo helps other people find it.

License

MIT

Available Tools

12 tools
ic_arbitrageArbitrage ScannerA
Read-onlyIdempotent

Scan every coin on every exchange for the biggest price gaps: buy where it is cheapest, sell where it is dearest.

Buy legs use the ask and sell legs the bid; basis: last marks an exchange that publishes only a last price, so the gap may not be executable. Gaps over 15% are dropped: they are almost always stale, illiquid markets or two different tokens sharing one symbol. Fees, withdrawal time and network costs are not included: confirm with ic_get_orderbook and ic_fees.

NameRequiredDescriptionDefault
limitNoOpportunities to return (1-25)
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
min_gap_pctNoSmallest gap to report, in percent
min_exchangesNoOnly coins listed on at least this many exchanges (filters obscure tokens)
executable_onlyNoOnly real bid/ask prices (default). False also uses exchanges that publish just a last price

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only safety profile, and the description adds substantial context beyond them: the ask/bid leg convention, the meaning of `basis: last` (gap may not be executable), the silent dropping of gaps over 15% with the reason (stale/illiquid/symbol collisions), and the exclusion of fees, withdrawal time and network costs. These are exactly the caveats that would otherwise cause an agent to over-trust the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight paragraphs: what it does, how it computes and what it discards, then what it omits. The core purpose is front-loaded in the first clause and every subsequent sentence carries a distinct caveat with no repetition of schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter read-only scanner with no output schema, the definition covers method, data-quality guards and follow-up tools well. The only real gap is that the return shape (fields per opportunity, ordering, whether the gap is expressed in percent) is left for the agent to discover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the semantics behind the fields — why `executable_only` matters (last-price-only exchanges produce non-executable gaps) and why 15% is a hard ceiling on `min_gap_pct`. `limit`, `quote` and `min_exchanges` are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'scan every coin on every exchange for the biggest price gaps' — and immediately explains the mechanic (buy cheapest, sell dearest). This distinguishes it from ticker/orderbook siblings that return single-venue data rather than cross-venue spreads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent onward: 'confirm with ic_get_orderbook and ic_fees', which tells it this tool is a screening step, not an execution step. It does not, however, contrast against close siblings like ic_best_deal or ic_compare_price, so the agent must infer when this scanning tool is preferable to those.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_best_dealBest Deal For An AmountA
Read-onlyIdempotent

Rank every exchange by what a buy or sell of a given size actually gets, with order-book slippage.

Answers "where do I get the most USDT for 50M Toman?" or "where should I sell 0.2 BTC?". Order-book exchanges are walked level by level (filled_pct < 100 means the visible book is too thin); brokers fill at their own buy/sell price; source: listed_price (Tetherland) is a single indicative price, ranked last. receive is coins for a buy and Toman/USDT for a sell. Trading and withdrawal fees are not deducted: check ic_fees before acting. Prices move every second; this is a snapshot, not a quote.

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
sideYes'buy' the coin or 'sell' it
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
amountYesbuy: how much Toman (or USDT) to spend, e.g. 50000000. sell: how many coins to sell, e.g. 0.2

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the read-only annotations: order books are walked level by level, `filled_pct < 100` signals thin visible liquidity, brokers fill at their own price, `source: listed_price` is a single indicative price ranked last, and results are snapshots rather than quotes. It also warns that trading and withdrawal fees are excluded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and example questions are front-loaded, followed by precise behavioral caveats. Every sentence carries useful operational meaning: slippage mechanics, broker behavior, listed-price ranking, fee exclusion, and snapshot warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explains the key return semantics (`receive` meaning for buy vs sell), liquidity ranking caveats, and the crucial fee/snapshot limitations. This gives an agent enough context to invoke and interpret the tool responsibly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents `coin`, `side`, `quote`, and `amount` including examples and enums. The description reinforces `amount` semantics through examples and explains what `receive` means, but does not add materially new parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: ranking exchanges by effective buy/sell outcome for a given size, including order-book slippage. It gives concrete example questions and distinguishes the result type (`receive`) for buys vs sells, so an agent can tell exactly what the tool computes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when to use it via example questions and explicitly warns to check `ic_fees` before acting because fees are not deducted. It does not explicitly contrast with sibling tools like `ic_compare_price` or `ic_arbitrage`, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_candlesPrice CandlesA
Read-onlyIdempotent

Get recent OHLC candles of one coin on one exchange, oldest first.

Rows are [time, open, high, low, close, volume in coin]; prices are Toman (IRT) or USDT. Nobitex refuses the USDT/IRT candles (use Wallex for those).

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
limitNoMost recent candles to return (1-100)
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id; ic_list_exchanges shows which have candles (candles: true)
intervalNoCandle size1h

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real value beyond that: ordering ('oldest first'), the row layout, and a known per-exchange failure mode. It still says nothing about how far back the history reaches, empty/missing-candle behavior, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short lines: purpose and ordering first, then return layout, then the exchange caveat. No filler, and the most decision-relevant constraint is not buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the return-shape burden (row order and column meanings, price units), which is exactly what an agent needs to parse the result. Minor gaps remain around history depth and what happens for unsupported coin/exchange pairs beyond the one Nobitex case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns more by tying the exchange and quote parameters together ('Nobitex refuses the USDT/IRT candles') and by clarifying that prices are denominated in Toman or USDT depending on the quote. It does not touch the limit/interval interplay ('most recent N candles, then returned oldest first'), which is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get recent OHLC candles'), plus the scope constraint ('one coin on one exchange'), which cleanly separates it from ic_recent_trades, ic_get_ticker and ic_get_orderbook without needing to name them. The description alone tells an agent exactly what data comes back.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one explicit routing rule — Nobitex will not serve USDT/IRT candles, use Wallex instead — which is a concrete when/when-not for an exchange/quote combination. It does not explain when to prefer candles over the ticker or orderbook siblings, so it stops short of full alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_compare_priceCompare Coin PriceA
Read-onlyIdempotent

Compare one coin's price on every supported exchange in one call, cheapest first, with the spread.

Prices are normalized to Toman (IRT) or USDT. Use coin='USDT' with quote='IRT' for the Tether rate in Toman. An exchange that is down, blocks the caller's network or does not list the coin appears under errors; the rest are still compared. Always tell the user which exchanges are missing and why. To check a spread is real, call ic_get_orderbook on the cheapest and the priciest exchange next.

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond annotations: prices are normalized to Toman or USDT, and exchanges that are down, network-blocked, or unlisted appear under an `errors` key while others still compare. It does not discuss rate limits or return shape in more detail, but the added failure semantics are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and structured into a short paragraph plus two practical notes. Every sentence carries operational value, though the schema already documents the coin/quote symbols, so the 'Use coin=USDT...' sentence is marginally redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain return behavior; it does so by stating results are cheapest-first with spread and that failures appear under `errors`. Annotations cover safety, and the description covers failure modes and verification next steps, making it largely complete for a two-parameter read tool. Minor gaps remain around exact response fields and pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema by explaining the non-obvious combination 'Use coin=\'USDT\' with quote=\'IRT\' for the Tether rate in Toman,' which clarifies an edge case in how the enum and coin symbol interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource combination ('Compare one coin's price on every supported exchange in one call') and adds output characteristics ('cheapest first, with the spread'). It is clearly distinguishable from siblings like ic_get_ticker and ic_get_orderbook, which it names explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use this tool (cross-exchange price comparison) and directs the agent to a specific alternative for verification: 'call ic_get_orderbook on the cheapest and the priciest exchange.' It also instructs the agent to always report missing exchanges and why, giving clear post-call guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_feesFees And NetworksA
Read-onlyIdempotent

Compare trading fees and, for one coin, each exchange's withdrawal networks, fees and minimums.

Answers "which exchange has the cheapest USDT withdrawal on TRC20?" or "what is the trading fee on Wallex?". Trading fees are the entry level (level 1) for Toman markets, in percent; volume tiers lower them. Withdrawal fees and minimums are in coin units. withdraw: false means that network is closed right now. cheapest names the lowest open withdrawal fee per network. Exchanges that publish no fee data are listed under missing.

NameRequiredDescriptionDefault
coinNoCoin to compare withdrawals for, e.g. 'USDT'. Omit for trading fees only
networkNoOnly this network, e.g. 'TRC20', 'BEP20', 'ERC20', 'TON' (needs coin)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds substantial context beyond annotations: fee units (percent for trading fees, coin units for withdrawals), what `withdraw: false` means, what `cheapest` denotes, and how exchanges with no data appear under `missing`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, followed by examples and key output semantics. Every sentence earns its place by clarifying either usage or how to interpret the results, with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a comparison-oriented tool, the description supplies the critical return semantics: units, level-1 fee scope, closed networks, cheapest open fee per network, and missing data. It covers enough for an agent to call and interpret the tool without further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that `coin` enables withdrawal comparison and that omitting it returns trading fees only, but it adds little parameter-specific detail beyond what the schema provides, fitting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Compare trading fees and, for one coin, each exchange's withdrawal networks, fees and minimums.' It clearly distinguishes the tool from siblings like ticker, orderbook, or price comparison by focusing on fee and network data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete example questions that illustrate when to use the tool, such as 'which exchange has the cheapest USDT withdrawal on TRC20?' It does not explicitly state when not to use it or name alternative tools, but the examples give clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_get_orderbookGet Order BookA
Read-onlyIdempotent

Get the top bids and asks of one coin's order book on one exchange, with the spread.

Levels are [price, quantity in coin], best first. Prices are Toman (IRT) or USDT. Not on the instant-swap brokers (Aban Tether, Kifpool, OK-EX, Tetherland).

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
depthNoLevels per side (1-20)
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id from ic_list_exchanges, e.g. 'nobitex'

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuine behavioral context beyond that: level format is [price, quantity in coin], ordering is best-first, and quotes are Toman or USDT. It doesn't say whether the book is a live snapshot or cached, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then the data shape, then the exclusion. Each line carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially compensates by explaining level element order, ordering, and price denomination. It omits other plausible return fields (timestamps, exchange echo, spread units), which an agent may still want before parsing results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so coin, depth, quote, and exchange are all documented in structured form. The description only reinforces the quote-currency semantics already stated in the schema and adds nothing about depth; baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: top bids/asks for one coin on one exchange, plus the spread. An agent can distinguish it from ic_candles or ic_recent_trades by the resource itself, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Not on the instant-swap brokers (Aban Tether, Kifpool, OK-EX, Tetherland)" gives a concrete when-not constraint that saves a failed call. It stops short of routing to alternatives such as ic_get_ticker or ic_best_deal when only a last price is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_get_tickerGet TickerA
Read-onlyIdempotent

Get the live price, best bid and ask, 24h range, change and volume of one coin on one exchange.

Bid and ask are missing for Bitpin, Tabdeal, OMPFinex and Exir; volume is missing for Tabdeal. Use ic_get_orderbook for the best bid and ask, ic_candles for price history. A coin the exchange does not list is an error: check the symbol with ic_list_markets.

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id from ic_list_exchanges, e.g. 'nobitex'

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description layers on non-obvious behavioral facts: bid/ask are unavailable for Bitpin, Tabdeal, OMPFinex and Exir, and volume is missing for Tabdeal. It also defines error behavior for unlisted symbols, which an agent cannot infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: purpose first, then data caveats plus alternatives, then error handling. No filler, and the scoping sentence is front-loaded where an agent will read it first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly enumerates the returned fields and adds per-exchange availability caveats and error semantics, which is most of what an agent needs. The omission of the quote-currency distinction is the one meaningful gap for a multi-market price tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description clarifies the coin/exchange pairing and the consequence of an invalid symbol, but never mentions the 'quote' parameter (IRT vs USDT markets), which materially changes the meaning of the returned price and is the one semantic gap left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource (live price/bid/ask/24h range/change/volume), and scope (one coin on one exchange), enumerating exactly what is returned. It also names sibling tools (ic_get_orderbook, ic_candles, ic_list_markets) so the agent can distinguish it without inspecting other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use ic_get_orderbook for best bid/ask and ic_candles for price history, and treat an unlisted coin as an error to be resolved via ic_list_markets. Both the when-to-use and the failure path are spelled out rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_list_exchangesList ExchangesA
Read-onlyIdempotent

List the supported Iranian crypto exchanges, their native price unit and what each can answer.

Start here. Every price this server returns is already converted to Toman (IRT markets) or is in USDT.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds meaningful domain context beyond annotations: that every returned price is already converted to Toman (IRT markets) or is in USDT, which is important for interpreting data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with the core purpose front-loaded and no wasted text. The guidance to start here and the unit-conversion note are both immediately relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity of a zero-parameter discovery tool, plus rich annotations and no output schema, the description provides everything an agent needs: what the tool lists, that it is a starting point, and how to interpret returned prices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to explain. Baseline 4 is appropriate because the schema is empty and the description correctly does not invent parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('List the supported Iranian crypto exchanges') and states exactly what information is included: native price unit and what each exchange can answer. This clearly distinguishes it from sibling tools like ic_list_markets or ic_get_ticker, which operate on markets/prices rather than exchange metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Start here' gives explicit when-to-use guidance for this discovery tool. It does not name alternatives or exclusions, but the context of listing exchanges makes the entry-point role clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_list_marketsList MarketsA
Read-onlyIdempotent

List the coins an exchange trades against Toman (IRT) or USDT.

Use it to check a coin symbol before calling the other tools.

NameRequiredDescriptionDefault
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id from ic_list_exchanges, e.g. 'nobitex'

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds only the sequencing hint about validating symbols first; it says nothing about return shape, result size, or whether markets are cached/refreshed, so it adds modest value beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero redundancy; the core purpose is front-loaded and the workflow hint follows immediately. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup with no output schema and full annotation coverage, the description suffices to call it correctly. A brief note on what the result contains (symbols only vs. pairs with metadata) would close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters enum-constrained and documented, including the IRT default. The description restates the quote-currency dimension ('against Toman (IRT) or USDT') but adds no format or validation detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the coins an exchange trades against Toman (IRT) or USDT') with scope narrowed to two quote currencies. This is clearly distinguishable from sibling market-data tools like ic_get_ticker or ic_get_orderbook, which retrieve prices rather than symbol inventories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it to 'check a coin symbol before calling the other tools,' which gives an agent a concrete workflow trigger. It does not name the closest alternative (ic_list_exchanges) in the description text, nor state when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_market_overviewMarket OverviewA
Read-onlyIdempotent

Get the key Iranian crypto rates in one call: the Tether rate in Toman and major coins across all exchanges.

For each coin: the median Toman price over the exchanges that list it, the cheapest and dearest exchange, the median 24h change and how many exchanges answered. Start here for "what is the dollar/Tether rate" or "how is the market today". Use ic_compare_price for every exchange's price of one coin.

NameRequiredDescriptionDefault
coinsNoCoins to summarize (max 10). Default: USDT, BTC, ETH, BNB, TRX, SOL, XRP, DOGE

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe, idempotent, open-world read, so the description doesn't need to repeat that. It does add genuinely new behavioral detail: per coin it returns the median Toman price, cheapest and dearest exchange, median 24h change and the number of responding exchanges, which tells the agent this is a cross-exchange aggregate with sampling rather than a single quote. No mention of rate limits, caching or partial-exchange failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, then the returned fields, then the sibling routing. Every sentence carries information the agent needs, with no filler or repetition of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by enumerating exactly what each coin's result contains. Combined with the safe-read annotations and a fully documented parameter, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the coins parameter already documents its max of 10 and default list, so the description adds nothing about the parameter. Baseline 3 is appropriate — the description neither explains nor misrepresents the single optional filter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the key Iranian crypto rates in one call') plus concrete scope: Tether in Toman and major coins aggregated across all exchanges. It explicitly distinguishes itself from ic_compare_price, so an agent can separate the aggregate view from the per-exchange lookup without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear entry-point guidance ('Start here for "what is the dollar/Tether rate" or "how is the market today"') and names one alternative with its selection condition (ic_compare_price for every exchange's price of one coin). It does not address the other siblings such as ic_top_movers, ic_best_deal or ic_list_markets, so the routing is helpful but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_recent_tradesRecent TradesA
Read-onlyIdempotent

Get the most recent public trades of one coin on one exchange, newest first.

Order-book exchanges except OMPFinex. side is the taker side when the exchange reports it.

NameRequiredDescriptionDefault
coinYesCoin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON'
limitNoTrades to return (1-50)
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id from ic_list_exchanges, e.g. 'nobitex'

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe, read-only, idempotent operation, so the description mainly needs to add semantic context. It does so by disclosing newest-first ordering, the OMPFinex exclusion, and that `side` reflects the taker side when reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is short and front-loads the core purpose efficiently. The second sentence is terse and slightly cryptic, especially the fragment 'Order-book exchanges except OMPFinex', but there is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only market-data retrieval tool with full schema coverage and strong annotations, the description gives enough context to invoke it correctly. It does not describe the shape of returned trade records, but that is a relatively minor gap for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with every parameter documented, including enums and defaults. The description does not add much parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get the most recent public trades for one coin on one exchange, newest first. It also makes the scope narrow enough to distinguish individual trade prints from sibling market-data tools like orderbook or candles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the precise purpose, and the description adds a coverage constraint: order-book exchanges except OMPFinex. However, it does not explicitly say when to use this instead of ic_get_orderbook, ic_candles, or ic_get_ticker.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ic_top_moversTop MoversA
Read-onlyIdempotent

List the biggest 24h gainers or losers on one exchange, with illiquid coins filtered out.

Tabdeal publishes no volume, so its coins are not filtered by volume. Pass a mover's coin to ic_get_ticker or ic_compare_price for detail.

NameRequiredDescriptionDefault
limitNoCoins to return (1-25)
quoteNoQuote currency: 'IRT' = Toman market (default), 'USDT' = Tether marketIRT
exchangeYesExchange id from ic_list_exchanges, e.g. 'nobitex'
directionNo'gainers' or 'losers' over 24hgainers
min_volumeNoSkip coins with less 24h volume than this, in Toman (IRT) or USDT. Default 100,000,000 Toman or 10,000 USDT. Coins with unknown volume are kept.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: illiquid coins are filtered out, and Tabdeal is exempt from volume filtering because it publishes no volume. That exception is exactly the kind of context annotations can't carry. It doesn't state how 'biggest' is measured (percent vs absolute) or the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no waste. The scope statement comes first, the filtering caveat second, the drill-down routing last. Every sentence carries information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the reference to a mover's `coin` field implicitly reveals the response shape and the follow-up path. The remaining gap is that ranking metric (percent change over 24h vs absolute) and sort order aren't stated, which matters for interpreting results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents limit, quote, exchange, direction, and min_volume with enums and defaults. The description's filtering sentence adds context for min_volume's default exclusion behavior and the Tabdeal exception, but nothing about quote-market semantics or limit effects beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: list the biggest 24h gainers or losers on one exchange. The illiquid-filter caveat sharpens the scope. It doesn't explicitly contrast with ic_market_overview, the closest sibling for market-wide summaries, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent forward: pass a mover's `coin` to ic_get_ticker or ic_compare_price for detail, which defines the drill-down workflow clearly. Missing an explicit 'when not to use' (e.g., cross-exchange comparison belongs to ic_market_overview or ic_arbitrage).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.3.0
    • Addedic_arbitrage
    • Addedic_best_deal
    • Changedic_candles2 fields changed
      • changedInput schema / properties / exchange / description
        Previous value: -"'nobitex' or 'wallex' (the only exchanges with candles)"New value: +"Exchange id; ic_list_exchanges shows which have candles (candles: true)"
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
    • Addedic_fees
    • Changedic_get_orderbook1 field changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex",
        -  "bitpin",
        -  "ramzinex",
        -  "tabdeal",
        -  "ompfinex",
        -  "exir"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
    • Changedic_get_ticker1 field changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex",
        -  "bitpin",
        -  "ramzinex",
        -  "tabdeal",
        -  "ompfinex",
        -  "exir"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
    • Changedic_list_markets1 field changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex",
        -  "bitpin",
        -  "ramzinex",
        -  "tabdeal",
        -  "ompfinex",
        -  "exir"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
    • Addedic_market_overview
    • Changedic_recent_trades1 field changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex",
        -  "bitpin",
        -  "ramzinex",
        -  "tabdeal",
        -  "ompfinex",
        -  "exir"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
    • Changedic_top_movers1 field changed
      • changedInput schema / properties / exchange / enum
        Previous value: -[
        -  "nobitex",
        -  "wallex",
        -  "bitpin",
        -  "ramzinex",
        -  "tabdeal",
        -  "ompfinex",
        -  "exir"
        -]New value: +[
        +  "nobitex",
        +  "wallex",
        +  "bitpin",
        +  "ramzinex",
        +  "tabdeal",
        +  "ompfinex",
        +  "exir",
        +  "abantether",
        +  "kifpool",
        +  "okex",
        +  "tetherland",
        +  "bit24"
        +]
  2. 8 tool updatesv0.1.2
    • First observedic_candles
    • First observedic_compare_price
    • First observedic_get_orderbook
    • First observedic_get_ticker
    • First observedic_list_exchanges
    • First observedic_list_markets
    • First observedic_recent_trades
    • First observedic_top_movers

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation4/5

Several tools surface prices (ic_get_ticker, ic_compare_price, ic_market_overview, ic_top_movers, ic_best_deal, ic_arbitrage), but descriptions clearly scope each: one coin/one exchange, one coin/all exchanges, market-wide snapshot, and execution-aware ranking. Overlap exists but cross-references make the boundaries explicit, so misselection risk is low.

Naming Consistency4/5

All tools share the ic_ prefix and readable snake_case, giving a predictable namespace. Minor inconsistency in that some are verb-led (ic_get_ticker, ic_list_markets) while others are noun phrases (ic_recent_trades, ic_candles, ic_fees), but the pattern is still clear.

Tool Count5/5

12 tools for a market-data aggregator is well-scoped, each covering a distinct data need (markets, ticker, orderbook, trades, candles, movers, execution, arbitrage, overview, fees, price compare, exchanges). No redundancy or bloat.

Completeness5/5

As a read-only Iranian crypto data server, the surface covers discovery (exchanges/markets), live prices, order books, trades, OHLC, fee/withdrawal data, cross-exchange comparison and execution-aware ranking. Lifecycle for a data product is effectively complete with no dead ends.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides live cryptocurrency market data from over 100 exchanges, enabling AI agents to fetch prices, order books, funding rates, and more for trading analysis and arbitrage opportunities.
    13
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Connects AI assistants to the BitPin Iranian cryptocurrency exchange API, enabling users to inspect market prices and orderbooks, place and cancel trading orders, view wallet balances, and manage deposits and withdrawals. It supports public market data without API keys, authenticated trading and wallet operations, and Persian-language inputs for currencies, market pairs, order sides, and numerals.
    26
    40 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to read Tehran Stock Exchange and Iran Fara Bourse market data—quotes, top movers, order books, price history, sector indices, and real vs legal trading—through read-only tools. Requires no API key, returning compact JSON in Rial directly to Claude, Cursor, or Copilot.
    8
    79 PyPI
    5
    MIT