Skip to main content
Glama
sepehr071

iran-crypto-mcp

by sepehr071

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

Compare any coin across seven 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 and Exir: prices, order books, recent trades, candles and top movers.

PyPI Python CI License: MIT

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 7 Iranian crypto exchanges (Nobitex, Wallex, Bitpin, Ramzinex, Tabdeal, OMPFinex, Exir).

  • 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 awesome-iran-mcp catalog.

Related MCP server: Crypto Market Data 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 seven 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 Nobitex and Wallex

  • 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

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

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

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

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

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

no

Ramzinex

رمزینکس

ramzinex.com

Rial

full

yes

yes

no

Tabdeal

تبدیل

tabdeal.org

Toman

no bid/ask, no volume

yes

yes

no

OMPFinex

او ام پی فینکس

ompfinex.com

Rial

no bid/ask

yes

no

no

Exir

اکسیر

exir.io

Toman

no bid/ask

yes

yes

no

  • All seven support top movers and 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.

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; not on OMPFinex)

ic_candles

OHLC candles, 15m / 1h / 4h / 1d, up to 100 (Nobitex and Wallex)

ic_top_movers

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

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 7 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 and Exir. 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 and Exir publish no bid/ask in their ticker feeds, and Tabdeal publishes no volume. Call ic_get_orderbook for the best bid and ask.

Only Nobitex and Wallex publish candles through public endpoints this server uses. 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 awesome-iran-mcp. If this saves you time, a star on the repo helps other people find it.

License

MIT

Available Tools

8 tools
ic_candlesPrice CandlesA
Read-onlyIdempotent

Get recent OHLC candles of one coin from Nobitex or Wallex, 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).

ParametersJSON Schema
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
exchangeYes'nobitex' or 'wallex' (the only exchanges with candles)
intervalNoCandle size1h

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, so the safety profile is covered and the bar is lower. The description still adds valuable context the annotations cannot: the row layout, oldest-first ordering, price denomination, and an exchange-specific failure mode (Nobitex refuses USDT/IRT). Pagination, rate limits and error shape are unaddressed, keeping it at 4.

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 the core purpose, then the return shape, then the exchange caveat. No filler and nothing repeated that is already 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?

With no output schema, the description correctly compensates by specifying the candle row format and ordering, which is essential for interpretation. It is missing only secondary information such as error behavior for invalid coin/exchange combinations or rate limits.

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 enum/defaults are fully documented in the schema, so baseline 3 applies. The description's mention of Toman/USDT pricing and the 'USDT = Tether in Toman' nuance largely restates what the schema already says for coin and quote.

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 of one coin') plus scope constraints (two named exchanges, oldest-first ordering). The resource is clearly distinct from sibling tools like ic_get_ticker, ic_get_orderbook and ic_recent_trades, so an agent can route correctly without opening the schema.

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 a concrete selection rule: Nobitex refuses USDT/IRT candles, so use Wallex for those. That is real when-to-use guidance, but there are no explicit exclusions against the sibling tools (e.g. when to prefer ic_get_ticker or ic_recent_trades instead).

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.

ParametersJSON Schema
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_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.

ParametersJSON Schema
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.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: the level tuple format, ordering ('best first'), and the price denomination (IRT or USDT). It does not mention the depth cap, but the schema does.

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, front-loaded with the core action, followed by the one non-obvious output detail. No filler.

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, so the description must carry return-format information; it explains the level tuple and spread, which is the essential payload. A brief note on the overall response shape (e.g. bids/asks arrays) would close the remaining gap.

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 clarifying the ambiguous 'quantity in coin' meaning of the second level element and tying price units to the quote currency, which the schema does not spell out at the level-tuple level.

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 with scope: top bids and asks for one coin on one exchange, plus the spread. This is clearly distinct from sibling tools like ic_get_ticker, ic_recent_trades, and ic_candles, which return different data shapes.

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?

The description implies usage (when you need depth/liquidity or spread for a market) but never states when to prefer it over ic_get_ticker or ic_compare_price, nor any prerequisites such as first resolving the exchange id via ic_list_exchanges. Usage is inferable but not explicit.

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 (Nobitex, Wallex) for price history. A coin the exchange does not list is an error: check the symbol with ic_list_markets.

ParametersJSON Schema
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
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent), so the description correctly spends its space on behavioral quirks instead: missing bid/ask for Bitpin, Tabdeal, OMPFinex and Exir, missing volume for Tabdeal, and the fact that an unlisted coin is an error rather than an empty result. It doesn't mention rate limits or response units, keeping 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: what it returns first, then data caveats, then error handling and alternatives. No sentence is filler, and the most decision-relevant information (the returned fields) is front-loaded.

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 usefully enumerates the returned fields and flags which are absent on which exchange, which is what an agent needs to avoid misinterpreting nulls. Only minor gaps remain, such as not clarifying the quote-currency interaction with returned values.

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 baseline is 3; the description earns above it by adding the constraint that coin symbols are exchange-specific and must be validated with ic_list_markets. The quote parameter (IRT vs USDT) is left entirely to the schema, so it isn't fully additive.

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) and resource (ticker) plus the exact scope: one coin, one exchange, with enumerated fields (price, best bid/ask, 24h range, change, volume). This clearly differentiates it from siblings like ic_get_orderbook and ic_candles without needing their 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 to alternatives with conditions: ic_get_orderbook when bid/ask is unavailable, ic_candles for price history, and ic_list_markets when a coin isn't listed. It also tells the agent which exchanges lack which data, which is an unusual and useful selection constraint.

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.

ParametersJSON Schema
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.

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

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare this tool as read-only, idempotent, non-destructive, and open-world. The description adds useful scoping and pre-call validation context, but it does not describe return behavior, rate limits, authentication, or other operational traits beyond the annotations.

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, front-loaded with the core purpose and followed by a practical usage note. 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 list tool, the description covers what it does and when to use it. It does not clarify the exact return shape or relationship to ic_list_exchanges, but annotations and the schema provide enough surrounding 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% and both parameters have enums with descriptions. The description mentions IRT/USDT, but this duplicates schema information rather than adding new meaning, so the baseline of 3 applies.

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?

The description states a specific verb and resource: list the coins an exchange trades against IRT or USDT. This is clear enough to distinguish it from general exchange listing tools, but it does not explicitly name or differentiate itself from siblings such as ic_list_exchanges.

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 gives clear usage context: use it to check a coin symbol before calling other tools. It does not provide explicit when-not conditions or name alternative tools, but the intended workflow is clear.

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.

Not available on OMPFinex. side is the taker side when the exchange reports it.

ParametersJSON Schema
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.8/5.0
Behavior4/5

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

Annotations already declare the safe read-only, idempotent, non-destructive profile, and the description adds meaningful behavior: results are public, newest first, and unavailable on OMPFinex. It also clarifies the `side` semantics when reported, though it omits return-shape and rate-limit details.

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 two compact sentences, front-loads the core operation, and includes only relevant caveats. Every sentence carries useful 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 read-only market-data tool with rich parameter schemas and clear annotations, the definition covers the essentials: scope, ordering, availability, and `side` semantics. It could be slightly more complete about the returned trade fields or pagination behavior, especially since no output schema exists.

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 parameters themselves are already well documented. The description adds little parameter-level meaning beyond restating the one-coin/one-exchange scope, and its `side` note appears to describe output rather than an input parameter.

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?

The description states a specific verb and resource: get recent public trades for one coin on one exchange, with newest-first ordering. It is clearly distinct from order-book and candle-style siblings in substance, but it does not explicitly differentiate itself from them by name.

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?

It gives one useful usage constraint by excluding OMPFinex, but it does not explain when to use this instead of siblings such as ic_get_orderbook, ic_candles, or ic_get_ticker. The intended use is implied rather than explicitly routed.

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.

ParametersJSON Schema
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.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds non-obvious behavioral context the schema cannot: Tabdeal publishes no volume, so its coins bypass the volume filter entirely. That is a genuine disclosure about result composition, though it says nothing about ordering ties or response 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?

Two short sentences: the core behavior is front-loaded, and the second sentence is a genuinely useful operational note plus next-step pointer. No filler or restatement of the tool name.

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 would ideally hint at the returned fields beyond `coin`, but the follow-up instruction implies a per-coin list with identifiers, which is enough to plan a call. All five parameters are documented in the schema, and the volume-filter caveat closes the main operational 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 description coverage is 100%, with enums and defaults on exchange/direction/quote/limit/min_volume, so the schema does the heavy lifting. The description only reinforces the filtering concept and the Tabdeal carve-out rather than adding syntax or units beyond what the schema already states.

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 biggest 24h gainers or losers on one exchange') with an explicit scoping qualifier ('illiquid coins filtered out'). This is clearly separable from siblings like ic_list_markets (all markets) and ic_candles (history) without opening any schema.

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?

Provides a clear follow-up path — pass a mover's `coin` to ic_get_ticker or ic_compare_price for detail — which routes the agent to the right siblings. It does not state when to prefer this over ic_list_markets or ic_candles for a broader/historical view, so it falls short of full when/when-not guidance.

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. 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.1/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a distinct role: exchange listing, market listing, cross-exchange comparison, single-exchange ticker, order book, recent trades, candles, and top movers. The descriptions explicitly clarify overlapping-seeming cases such as ticker vs. compare vs. order book, so an agent can select correctly.

Naming Consistency4/5

All tools use the same `ic_` prefix and snake_case, which is highly consistent. A few names are noun phrases (`ic_recent_trades`, `ic_candles`, `ic_top_movers`) rather than strict verb_noun, but the convention remains predictable.

Tool Count5/5

Eight tools is well-scoped for a read-only crypto market-data server. Every tool covers a meaningful operation, and there are no redundant or filler tools.

Completeness4/5

The surface covers the main market-data workflow: discover exchanges and markets, compare prices, inspect tickers, order books, trades, candles, and movers. Minor gaps exist because candles are limited to Nobitex/Wallex and some exchange-specific fields are unavailable, but core coverage is strong.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Live market data for AI agents. 8 tools: real-time crypto prices, OHLCV candles, order books, market cap rankings, trending coins, technical analysis (RSI/SMA/z-score), asset comparison, and Fear & Greed index. Zero API keys, zero dependencies.
    8
    1
    MIT
  • 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
  • F
    license
    A
    quality
    D
    maintenance
    Fetches real-time cryptocurrency prices from multiple exchanges and enables price comparison, volume rankings, and listing of tradable pairs.
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to access normalized, read-only market data from Binance, KuCoin, and Coinbase without accounts or API keys, with caching and single-flight request collapsing to reduce burst load and provide cleaner, unified data.
    1
    MIT