Skip to main content
Glama
milligold-mcp

milligold-mcp

by sepehr071

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.

PyPI Python CI MCP Registry License: MIT mcpfarsi

Install in Cursor Install in VS Code

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-mcp or claude 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_posts or mg_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.json and 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-mcp

Settings → 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-mcp

Or 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

mg_get_price

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

mg_price_history

Gets the 18k gold price series for a day, week or month (period: DAILY, WEEKLY, MONTHLY; points: 2-50, default 24) with first, last, high, low and change percent

mg_platform_stats

Gets Milli.gold's headline numbers: users, trade transactions, gold traded (kg), user balances (kg), burned gold (kg), branches and representatives

mg_fees

Gets the current fees for buying, selling, transferring and delivering gold and for wallet withdrawals (customer: individual or company), each as percent with minimum and maximum

mg_trade_quote

Estimates the cost of a buy or the payout of a sale at the live price, fee included (side: buy or sell; grams, or toman as a buying budget)

mg_latest_posts

Lists the newest posts with date, categories, summary and URL (section: news, mag or help; limit: 1-20)

mg_help_topics

Finds help-center articles by English keyword (e.g. delivery, fee, card); empty query lists all

mg_read

Reads the text of one milli.gold news, magazine or help post (url; max_chars: 500-20000, default 6000)

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, posts

milligold-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 price18 in 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_of and history time values 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. points only 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

MILLIGOLD_MCP_PROXY

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 build

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

  • 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

MIT

Available Tools

8 tools
mg_feesMilli.gold feesA
Read-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.

NameRequiredDescriptionDefault
customerNoindividual = personal account, company = business account.individual

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 priceA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

States a specific verb and resource ('Get the 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.

Usage Guidelines5/5

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 topicsA
Read-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.

NameRequiredDescriptionDefault
queryNoEnglish keywords matched against help article URLs, e.g. 'delivery', 'fee', 'card'. Empty = all.

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 postsA
Read-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.

NameRequiredDescriptionDefault
limitNoHow many posts to return, newest first (1-20).
sectionNonews = daily gold price and market news, mag = gold buying guides, help = how to use Milli.news

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents limit 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.

Purpose5/5

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.

Usage Guidelines4/5

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 statisticsA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 historyA
Read-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.

NameRequiredDescriptionDefault
periodNoWindow: DAILY = last ~24 h (15-min points), WEEKLY = last week, MONTHLY = last ~month.DAILY
pointsNoMax points to return, evenly spaced (2-50).

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 postA
Read-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.

NameRequiredDescriptionDefault
urlYesURL of a milli.gold news, mag or help post, from mg_latest_posts or mg_help_topics.
max_charsNoCut the text at this many characters (500-20000).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 quoteA
Read-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.

NameRequiredDescriptionDefault
sideYesbuy = you buy gold, sell = you sell gold.
gramsNoAmount of 18k gold in grams (e.g. 0.5).
tomanNoBuy only: total budget in Toman, fee included (e.g. 5000000).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description 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.

Purpose5/5

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

The description opens with a specific verb and resource: '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.

Usage Guidelines5/5

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.

  1. 5 tool updatesv0.2.1
    • Addedmg_fees
    • Addedmg_help_topics
    • Addedmg_latest_posts
    • Addedmg_read
    • Addedmg_trade_quote
  2. 3 tool updatesv0.1.1
    • First observedmg_get_price
    • First observedmg_platform_stats
    • First observedmg_price_history

TDQS

A4.3/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    An 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.
    4
    13
    37 PyPI
    8
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to read Tehran Stock Exchange and Iran Fara Bourse market data—quotes, top movers, order books, price history, sector indices, and real vs legal trading—through read-only tools. Requires no API key, returning compact JSON in Rial directly to Claude, Cursor, or Copilot.
    8
    79 PyPI
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    4
    330 npm
    MIT