Skip to main content
Glama
manamurah

ManaMurah MCP Server

by manamurah

manamurah-mcp-server

Servidor remoto de Protocolo de Contexto de Modelo (MCP) para datos de precios de consumo de PriceCatcher en Malasia. Desplegado en Cloudflare Workers. 10 herramientas con tipado fuerte para agentes de IA.

Endpoint en vivo: https://mcp.manamurah.com/mcp (POST, JSON-RPC 2.0)

Fuente de datos: data.gov.my PriceCatcher — ~3,800 establecimientos × ~756 artículos en los 16 estados/territorios de Malasia, actualizados semanalmente. Datos gubernamentales 100% públicos. No se necesitan credenciales en ninguna parte de la pila.


Instalación — Claude Desktop

Añadir a ~/Library/Application Support/Claude/claude_desktop_config.json en macOS (o %APPDATA%\Claude\claude_desktop_config.json en Windows):

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

Reinicia Claude Desktop. Deberías ver las 10 herramientas listadas bajo el icono 🔌. Pregunta algo como "harga tembikai di Selangor?" o "what's the cheapest chicken in KL this week?" — el LLM encadenará search_itemsfind_cheapest automáticamente.

Related MCP server: Azure Pricing MCP Server

Instalación — Claude Code / otros clientes MCP

Cualquier cliente que soporte MCP remoto (JSON-RPC sobre 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 .

Los clientes que hablan MCP remoto nativo pueden apuntar directamente a https://mcp.manamurah.com/mcp. Los clientes que solo hablan stdio (p. ej., herramientas MCP antiguas) pueden usar mcp-remote como un shim.

Herramientas

Las 10 herramientas son de solo lectura, públicas y tienen un límite en el tamaño de respuesta para mantener compactos los contextos del LLM. Cada herramienta incluye una descripción detallada

  • Entrada JSON-Schema para que el LLM elija la correcta sin adivinar.

Herramienta

Propósito

search_items

Buscar artículos por nombre en malayo / inglés / chino / tamil

find_cheapest

Hasta 10 establecimientos más baratos para un artículo esta semana

price_history

Tendencia de precios semanal a nivel nacional/estado/distrito/cadena/urbano

nearby_premises

Establecimientos dentro de un radio geográfico de una coordenada

compare_prices

Precio de un artículo a nivel nacional + estado + distrito + más

list_chains

Directorio de cadenas minoristas + recuento de establecimientos + cobertura

price_change

Delta entre la semana actual y hace 1 / 3 / 6 / 12 meses

top_movers

Mayores subidas y bajadas semanales

category_trends

Movimiento por categoría en un periodo de tiempo

basket_watch

Coste total de una cesta de 1–20 artículos a lo largo del tiempo

Todas las herramientas no requieren configuración más allá de la configuración MCP anterior. Sin claves API. Sin límites de tasa en el lado del cliente (el upstream tiene una caché de borde KV de 12h, por lo que las consultas repetidas son esencialmente gratuitas).

Ejemplo de conversación

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

Claude (llama a search_items(query="tembikai") → obtiene item_code 21 → llama a find_cheapest(item_code=21, state="Selangor")):

Tembikai merah tanpa biji di Selangor para la semana 2026-04-20: solo hay 1 tienda que reporta datos de PriceCatcher — Jaya Grocer D'Pulze Cyberjaya en el distrito de Sepang a RM 5.20/kg. Otros datos en KL muestran que NSK Seputeh/Cheras/Cheras/Kepong venden sandía similar a RM 1.69/kg — quizás valga la pena salir de PJ/KL si estás en Selangor Sur.

La respuesta estructurada con la que trabajó el 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": []
}

Arquitectura

 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

Este Worker es un shim de protocolo ligero — habla MCP JSON-RPC por un lado y fetch() estándar por el otro. Sin lógica de negocio, sin credenciales, sin vinculación a bases de datos. Cada llamada a herramienta va exactamente a un endpoint upstream /api/v2/mcp/<tool> y pasa la respuesta JSON a través.

Mantener el shim ligero significa:

  • Las ~400 líneas aquí son casi todas JSON de descripción de herramientas.

  • La lógica de consulta/caché/índice vive en el upstream donde está co-ubicada con la capa de datos.

  • Actualizar el comportamiento de una herramienta rara vez requiere un redepliegue del Worker.

Auto-alojamiento / 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

Para apuntar a una copia de prueba del upstream (útil cuando manamurah_20240322 lanza nuevos endpoints /api/v2/mcp/*), sobrescribe la URL base en wrangler.toml:

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

Notas del protocolo

  • Transporte: HTTP POST en /mcp, JSON-RPC 2.0. CORS abierto para que los clientes MCP basados en navegador funcionen sin proxy.

  • Métodos soportados: initialize, tools/list, tools/call, prompts/list (vacío), resources/list (vacío), ping.

  • Forma de respuesta de la herramienta: Bloques MCP content: [{ type: "text", text: ... }] con el payload JSON crudo también adjunto como structuredContent para clientes que lo prefieran.

  • Manejo de errores: problemas a nivel de negocio (argumentos inválidos, sin datos para esta semana) regresan como { "status": "no_data", "reason": ... } en HTTP 200 para que el LLM pueda narrarlos. Solo los fallos de transporte/infraestructura generan errores JSON-RPC.

  • Errores de upstream: 5xx en /api/v2/mcp/* burbujean como JSON-RPC code: -32603 con el estado del upstream en data. 4xx pasan sin cambios (el error de validación del cliente ya tiene forma de sobre JSON en el lado del upstream).

Relacionado

  • manamurah-mcp-2026 — Servidor MCP stdio en Python que cubre las mismas 10 herramientas. Úsalo en su lugar si quieres un binario MCP solo local (sin Cloudflare, sin salto de Worker).

  • manamurah_20240322 — el sitio SvelteKit en manamurah.com. Aloja tanto el sitio web público como los endpoints proxy /api/v2/mcp/* que llama este Worker.

  • manamurah-data-2026 — el ETL de Python que popula los índices detrás de todo lo demás. Pipeline nocturno, fuente de verdad de PriceCatcher de data.gov.my.

Licencia

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