milligold-mcp
This read-only Milli.gold MCP server lets an agent fetch live 18k gold prices, historical price trends, and platform statistics.
Get the current Milli.gold 18k gold price in Rial per milligram and per gram, with a Tehran-time timestamp.
Get daily, weekly, or monthly price history with high, low, change, and a configurable number of points (2–50).
Get platform statistics: users, trades, gold traded, gold held, and branches.
Read-only/no auth: it cannot buy, sell, log in, or access a wallet.
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., "@milligold-mcpWhat's the current 18k gold price per gram on Milli.gold?"
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.
milligold-mcp: Milli.gold price MCP server for AI agents
Give your AI agent the live 18k gold price from Milli.gold (میلی). An unofficial, read-only MCP server for Milli.gold, an Iranian online platform for 18k gold sold by the milligram: the live gold price per gram, day, week and month price history, and platform statistics, all from Claude, Cursor or Copilot.
For AI agents · Quick start · What it can do · Tools · Good to know · FAQ · فارسی
For AI agents
What: unofficial MCP server (model context protocol) for the public price, statistics, fees, news and help pages of milli.gold. A gold price API for Iran in tool form.
Install:
uvx milligold-mcporclaude mcp add milligold -- uvx milligold-mcp. Transport: stdio. Needs uv (Python 3.10+).Auth: none, no API key or account. Optional
MILLIGOLD_MCP_PROXY(HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.Access: read-only, so no confirmation is needed before calling any tool. It cannot log in, trade or read a wallet.
Tools: 8, all prefixed
mg_. Typical sequences:mg_get_price->mg_price_history;mg_trade_quote;mg_latest_postsormg_help_topics->mg_read.Use when: the user asks for the current 18k gold price per gram on Milli.gold, how it moved over a day, week or month, what a buy or sale costs with fees, Milli.gold's fees, its latest gold news, or how to use Milli (delivery, transfer, verification).
Do not use when: the user wants to actually buy or sell gold, needs a market-wide quote, or wants dollar, coin or crypto prices (see tgju-mcp).
Output: compact JSON. Milli.gold quotes Rial per milligram of 18k gold; replies also carry Rial per gram and Toman per gram. Times are Tehran time.
Machine-readable:
server.jsonand the iran-mcp catalog (TOOLS.md,servers.json,llms.txt).
Related MCP server: Arzbin MCP Server
Why
Milli.gold sells 18k melted gold by the milligram, so its price is quoted per milligram, in Rial. The site shows the
price per gram, and the numbers are easy to misread by a factor of 10 or 1000. An agent with milligold-mcp reads
the quote straight from the public endpoints and does the unit conversion for you:
You: What is the Milli.gold gold price right now, and is it up or down this week?
Agent: calls
mg_get_price()->mg_price_history(period="WEEKLY")One gram of 18k gold costs 26,890,000 Toman on Milli.gold (268,900 Rial per milligram). Over the past week it moved by the percentage shown in
change_percent, between the week's low and high.
Illustrative example with the price from the site's own unit explanation; prices change all the time.
What it can do
Live price of 18k gold on Milli.gold: Rial per milligram, Rial per gram and Toman per gram, with the Tehran-time timestamp
Price history for the last day, week or month, with first, last, high, low and change percent
Platform statistics: users, trade transactions, gold traded and held (kg), burned gold (kg), branches and representatives
Fees for buying, selling, transferring and delivering gold and for wallet withdrawals, read live from the fees page
Trade quotes: what buying N grams (or spending a Toman budget) costs, or what selling pays, fee included
News, magazine and help: the newest posts (daily gold, ounce and market reports), help articles found by keyword, and the full text of any post
Read-only by design: no login, no trading, no wallet
Example prompts:
"What is the 18k gold price per gram on Milli.gold right now?"
"Show me Milli.gold's gold price for the last month. What were the high and the low?"
"Is gold up or down today on Milli.gold? Give me the change in percent."
"How many users and how much gold does Milli.gold report?"
"How much do I pay on Milli.gold for 2 grams of gold, fee included?"
"How do I get physical gold delivered from Milli, and what does it cost?"
با ۵ میلیون تومان چند میلی طلا در میلی می‌توانم بخرم؟
آخرین اخبار قیمت طلا در میلی چیست؟
قیمت طلای ۱۸ عیار در میلی الان هر گرم چند تومان است؟
نمودار قیمت طلا در میلی در یک هفته گذشته چطور بوده؟
امروز قیمت طلا در میلی بالا رفته یا پایین آمده؟
Quick start
You need uv. No API key or account.
claude mcp add milligold -- uvx milligold-mcpSettings → Developer → Edit Config, then add:
{
"mcpServers": {
"milligold": { "command": "uvx", "args": ["milligold-mcp"] }
}
}Click Install in Cursor above, or add the Claude Desktop block to ~/.cursor/mcp.json.
Click Install in VS Code above, or add to .vscode/mcp.json:
{
"servers": {
"milligold": { "type": "stdio", "command": "uvx", "args": ["milligold-mcp"] }
}
}codex mcp add milligold -- uvx milligold-mcpOr add to ~/.codex/config.toml:
[mcp_servers.milligold]
command = "uvx"
args = ["milligold-mcp"]Add to ~/.gemini/settings.json:
{
"mcpServers": {
"milligold": { "command": "uvx", "args": ["milligold-mcp"] }
}
}Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.
It's a standard stdio MCP server: run uvx milligold-mcp, or pip install milligold-mcp and run milligold-mcp.
Tools
All 8 tools are read-only and return compact JSON.
Tool | What it does |
| Gets the current Milli.gold price of 18k melted gold in Rial per milligram, Rial per gram and Toman per gram, with the Tehran-time timestamp |
| Gets the 18k gold price series for a day, week or month ( |
| Gets Milli.gold's headline numbers: users, trade transactions, gold traded (kg), user balances (kg), burned gold (kg), branches and representatives |
| Gets the current fees for buying, selling, transferring and delivering gold and for wallet withdrawals ( |
| Estimates the cost of a buy or the payout of a sale at the live price, fee included ( |
| Lists the newest posts with date, categories, summary and URL ( |
| Finds help-center articles by English keyword (e.g. |
| Reads the text of one milli.gold news, magazine or help post ( |
How it works
AI agent (Claude, Cursor, Copilot, ...)
│
│ MCP over stdio
▼
milligold-mcp (runs on your machine)
│
│ HTTPS
└──────▶ milli.gold price, price history, platform report, fees page, RSS feeds, help sitemap, postsmilligold-mcp runs locally and reads public, login-free parts of milli.gold: three JSON endpoints (live price,
price widget series, overall report), the fees page, the news, magazine and help RSS feeds, the help sitemap and the
post pages. There is no hosted server in between and no API key.
Chrome-like client. Requests go through a Chrome-impersonating HTTP client, because the site sits behind ArvanCloud.
ArvanCloud 307 + cookie. ArvanCloud sometimes answers with a redirect to the same URL plus a cookie. The server retries once and keeps the cookie, so you never see it.
15 s cache. Repeated calls within 15 seconds reuse the answer instead of hitting the site again.
Read-only. Only GET requests, only to milli.gold. System proxy variables are ignored on purpose.
Good to know
Units. The site quotes
price18in Rial per milligram, and 1 gram = 1000 mg. So 268,900 Rial/mg x 1000 = 268,900,000 Rial/g, and Rial / 10 = 26,890,000 Toman/g, which matches "price of 1 gram of 18k gold" on the site.Tehran time.
as_ofand historytimevalues are Tehran time (UTC+3:30).Milli.gold's own price. It is the platform's quote for 18k melted gold, with no tax or making charge. It is not a market-wide quote and not the tgju price, so expect small differences from other sources.
History stats follow the site. The high, low and change for a week or a month include the day's peak and the live price, like the Milli.gold page does.
pointsonly thins the returned series; it does not change the stats.Statistics are rounded totals that the company publishes, with weights in kilograms.
Trade quotes are estimates. The fee is the larger of the minimum and the percent on the fees page (today 1 mg or 0.5 %). New-user fee waivers and wallet withdrawal fees are not applied, and the price moves between the quote and a real trade.
Posts. Only the newest posts are available (about 20 news, 10 magazine, 10 help); the site's feeds have no search or older pages. Help articles are found by the English words in their URLs. Post text is Persian.
What it does not do. No buying or selling, no login, no wallet or account data.
FAQ
Yes: milligold-mcp is an unofficial MCP server with 8 read-only tools. It calls the public price and statistics
endpoints and reads the public fees, news and help pages that milli.gold itself serves; no API key is needed.
Add the server with claude mcp add milligold -- uvx milligold-mcp (or the matching config in
Quick start), then ask "What is the 18k gold price per gram on Milli.gold?" in English or Persian.
Milli.gold quotes Rial per milligram. Every reply also carries Rial per gram (x 1000) and Toman per gram (Rial per gram / 10).
tgju-mcp reads tgju.org: dollar, euro, gold, coins, crypto and commodity
prices across the Iranian market. milligold-mcp reads one platform, Milli.gold, and gives that platform's own gold
price per milligram and its history. Use tgju-mcp for market rates and wide comparisons; use milligold-mcp when the
question is about the price on Milli.gold specifically.
No, and that's deliberate. It has no login and only reads public data.
It is unofficial and not affiliated with Milli.gold. It is read-only, runs on your machine and is free under the MIT license.
Not by default. If requests are blocked from your network, set MILLIGOLD_MCP_PROXY to an HTTP proxy. System proxy variables are ignored on purpose.
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 milli.gold requests. A comma-separated list is used one at a time: the next proxy takes over when one is blocked or cannot connect. System proxy settings are ignored |
فارسی: سرور MCP قیمت طلای میلی
milligold-mcp یک سرور MCP غیررسمی و فقط‌خواندنی برای میلی (Milli.gold)، پلتفرم آنلاین خرید و فروش طلای ۱۸ عیار آب‌شده به‌صورت میلی‌گرمی، است. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد قیمت لحظه‌ای طلا، تاریخچه قیمت، آمار پلتفرم، کارمزدها، هزینه معامله و اخبار و راهنمای میلی را بخواند.
چه کارهایی می‌کند
قیمت هر گرم طلای ۱۸ عیار در میلی: ریال به ازای هر میلی‌گرم، ریال به ازای هر گرم و تومان به ازای هر گرم.
تاریخچه قیمت روز، هفته و ماه گذشته، با اولین، آخرین، بیشترین و کمترین قیمت و درصد تغییر.
آمار پلتفرم: تعداد کاربران، تعداد معاملات، طلای معامله‌شده و نگه‌داری‌شده (کیلوگرم)، طلای سوزانده‌شده و تعداد شعبه‌ها و نمایندگی‌ها.
کارمزدها: کارمزد خرید، فروش، انتقال، تحویل طلا و برداشت از کیف پول، مستقیم از صفحه کارمزدهای سایت.
محاسبه هزینه معامله: هزینه خرید چند گرم طلا (یا با یک بودجه تومانی) و مبلغ دریافتی از فروش، با کارمزد.
اخبار، مجله و راهنما: تازه‌ترین مطالب (گزارش روزانه قیمت طلا و اونس)، جستجوی مقاله‌های راهنما و خواندن متن کامل هر مطلب.
نکته‌ها
فقط خواندنی است: خرید و فروش نمی‌کند، وارد حساب نمی‌شود و به کیف پول دسترسی ندارد.
قیمت، قیمت خود میلی است (بدون مالیات و اجرت)، نه قیمت بازار و نه قیمت tgju؛ برای نرخ دلار، سکه و ارز دیجیتال از tgju-mcp استفاده کنید.
هر ۱ گرم برابر ۱۰۰۰ میلی‌گرم است؛ ۲۶۸٬۹۰۰ ریال به ازای هر میلی‌گرم یعنی ۲۶٬۸۹۰٬۰۰۰ تومان برای هر گرم.
زمان‌ها به وقت تهران است. پاسخ‌ها ۱۵ ثانیه نگه داشته می‌شوند.
روی سیستم خود شما اجرا می‌شود و کلید API لازم ندارد.
نصب (اول uv را نصب کنید). در Claude Code:
claude mcp add milligold -- uvx milligold-mcpدر Claude Desktop، Cursor و بقیه برنامه‌ها همان تنظیم بخش Quick start را بگذارید.
نمونه پرسش‌ها
«قیمت طلای ۱۸ عیار در میلی الان هر گرم چند تومان است؟»
«قیمت طلا در میلی در یک ماه گذشته بیشترین و کمترین چقدر بوده؟»
«امروز طلای آب‌شده در میلی گران‌تر شده یا ارزان‌تر؟»
«آمار میلی را بگو: چند کاربر و چقدر طلا؟»
کلیدواژه‌ها: قیمت طلا، قیمت طلای ۱۸ عیار، خرید طلا آنلاین، طلای آب‌شده، قیمت هر گرم طلا، طلای دیجیتال، میلی.
Development
git clone https://github.com/sepehr071/milligold-mcp && cd milligold-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 milli.gold
uv buildTools live in src/milligold_mcp/gold.py; each is a typed async function with a docstring that tells the agent when
to use it. Releases: bump the version in pyproject.toml and server.json, then push a v* tag.
Related servers
tgju-mcp for dollar, euro, gold, coin, crypto and commodity prices from tgju.org
iran-crypto-mcp for cryptocurrency prices on Iranian exchanges
tsetmc-mcp for Tehran Stock Exchange data
iran-mcp: catalog of all Iranian-service MCP servers
Listed on mcpfarsi.ir, the Persian MCP marketplace
Disclaimer
Unofficial and not affiliated with or endorsed by Milli.gold. It is read-only and uses public endpoints of milli.gold, which can change without notice. Prices are informational and not financial advice.
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
8 toolsmg_feesMilli.gold feesARead-onlyIdempotent
Get Milli.gold's current fees for buying, selling, transferring and delivering gold and for wallet withdrawals.
Read live from the site's fees page. Each fee is percent of the amount, but at least min and at most max
('none' = no cap). 'mg' means milligrams of gold. Delivery is physical gold (bars) handed over at a branch.
To price a concrete trade use mg_trade_quote.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | individual = personal account, company = business account. | individual |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds useful context beyond annotations: it reads live from the site's fees page, explains fee fields as percent/min/max, defines 'mg' as milligrams, and clarifies that delivery means physical gold at a branch.
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 tool purpose, then adds the return-shape explanation and the sibling alternative without filler. Every sentence contributes useful selection or interpretation context.
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 one-parameter, read-only lookup with no output schema, the description is complete enough: it explains the fee structure, units, delivery meaning, live source, and when to use mg_trade_quote instead. An agent can select and interpret the call without missing material 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?
The single 'customer' parameter has full schema description coverage, so the schema already explains 'individual' versus 'company'. The description does not add further parameter-specific guidance, so the high-coverage baseline of 3 is appropriate.
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 and resource: 'Get Milli.gold's current fees for buying, selling, transferring and delivering gold and for wallet withdrawals.' It also explicitly distinguishes the tool from the sibling mg_trade_quote by directing concrete pricing there.
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 intended use clearly and names the alternative for a different need: 'To price a concrete trade use mg_trade_quote.' That gives the agent an explicit routing rule between current fee lookup and trade pricing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_get_priceMilli.gold live gold priceARead-onlyIdempotent
Get the current Milli.gold price of 18k melted gold, in Rial per milligram and per gram.
Milli.gold sells gold by the milligram (1 gram = 1000 mg); the quote is the platform's own price
with no tax or making charge. as_of is Tehran time. For the trend over a day, week or month use
mg_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 real domain context that the annotations can't — the quote excludes tax and making charge, and `as_of` is in Tehran time. It stops short of saying how fresh or cached the quote is beyond the as_of field, which is the only remaining gap.
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 the unit/tax caveats, then the sibling redirect. Nothing is padded and the most important fact 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?
There is no output schema, so the description carries the burden of explaining the return value — and it does, specifying both units (per mg and per gram), the currency (Rial), the tax/making-charge exclusion, and the timezone of the timestamp. An agent can call this and interpret the result with no further information.
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 takes no parameters, so baseline is 4. The mention of `as_of` being Tehran time describes a response field rather than an input, but it is still useful orientation for interpreting the call result.
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 the current Milli.gold price of 18k melted gold') and immediately pins down the unit domain (Rial per milligram and per gram). This is clearly separable from mg_price_history and mg_platform_stats, which deal with trends and platform metrics rather than a spot quote.
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 the agent: 'For the trend over a day, week or month use mg_price_history.' The alternative and the condition that selects it are both named, so an agent won't call this for time-series data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_help_topicsMilli.gold help topicsARead-onlyIdempotent
Find Milli.gold help-center articles (how to buy, sell, deliver, transfer, verify, fees) by English keyword.
The help center has about 80 articles in Persian; their URLs are English, so match on English words. Read an article with mg_read. For the fee table itself use mg_fees.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | English keywords matched against help article URLs, e.g. 'delivery', 'fee', 'card'. Empty = all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful corpus context (~80 articles, Persian content with English URL slugs). It says nothing about result ordering or how many hits come back, which with no output schema is a real remaining gap.
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 purpose and followed by the two routing pointers. No filler or restatement of the 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?
For a one-parameter read tool with no output schema, the description covers what it searches, how to phrase the query, what happens when the query is empty, and which sibling to call next. Nothing an agent needs 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 applies, but the description adds non-obvious meaning: the query matches URL slugs rather than article text, and the examples in the prose ('how to buy, sell, deliver, transfer, verify, fees') show the agent what vocabulary works. That is real value beyond the schema's own 'card' example.
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 Milli.gold help-center articles') plus the enumerated topic space and the matching mechanism (English keyword). An agent can immediately distinguish this search tool from mg_read (which fetches an article) and mg_fees (the fee table).
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 the agent: read results with mg_read, and use mg_fees for the fee table itself. It also pre-empts the obvious failure mode by explaining the articles are Persian but their URLs are English, so English keywords must be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_latest_postsMilli.gold latest postsARead-onlyIdempotent
List the newest posts on Milli.gold's news, magazine or help site, with date, categories, summary and URL.
News carries daily 18k gold, ounce, coin and market reports in Persian. Only the newest posts are available (about 20 news, 10 mag, 10 help); there is no search or older pages. Read a full post with mg_read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many posts to return, newest first (1-20). | |
| section | No | news = daily gold price and market news, mag = gold buying guides, help = how to use Milli. | news |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the description focuses on tool-specific traits. It adds per-section availability limits, the absence of search or older pages, Persian-language news content, returned fields, and the handoff to mg_read.
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 action and scope, then adds constraints and the mg_read handoff. Every sentence carries useful information, and there is no redundant restatement of the tool name or 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 provides the return fields (date, categories, summary, URL), availability constraints, section context, and the alternative for full-post reading. Combined with annotations covering safety and schema covering parameters, an agent has enough information to invoke 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 schema already documents limit and section semantics. The description adds useful context beyond the schema by noting approximate per-section counts ('about 20 news, 10 mag, 10 help') and the nature of the news content, which helps an agent choose section and limit.
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 and resource: 'List the newest posts' on Milli.gold's news, magazine, or help site. It also explicitly routes full-post reading to the sibling tool mg_read, so an agent can distinguish listing from reading.
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 clearly states the main usage constraint ('Only the newest posts are available... there is no search or older pages') and names mg_read as the alternative for reading a full post. The only gap is that it does not explicitly clarify how the 'help' section relates to the sibling mg_help_topics tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_platform_statsMilli.gold platform statisticsARead-onlyIdempotent
Get Milli.gold's headline numbers: users, trades, gold traded, gold held and branches.
Figures are rounded totals the company publishes; weights are in kilograms. For prices use mg_get_price.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 adds genuinely useful semantics beyond that: figures are rounded company-published totals and weights are in kilograms, which prevents misreading the numbers as exact or unit-ambiguous.
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 first front-loads what is returned, the second carries the rounding/unit caveat and the sibling redirect. No filler and nothing buried.
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 does the work of enumerating the returned metrics, their units and their rounding. Minor gap: it doesn't say whether figures are all-time cumulative or point-in-time, which an agent might want when reporting them.
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 takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It uses the space instead to explain the units of the returned values, which is the closest analogue to parameter meaning here.
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 a specific resource ('Milli.gold's headline numbers') and enumerates exactly what comes back: users, trades, gold traded, gold held, branches. This is clearly distinguishable from the sibling price tools, which the description also acknowledges.
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 the agent away for price data ('For prices use mg_get_price'), which is the main ambiguity risk given the sibling tools. It doesn't mention mg_price_history, so routing is not fully exhaustive, but the primary when-to-use is stated clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_price_historyMilli.gold price historyARead-onlyIdempotent
Get the Milli.gold 18k gold price series for a day, week or month, with high, low and change.
Prices are Rial per milligram: multiply by 100 for Toman per gram (260,000 Rial/mg = 26,000,000 Toman/g).
time is Tehran time. Points are thinned evenly to points.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Window: DAILY = last ~24 h (15-min points), WEEKLY = last week, MONTHLY = last ~month. | DAILY |
| points | No | Max points to return, evenly spaced (2-50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds real value beyond that with the unit convention (Rial per milligram, with a worked conversion to Toman per gram), the Tehran timezone of the series, and the fact that points are evenly thinned rather than raw. It does not mention freshness/lag or rate limits, but the disclosed constraints are the ones 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?
Three short sentences, front-loaded with what is returned and followed by the two facts most likely to cause downstream errors. The parenthetical conversion example is slightly verbose but justifies itself as disambiguation between Rial and Toman.
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 does state the return shape (series with high, low and change) plus units and timezone, which covers what an agent needs to interpret results. It stops short of describing ordering, point timestamps, or how empty/short ranges behave, which is a modest gap for a small read-only tool.
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 both parameters are already fully documented, including the enum meanings and the 2-50 range. The description only echoes points-thinning and timezone, adding little the schema does not already carry; baseline 3 is appropriate.
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: retrieves the Milli.gold 18k gold price *series* over a day/week/month with high, low and change. That clearly separates it from a plain price reader, but the description never names mg_get_price, so the agent must infer the history-vs-current split from the tool name alone.
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?
Usage is implied rather than stated: the period windows make it obvious this is for historical series, but there is no explicit 'use this when you need a trend, use mg_get_price for the current price' routing despite that sibling existing. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mg_readMilli.gold read postARead-onlyIdempotent
Read the text of one Milli.gold news, magazine or help post, with tables flattened to 'a | b | c' lines.
Only milli.gold news, mag and help URLs are accepted. Text is Persian; digits stay as written on the page.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of a milli.gold news, mag or help post, from mg_latest_posts or mg_help_topics. | |
| max_chars | No | Cut the text at this many characters (500-20000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the bar is lower; the description still adds real value by disclosing the output shape (tables flattened to pipe-delimited lines), the language of the text (Persian), and that digits are preserved as written rather than normalized. It doesn't describe failure behavior for disallowed URLs, which is the remaining gap.
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 action and output transformation, then the input restriction, then a language/output caveat. No filler and nothing 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 carries the burden of describing the return value and does so concretely (flattened tables, Persian text, verbatim digits). It is nearly complete for a simple 2-parameter read tool; only error handling for invalid URLs is unaddressed.
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 both url and max_chars fully documented including ranges, so the baseline is 3. The description adds only a marginal constraint on the url parameter (only news/mag/help milli.gold URLs), and says nothing about max_chars truncation 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 (read the text of one post) plus a concrete output trait (tables flattened to 'a | b | c' lines). This clearly distinguishes it from the sibling listing tools mg_latest_posts and mg_help_topics, which surface posts rather than their full text.
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 eligibility constraint: only milli.gold news, mag and help URLs are accepted, reinforced by the schema note that URLs come from mg_latest_posts or mg_help_topics. It doesn't state what to do when a non-matching URL is passed or point to an alternative for other content types, so it stops 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.
mg_trade_quoteMilli.gold trade cost quoteARead-onlyIdempotent
Estimate what a gold trade on Milli.gold costs or pays out right now, fee included, at the live price.
Give grams for a buy or a sale, or toman (a budget, fee included) for a buy. The fee follows the fees page:
the larger of min and percent of the amount (today 1 mg or 0.5 %). pay_toman is the total for a buy,
receive_toman the payout of a sale. It is an estimate: new-user fee waivers and wallet withdrawal fees are not
applied, and the price moves. For the fee table itself use mg_fees.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | buy = you buy gold, sell = you sell gold. | |
| grams | No | Amount of 18k gold in grams (e.g. 0.5). | |
| toman | No | Buy only: total budget in Toman, fee included (e.g. 5000000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnly, idempotent and non-destructive behaviour, but the description adds material context: the fee is the larger of `min` and `percent` (today 1 mg or 0.5 %), new-user waivers and wallet withdrawal fees are not applied, and the price moves. That is substantive disclosure beyond the structured 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?
Four sentences, front-loaded with the purpose before invocation details and caveats. Every sentence carries unique information: what it returns, how to invoke it, how the fee works, and what is excluded.
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, yet the description names the relevant outputs (`pay_toman` for a buy, `receive_toman` for a sale) and qualifies the result as an estimate subject to waivers and price movement. Nothing an agent needs in order to call it correctly or interpret the result 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; the description adds the either/or relationship between `grams` and `toman` and clarifies that `toman` is a fee-inclusive buy budget. The gain over the schema is modest, since the schema already describes each parameter and marks `toman` as buy-only.
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 and resource: 'Estimate what a gold trade on Milli.gold costs or pays out right now, fee included, at the live price.' It also distinguishes itself from the sibling mg_fees, so an agent can tell the two apart 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 conditional parameter usage directly ('Give `grams` for a buy or a sale, or `toman` ... for a buy') and names the alternative for a related need ('For the fee table itself use mg_fees'). The condition that selects between the tool and its sibling is explicit.
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.
5 tool updates
v0.2.1- Added
mg_fees - Added
mg_help_topics - Added
mg_latest_posts - Added
mg_read - Added
mg_trade_quote
3 tool updates
v0.1.1- First observed
mg_get_price - First observed
mg_platform_stats - First observed
mg_price_history
TDQS
Scored across 8 tools
Each tool targets a distinct resource or action, and the descriptions actively disambiguate the near-pairs (mg_get_price vs mg_price_history, mg_fees vs mg_trade_quote) with explicit 'for X use Y' cross-references. Content tools (mg_latest_posts, mg_help_topics, mg_read) have clearly separated roles: list, find, read.
All names share a consistent mg_ prefix and snake_case, making the family obvious. There are minor inconsistencies: some names are verb-first (mg_get_price, mg_read) while others are noun phrases (mg_price_history, mg_fees), and mg_get_price vs mg_price_history invert the same two words in different orders.
Eight tools is well within the ideal range and every tool earns its place: price data, fees, quoting, content discovery, reading, and stats. Nothing looks like padding or a redundant wrapper.
The surface covers current and historical pricing, the fee schedule, a concrete trade estimator, content browsing/reading, and platform stats — a solid read-only view of the domain. Gaps are minor but real: no post search or pagination beyond the newest items, and no coin/ounce price endpoint (those appear only inside news posts).
Maintenance
Related MCP Connectors
Live Iran exchange rates, gold, crypto, and Toman market data for AI agents.
FiLot gives an AI assistant the world gold price per gram in your currency, the price on a past date, and zakat on gold. Each price comes with a signature and a link to check it. It also checks gold bar records and, for Indonesia, gives dealer buyback prices and gold tax. In public beta. No FiLot account needed.
Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.
Precious metals AI analyst with 12 tools — prices, portfolio, chat, receipts, and more.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that brings public gold (XAUUSD) market data into Claude, ChatGPT, and other MCP clients. Free tier includes 13 tools for price, OHLCV, macro context, correlations, and more.41337 PyPI8MIT

Arzbin MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceLive Iran exchange rates, gold, crypto, and Toman/Rial market data for AI agents.2MIT- 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 PyPI5MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to fetch live gold, silver, platinum, and palladium prices by karat and currency, calculate jewelry melt value, and convert exact gold weight units such as tola, troy ounce, and Thai baht.4330 npmMIT