iran-crypto-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@iran-crypto-mcpCompare the BTC price across all Iranian exchanges in Toman — where is it cheapest?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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-mcporclaude 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 withic_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.jsonand 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_pricereturns 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 | نوبیتکس | Rial | full | yes | yes | yes (not USDT/IRT) | |
Wallex | والکس | Toman | full | yes | yes | yes | |
Bitpin | بیت‌پین | Toman | no bid/ask | yes | yes | no | |
Ramzinex | رمزینکس | Rial | full | yes | yes | no | |
Tabdeal | تبدیل | Toman | no bid/ask, no volume | yes | yes | no | |
OMPFinex | او ام پی فینکس | Rial | no bid/ask | yes | no | no | |
Exir | اکسیر | 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_orderbookfor 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-mcpSettings → 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-mcpOr 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-mcpAdd 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 |
| The supported exchanges, their native price unit and what each can answer |
| Coins an exchange trades against Toman (IRT) or USDT |
| One coin's price on every exchange in one call, cheapest first, with the spread (an exchange that fails is reported, not fatal) |
| Live price, best bid and ask, 24h range, change and volume of a coin on one exchange |
| Top bids and asks (1 to 20 levels) with the spread |
| Latest public trades, newest first (1 to 50; not on OMPFinex) |
| OHLC candles, 15m / 1h / 4h / 1d, up to 100 (Nobitex and Wallex) |
| 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 exchangesRuns 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_faon every exchange row is the exchange's own Persian name.One exchange can fail alone.
ic_compare_pricereports a failing exchange undererrorsand still compares the rest. HTTP 403 means that exchange's CDN refuses your network. SetIRAN_CRYPTO_MCP_PROXYto 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_volumeto 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 |
| 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 buildTools 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.
Related servers
awesome-iran-mcp: catalog of all Iranian-service MCP servers
tgju-mcp for dollar, gold, coin and commodity prices from TGJU
tsetmc-mcp for the Tehran stock exchange
milligold-mcp for gold prices
iran-news-mcp for Iranian news
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
Available Tools
8 toolsic_candlesPrice CandlesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Coin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON' | |
| limit | No | Most recent candles to return (1-100) | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | 'nobitex' or 'wallex' (the only exchanges with candles) | |
| interval | No | Candle size | 1h |
TDQS
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.
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.
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.
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.
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.
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 PriceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Coin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON' | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
TDQS
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.
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.
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.
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.
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.
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 BookARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Coin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON' | |
| depth | No | Levels per side (1-20) | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | Exchange id from ic_list_exchanges, e.g. 'nobitex' |
TDQS
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.
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.
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.
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.
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.
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 TickerARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Coin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON' | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | Exchange id from ic_list_exchanges, e.g. 'nobitex' |
TDQS
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.
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.
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.
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.
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.
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 ExchangesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 MarketsARead-onlyIdempotent
List the coins an exchange trades against Toman (IRT) or USDT.
Use it to check a coin symbol before calling the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | Exchange id from ic_list_exchanges, e.g. 'nobitex' |
TDQS
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.
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.
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.
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.
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.
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 TradesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Coin symbol, e.g. 'BTC', 'ETH', 'USDT' (Tether in Toman), 'TON' | |
| limit | No | Trades to return (1-50) | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | Exchange id from ic_list_exchanges, e.g. 'nobitex' |
TDQS
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.
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.
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.
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.
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.
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 MoversARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Coins to return (1-25) | |
| quote | No | Quote currency: 'IRT' = Toman market (default), 'USDT' = Tether market | IRT |
| exchange | Yes | Exchange id from ic_list_exchanges, e.g. 'nobitex' | |
| direction | No | 'gainers' or 'losers' over 24h | gainers |
| min_volume | No | Skip 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
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.2- First observed
ic_candles - First observed
ic_compare_price - First observed
ic_get_orderbook - First observed
ic_get_ticker - First observed
ic_list_exchanges - First observed
ic_list_markets - First observed
ic_recent_trades - First observed
ic_top_movers
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Live Iran exchange rates, gold, crypto, and Toman market data for AI agents.
Crypto market data for AI agents: live prices, OHLCV, sentiment, indicators and exchanges.
Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.
Real-time crypto prices from Binance, Coinbase, Kraken, OKX, and Bybit
Related MCP Servers
- AlicenseAqualityDmaintenanceLive 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.81MIT
- AlicenseAqualityDmaintenanceProvides 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.132MIT
- FlicenseAqualityDmaintenanceFetches real-time cryptocurrency prices from multiple exchanges and enables price comparison, volume rankings, and listing of tradable pairs.4-
- AlicenseNot gradedqualityBmaintenanceEnables 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.1MIT