ime-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., "@ime-mcpShow me hot sheet price history since 1405/08/01"
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.
ime-mcp: Iran Mercantile Exchange (بورس کالای ایران) MCP server for AI agents
ime-mcp is an unofficial, read-only MCP server that gives AI agents the public trade and supply data of the Iran Mercantile Exchange (IME, ime.co.ir). Its 14 tools list commodity trades (steel, petrochemicals, cement, oil products, metals, agriculture) with prices and volumes, upcoming supply offers, daily price series, rankings by producer and broker, market and hall totals, the USD settlement rate, the options board, gold, silver and other deposit certificates, gold funds and exchange news and weekly reports. No API key or account is needed. It works in Claude, Cursor, Copilot and any other MCP client.
For AI agents · Quick start · What it can do · Tools · FAQ · فارسی
For AI agents
What: unofficial MCP server (model context protocol) for ime.co.ir, the Iranian commodity exchange: physical market trades (industrial and mineral, petrochemical and oil products, cement, subsidiary market, Kish export hall), supply offers (including premium and export), price history, rankings by producer or broker, market totals, USD rate, news, weekly report links, the options board, deposit certificates (gold bar, gold coin, silver...), salaf and commodity funds.
Install:
uvx ime-mcporclaude mcp add ime -- uvx ime-mcp. Transport: stdio. Needs uv (Python 3.10+).Auth: none. Optional
IME_MCP_PROXY(HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.Access: read-only. It cannot trade or place orders, so no confirmation is needed before calling any tool.
Tools: 14, all prefixed
ime_. Typical sequences:ime_categories->ime_price_history/ime_trades/ime_supply;ime_producers->ime_trades;ime_options->ime_options(contract=...);ime_certificates->ime_certificates(commodity=...).Use when: the user asks what traded on the exchange, the price of steel, rebar, hot sheet, polymers, bitumen or cement, what will be offered next session, how big trading was, the exchange's USD rate, option contracts, or gold bar, gold coin and silver certificate prices.
Do not use when: the question is about the stock market (TSETMC), or real estate and car trading: those are not covered here.
Output: compact JSON. Dates are Persian (
1405/08/09); Gregorian input is accepted. Prices are Rial (per kg for goods counted in tonnes: checkunit);value_k_rialis thousand Rial; summary values are million Rial;value_rial(options, certificates, funds) is Rial. Text is Persian.Machine-readable:
server.jsonand the iran-mcp catalog.
Related MCP server: tsetmc-mcp
Why
The IME site shows trades and supply only through filter forms and paged tables. "How did the hot sheet price move
this month?" means picking the group, the subgroup and a date range, then reading the table row by row. With
ime-mcp an agent does it in one call:
You: How did hot sheet prices move since the start of Aban?
Agent: calls
ime_price_history(search="ورق گرم", date_from="1405/08/01")Kavian hot sheet (KAS-HS00000-00) traded at 1,305,425 Rial/kg on 08/02 (3,740 t), 1,296,722 on 08/03 (1,430 t), 1,370,586 on 08/06 (2,310 t) and 1,352,960 on 08/09 (110 t).
Numbers from a live call on 2026-10-31.
What it can do
Trades: every trade of a date range in the physical market, the subsidiary market (بازار فرعی) or the Kish export hall, with the weighted closing price, low and high, supply, demand, volume, value, producer, contract type, delivery and broker; filter by commodity group, producer or text
Supply offers (اطلاعیه عرضه): what is up for sale in coming sessions with volume, base price, delivery place and date, settlement and broker
Price history: daily low, high, volume-weighted average and volume per symbol over up to 45 days
Market totals: value and volume by market and hall for a range, plus the USD settlement rate; day-by-day totals of one market
Rankings: producers, commodities, brokers or halls ordered by traded value with market share
Options: the options board (gold, gold coin, gold funds, saffron futures) with settlement prices and open interest, and the history of one contract
Certificates and funds: gold bar, gold coin, silver, copper and steel deposit certificates, saffron certificates, salaf and gold funds, daily and with a bid/ask board
Groups and producers: the exchange's commodity group tree and producer ids
News and reports: the latest announcements and links to the weekly report PDFs
Example prompts:
"What were the biggest trades on the exchange today?"
"How did rebar prices move over the last two weeks?"
"What is offered on the exchange next week from Mobarakeh Steel?"
"How much did the physical market trade this week, by hall?"
قیمت ورق گرم در بورس کالا در یک ماه گذشته چطور تغییر کرده؟
فردا چه محصولاتی در بورس کالا عرضه میشود؟
Quick start
You need uv. No API key or account.
claude mcp add ime -- uvx ime-mcpSettings → Developer → Edit Config, then add:
{
"mcpServers": {
"ime": { "command": "uvx", "args": ["ime-mcp"] }
}
}Use the same command (uvx ime-mcp) in your client's MCP settings, for example codex mcp add ime -- uvx ime-mcp
or the Claude Desktop block above in ~/.cursor/mcp.json.
It is a standard stdio MCP server: run uvx ime-mcp, or pip install ime-mcp and run ime-mcp.
Tools
Group ids come from ime_categories, producer ids from ime_producers. Dates are 1405/08/09 or 2026-10-31; the
default is today (Tehran time). Ranges are limited to 45 days.
Tool | What it does |
| List the exchange's commodity groups: main groups, then groups, then subgroups, with their ids |
| Find producers and suppliers listed on the exchange by name, to get the producer id for the trade and supply tools |
| List commodity trades (price, volume, supply, demand, buyer broker) for a date range, with totals |
| List supply offers (اطلاعیه عرضه): what is up for sale on which session, volume and base price (physical, premium or export) |
| Daily price series (low, high, volume-weighted average, volume) per symbol over a date range |
| Exchange-wide trade value and volume for a date range: by market, by physical-market hall, plus the USD rate |
| Day-by-day trade value and volume of one market over a date range (the site's market chart) |
| Latest news and notices from the exchange's news archive: title, lead, date and link |
| Rank producers, commodities, brokers or halls by traded value over a date range, with each one's market share |
| List the exchange's weekly market reports (گزارش هفتگی), newest first, with the PDF link of each |
| Options on gold, gold coin, gold funds and saffron futures (اختیار معامله): one day's board or one contract's history |
| Daily trades of the exchange's financial-market symbols: salaf, commodity deposit certificates and commodity funds |
| Continuous commodity deposit certificates (گواهی سپرده پیوسته): gold bar, gold coin, silver, copper, steel and more |
| Market-view board (cdn.ime.co.ir) with the best bid and ask for funds, certificates and salaf |
All 14 tools are annotated readOnlyHint: true.
How it works
AI agent (Claude, Cursor, Copilot, ...)
│
│ MCP over stdio
▼
ime-mcp (runs on your machine)
│
│ HTTPS
└──────▶ www.ime.co.ir imedata.asmx, auction.ashx, export.ashx, news archiveime-mcp runs locally and calls the same public endpoints the ime.co.ir pages use, with no hosted server in between
and no API key. Requests go out through a Chrome-impersonating client. It makes at most 3 requests at a time with a
little jitter, keeps answers for 2 minutes, retries a failed request up to twice, and only talks to www.ime.co.ir, dataapi.ime.co.ir (gold and other deposit certificates) and cdn.ime.co.ir (bid/ask board).
Good to know
Iranian network. ime.co.ir answers from Iran. From a Turkish exit it timed out in testing; use a direct Iranian line or set
IME_MCP_PROXYto a proxy that can reach it.The site mixes up the physical and subsidiary lists. Its trade-list service keeps the first answer per date range and then ignores the market flag. The server asks for a fresh (padded) date range and checks the halls, retrying up to 6 times, so a slow answer is normal.
Units. Prices are Rial per kg for goods listed in tonnes.
value_k_rialis price x volume in thousand Rial; market summaries are million Rial; options, securities, certificates and boards givevalue_rialin Rial.Trading days. Saturday to Wednesday and some Thursdays; other days return nothing.
Not covered: real estate, car trading and the stock sub-sites are separate ime.co.ir sub-sites. Statistical report archives (market-reports.html) need a form post and are not read; weekly report PDFs are linked, not parsed. The subsidiary market list has no price or value, only base price, supply, demand and volume.
Persian data. Names, halls, contracts and news come back in Persian.
FAQ
IME publishes data through its website only. ime-mcp is a separate, unofficial MCP server that calls the public
endpoints behind the website's tables and charts and returns compact JSON.
No. Install with uvx ime-mcp and it works from an Iranian network.
It shows trades published on the site, including the current session as the site lists them. It is not a tick feed.
No. It only reads public data.
npx @modelcontextprotocol/inspector uvx ime-mcpConfiguration
Variable | Default | Meaning |
| unset | Optional HTTP proxy URL for the ime.co.ir 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 cannot connect |
فارسی: سرور MCP بورس کالای ایران
سرور ime-mcp یک سرور MCP غیررسمی و فقطخواندنی برای بورس کالای ایران است. با آن دستیار هوش مصنوعی شما همان دادههای عمومی سایت را میبیند: معاملات، قیمتها، عرضههای پیشرو و آمار بازار.
چه کارهایی میکند
معاملات بازار فیزیکی، بازار فرعی و تالار صادراتی کیش برای هر بازهٔ تاریخی، با قیمت پایانی (میانگین موزون)، کمترین و بیشترین قیمت، عرضه، تقاضا، حجم، ارزش، تولیدکننده و کارگزار.
اطلاعیهٔ عرضه جلسههای پیشرو با حجم و قیمت پایه.
سابقهٔ قیمت هر نماد بهصورت روزانه تا ۴۵ روز.
آمار بازار بر اساس بازار و تالار، و نرخ دلار تسویهٔ بورس.
اخبار و گزارشهای هفتگی بورس کالا.
نکتهها: فقطخواندنی است و سفارشی ثبت نمیکند؛ کلید API نمیخواهد؛ سایت بورس کالا فقط از شبکهٔ ایران پاسخ میدهد؛ معاملات سکه و گواهی طلا در زیرسایت دیگری هستند و پوشش داده نمیشوند.
نصب (اول uv را نصب کنید). در Claude Code:
claude mcp add ime -- uvx ime-mcpنمونه پرسشها
«قیمت ورق گرم در بورس کالا در یک ماه گذشته چطور تغییر کرده؟»
«فردا چه محصولاتی در بورس کالا عرضه میشود؟»
«بزرگترین معاملات امروز بورس کالا کداماند؟»
Development
git clone https://github.com/sepehr071/ime-mcp && cd ime-mcp
uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q # offline unit tests on recorded IME answers
uv run python -m pytest -m live -q # calls the real ime.co.ir (needs an Iranian line)
uv buildThe physical-market tools live in src/ime_mcp/ime.py, the derivatives and securities tools in src/ime_mcp/securities.py; each is a typed async function with a docstring that tells the agent when to
use it. Issues and PRs are welcome.
Releases: bump the version in pyproject.toml and server.json, then push a v* tag. GitHub Actions publishes to PyPI.
Related servers
iran-mcp: catalog of all Iranian-service MCP servers
mcpfarsi.ir: Persian marketplace of MCP servers for Iranian services
Disclaimer
Unofficial and not affiliated with or endorsed by the Iran Mercantile Exchange. It is read-only and uses the public endpoints of the ime.co.ir website, which can change without notice. Not investment advice; check prices on the exchange before acting on them.
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
Available Tools
14 toolsime_boardLive board of funds, certificates and salafARead-onlyIdempotent
Market-view board (cdn.ime.co.ir) with the best bid and ask: use it to see where a fund or certificate trades now.
During the session it is live; after the close it keeps the last session (see time and date). Each symbol has
last and closing price, change vs yesterday, low, high, volume, value (Rial), number of trades, best bid and best
ask with sizes. For daily history over a range use ime_securities.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | fund (commodity ETFs, mostly gold), certificate (saffron etc.) or salaf (standard forward). | fund |
| sort | No | value or volume (largest first) or change (biggest move first). | value |
| limit | No | Max symbols to return (1-60). | |
| search | No | Keep rows whose symbol, code or name contains this text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered; the description then adds genuinely non-obvious behavior: the board is live intra-session but freezes at the last session after close, with `time`/`date` as the staleness signal. It also enumerates the returned fields and units (value in Rial), which is real added value. It stops short of describing pagination or what happens when `search` matches nothing.
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 purpose and the live/closed behavior are front-loaded, and the sibling redirect is placed last where it belongs. The middle list of returned fields is the one long clause, but it earns its place since there is no output schema.
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 takes on the job of listing return fields and their units, and it explains the live-vs-frozen-session distinction an agent needs to interpret freshness. All parameters carry schema descriptions, so the gaps are minor: no note on sort/search interaction or behavior when no rows match.
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 enums are documented in the schema, so the baseline is 3. The description adds no parameter-level meaning — it never mentions kind, sort, limit or search, so it neither compensates nor detracts.
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 gives a specific verb+resource: a market-view board at cdn.ime.co.ir returning best bid/ask and current quote fields, with the scope ('where a fund or certificate trades now') spelled out. It distinguishes itself from ime_securities by naming that sibling as the daily-history alternative, so an agent can route without opening either 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?
It states the positive case ('use it to see where a fund or certificate trades now') and names one explicit alternative ('For daily history over a range use ime_securities'), which covers the most likely confusion. It does not address the other plausible siblings (ime_certificates, ime_options, ime_market_summary), so routing among the full set is still partly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_categoriesCommodity groupsARead-onlyIdempotent
List the exchange's commodity groups: main groups, then groups, then subgroups, with their ids.
Call it with no arguments for the main groups (industrial, agriculture, petrochemical, mineral, oil products, real estate, subsidiary). Pass main_cat for the groups under it (steel, aluminium, copper, gold...), then main_cat plus cat for the subgroups (rebar, hot sheet...). Use the ids as main_cat/cat/sub_cat in ime_trades, ime_supply and ime_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| cat | No | Group id (with main_cat) to list its subgroups. | |
| main_cat | No | Main group id to list its groups (0 = list the main groups). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool as read-only, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds useful behavioral context about hierarchical traversal and downstream id usage, though it does not discuss return size, caching, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the resource and hierarchy, then immediately gives the calling pattern and downstream usage. Every sentence contributes useful information, and the parenthetical examples clarify category levels without excessive length.
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 two-parameter, read-only taxonomy lookup with full schema descriptions and no output schema, the description is complete enough for an agent to call it correctly. It covers the hierarchy, argument combinations, returned ids, and how those ids feed other tools.
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 parameter baseline is already strong. The description adds meaningful traversal semantics beyond the schema by explaining that no arguments returns main groups, main_cat returns groups under it, and main_cat plus cat returns subgroups, with concrete examples of each 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?
The description states a specific verb and resource: listing the exchange's commodity groups, including the hierarchy of main groups, groups, and subgroups with ids. It is clearly distinguishable from sibling tools such as ime_trades and ime_price_history because it serves as the taxonomy lookup used to obtain their category ids.
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 explicitly explains the three call patterns: no arguments for main groups, main_cat for groups, and main_cat plus cat for subgroups. It also tells the agent how the returned ids should be used in ime_trades, ime_supply, and ime_price_history, leaving little ambiguity about when this tool is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_certificatesGold and other deposit certificatesARead-onlyIdempotent
Continuous commodity deposit certificates (گواهی سپرده پیوسته): gold bar, gold coin, silver, copper, steel and more.
These are the exchange's gold bar / gold coin / silver certificates (gold.ime.co.ir). Without commodity it lists
every certificate with its latest day: first, high, low, last price, settlement price and change, volume, value
(Rial), open interest and active customers. With commodity it gives that certificate's day-by-day history (dates
default to the last 30 days, at most 90). Prices are Rial per certificate unit (about one gram for gold bar, one
coin for GoldCoin). For fund and saffron-certificate symbols use ime_securities.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| commodity | No | Certificate id, code or name part: GoldBar, GoldCoin, SilverBar, CopperCthd, Bitumen, ZincIngot, SteelRebar... or طلا, سکه, نقره. Empty = all. | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the default window is the last 30 days capped at 90, and prices are quoted in Rial per certificate unit (~1 gram for gold bar, one coin for GoldCoin). It stops short of describing pagination, row limits in the list mode, or what 'active customers' counts.
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?
Front-loaded with the resource and both modes, and the sibling routing is placed last where it belongs. Slightly redundant: the opening sentence's commodity list is restated as 'gold bar / gold coin / silver certificates' in the next line, costing a clause without adding 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?
With no output schema, the description carries the return-shape burden and does it well, enumerating first/high/low/last, settlement, change, volume, value, open interest and active customers. Unit and currency semantics are covered. What's missing is list-mode sizing or truncation behavior for the all-certificates branch.
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 would be 3. The description still adds real semantics: it explains that `commodity` switches the tool between summary and history modes, and that dates default to the last 30 days with a 90-day maximum — a constraint absent from the schema's date descriptions.
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 the specific resource (continuous commodity deposit certificates on the IME) and enumerates the covered commodities, then splits the tool's two behaviors cleanly: list-all with latest day stats vs. per-commodity history. It explicitly routes fund and saffron-certificate symbols to ime_securities, so an agent can distinguish it from siblings 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?
Gives an explicit conditional: without `commodity` you get every certificate's latest day; with `commodity` you get that certificate's day-by-day history. It also names the alternative tool (ime_securities) and the symbol class that belongs there, which is exactly the when-not-to-use guidance most definitions omit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_daily_totalsDaily trade totalsARead-onlyIdempotent
Day-by-day trade value and volume of one market over a date range (the site's market chart).
Use it for trends: "how has physical trading volume moved over the last month". Dates default to the last 14 days; at most 45 days. Value is million Rial. Volume is tonnes for physical, contracts for options, units for financial.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | physical, options (اختیار معامله) or financial (مالی). | physical |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior the annotations cannot: a 14-day default window and a hard 45-day cap. It stops short of describing granularity edge cases (holidays, missing days, timezone) or response ordering.
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 paragraphs: the first states what it returns, the second states when to use it and the operative constraints. Nothing is repeated from the schema verbatim and the constraint (45-day max) is placed where an agent will hit it before calling.
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 carries the burden of explaining returns, and it does so adequately — day-by-day series of value and volume with units stated. Missing only minor details such as whether empty days are included and the ordering of the returned series.
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% and the date formats plus Persian/Gregorian flexibility are already documented per-parameter, so the baseline is 3. The description does add meaning the schema lacks — that value is in million Rial and volume is tonnes/contracts/units depending on market — which is a real complement to the enum, though market-specific unit mapping is the only true addition.
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 names the resource precisely — day-by-day value and volume for one market over a date range — and the parenthetical 'the site's market chart' anchors it to a concrete artifact. It implicitly separates itself from ime_price_history (price, not volume/value) and ime_market_summary (snapshot, not series), but never names a sibling 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 gives a concrete when-to-use framing ('Use it for trends') with a worked example question about physical volume over the last month, which tells the agent the intended shape of request. It offers no exclusions or named alternatives for point-in-time or per-security queries, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_market_summaryMarket totalsARead-onlyIdempotent
Exchange-wide trade value and volume for a date range: by market, by physical-market hall, plus the USD rate.
Use it for "how big was trading this week" or to see which hall (industrial, petrochemical, subsidiary...) led.
Dates default to today (Tehran); the range is free-form but keep it short. Values are million Rial; volumes are
tonnes for the physical market. offer_volume is what was offered. The USD rate is the exchange's own
settlement rate. For a day-by-day series use ime_daily_totals.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds real context: dates default to today in Tehran time, the range should be kept short, and units (million Rial, tonnes). It does not say anything about cost/limits when a wide range is requested beyond 'keep it short', which is the only remaining gap for a read tool.
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?
Front-loads the scope sentence, then usage, then caveats — every sentence carries information (units, defaults, alternative). Slight drag from the parenthetical hall enumeration and the compressed 'offer_volume' clause, but no padding.
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 carries the burden of explaining returned values — and it does, naming units for values, volumes, offer_volume, and the USD settlement rate. Nothing an agent needs to call this correctly is missing.
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% and documents both dates' accepted formats, so the baseline is 3; the description adds the default behavior ('dates default to today (Tehran)') and a practical range-size constraint that the schema does not express.
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 resource (exchange-wide trade value and volume) with its exact breakdowns (by market, by physical-market hall, plus USD rate) and a date range. An agent can distinguish it from a single-market or single-security tool 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 concrete use cases ('how big was trading this week', 'which hall led') and explicitly routes the alternative: 'For a day-by-day series use ime_daily_totals.' Both the when and the when-not are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_newsExchange newsARead-onlyIdempotent
Latest news and notices from the exchange's news archive: title, lead, date and link.
Use it for announcements, weekly trading reports and new listings. Text is Persian.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max news items (1-30). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely useful context (Persian-language text, returned fields), but says nothing about result ordering, recency window, or how the default limit of 10 behaves in practice.
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, resource and payload front-loaded, and the Persian-language note is a high-value detail placed where it will be read. Slight redundancy between the purpose statement and the use-case list keeps it from a 5.
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 naming the returned fields, and annotations carry the safety semantics for a one-optional-parameter read tool. What remains thin is routing guidance relative to ime_weekly_reports, the closest sibling.
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?
Only one optional parameter and the schema documents it at 100% coverage with default and bounds, so the schema does the heavy lifting. The description adds no meaning beyond it (e.g., whether limit truncates the newest items first), which is the baseline 3 case.
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 resource (the exchange's news archive) and enumerates the returned fields (title, lead, date, link), so the agent knows exactly what it fetches. It does not, however, distinguish itself from the ime_weekly_reports sibling, which it implicitly claims territory over via 'weekly trading reports'.
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 positive use cases (announcements, weekly trading reports, new listings) but never says when NOT to use it or names an alternative. The 'weekly trading reports' example actively invites confusion with the ime_weekly_reports sibling tool, with no rule for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_optionsOptions boardARead-onlyIdempotent
Options on gold, gold coin, gold funds and saffron futures (اختیار معامله): one day's board or one contract's history.
Without dates it shows the latest trading day: for each contract the call/put type, underlying, strike (Rial), expiry, first/high/low/last price, settlement price and its change, volume, value (Rial) and open interest. With date_from/date_to (at most 10 days) the rows of every day in the range. Pass contract (a code from the list) to get that one contract's days over up to 45 days. Prices are Rial. For market-wide option totals per day use ime_daily_totals(market="options").
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order of the list, largest first (settlement_change by size of the move). | volume |
| limit | No | Max contracts or days to return (1-100). | |
| search | No | Keep contracts whose code or description contains this text, e.g. GCES (gold coin) or صندوق طلا. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| contract | No | One contract code (from an earlier answer): returns its day-by-day history instead. | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| option_type | No | call (خرید), put (فروش) or all. | all |
| traded_only | No | Only contracts that traded (volume above 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/idempotent/non-destructive, and the description still adds real context: the 10-day range cap, the 45-day history cap, Rial currency for strike/value/prices, and the full set of returned columns. It does not cover pagination behavior or what happens when the 10-day cap is exceeded, which keeps it short of 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 dense sentences, front-loaded with the resource and the two primary modes, then return fields, then the sibling pointer. No filler, and the mode-selection rules come before the column inventory.
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?
There is no output schema, so the description enumerates the returned fields (call/put type, underlying, strike, expiry, OHLC/last, settlement and change, volume, value, open interest), and it discloses both the 10-day and 45-day limits. Nothing an agent needs to invoke this correctly is missing.
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 already 100%, but the description adds cross-parameter semantics the schema does not state: the 10-day maximum on date_from/date_to, the 45-day history horizon when contract is set, that contract must be a code from an earlier answer, and that an omitted date range means the latest trading day. This is meaningfully beyond the per-field descriptions.
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 ('Options on gold, gold coin, gold funds and saffron futures') plus the two modes (one day's board vs. one contract's history), and explicitly names the sibling ime_daily_totals(market="options") for market-wide totals. An agent can distinguish it from ime_board, ime_daily_totals and ime_price_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?
Gives explicit branches: no dates → latest trading day; date_from/date_to (max 10 days) → every day in range; contract → that contract's day-by-day history up to 45 days. It also names the alternative tool and the condition ('market-wide option totals per day') that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_price_historyPrice history of a commodityARead-onlyIdempotent
Daily price series (low, high, volume-weighted average, volume) per symbol over a date range.
Use it for "how did hot sheet / rebar / PE prices move this month". Dates default to the last 14 days up to today; at most 45 days. Narrow it with sub_cat or search (a wide filter returns only the 8 biggest symbols). Built from the trade list, so only days with trades appear. Prices as in ime_trades.
| Name | Required | Description | Default |
|---|---|---|---|
| cat | No | Category id from ime_categories (0 = all). | |
| market | No | physical (main physical market halls), subsidiary (بازار فرعی, secondary market), export (Kish export hall) or premium (پریمیوم contracts; no producer filter). | physical |
| search | No | Commodity, symbol or producer text, e.g. ورق گرم or میلگرد. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| sub_cat | No | Category id from ime_categories (0 = all). | |
| main_cat | No | Category id from ime_categories (0 = all). | |
| producer | No | Category id from ime_categories (0 = all). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent, but the description adds the non-obvious behavior an agent cannot infer: default window of the last 14 days, a hard 45-day cap, the trap that a wide filter silently returns only the 8 biggest symbols, and the fact that days without trades are absent from the series. Those truncation and coverage rules are exactly the kind of context structured fields don't carry.
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?
Four tight sentences, front-loaded with the resource and returned fields, then the usage case, then the constraints. It is dense but every clause carries information; only the slightly run-on constraint sentence could be split for readability.
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 compensates by naming all returned measures, and it covers the defaults, the maximum range, and the sparse-day caveat. An agent has enough to call it correctly and to predict what comes back, without needing anything else.
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 baseline is 3, but the description adds real semantic value: the 14-day default and 45-day ceiling for date_from/date_to, and the behavioral consequence of a broad filter. It still leaves main_cat / sub_cat / producer / cat unexplained beyond what the schema says (all four share an identical 'category id' description), which is the main residual gap.
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 first sentence states a specific resource (daily price series) at a specific grain (per symbol, over a date range) and even enumerates the returned measures (low, high, volume-weighted average, volume). It also relates itself to the sibling ime_trades ('Built from the trade list... Prices as in ime_trades'), so an agent can tell it apart from the raw-trades tool without opening a 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 use case ('how did hot sheet / rebar / PE prices move this month') and tells the agent how to narrow results via sub_cat or search. It stops short of explicitly saying when to prefer ime_trades or ime_trade_stats instead, so routing against alternatives is implied rather than declared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_producersFind producersARead-onlyIdempotent
Find producers and suppliers listed on the exchange by name, to get the producer id for the trade and supply tools.
Use the returned id as producer in ime_trades, ime_supply or ime_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max producers (1-50). | |
| query | Yes | Part of a producer name, Persian or English, e.g. فولاد مبارکه. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds the workflow link (the returned id is the value other tools expect) but says nothing about result behavior such as empty result sets, multiple matches, or ordering.
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 sentences, no filler: the first defines what is found and why, the second states exactly how the output feeds sibling tools. The purpose is front-loaded before the integration detail.
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 carries the key return information (a producer id) and its downstream use. Minor gaps remain around match ambiguity and empty results, but nothing critical to calling it is missing.
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%, and the schema already documents both query (partial name, Persian or English, with an example) and limit (1-50, default 20). The description adds no meaning beyond that, so the baseline 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?
States a specific verb and resource (find producers/suppliers on the exchange by name) plus the concrete outcome (get the producer id). It also implicitly separates itself from siblings by declaring itself the id-lookup step rather than a data-fetch step.
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 frames usage as a prerequisite step for ime_trades, ime_supply and ime_price_history, so the agent knows to call this first and pass the id along. It stops short of stating failure or no-match handling or when another lookup tool (e.g. ime_securities) would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_securitiesCommodity securities tradesARead-onlyIdempotent
Daily trades of the exchange's financial-market symbols: salaf, commodity deposit certificates and commodity funds.
Use it for "which gold fund traded most yesterday" or "saffron certificate prices this week". Without dates it shows the latest trading day; with dates every day in the range (at most 45 days). Each row has symbol, name, close and last price, change vs the previous close, number of trades, volume, value (Rial), low and high. Prices are Rial per unit. For gold bar / gold coin / silver continuous certificates use ime_certificates; for live bid and ask use ime_board.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | salaf (standard forward, سلف استاندارد), certificate (گواهی سپرده کالایی such as saffron), fund (commodity ETFs, mostly gold) or all. | all |
| sort | No | value or volume (largest first), change (biggest move first) or date (newest first). | value |
| limit | No | Max rows to return (1-100). | |
| search | No | Keep rows whose symbol, code or name contains this text. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description goes further by disclosing the 45-day range ceiling, the implicit 'latest day' fallback, the exact row contents (close, last, change vs previous close, trades, volume, value, low, high) and the unit convention (Rial per unit). Those are real behavioural constraints an agent cannot infer from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource definition, then default behaviour, then return shape, then sibling routing — a logical order for an agent to consume. Dense but every sentence carries information; nothing repeats the name or title.
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 6 optional parameters, no output schema, and a 100%-covered schema, the description closes the remaining gaps: what a row contains, what units prices are in, and what happens when dates are omitted. Nothing needed to invoke the tool correctly is missing.
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, but the description adds genuine semantics the schema does not: the date pair operates as a range with a hard 45-day maximum and a 'no dates means latest day' default, which changes how an agent should populate date_from/date_to. It does not elaborate on how sort interacts with a date range, so not quite a 5.
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?
Names a specific resource (daily trades of salaf, commodity deposit certificates and commodity funds) with a concrete verb-and-scope framing, and gives two natural-language queries that pin down the intent exactly. It also explicitly differentiates from ime_certificates and ime_board, so an agent can route without opening sibling 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?
States the default behaviour with no dates (latest trading day), the behaviour with dates (every day in range, capped at 45), and names two alternatives with the exact condition that selects each — gold bar/coin/silver continuous certificates go to ime_certificates, live bid/ask goes to ime_board. That is explicit when-to-use, when-not-to-use, and where-else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_supplySupply offersARead-onlyIdempotent
List supply offers (اطلاعیه عرضه): what is up for sale on which session, volume and base price.
Use it for "what will be offered tomorrow / next week". Dates are offer dates; default today to 7 days ahead;
at most 45 days. Each offer has the commodity, symbol, hall, producer, supplier, volume (unit), base price,
contract type, delivery date and place, settlement type and broker. Filters as in ime_trades; page with offset.
market=premium lists premium contracts (premium_price), market=export the export hall. After the session,
ime_trades shows what actually sold.
| Name | Required | Description | Default |
|---|---|---|---|
| cat | No | Category id from ime_categories (0 = all). | |
| limit | No | Max offers to return (1-50). | |
| market | No | physical (default), premium (اطلاعیه عرضه پریمیوم) or export (Kish export hall, priced in $). | physical |
| offset | No | Skip this many offers (paging). | |
| search | No | Keep offers whose commodity, symbol, producer or supplier contains this text. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| sub_cat | No | Category id from ime_categories (0 = all). | |
| main_cat | No | Category id from ime_categories (0 = all). | |
| producer | No | Category id from ime_categories (0 = all). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
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 adds real behavioral context beyond them: the implicit date window defaults and 45-day cap, that dates are offer dates rather than trade dates, the field set returned per offer, offset-based paging, and the premium/export market variants including that export is priced in dollars. That is substantive disclosure for a read tool.
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 purpose is front-loaded in the first line, followed by usage, then returned fields, then filtering/paging, then the sibling pointer. The field enumeration is dense but justified because there is no output schema, and the cross-reference to ime_trades replaces several sentences of filter documentation.
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 compensates by enumerating the returned fields, and it covers the date-window behavior, paging, market variants, and the relationship to ime_trades. For a 10-parameter read tool with full schema coverage, 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.
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 a point by adding meaning to the market enum (premium contracts expose `premium_price`, export is the Kish export hall priced in $) and by clarifying that date_from/date_to refer to offer dates. It does not resolve the odd schema wording on `producer` (described as a category id), deferring instead to "Filters as in ime_trades," which leaves that one filter ambiguous.
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 opening sentence gives a specific verb and resource ("List supply offers") plus the domain meaning (اطلاعیه عرضه) and the content of each row (what is for sale, session, volume, base price). It also explicitly distinguishes itself from the closest sibling: offers are forward-looking, while "After the session, ime_trades shows what actually sold."
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 the exact question this answers ("what will be offered tomorrow / next week"), the default and maximum date window (today to +7 days, at most 45 days), and names the alternative tool with the condition that selects it (ime_trades after the session). It also points to ime_trades for filter semantics, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_tradesTrades on the exchangeARead-onlyIdempotent
List commodity trades (price, volume, supply, demand, buyer broker) for a date range, with totals.
Use it for "what traded today", "steel prices this week", "who bought what". Dates default to today (Tehran);
at most 45 days. Filter with main_cat/cat/sub_cat (ids from ime_categories), producer (ime_producers) or search
text. price is the volume-weighted closing price (قیمت پایانی میانگین موزون) and low/high the range; prices are per the unit shown (Rial per kg for
tonne goods). volume is in unit. value_k_rial is price x volume in thousand Rial. Subsidiary rows carry only
base_price, supply, demand and volume (the site publishes no price or value for them). For a price series of one
product use ime_price_history; for market-wide totals ime_market_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| cat | No | Category id from ime_categories (0 = all). | |
| sort | No | value (largest first), volume (largest first) or date (newest first). | value |
| limit | No | Max trades to return (1-100). | |
| market | No | physical (main physical market halls), subsidiary (بازار فرعی, secondary market), export (Kish export hall) or premium (پریمیوم contracts; no producer filter). | physical |
| search | No | Keep trades whose commodity, symbol or producer contains this text. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| sub_cat | No | Category id from ime_categories (0 = all). | |
| main_cat | No | Category id from ime_categories (0 = all). | |
| producer | No | Category id from ime_categories (0 = all). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description still adds substantial context beyond them: the 45-day window and today-default, the premium market's lack of a producer filter, and the caveat that subsidiary rows publish no price or value. Field semantics (price = volume-weighted close, value_k_rial = price x volume in thousand Rial, prices Rial/kg for tonne goods) are exactly the interpretive detail an agent would otherwise get wrong.
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?
Front-loaded with purpose and trigger phrases, then constraints, then field semantics, then sibling routing — a sensible order with no filler sentences. It is a dense single block, though, and the mid-sentence mix of Persian terms and backticked field names makes it slower to scan than it needs to be.
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, yet the description explains the returned columns, their units, how `value_k_rial` is derived, and which fields are absent for subsidiary rows — enough for an agent to interpret results correctly. Combined with the date-window and filter-source guidance, nothing needed to invoke it correctly is missing.
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% (baseline 3), and the description goes beyond it by naming the id sources per filter (main_cat/cat/sub_cat from ime_categories, producer from ime_producers) — which actively corrects the schema's copy-paste error describing `producer` as a category id — and by adding the 45-day/dates-default-to-today rule that appears nowhere in the schema. Minor gap: it does not touch `sort` or `limit`, though the schema documents those adequately.
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?
Specific verb + resource + returned fields: "List commodity trades (price, volume, supply, demand, buyer broker) for a date range, with totals." The closing sentences explicitly separate it from ime_price_history (single-product series) and ime_market_summary (market-wide totals), so an agent can pick it out of a 14-tool family without opening a 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?
Concrete trigger phrasings ("what traded today", "steel prices this week", "who bought what") and explicit routing to siblings: ime_price_history for a price series, ime_market_summary for market totals, ime_categories/ime_producers for filter ids. It also states the operating constraint (max 45 days, defaults to today Tehran) that determines whether the tool is usable for a given question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_trade_statsTrade statistics by groupARead-onlyIdempotent
Rank producers, commodities, brokers or halls by traded value over a date range, with each one's market share.
Use it for "which producers sold the most steel this month" or "which brokers were most active". Dates default
to today (Tehran); at most 45 days; filters as in ime_trades. Value is thousand Rial. volume is given only when
all trades of the group share one unit. For single trades use ime_trades; for one product's prices over time
ime_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| cat | No | Category id from ime_categories (0 = all). | |
| limit | No | Max groups to return (1-50). | |
| market | No | physical (main physical market halls), subsidiary (بازار فرعی, secondary market), export (Kish export hall) or premium (پریمیوم contracts; no producer filter). | physical |
| search | No | Keep trades whose commodity, symbol or producer contains this text. | |
| date_to | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). | |
| sub_cat | No | Category id from ime_categories (0 = all). | |
| group_by | Yes | Rank trades by producer, commodity, buyer broker, hall or contract type. | |
| main_cat | No | Category id from ime_categories (0 = all). | |
| producer | No | Category id from ime_categories (0 = all). | |
| date_from | No | Persian date 1405/08/09 or Gregorian 2026-10-31 (Persian digits are fine). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior, but the description adds meaningful operational context: Tehran-default dates, a 45-day maximum window, thousand-Rial values, and the volume caveat when group trades do not share one unit. It could be a 5 with a bit more about the returned ranking shape, but it is substantially informative.
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 purpose is front-loaded, followed by concrete examples, constraints, and sibling alternatives. The prose is compact for a 10-parameter analytics tool and every sentence carries useful selection or interpretation guidance.
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 10 parameters, no output schema, and rich annotations, the description supplies the key context an agent needs: ranking metric, market share, date constraints, value unit, volume caveat, and alternatives. The schema handles the remaining filter details, so nothing essential is missing for correct invocation.
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, but the description adds important semantics beyond the schema: date defaulting, the 45-day maximum range, filter parity with ime_trades, and value/volume interpretation. It does not clarify every filter parameter or mention contract in the prose list of group_by values, so it falls short of 5.
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, resource, metric and scope: rank producers/commodities/brokers/halls by traded value over a date range with market share. It explicitly distinguishes itself from ime_trades and ime_price_history, so an agent can select it without opening sibling 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?
Gives direct use cases and names the alternatives for adjacent jobs: single trades go to ime_trades, and one product's price history goes to ime_price_history. It also states date defaults and the 45-day cap, leaving little ambiguity about when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ime_weekly_reportsWeekly reportsARead-onlyIdempotent
List the exchange's weekly market reports (گزارش هفتگی), newest first, with the PDF link of each.
Use it to find the official weekly summary of a week (the report is a PDF, Persian; this tool only lists links, it does not read them). For the numbers of a week use ime_market_summary or ime_trades; for announcements ime_news.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Persian year, e.g. 1405 (default: all years on the page). | |
| limit | No | Max reports (1-60), newest first. |
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 useful behavior the schema cannot: reports are PDFs in Persian, only links are returned, and the newest-first ordering. It stops short of describing pagination depth or what metadata accompanies each link, which keeps it at a 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?
Two tight paragraphs, front-loaded with what is returned, then routing guidance. The parenthetical Persian gloss and the repeated 'newest first' are mild redundancy but each sentence still carries routing or behavioral value.
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 2-parameter, no-output-schema listing tool, the description supplies what an agent needs: return shape (PDF links), language, ordering, and where to go for actual figures. Only the presence of non-link metadata per report is left unspecified, a minor gap given 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 both parameters (year range 1380-1500, limit 1-60 newest first) are already fully documented. The description's 'newest first' merely echoes the limit description and adds no new format or semantics, so baseline 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?
States a specific verb+resource (list weekly market reports), the ordering (newest first), and the payload (PDF link per report). The Persian term and the explicit 'this tool only lists links, it does not read them' make the unit of return unambiguous versus every sibling.
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 an explicit use case ('find the official weekly summary of a week') and names the alternatives with the condition selecting them: ime_market_summary or ime_trades for numbers, ime_news for announcements. It also states the negative case (does not read the PDF), so the agent knows when this tool alone is insufficient.
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.
14 tool updates
v0.1.0- First observed
ime_board - First observed
ime_categories - First observed
ime_certificates - First observed
ime_daily_totals - First observed
ime_market_summary - First observed
ime_news - First observed
ime_options - First observed
ime_price_history - First observed
ime_producers - First observed
ime_securities - First observed
ime_supply - First observed
ime_trade_stats - First observed
ime_trades - First observed
ime_weekly_reports
TDQS
Scored across 14 tools
Most tools have clearly distinct data shapes (trades rows, price series, supply offers, rankings, news, reports), and descriptions explicitly cross-reference alternatives. The few near-overlaps — ime_securities vs ime_certificates vs ime_board, and ime_market_summary vs ime_daily_totals — are disambiguated by 'use X for Y, use Z for W' guidance, though an agent must still read carefully to pick correctly.
Every tool uses the same ime_ prefix plus a snake_case noun phrase (ime_trades, ime_price_history, ime_market_summary, ime_daily_totals). No mixed casing, verb styles, or stray abbreviations, so the pattern is fully predictable.
14 tools is squarely in the well-scoped range for a market-data API spanning physical trades, financial instruments, certificates, options, supply, stats, news, and reports. Each tool maps to a distinct data view rather than padding the surface.
The read-only surface is broad and coherent: reference data (producers, categories), trades/supply/price history, aggregates (summary, daily totals, rankings), plus financial instruments, options, certificates, board, news, and weekly reports. Minor gaps exist — there is no broker lookup analogous to ime_producers, no explicit symbol/instrument search tool, and weekly reports are link-only — but these are workable around.
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Financial data MCP server for Claude, ChatGPT, Cursor and Codex. Real-time stock quotes, financial statements, options flow, SEC filings, insider trades, 13F holdings, macro data and market news from gloom.sh, the open-source Bloomberg Terminal alternative.
OpenFinance gives any AI agent easy trading across every major market through one hosted MCP server. Trade crypto spot and perpetuals on Hyperliquid with market, limit and TWAP orders, leverage and margin control. Trade stocks, indices, commodities, forex and pre-IPO names as Hyperliquid HIP-3 perps. Trade Polymarket prediction markets with odds, order books, positions, PnL and trader leaderboards. Swap and bridge across 40+ EVM chains and Solana with Relay and Jupiter, find memecoins across 200+ chains, launch tokens on Robinhood Chain and Solana, and buy crypto with card, bank or UPI. Write actions are designed to ask for your confirmation first. Connect with OAuth (sign in to OpenFinance and approve) or an API key. Works with Claude, ChatGPT, Cursor, VS Code, Codex and any MCP client. No install. Home: https://openfinance.tech/agents · Docs: https://docs.openfinance.tech · GitHub: https://github.com/openfinance-tech/mcp
AI-powered commodity price forecasts and Brazil trade intelligence via MCP. Access Brazilian exports and imports from MDIC/ComexStat since 2000, by HS4, HS6 and NCM code, partner country, USD FOB and kilograms — plus crop production, supply & demand, climate data and production forecasts for major commodities including soybeans, coffee, corn, beef and cocoa. Compare trade flows, markets, countries and time periods with like-for-like windows. Every answer identifies the measurement period and data source. 15 read-only tools. Metered in credits. Connect directly via Streamable HTTP — no installation required: https://mcp.kyrodata.com/mcp Authentication: Bearer key or OAuth 2.1 (PKCE). Official MCP registry: com.kyrodata/kyrodata
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables access to Iran Mercantile Exchange official public statistics and live board snapshots through MCP tools, covering physical, futures, options, certificates, salaf, funds, and financial market data.14MIT
- AlicenseAqualityAmaintenanceEnables 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.879 PyPI3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to read public Hamrah Mechanic data read-only with no API key: daily Iranian car market prices by brand, model, trim and year, price ranges and monthly history, filtered used and zero-km listings with full ad details, inspection fees, showroom locations, and expert reviews and magazine articles. Works in Claude, Cursor, Copilot and other MCP clients over stdio.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to read official Central Bank of Iran data through 11 read-only tools: historical exchange rates for ~48 currencies, inflation, weekly interbank and policy rates, news, liquidity, monthly statistics tables, sukuk auctions and open market operations, with no API key required. Text is Persian, dates accept Jalali or Gregorian, and output is compact JSON.11MIT