Skip to main content
Glama
manamurah

ManaMurah MCP Server

by manamurah

manamurah-mcp-server

Удаленный сервер Model Context Protocol (MCP) для данных о потребительских ценах PriceCatcher в Малайзии. Развернут на Cloudflare Workers. 10 строго типизированных инструментов для ИИ-агентов.

Рабочая конечная точка: https://mcp.manamurah.com/mcp (POST, JSON-RPC 2.0)

Источник данных: data.gov.my PriceCatcher — ~3800 торговых точек × ~756 товаров во всех 16 штатах/территориях Малайзии, обновляется еженедельно. 100% публичные государственные данные. Никакие учетные данные в стеке не требуются.


Установка — Claude Desktop

Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json на macOS (или %APPDATA%\Claude\claude_desktop_config.json на Windows):

{
  "mcpServers": {
    "manamurah": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.manamurah.com/mcp"]
    }
  }
}

Перезапустите Claude Desktop. Вы должны увидеть 10 инструментов, перечисленных под значком 🔌. Спросите что-то вроде "harga tembikai di Selangor?" или "what's the cheapest chicken in KL this week?" — LLM автоматически выстроит цепочку search_itemsfind_cheapest.

Related MCP server: Azure Pricing MCP Server

Установка — Claude Code / другие MCP-клиенты

Любой клиент, поддерживающий удаленный MCP (JSON-RPC через HTTP POST):

# One-shot tool listing:
curl -sS -X POST https://mcp.manamurah.com/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq .

Клиенты, поддерживающие нативный удаленный MCP, могут обращаться напрямую к https://mcp.manamurah.com/mcp. Клиенты, работающие только через stdio (например, старые инструменты MCP), могут использовать mcp-remote в качестве прослойки.

Инструменты

Все 10 инструментов доступны только для чтения, являются публичными, а размер ответа ограничен для поддержания компактности контекста LLM. Каждый инструмент содержит подробное описание

  • Ввод JSON-Schema, чтобы LLM выбирала нужный инструмент без угадывания.

Инструмент

Назначение

search_items

Поиск товаров по названию на малайском / английском / китайском / тамильском

find_cheapest

До 10 самых дешевых торговых точек для одного товара на этой неделе

price_history

Еженедельный тренд цен на национальном/штатном/районном/сетевом/городском уровне

nearby_premises

Торговые точки в пределах географического радиуса от координат

compare_prices

Цена одного товара на национальном + штатном + районном уровнях и более

list_chains

Справочник розничных сетей + количество точек + охват

price_change

Разница между текущей неделей и 1 / 3 / 6 / 12 месяцами назад

top_movers

Лидеры роста и падения цен за неделю

category_trends

Динамика по категориям за определенный период

basket_watch

Общая стоимость корзины из 1–20 товаров с течением времени

Все инструменты не требуют настройки, кроме конфигурации MCP выше. Никаких API-ключей. Нет ограничения скорости на стороне клиента (вышестоящий сервер имеет 12-часовой KV edge-кэш, поэтому повторные запросы практически бесплатны).

Пример диалога

Вы: Berapa harga tembikai merah tanpa biji di Selangor minggu ini?

Claude (вызывает search_items(query="tembikai") → получает item_code 21 → вызывает find_cheapest(item_code=21, state="Selangor")):

Tembikai merah tanpa biji di Selangor для недели 2026-04-20: есть только 1 магазин, предоставивший данные PriceCatcher — Jaya Grocer D'Pulze Cyberjaya в районе Sepang по цене RM 5.20/kg. Другие данные в KL показывают, что NSK Seputeh/Cheras/Cheras/Kepong продают аналогичный арбуз по RM 1.69/kg — возможно, стоит выехать в PJ/KL, если вы находитесь в Южном Селангоре.

Структурированный ответ, на основе которого работала LLM:

{
  "item_code": 21,
  "item_name": "TEMBIKAI MERAH TANPA BIJI",
  "weekdate": "2026-04-20",
  "results": [
    {
      "weekdate": "2026-04-20",
      "price": 5.20,
      "premise_name": "JAYA GROCER D`PULZE CYBERJAYA",
      "chain": "JAYA GROCER",
      "chain_type": "SUPERMARKET",
      "state": "Selangor",
      "district": "Sepang"
    }
  ],
  "scope": { "state": "Selangor", "district": null, "chain": null, "chain_type": null },
  "status": "ok",
  "reason": null,
  "warnings": []
}

Архитектура

 Claude Desktop ─ stdio ─ mcp-remote ─ HTTPS ─ mcp.manamurah.com
                                                    │
                                               (Cloudflare Worker, this repo)
                                                    │
                                                  fetch
                                                    ▼
                                        manamurah.com/api/v2/mcp/*
                                                    │
                                               (SvelteKit site +
                                                Cloudflare KV edge cache,
                                                12h TTL)
                                                    │
                                                    ▼
                                            public price data

Этот Worker является тонкой прослойкой протокола — он говорит на MCP JSON-RPC с одной стороны и на стандартном fetch() с другой. Никакой бизнес-логики, никаких учетных данных, никакой привязки к базе данных. Каждый вызов инструмента направляется ровно на одну вышестоящую конечную точку /api/v2/mcp/<tool> и передает JSON-ответ дальше.

Тонкая прослойка означает:

  • Около 400 строк кода здесь — это почти полностью JSON с описанием инструментов.

  • Логика запросов/кэширования/индексации находится выше, где она расположена вместе с уровнем данных.

  • Обновление поведения инструмента редко требует повторного развертывания Worker.

Самостоятельный хостинг / форк

git clone https://github.com/manamurah/mcp-server
cd mcp-server
pnpm install

# Local dev — hot-reloads on src/ changes, binds to 127.0.0.1:8787
pnpm dev

# Exercise it:
curl -sS -X POST http://127.0.0.1:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'

# Deploy to your own Cloudflare account:
pnpm deploy

Чтобы указать на промежуточную копию вышестоящего сервера (полезно, когда manamurah_20240322 выпускает новые конечные точки /api/v2/mcp/*), переопределите базовый URL в wrangler.toml:

[vars]
MANAMURAH_API_BASE = "https://staging.manamurah.com"

Примечания к протоколу

  • Транспорт: HTTP POST на /mcp, JSON-RPC 2.0. CORS открыт, поэтому браузерные MCP-клиенты работают без прокси.

  • Поддерживаемые методы: initialize, tools/list, tools/call, prompts/list (пусто), resources/list (пусто), ping.

  • Форма ответа инструмента: Блоки MCP content: [{ type: "text", text: ... }] с необработанной JSON-полезной нагрузкой, также прикрепленной как structuredContent для клиентов, которые предпочитают такой формат.

  • Обработка ошибок: бизнес-проблемы (неверные аргументы, отсутствие данных за эту неделю) возвращаются как { "status": "no_data", "reason": ... } с кодом HTTP 200, чтобы LLM могла их озвучить. Только сбои транспорта/инфраструктуры вызывают ошибки JSON-RPC.

  • Вышестоящие ошибки: 5xx на /api/v2/mcp/* всплывают как JSON-RPC code: -32603 со статусом вышестоящего сервера в data. 4xx проходят без изменений (ошибка валидации клиента уже оформлена как JSON-конверт на стороне вышестоящего сервера).

См. также

  • manamurah-mcp-2026 — Python stdio MCP-сервер, охватывающий те же 10 инструментов. Используйте его, если вам нужен локальный MCP-бинарный файл (без Cloudflare, без Worker).

  • manamurah_20240322 — сайт SvelteKit на manamurah.com. Хостит как публичный веб-сайт, так и прокси-конечные точки /api/v2/mcp/*, которые вызывает этот Worker.

  • manamurah-data-2026 — Python ETL, который наполняет индексы, лежащие в основе всего остального. Ночной конвейер, источник истины PriceCatcher с data.gov.my.

Лицензия

MIT. См. LICENSE.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables programmatic querying of Azure resource pricing information from the Azure Retail Prices API through a structured four-step workflow.
    8
    -
  • F
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that provides real-time cryptocurrency price fetching capabilities using the CoinGecko API. It enables LLMs to retrieve and process the latest price for any coin by its name or symbol.
    2
    -
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.
    7
    82 npm
    30
    AGPL 3.0