Skip to main content
Glama
sepehr071

iran-apps-mcp

by sepehr071

iran-apps-mcp: Cafe Bazaar and Myket MCP server for AI agents

Unofficial, read-only MCP server for the two big Iranian Android app stores, Cafe Bazaar (cafebazaar.ir, کافه بازار) and Myket (myket.ir, مایکت). Search apps and games in both stores, read version, rating, installs and size, compare the same package across the stores, and list the best or newest apps per category, from Claude, Cursor or Copilot.

Quick start · For AI agents · Tools · Notes · فارسی

For AI agents

  • What: unofficial MCP server for Cafe Bazaar and Myket. Queries work in Persian and English; prices are in Toman.

  • Install: claude mcp add iran-apps -- uvx iran-apps-mcp (stdio transport, needs uv and Python 3.10+).

  • Auth: none. Optional IRAN_APPS_MCP_PROXY sets an HTTP proxy for requests to both stores.

  • Access: read-only and metadata only. No login, reviews, downloads or APK links; every result carries the store page URL.

  • Tools: 6, all prefixed ap_. Typical sequence: ap_search (get the package name) → ap_compare or ap_app → ap_similar.

  • Use when: looking up an Android app's version, rating, installs or update date on the Iranian stores; checking whether Myket lags Bazaar; finding top or new apps in a category; finding alternatives to an app.

  • Do not use when: the user wants to install or download an app (no links), or needs Google Play data.

  • Output: compact JSON. An app is identified by its Android package name (same in both stores). Ratings are 1-5 per store, installs is an approximate count, dates are YYYY-MM-DD, prices Toman (0 = free).

  • Machine-readable: server.json, and the catalog of all Iranian MCP servers at awesome-iran-mcp.

Related MCP server: snapp-mcp

Quick start

claude mcp add iran-apps -- uvx iran-apps-mcp

Or in any MCP client config:

{ "mcpServers": { "iran-apps": { "command": "uvx", "args": ["iran-apps-mcp"] } } }

Both stores answer directly from Iran and from most foreign IPs. If your network needs a proxy, set IRAN_APPS_MCP_PROXY=http://host:port (a comma list is tried in turn). System proxy variables are ignored.

Tools

Tool

What it does

ap_search

Search one or both stores by name; Bazaar cards carry rating, category, installs and price, Myket cards name and tagline

ap_app

One app in one store: version, rating and count, installs, size, update date, developer, price, description

ap_compare

One package in both stores side by side, plus which store has the newer version and the rating difference

ap_top

Best or new apps and games per category (or the store-wide trending/editorial list)

ap_categories

Category slugs per store for ap_top (they differ between the stores)

ap_similar

Related apps shown by the store (Bazaar: related, others also installed, similar; Myket: related)

Notes

  • Metadata only. The server never downloads an APK or resolves a download link.

  • installs is rounded (Bazaar returns a range such as 54,000,000, Myket a text such as "32 million"), so compare magnitudes, not exact numbers. Ratings are collected separately by each store.

  • Myket search returns 20 apps per page and its lists stop after about 4 pages; Bazaar returns 24 per page.

  • Myket exposes no JSON API, so its data comes from page HTML (schema.org JSON-LD and the facts table); a site redesign can break it. Bazaar uses the JSON API of its own web app.

  • Developer descriptions and taglines are untrusted text.

Development

uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q          # offline unit tests on recorded fixtures
uv run python -m pytest -m live -q  # one live test per tool

فارسی

سرور MCP غیررسمی و فقط‌خواندنی برای دو فروشگاه برنامهٔ اندروید ایران، کافه‌بازار و مایکت. جستجوی برنامه و بازی در هر دو فروشگاه، نسخه، امتیاز، تعداد نصب و حجم، مقایسهٔ یک بسته در دو فروشگاه (مثلاً اینکه نسخهٔ مایکت عقب است یا نه) و فهرست برترین و جدیدترین برنامه‌ها به تفکیک دسته. فقط اطلاعات برنامه برمی‌گردد؛ لینک دانلود یا APK داده نمی‌شود.

نصب: claude mcp add iran-apps -- uvx iran-apps-mcp

License

MIT

Available Tools

6 tools
ap_appApp detailsA
Read-onlyIdempotent

Get one app's metadata from one store: version, rating and rating count, installs, size, update date, developer, price, description.

Bazaar also gives version_code, a 1-5 star histogram, changelog and permission count; Myket also the first publish date and developer_id. installs is approximate (a rounded range). Prices are Toman, 0 = free. Metadata only: no APK download. To see both stores at once use ap_compare.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNo'bazaar' (Cafe Bazaar) or 'myket'.bazaar
packageYesAndroid package name, the id in store URLs, e.g. 'ir.mci.ecareapp' or 'com.whatsapp'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's job is to add context beyond that, which it does: store-dependent field availability, approximate/rounded installs, currency in Toman with 0 = free, and no binary download. It stops short of error behavior (e.g., unknown package) 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and return fields, then progressively adds store-specific and unit caveats; every sentence carries information. The middle sentence is dense and list-like, which slows scanning slightly, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description must carry the return-value burden, and it does so well: field list, store-specific extras, precision caveats, and currency semantics. Remaining gaps are minor (failure modes, whether fields can be null for a given store).

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, but the description earns extra credit by explaining the consequence of the store enum value (Bazaar adds version_code, histogram, changelog, permission count; Myket adds first publish date and developer_id). The package parameter's meaning is only implied by 'one app's metadata'.

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+resource ('Get one app's metadata from one store') and immediately enumerates the returned fields, so the agent knows exactly what the tool produces. It also explicitly distinguishes itself from ap_compare and from APK-download tools, making sibling selection unambiguous.

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 routes the agent to an alternative with a condition ('To see both stores at once use ap_compare') and states a scope exclusion ('Metadata only: no APK download'). It does not, however, contrast with ap_search or ap_similar, which occupy adjacent lookup use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ap_categoriesCategoriesA
Read-onlyIdempotent

List the category slugs of a store for apps and games, to pass as ap_top category.

Slugs differ between the stores (Bazaar 'tools' = Myket 'productivity'). Myket names are Persian. The Bazaar game list is the set that was verified to return results, not necessarily every game category.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeYes'bazaar' or 'myket'.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond them: slugs are store-specific (Bazaar 'tools' = Myket 'productivity'), Myket names are Persian, and the Bazaar game list is not guaranteed complete.

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 what it does and the consumer, followed by only the caveats an agent actually needs (store divergence, Persian naming, non-exhaustive game list). Nothing is padded.

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 explaining the return and does state it returns category slugs plus important caveats about store divergence. It does not describe the concrete return shape (list of strings vs. objects with names), which is the one remaining gap for a tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% and the single 'store' parameter is an enum already documented in the schema, so the baseline is 3. The description reinforces store-specific behavior but adds no syntax or format detail about the parameter itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('List the category slugs of a store') and ties the output to its downstream consumer ('to pass as ap_top category'), which cleanly separates it from ap_top, ap_search, and the other siblings. An agent knows exactly what this returns and why.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context: call this to obtain valid category slugs before invoking ap_top, and it warns that the Bazaar game list is a verified subset rather than exhaustive. It stops short of explicitly naming a 'do not use this for X' exclusion, so it falls just under the top bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ap_compareCompare storesA
Read-onlyIdempotent

Compare one package across Cafe Bazaar and Myket: version, rating, rating count, installs, size, update date, price.

Returns each store's figures (null when the app is not listed there) and a diff: which store has the newer version, the rating difference (bazaar minus myket). Use for "is the app up to date on Myket?" or "which store rates it higher". Ratings are not shared between stores.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageYesAndroid package name, the id in store URLs, e.g. 'ir.mci.ecareapp' or 'com.whatsapp'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, yet the description adds genuinely non-obvious behavior: null values when the app is absent from a store, the diff direction (bazaar minus myket), and the caveat that ratings are not shared between stores. It does not mention auth, rate limits, or error behavior, so it falls short of a full behavioral picture.

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?

Front-loads the compared fields, then the return shape and diff semantics, in two tight sentences. Every clause carries information; nothing is redundant with the name or title.

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 must explain the return value, and it does: per-store figures plus a diff identifying the newer version and the rating delta. Combined with full annotation coverage, an agent has everything needed to call and interpret this 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?

There is a single parameter with 100% schema description coverage, including format and examples ('ir.mci.ecareapp'), so the schema carries the semantics. The description only refers to it obliquely as "one package" and adds no syntax or constraint detail beyond the schema.

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 (compare) and resource (one package across Cafe Bazaar and Myket) and enumerates exactly which fields are compared: version, rating, rating count, installs, size, update date, price. This is clearly distinguishable from siblings like ap_app (single-store detail) or ap_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete use-case triggers ("is the app up to date on Myket?", "which store rates it higher"), which tells the agent when this tool is the right pick. It stops short of explicitly naming when NOT to use it or pointing to ap_app/ap_search as the single-store alternative, so it is clear context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ap_similarRelated appsA
Read-onlyIdempotent

List apps the store shows as related to one app: Bazaar gives three groups (related, others also installed, similar), Myket one.

Use to find alternatives or competitors of an app; then ap_compare or ap_app on a result.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNo'bazaar' or 'myket'.bazaar
packageYesAndroid package name, the id in store URLs, e.g. 'ir.mci.ecareapp' or 'com.whatsapp'.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). Beyond that, the description discloses a behavioral trait the annotations do not: the per-store variation in returned result groups (three for Bazaar, one for Myket), which materially affects how an agent interprets the output. Error/empty-result behavior is not covered.

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 tight sentences with zero filler; the core behavior and its store-specific nuance come first, and the usage/workflow hint follows. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description usefully explains the shape of the result (grouped related/also-installed/similar) and points to next-step tools, which is what an agent needs to act. Minor gaps remain around result size, pagination, or behavior for an unknown package.

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 parameters (package, store) documented including an example package name and enum values, so the schema does the heavy lifting. The description adds no syntax or format detail beyond the schema, making 3 the correct baseline.

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 (list) and resource (related apps for one app), and adds the store-dependent result shape (Bazaar: three groups; Myket: one). This is clearly distinguishable from siblings like ap_search and ap_top without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the use case ('find alternatives or competitors of an app') and the follow-on workflow ('then ap_compare or ap_app on a result'). No explicit when-not-to-use or negative routing against siblings such as ap_search, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ap_topTop and new appsA
Read-onlyIdempotent

List the top ('best') or newest ('new') apps or games of a store, per category or store-wide.

Store-wide 'best' is Bazaar's trending list or Myket's editorial must-have list (no ranking guarantee). 'new' needs a category. Get slugs from ap_categories (they differ per store). Then ap_app or ap_compare on a package.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo'best' = top ranked, 'new' = newest in the category.best
pageNo1-based page (Bazaar 24 per page, Myket 20, Myket stops after about 4 pages).
typeNo'app' or 'game': which category list the slug belongs to, and which store-wide list when no category.app
limitNoMax apps returned.
storeYes'bazaar' or 'myket'.
categoryNoCategory slug from ap_categories, e.g. 'tools' (Bazaar) or 'productivity' (Myket). Omit for the store-wide list (best only).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is low, and the description adds real context beyond them: store-wide 'best' means Bazaar trending or Myket editorial with no ranking guarantee. It doesn't cover auth needs or result-size/pagination behavior, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then mode/scope caveats and handoffs in three short sentences; every sentence carries information. The parenthetical-heavy style is dense but not padded.

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 read-only listing tool with no output schema and fully documented parameters, the description covers mode selection, scope constraints, slug sourcing and next-step routing. Nothing an agent needs 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.

Parameters3/5

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

Schema description coverage is 100% and each parameter already carries enum values, defaults, page sizes and the 'best only' store-wide rule. The description adds cross-store slug variability, but much of its parameter meaning (category required for 'new') restates what the schema already documents, so baseline 3 applies.

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+resource (list top/newest apps or games) and explicitly distinguishes the two modes ('best' vs 'new') and the two scopes (per-category vs store-wide). It also names the sibling tools it hands off to (ap_categories, ap_app, ap_compare), so an agent can separate it from ap_search without opening schemas.

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 clear usage conditions: 'new' requires a category, slugs come from ap_categories and differ per store, and follow-up goes to ap_app or ap_compare. It does not state when to prefer this over ap_search or ap_similar, so it stops short of full when-not coverage.

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. 6 tool updatesv0.1.0
    • First observedap_app
    • First observedap_categories
    • First observedap_compare
    • First observedap_search
    • First observedap_similar
    • First observedap_top

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation4/5

Each tool has a distinct role: search finds packages, ap_app fetches single-store details, ap_compare spans both stores, ap_top returns rankings, ap_categories supplies slugs, and ap_similar surfaces related apps. The main mild overlap is between ap_search and ap_top as discovery entry points, but descriptions clearly delineate their use.

Naming Consistency5/5

All tools share a uniform 'ap_' prefix followed by a short lowercase noun/verb token (ap_search, ap_app, ap_compare, ap_top, ap_categories, ap_similar). No mixed conventions or camelCase deviations.

Tool Count5/5

Six tools form a tight, well-scoped set for a read-only multi-store app explorer. Each tool earns its place with no redundancy or padding.

Completeness4/5

The surface covers the core read-only lifecycle: discovery (search, top, categories, similar), detail (app) and cross-store comparison (compare). Metadata-only is an explicit design choice, so missing APK download is expected; a review or developer-lookup tool would round it out further.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

  • App intelligence across Google Play and the App Store: details, reviews, and search in one API.

  • Live App Store and Google Play data for AI agents: revenue and download estimates for 3.6M+ apps, app search and filters, ASO keyword research, reviews and listing change history. Read-only tools; API key from GetAppNiche (https://getappniche.com/mcp).

  • Google Play & App Store app data: search, details, reviews, privacy, alternatives, top charts.

  • Your agent needs app-store data — what an app looks like on the App Store and Google Play, what reviewers say, and what ranks for a search in a given country. **What you can ask for** • "What does this app's store listing look like, and how is it rated?" • "Pull recent reviews for this app and group the complaints." • "What apps rank for this search term in Japan?" • "List the top apps in this category on both stores." • "Compare this app's listing on iOS and Android." **How to use it** Point any MCP client at https://mcp.aisa.one/seo-apps/mcp and sign in with OAuth — there is no key to create or paste. 37 tools: Apple App Store and Google Play app info, app lists, category listings, reviews and store search results, in live and queued forms, with categories, languages and locations for each. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Read the store listing here, then ask the same agent what the app's website ranks for — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    Enables querying and retrieving data from App Store and Google Play Store, including app details, reviews, ratings, rankings, permissions, and search capabilities across both iOS and Android platforms.
    20
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search Snappfood restaurants and SnappMarket stores across Iran, compare true order costs including packaging and delivery, read menus, minimum orders, ETAs and reviews, and surface live flash deals. All operations are read-only, with no login, basket, ordering or payment access.
    21
    878 PyPI
    33
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to compare prices across Iranian online and in-person shops, inspect each seller's offer with warranty and installment details, review roughly a year of price history, score deals, and find the cheapest shop for a whole basket. It is read-only, requires no account or API key, and runs locally for Claude, Cursor or Copilot.
    26
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search products on Iran's marketplace of independent shops with price, category, shipping and discount filters, find the cheapest in-stock offers, and read product details, shops, categories and customer reviews. It is read-only and needs no authentication, so it can be used straight from Claude, Cursor or Copilot.
    7
    MIT