Skip to main content
Glama
manamurah

ManaMurah MCP Server

by manamurah

manamurah-mcp-server

말레이시아 PriceCatcher 소비재 가격 데이터를 위한 원격 Model Context Protocol (MCP) 서버입니다. Cloudflare Workers에 배포되었습니다. AI 에이전트를 위한 10개의 강력한 타입 지정 도구를 제공합니다.

라이브 엔드포인트: https://mcp.manamurah.com/mcp (POST, JSON-RPC 2.0)

데이터 소스: data.gov.my PriceCatcher — 말레이시아 16개 주/영토 전역의 약 3,800개 매장 × 약 756개 품목 데이터가 매주 갱신됩니다. 100% 공공 정부 데이터입니다. 스택 어디에서도 자격 증명이 필요하지 않습니다.


설치 — Claude Desktop

macOS의 ~/Library/Application Support/Claude/claude_desktop_config.json (또는 Windows의 %APPDATA%\Claude\claude_desktop_config.json)에 추가하세요:

{
  "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(HTTP POST를 통한 JSON-RPC)를 지원하는 모든 클라이언트:

# 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를 shim으로 사용할 수 있습니다.

도구

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 엣지 캐시가 있어 반복 쿼리는 사실상 무료입니다).

대화 예시

사용자: Berapa harga tembikai merah tanpa biji di Selangor minggu ini?

Claude (calls search_items(query="tembikai") → gets item_code 21 → calls find_cheapest(item_code=21, state="Selangor")):

2026-04-20 주간 셀랑고르의 씨 없는 수박 가격: PriceCatcher 데이터를 보고하는 매장은 1곳뿐입니다 — 세팡 지구의 Jaya Grocer D'Pulze Cyberjaya에서 RM 5.20/kg에 판매 중입니다. KL의 다른 데이터에 따르면 NSK Seputeh/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는 얇은 프로토콜 shim으로, 한쪽은 MCP JSON-RPC를, 다른 한쪽은 표준 fetch()를 사용합니다. 비즈니스 로직, 자격 증명, 데이터베이스 바인딩이 없습니다. 모든 도구 호출은 정확히 하나의 업스트림 /api/v2/mcp/<tool> 엔드포인트로 전달되며 JSON 응답을 그대로 통과시킵니다.

shim을 얇게 유지함으로써 얻는 이점:

  • 약 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/* 엔드포인트를 배포할 때 유용), wrangler.toml에서 기본 URL을 재정의하세요:

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

프로토콜 참고 사항

  • 전송: /mcp에서 HTTP POST, JSON-RPC 2.0 사용. CORS가 열려 있어 브라우저 기반 MCP 클라이언트가 프록시 없이 작동합니다.

  • 지원 메서드: initialize, tools/list, tools/call, prompts/list (비어 있음), resources/list (비어 있음), ping.

  • 도구 응답 형태: MCP content: [{ type: "text", text: ... }] 블록과 함께 원시 JSON 페이로드가 이를 선호하는 클라이언트를 위해 structuredContent로 첨부됩니다.

  • 오류 처리: 비즈니스 수준 문제(잘못된 인수, 이번 주 데이터 없음)는 HTTP 200에서 { "status": "no_data", "reason": ... }로 반환되어 LLM이 이를 설명할 수 있도록 합니다. 전송/인프라 오류만 JSON-RPC 오류를 발생시킵니다.

  • 업스트림 오류: /api/v2/mcp/*에서의 5xx 오류는 data에 업스트림 상태를 포함한 JSON-RPC code: -32603으로 버블업됩니다. 4xx 오류는 변경 없이 통과됩니다(클라이언트 유효성 검사 오류는 이미 업스트림 측에서 JSON 봉투 형태로 구성됨).

관련 항목

  • manamurah-mcp-2026 — 동일한 10개 도구를 다루는 Python stdio MCP 서버입니다. 로컬 전용 MCP 바이너리를 원할 경우(Cloudflare나 Worker 홉 없음) 이 버전을 사용하세요.

  • manamurah_20240322 — manamurah.com의 SvelteKit 사이트입니다. 공개 웹사이트와 이 Worker가 호출하는 /api/v2/mcp/* 프록시 엔드포인트를 모두 호스팅합니다.

  • manamurah-data-2026 — 다른 모든 항목의 기반이 되는 인덱스를 채우는 Python ETL입니다. 야간 파이프라인이며, data.gov.my PriceCatcher가 진실의 원천입니다.

라이선스

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