mcpField
M
ManaMurah MCP Server

ManaMurah MCP Server

リモート
github.com/manamurah法務・行政03 週間前に更新
リポジトリ

ManaMurah MCP Server について

ManaMurah MCP Serverは、マレーシアの価格データを検索するAIエージェント向けのリモートMCPサービスです。政府のPriceCatcher週平均価格とFAMAの日次価格を読み取り専用ツールで扱います。

主な機能

  1. 01読み取り専用の価格ツール15種
  2. 02商品と最安価格の検索
  3. 03価格履歴と変動の確認
  4. 04地域・小売チェーン間の比較
  5. 05FAMAの価格水準の分析

活用シーン

  1. 01今週の商品の最安店舗を探す
  2. 02週次・日次の価格推移を追跡する
  3. 03農場出荷・卸売・小売価格を比較する
  4. 04地域ごとの価格差を確認する

MCP 対応

streamable HTTPでMCPインターフェースを提供し、マレーシアのPriceCatcherとFAMAの価格データを検索する読み取り専用ツール15種を公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.manamurah.com/sse
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

manamurah-mcp-server

マレーシアのPriceCatcher消費者価格データを提供するリモートModel Context Protocol(MCP) サーバーです。Cloudflare Workersにデプロイされています。AIエージェント向けの、型が厳密に定義された15個のツールを提供します。

ライブエンドポイント: https://mcp.manamurah.com/mcp(POST、JSON-RPC 2.0)

データソース: data.gov.myのPriceCatcher — マレーシアの全16州・地域にまたがる約3,800の販売施設と約756品目を対象に、 毎日収集し、週平均として公開しています。100%政府の公開データです。 スタックのどの部分でも認証情報は不要です。


インストール

サーバーはhttps://mcp.manamurah.com/mcpでストリーミング可能なHTTPを提供します。 お使いのクライアントに対応する設定を選んでください。

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はstdioにしか対応していないため、mcp-remote シムが橋渡しをします。アプリを再起動すると、🔌アイコンの下に15個のツールが表示されます。 *「セランゴール州のスイカの価格は?」や「今週、KLで最も安い鶏肉は?」*と尋ねると、 Claudeはsearch_items → find_cheapestを自動的に連携して実行します。

Claude Code(CLI)

コマンドを1つ実行するだけで、ネイティブのストリーミング可能なHTTPを利用できます。シムは不要です。

claude mcp add manamurah --transport http https://mcp.manamurah.com/mcp

claude mcp listで確認してください。ツールは次回のClaude Codeセッション開始時に利用可能になります。 すべてのプロジェクトで利用できるようにするには、--scope userを追加してください。

Cursor

ユーザーレベル(すべてのプロジェクト):~/.cursor/mcp.jsonを作成または編集します。 プロジェクトレベル:<project-root>/.cursor/mcp.json。

{
  "mcpServers": {
    "manamurah": {
      "url": "https://mcp.manamurah.com/mcp"
    }
  }
}

Cursor 0.46以降は、urlによるリモートMCPに直接対応しています。ウィンドウを再読み込みすると (Cmd-Shift-P → Developer: Reload Window)、Settings → MCPにmanamurahの行が表示され、 15個すべてのツールが一覧表示されます。

Cline(VS Code拡張機能)

Clineのサイドバーを開き → ⚙️ → MCP Servers → Add Server → Remoteを選択 → https://mcp.manamurah.com/mcpを貼り付け → 名前に manamurahを指定します。Clineが設定をVS Codeのグローバルストレージに直接書き込むため、 JSONを編集する必要はありません。

ヘッドレスで設定する場合は、Claude Desktopと同じJSON形式をClineの cline_mcp_settings.jsonでも使用できます。

ChatGPT(カスタムコネクター)

ChatGPT Pro/Team/Enterpriseの場合:chatgpt.com/connectors → Add custom connector → MCPサーバーURL https://mcp.manamurah.com/mcp → 認証不要(公開読み取り専用)。 承認後、コネクターはメッセージ入力欄の⊕メニューに表示されます。

OpenAI Apps SDK/プログラムからの利用(Codexのcodex_apps.manamurah_* ツールファミリー)の場合、アプリマニフェストにあるサーバーURL欄(platform.openai.com/apps)には、 必ずhttps://mcp.manamurah.com/mcpを指定してください。https://manamurah.comでは ありません(こちらは消費者向けサイトでありMCPエンドポイントではないため、ストリーミング可能なトランスポートのプローブが HTTP 403で失敗します)。

その他のMCPクライアント

ストリーミング可能なHTTPのMCPトランスポートに対応するクライアントであれば、 https://mcp.manamurah.com/mcpに直接接続できます。stdioのみ対応のクライアントは、 上記のClaude Desktopと同じ手順でmcp-remoteを使って接続します。

任意のシェルから実行できる簡単なスモークテスト:

curl -sS -X POST https://mcp.manamurah.com/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'

ツール名が14個表示されるはずです。内訳は、KPDN PriceCatcherのツールが11個(週次)、 FAMA Panduan Harga Harianのツールが3個(日次、価格水準は3段階)です。 より詳細な自己記述型マニフェスト(入力スキーマ全体+バージョン管理ポリシー)も、 GETリクエスト1回で取得できます。

ツール

15個のツールはすべて読み取り専用で公開されており、LLMのコンテキストをコンパクトに保てるよう、レスポンスサイズに上限があります。 各ツールには詳細な説明とJSON Schema形式の入力定義が付属しているため、LLMは推測せずに適切なツールを選択できます。

KPDN PriceCatcher(週次平均)

小売価格のみです。約3,800か所の販売店舗 × 約756品目の価格を毎日収集し、 data.gov.my PriceCatcher datasetから週次平均として 公開しています。

ツール目的
search_itemsマレー語/英語/中国語/タミル語の商品名で商品を検索します
find_cheapest今週、ある商品を最も安く販売している最大10か所の店舗を検索します
price_history全国/州/地区/チェーン/都市部別の週次価格推移を確認します
nearby_premises指定した座標から地理的な半径内にある店舗を検索します
compare_prices全国+州+地区などで、1商品の価格を比較します
list_chains小売チェーンの一覧+店舗数+カバー範囲を確認します
price_change今週と1/3/6/12か月前の価格差を確認します
top_movers週ごとの値上がり幅・値下がり幅が最大の商品を確認します
category_trends期間ごとのカテゴリ別の価格変動を確認します
basket_watch1~20品目の買い物かごの合計金額を時系列で確認します
region_gap半島マレーシアとボルネオの上位N品目の価格差を両方向で確認します
FAMAの日次価格(Panduan Harga Harian)

3つの価格レベル — RUNCIT(小売)、BORONG(卸売)、 LADANG(農場出荷時)—を毎日、個別に追跡します。約46品目 (生鮮農産物、卵、家禽)を対象としています。FAMAのカタログは PriceCatcherとは独立しています。ここでのitem_idはFAMA独自の 1~46の番号で、KPDNのitem_codeとは異なります。

ツール目的
fama_price_history選択したレベル+地理的な粒度で、1商品の日次系列を確認します
fama_margin日ごとのLADANG → BORONG → RUNCITのバリューチェーン価格差を確認します
fama_top_movers最新のインデックス日を基準に、レベルごとの日次価格変動を確認します

fama_marginとfama_top_moversでは、地区粒度のLADANG/BORONGの カバー率が低すぎて適切な分析ができないため、grain='daerah'は 受け付けません。fama_price_historyでは、小売価格のみを対象とする場合に daerahを指定できます。

上記のMCP設定以外に、すべてのツールでセットアップは不要です。API キーも必要ありません。クライアント側のレート制限もありません(上流には12時間のKV エッジキャッシュがあるため、繰り返しのクエリは実質的に無料です)。

会話例

あなた: セランゴール州では今週、種なし赤スイカはいくらですか?

Claude (search_items(query="tembikai")を呼び出してitem_code 21を取得 → find_cheapest(item_code=21, state="Selangor")を呼び出します):

2026-04-20週のセランゴール州における種なし赤スイカ: PriceCatcherにデータを報告した店舗はJaya Grocer D'Pulze Cyberjayaの 1店舗のみで、Sepang地区にあり、価格は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は薄いプロトコルシムで、一方ではMCP JSON-RPCを、もう一方では標準のfetch()を 扱います。ビジネスロジック、認証情報、データベースバインディングはありません。 各ツール呼び出しは、上流の/api/v2/mcp/<tool>エンドポイントを1つだけ呼び出し、 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、prompts/get、resources/list、resources/read、 resources/templates/list、completion/complete、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 — 同じ 15 個のツールを提供する 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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。