Skip to main content
Glama
manamurah

ManaMurah MCP Server

by manamurah

manamurah-mcp-server

Remote Model Context Protocol (MCP) Server für malaysische PriceCatcher-Verbraucherpreisdaten. Bereitgestellt auf Cloudflare Workers. 10 stark typisierte Tools für KI-Agenten.

Live-Endpunkt: https://mcp.manamurah.com/mcp (POST, JSON-RPC 2.0)

Datenquelle: data.gov.my PriceCatcher — ~3.800 Standorte × ~756 Artikel in allen 16 malaysischen Bundesstaaten/Territorien, wöchentlich aktualisiert. 100 % öffentliche Regierungsdaten. Nirgendwo im Stack sind Anmeldedaten erforderlich.


Installation — Claude Desktop

Hinzufügen zu ~/Library/Application Support/Claude/claude_desktop_config.json unter macOS (oder %APPDATA%\Claude\claude_desktop_config.json unter Windows):

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

Starten Sie Claude Desktop neu. Sie sollten die 10 Tools unter dem 🔌-Symbol sehen. Fragen Sie etwas wie "harga tembikai di Selangor?" oder "what's the cheapest chicken in KL this week?" — die LLM wird automatisch search_itemsfind_cheapest verketten.

Related MCP server: Azure Pricing MCP Server

Installation — Claude Code / andere MCP-Clients

Jeder Client, der Remote-MCP unterstützt (JSON-RPC über 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 .

Clients, die natives Remote-MCP unterstützen, können direkt auf https://mcp.manamurah.com/mcp verweisen. Clients, die nur stdio unterstützen (z. B. ältere MCP-Tools), können mcp-remote als Shim verwenden.

Tools

Alle 10 Tools sind schreibgeschützt, öffentlich und in der Antwortgröße begrenzt, um LLM-Kontexte kompakt zu halten. Jedes Tool enthält eine detaillierte Beschreibung

  • JSON-Schema-Eingabe, damit die LLM das richtige Tool ohne Raten auswählt.

Tool

Zweck

search_items

Artikel nach Namen in Malaiisch / Englisch / Chinesisch / Tamil finden

find_cheapest

Bis zu 10 günstigste Standorte für einen Artikel diese Woche

price_history

Wöchentlicher Preistrend auf nationaler/Bundesstaats-/Distrikt-/Ketten-/städtischer Ebene

nearby_premises

Standorte innerhalb eines geografischen Radius einer Koordinate

compare_prices

Preis eines Artikels über national + Bundesstaat + Distrikt + mehr

list_chains

Verzeichnis der Einzelhandelsketten + Standortanzahl + Abdeckung

price_change

Delta zwischen der aktuellen Woche und vor 1 / 3 / 6 / 12 Monaten

top_movers

Größte wöchentliche Gewinner + Verlierer

category_trends

Bewegung pro Kategorie über einen Zeitraum

basket_watch

Gesamtkosten für einen Warenkorb mit 1–20 Artikeln im Zeitverlauf

Alle Tools erfordern keine Einrichtung über die oben genannte MCP-Konfiguration hinaus. Keine API-Schlüssel. Kein Rate-Limiting auf Client-Seite (Upstream verfügt über einen 12-Stunden-KV-Edge-Cache, sodass wiederholte Abfragen im Wesentlichen kostenlos sind).

Beispielkonversation

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

Claude (ruft search_items(query="tembikai") auf → erhält item_code 21 → ruft find_cheapest(item_code=21, state="Selangor") auf):

Tembikai merah tanpa biji di Selangor für die Woche 20.04.2026: Es gibt nur 1 Geschäft, das PriceCatcher-Daten meldet — Jaya Grocer D'Pulze Cyberjaya im Distrikt Sepang für RM 5,20/kg. Andere Daten in KL zeigen, dass NSK Seputeh/Cheras/Kepong ähnliche Wassermelonen für RM 1,69/kg verkaufen — es könnte sich lohnen, PJ/KL zu verlassen, wenn Sie im Süden von Selangor sind.

Die strukturierte Antwort, mit der die LLM gearbeitet hat:

{
  "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": []
}

Architektur

 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

Dieser Worker ist ein dünner Protokoll-Shim — er spricht MCP JSON-RPC auf der einen Seite und Standard fetch() auf der anderen. Keine Geschäftslogik, keine Anmeldedaten, keine Datenbankanbindung. Jeder Tool-Aufruf geht an genau einen Upstream /api/v2/mcp/<tool>-Endpunkt und leitet die JSON- Antwort durch.

Den Shim dünn zu halten bedeutet:

  • Die ~400 Zeilen hier sind fast ausschließlich Tool-Beschreibungs-JSON.

  • Abfrage-/Caching-/Index-Logik befindet sich Upstream, wo sie sich mit der Datenschicht befindet.

  • Das Aktualisieren des Verhaltens eines Tools erfordert selten eine erneute Bereitstellung des Workers.

Selbst-Hosting / Fork

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

Um auf eine Staging-Kopie des Upstreams zu verweisen (nützlich, wenn manamurah_20240322 neue /api/v2/mcp/*-Endpunkte bereitstellt), überschreiben Sie die Basis-URL in wrangler.toml:

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

Protokollhinweise

  • Transport: HTTP POST unter /mcp, JSON-RPC 2.0. CORS-offen, damit browserbasierte MCP-Clients ohne Proxy funktionieren.

  • Unterstützte Methoden: initialize, tools/list, tools/call, prompts/list (leer), resources/list (leer), ping.

  • Tool-Antwortform: MCP content: [{ type: "text", text: ... }] Blöcke mit dem rohen JSON-Payload, der auch als structuredContent für Clients angehängt ist, die dies bevorzugen.

  • Fehlerbehandlung: Geschäftliche Probleme (ungültige Argumente, keine Daten für diese Woche) werden als { "status": "no_data", "reason": ... } bei HTTP 200 zurückgegeben, damit die LLM sie erläutern kann. Nur Transport-/Infrastruktur- Fehler lösen JSON-RPC-Fehler aus.

  • Upstream-Fehler: 5xx unter /api/v2/mcp/* werden als JSON-RPC code: -32603 mit dem Upstream-Status in data weitergegeben. 4xx werden unverändert durchgereicht (Client-Validierungsfehler sind bereits auf der Upstream-Seite als JSON-Umschlag geformt).

Verwandtes

  • manamurah-mcp-2026 — Python stdio MCP-Server, der dieselben 10 Tools abdeckt. Verwenden Sie diesen stattdessen, wenn Sie ein lokales MCP-Binary wünschen (kein Cloudflare, kein Worker-Hop).

  • manamurah_20240322 — die SvelteKit-Seite unter manamurah.com. Hostet sowohl die öffentliche Website als auch die /api/v2/mcp/*-Proxy-Endpunkte, die dieser Worker aufruft.

  • manamurah-data-2026 — das Python-ETL, das die Indizes hinter allem anderen füllt. Nächtliche Pipeline, data.gov.my PriceCatcher als Quelle der Wahrheit.

Lizenz

MIT. Siehe 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