Skip to main content
Glama
manamurah

ManaMurah MCP Server

by manamurah

manamurah-mcp-server

远程 模型上下文协议 (MCP) 服务器,用于马来西亚 PriceCatcher 消费价格数据。部署在 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-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 (调用 search_items(query="tembikai") → 获取 item_code 21 → 调用 find_cheapest(item_code=21, state="Selangor")

2026-04-20 当周雪兰莪的无籽红西瓜: 只有 1 家商店报告了 PriceCatcher 数据 — 位于雪邦区的 Jaya Grocer D'Pulze Cyberjaya,价格为 RM 5.20/kg。 吉隆坡的其他数据显示,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> 端点,并将 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 附加,供偏好此格式的客户端使用。

  • 错误处理: 业务级问题(无效参数、本周无数据)以 HTTP 200 返回 { "status": "no_data", "reason": ... },以便 LLM 可以叙述它们。只有传输/基础设施故障才会引发 JSON-RPC 错误。

  • 上游错误: /api/v2/mcp/* 上的 5xx 错误会作为 JSON-RPC code: -32603 冒泡,并在 data 中包含上游状态。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