关于 ManaMurah MCP Server
ManaMurah MCP Server 是面向 AI Agent 的马来西亚价格数据远程 MCP 服务,基于政府 PriceCatcher 与 FAMA 数据提供只读查询工具,覆盖周均价和每日价格。
主要功能
- 0115 个只读价格查询工具
- 02查询商品及最低售价
- 03查看价格历史与变化
- 04比较地区和零售连锁价格
- 05分析 FAMA 三级价格
适用场景
- 01查找某商品本周最便宜的门店
- 02追踪商品的周度或每日价格趋势
- 03比较农场、批发和零售价格
- 04查看不同地区的价格差异
MCP 相关
通过 streamable HTTP 提供 MCP 接口,向客户端暴露 15 个只读工具,用于查询马来西亚 PriceCatcher 和 FAMA 价格数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.manamurah.com/sseclaude mcp add --transport http manamurah https://mcp.manamurah.com/sse{"mcpServers":{"manamurah":{"type":"http","url":"https://mcp.manamurah.com/sse"}}}在 Cursor 中打开{"servers":{"manamurah":{"type":"http","url":"https://mcp.manamurah.com/sse"}}}在 VS Code 中打开{"mcpServers":{"manamurah":{"type":"http","url":"https://mcp.manamurah.com/sse"}}}{"mcpServers":{"manamurah":{"serverUrl":"https://mcp.manamurah.com/sse"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
manamurah-mcp-server
面向马来西亚 PriceCatcher 消费者价格数据的远程 Model Context Protocol (MCP) 服务。部署在 Cloudflare Workers 上。为 AI Agent 提供 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
shim 进行桥接。重启应用后,你会在 🔌 图标下看到 15 个工具。提问 "雪兰莪的西瓜多少钱?" 或 "吉隆坡这周最便宜的鸡肉多少钱?",Claude 就会自动依次调用
search_items → find_cheapest。
Claude Code(CLI)
一条命令即可原生使用可流式 HTTP,无需 shim:
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 → 开发者:重新加载窗口)后,
Settings → MCP 下会出现 manamurah 条目,并列出全部 15 个工具。
Cline(VS Code 扩展)
打开 Cline 侧边栏 → ⚙️ → MCP 服务 → 添加服务 →
选择 远程 → 粘贴 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 →
添加自定义连接器 → MCP 服务 URL
https://mcp.manamurah.com/mcp → 无需身份验证(公开只读)。
批准后,连接器会显示在消息输入框的 ⊕ 菜单中。
对于 OpenAI Apps SDK / 编程式用法(Codex 中的 codex_apps.manamurah_*
工具系列):应用清单中 platform.openai.com/apps 的服务 URL 字段必须为
https://mcp.manamurah.com/mcp,而不是 https://manamurah.com(后者
会因 HTTP 403 导致可流式传输探测失败,因为它是面向消费者的网站,而非 MCP 端点)。
其他 MCP 客户端
任何支持可流式 HTTP MCP 传输的客户端都可以直接连接到
https://mcp.manamurah.com/mcp。仅支持 stdio 的客户端可使用
mcp-remote shim,
配置方法与上文 Claude Desktop 相同。
可在任意 shell 中进行快速冒烟测试:
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 个工具名称——11 个 KPDN PriceCatcher 工具 (每周更新)和 3 个 FAMA Panduan Harga Harian 工具(每日更新, 提供三个价格级别)。更丰富的 自描述清单(包含完整输入 架构和版本控制政策)也只需一次 GET 请求即可获取。
工具
全部 15 个工具均为只读、公开,并设有响应大小上限,以 保持 LLM 上下文简洁。每个工具都附带详细说明 和 JSON-Schema 输入,让 LLM 无需猜测即可选择合适的工具。
KPDN PriceCatcher(周均价)
仅零售价格。约 3,800 家门店 × 约 756 种商品,每日采集,并以周均价的形式发布,数据来自 data.gov.my PriceCatcher 数据集。
| 工具 | 用途 |
|---|---|
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 种商品的购物篮随时间变化的总成本 |
region_gap | 比较半岛与婆罗洲之间双向的价格差距(前 N 名) |
FAMA 每日价格(Panduan Harga Harian)
每日独立追踪三个价格级别——RUNCIT(零售)、BORONG(批发)、
LADANG(农场出货价)。约 46 种商品
(新鲜农产品、鸡蛋、家禽)。FAMA 的目录独立于
PriceCatcher:此处的 item_id 是 FAMA 自有的 1..46 编号,而非 KPDN 的
item_code。
| 工具 | 用途 |
|---|---|
fama_price_history | 按所选级别和地理粒度查看某种商品的每日价格序列 |
fama_margin | 查看每日 LADANG → BORONG → RUNCIT 价值链价差 |
fama_top_movers | 查看各级别的每日价格变动榜单,以最新索引日期为基准 |
由于 daerah 粒度下 LADANG/BORONG 的覆盖数据过于稀疏,无法进行可靠分析,因此
fama_margin 和 fama_top_movers 不接受 grain='daerah'。
fama_price_history 接受 daerah,供仅查询零售价格的调用方使用。
除上述 MCP 配置外,所有工具均无需任何设置。无需 API 密钥。客户端不受速率限制(上游使用 12h KV 边缘缓存,因此重复查询几乎不产生额外开销)。
对话示例
你: 本周雪兰莪的无籽红西瓜多少钱?
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。 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> 端点,并直接传递 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,供偏好使用该格式的客户端使用。 - 错误处理: 业务层问题(参数无效、本周无数据)会以 HTTP 200 返回
{ "status": "no_data", "reason": ... },由大模型对其进行说明。只有传输层/基础设施故障才会触发 JSON-RPC 错误。 - 上游错误:
/api/v2/mcp/*上的 5xx 错误会作为 JSON-RPCcode: -32603向上返回,且data中包含上游状态码。4xx 错误会原样传递(上游已将客户端验证错误整理为 JSON 信封)。
相关项目
- manamurah-mcp-2026 — 使用 Python stdio 的 MCP 服务,涵盖相同的 15 个工具。如果你想要仅在本地运行的 MCP 二进制文件(无需 Cloudflare,也无需经过 Worker),请使用此项目。
- manamurah_20240322
— manamurah.com 上的 SvelteKit 网站。提供公开网站以及此 Worker 调用的
/api/v2/mcp/*代理端点。 - manamurah-data-2026 — 负责填充其他所有内容背后索引的 Python ETL。夜间流水线,数据的权威来源为 data.gov.my PriceCatcher。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。