Skip to main content
Glama

Rain Check

一个远程 MCP 服务器,根据实时天气预报、日照和公共假日数据,回答澳大利亚现场服务工作能否在某个地点、某一天、针对某个工种进行。

在线地址:https://rain-check-mu.vercel.app MCP 端点:https://rain-check-mu.vercel.app/mcp OpenAPI:https://rain-check-mu.vercel.app/openapi.json 健康检查:https://rain-check-mu.vercel.app/health

连接它

claude mcp add --transport http rain-check https://rain-check-mu.vercel.app/mcp

任何支持 Streamable HTTP 的 MCP 客户端都可以使用相同的 URL。它仅支持 POST:服务器是无状态的,因此 GET 和 DELETE 按设计返回 405。

对于不支持 MCP 的任何工具,相同的操作位于 /v1/<operation>,并由 /openapi.json 描述,该文件由 MCP 工具使用的相同常量生成,因此两者不会出现偏差。

Related MCP server: BuildWindow

本地运行

npm install
npm run typecheck     # tsc, no emit
npm run smoke         # every operation against the real upstreams
npm run smoke:mcp     # every endpoint over a real node:http server
npm run smoke:live -- https://rain-check-mu.vercel.app        # the deployed server
npm run adversarial -- https://rain-check-mu.vercel.app       # tries to break it
npm run prove -- https://rain-check-mu.vercel.app             # independent evidence

任何地方都没有模拟数据。这些测试的意义在于捕捉上游数据形态的变化,而模拟数据永远不会做到这一点。

npm run adversarial 是能发现问题的那一个。它向已部署的服务器抛出无意义的范围、恶意字符串、错误类型、外国坐标和格式错误的协议帧;以可用的消息拒绝则通过,返回 500 或对不应回答的问题给出自信的答案则失败。它发现了三个快乐路径测试套件遗漏的真实 bug。

不信任此仓库的情况下进行验证

npm run prove 的存在是因为我自己通过的测试对没有编写这些测试的人来说证明力很弱。它使用官方 MCP 客户端 SDK 进行连接,然后获取服务器报告的每个数字,直接从 Open-Meteo 重新获取同一天的数据,逐字段比较,并打印它使用的上游 URL,以便你自己打开查看。

另外三种方式,无需从这里获取任何东西:

# Anthropic's own inspector, not my code
npx @modelcontextprotocol/inspector --cli https://rain-check-mu.vercel.app/mcp --transport http --method tools/list

# raw JSON-RPC, no client, no session, because it is stateless
curl -s -X POST https://rain-check-mu.vercel.app/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# let your own client run its health check against it
claude mcp add --transport http rain-check https://rain-check-mu.vercel.app/mcp
claude mcp list

还有一个只需要浏览器的版本:打开以下两个链接并比较日期。第一个中的 rain_mm 等于第二个中的 precipitation_sum。

部署

vercel deploy --prod

结构布局

src/core.ts          the six operations, with no transport in them
src/mcpServer.ts     the MCP tool surface
src/lib/             http, dates, geocoding, forecast, holidays, thresholds, verdicts
api/mcp.ts           Streamable HTTP, stateless
api/v1/[op].ts       the same operations over REST
api/openapi.ts       the OpenAPI document, generated from the same constants
api/health.ts        calls every upstream and reports real latency
public/index.html    the landing page, including the build log
scripts/             the three verification runs

两个前端入口都导入 src/core.ts。这是自定义 GPT 和 MCP 客户端能够被信任给出相同答案的唯一方式,也意味着一次修复的阈值在所有地方都得到修复。

它不会做什么

  • 将阈值呈现为安全许可。它们是规划默认值,显示在每个答案中,并可在每次调用时覆盖。

  • 猜测十六天预报之后的数据。更晚的日期会以 out_of_range 返回,附带原因且无数据。

  • 让第三方假日数据作为权威数据通过。它仅限州级,不包含地区或展会日,每个响应都链接官方州政府页面。

  • 用猜测填补空白。当上游不可达时,工具会说明是哪一个以及该怎么做,并告诉模型不要用意见代替。

  • 在两个 Richmond 之间做选择。歧义会以候选列表的形式返回。

数据来源

  • 天气和地理编码:Open-Meteo,CC BY 4.0。

  • 公共假日:Nager.Date,第三方,仅限州级。

不使用气象局的 API:其自身条款规定"您不得使用、复制或分享它"。

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    One-call Australian weather plumbing for current and historical data — cited responses for practical analysis, not a data broker.
    7
    61 PyPI
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Enables scheduling of construction works against weather forecasts, using deterministic tools to check weather suitability, estimate curing times, and place dependent tasks into the earliest non-prohibited time windows.
    4
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to check Australian business days, add or subtract business days, count business days between dates, and calculate calendar or business-day deadlines across all states and territories using structured MCP tools.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables rooftop solar installers to turn a CSV of tomorrow's booked jobs into a ranked crew schedule in Markdown and JSON, joining per-address geocoding, roof pitch/azimuth from the Google Solar API, hourly forecast checks against crew-safety thresholds, and estimated plane-of-array irradiance. Each job is returned as KEEP, MOVE (with a new same-day start) or SLIP, together with the specific rule that decided it.
    Apache 2.0