mcpField
M
ManaMurah MCP Server

ManaMurah MCP Server

远程服务
github.com/manamurah法律与政务03 周前更新
代码仓库

关于 ManaMurah MCP Server

ManaMurah MCP Server 是面向 AI Agent 的马来西亚价格数据远程 MCP 服务,基于政府 PriceCatcher 与 FAMA 数据提供只读查询工具,覆盖周均价和每日价格。

主要功能

  1. 0115 个只读价格查询工具
  2. 02查询商品及最低售价
  3. 03查看价格历史与变化
  4. 04比较地区和零售连锁价格
  5. 05分析 FAMA 三级价格

适用场景

  1. 01查找某商品本周最便宜的门店
  2. 02追踪商品的周度或每日价格趋势
  3. 03比较农场、批发和零售价格
  4. 04查看不同地区的价格差异

MCP 相关

通过 streamable HTTP 提供 MCP 接口,向客户端暴露 15 个只读工具,用于查询马来西亚 PriceCatcher 和 FAMA 价格数据。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址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 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-RPC code: -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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。