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 をシムとして使用できます。

ツール

10個のツールはすべて読み取り専用で公開されており、LLMのコンテキストをコンパクトに保つためにレスポンスサイズに上限が設けられています。すべてのツールには詳細な説明とJSONスキーマ入力が含まれており、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年4月20日の週のセランゴール州における種なし赤スイカ: PriceCatcherのデータを報告している店舗は1つのみです — セパン地区の Jaya Grocer D'Pulze CyberjayaRM 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は軽量なプロトコルシムであり、片側でMCP JSON-RPCを話し、もう片側で標準の fetch() を行います。ビジネスロジック、認証情報、データベースバインディングはありません。すべてのツール呼び出しは、正確に1つのアップストリーム /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/* エンドポイントをリリースした際に便利)、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 として添付されます。

  • エラーハンドリング: ビジネスレベルの問題(無効な引数、今週のデータなし)は、LLMが説明できるようにHTTP 200で { "status": "no_data", "reason": ... } として返されます。トランスポート/インフラの障害のみが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