Koskamo

Dukkani MCP

A read-only community connector for Claude that provides access to Dukkani's public grocery directory of over 3,000 stores in Saudi Arabia. It allows users to find groceries by district or city, prepare shopping lists for WhatsApp orders, and check store availability without sending orders directly.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Dukkani MCP logo, by DukkaniCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Dukkani
MCP endpoint (Streamable HTTP)
https://dukkanlink.com/mcp
Vendor documentation

What you can do with it

  • Find groceries by district, city, or coordinates
  • Prepare a grocery order link with a shopping list
  • List cities covered in the directory
  • Check if a nearby grocery is open

Source and maintenance

Community listingRegistry 1.1.0

Protocol and capabilities

Server
dukkani 626
MCP protocol
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Dukkani (دكّاني, dukkanlink.com) is a Saudi app for neighbourhood groceries (بقالات وتموينات). This server gives you its public grocery directory (about 3,000 groceries in 70+ Saudi cities, most of them placed in their district by official boundaries) and its order page. Use find_groceries when someone in Saudi Arabia wants a nearby grocery / بقالة / تموينات / «أقرب بقالة», in a city or a district (حي). Use prepare_grocery_order when they want to send a shopping list (قائمة مقاضي) to one of those groceries: it returns a link to Dukkani's order page with the list already written; the customer checks it and sends it to the grocery on WhatsApp themselves. Nothing is sent by you. Use dukkani_for_shop_owners when a grocery owner asks about a cashier app, a debt book (دفتر ديون), barcode, or running the shop from a phone. Reply in the user's language (Saudi Arabic if they write Arabic). Never invent groceries, opening hours, phone numbers or prices; say the directory may be out of date and offer the more_url page. Always give the order_url link as returned. When they want the grocery closest to where they are right now, or ask whether a grocery is open, also give nearest_url: it finds their location, shows the closest groceries on a radar with directions and customers' «open now» confirmations, and installs on the phone as the app «أقرب بقالة». A grocery's open field {y, n, m} counts customers who confirmed it open (y) or closed (n) in the last 3 hours, the latest m minutes ago: say it only as «أكّدها زبون مفتوحة قبل m دقيقة» — never as opening hours; null means nobody confirmed.

Tools

4 advertised

find_groceries — دوّر بقالة قريبة — Find nearby groceries (Saudi Arabia)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find neighbourhood groceries (بقالات / تموينات) in Saudi Arabia from Dukkani's public directory, by district (حي) + city, by city, or by coordinates. Returns each grocery's name, city, distance (km, when known), an order_url (Dukkani order page; the customer sends the order on WhatsApp), a map_url and open (customers' open/closed confirmations of the last 3 hours, or null), plus nearest_url: the live «nearest grocery» radar for where the user is now. Groceries that use Dukkani and take orders in the app come first (on_dukkani=true). Use the Arabic district/city names when you have them (e.g. district «النهضة», city «عفيف»).

find_groceries input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "City, e.g. الرياض، جدة، عفيف، بريدة (Arabic preferred)"
    },
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 15,
      "minimum": 1
    },
    "district": {
      "type": "string",
      "description": "District / neighbourhood (حي), e.g. الياسمين، النهضة. Give the city too when you know it."
    },
    "latitude": {
      "type": "number",
      "description": "Optional: the user's latitude (only if they shared it)"
    },
    "longitude": {
      "type": "number",
      "description": "Optional: the user's longitude"
    }
  },
  "additionalProperties": false
}
find_groceries annotations
{
  "title": "Find nearby groceries",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
prepare_grocery_order — جهّز طلب مقاضي — Prepare a shopping-list order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Turn a shopping list into a ready order for one grocery from find_groceries (pass its id, e.g. «d:82» or «b:abc12»). Returns the cleaned list and an order_url: Dukkani's order page with that grocery chosen and the list already written, so the customer only checks it and sends it on WhatsApp. This tool sends nothing by itself.

prepare_grocery_order input schema
{
  "type": "object",
  "required": [
    "grocery_id",
    "items"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Optional note to the grocery (delivery time, «بدون سكر»…)"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 40,
      "minItems": 1,
      "description": "List lines, e.g. «2 حليب المراعي 1 لتر», «رز 5 كيلو», «كرتون بيض»"
    },
    "grocery_id": {
      "type": "string",
      "description": "The id returned by find_groceries (d:<number> or b:<code>)"
    }
  },
  "additionalProperties": false
}
prepare_grocery_order annotations
{
  "title": "Prepare a grocery order link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_cities — المدن المتوفرة — Cities in the directory
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the Saudi cities that have groceries in Dukkani's directory, with how many. Use it when a city is not found or the user asks where it works.

list_cities input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_cities annotations
{
  "title": "Cities in the directory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
dukkani_for_shop_owners — دكّاني لصاحب البقالة — Dukkani for grocery owners
Advertised by the server during the last successful anonymous check.
Advertised read-only

Facts about Dukkani for a grocery owner (cashier on the phone, debt book from a photo of the paper book, barcode, worker in his language, orders from neighbourhood customers) and the links to try it. Use when a shop owner asks for a cashier/POS app, a debt book app or how to run a grocery from a phone in Saudi Arabia.

dukkani_for_shop_owners input schema
{
  "type": "object",
  "properties": {
    "topic": {
      "enum": [
        "overview",
        "cashier",
        "debts",
        "orders",
        "workers",
        "einvoice"
      ],
      "type": "string",
      "default": "overview"
    }
  },
  "additionalProperties": false
}
dukkani_for_shop_owners annotations
{
  "title": "Dukkani for grocery owners",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2156 ms
95th percentile latency
2156 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2156 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http dukkani-mcp https://dukkanlink.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add dukkani-mcp --url https://dukkanlink.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable dukkani-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "dukkani-mcp": {
      "url": "https://dukkanlink.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "dukkani-mcp": {
      "type": "streamableHttp",
      "url": "https://dukkanlink.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start dukkani-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "dukkani-mcp": {
      "type": "http",
      "url": "https://dukkanlink.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http dukkani-mcp https://dukkanlink.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "dukkani-mcp": {
      "url": "https://dukkanlink.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "dukkani-mcp": {
      "serverUrl": "https://dukkanlink.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Dukkani MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.