
Remote MCP server, MIT licensed
Not "what is the weather". Can we book the Thursday slab pour in Bendigo. Live forecast, daylight and public holiday data, answered for a specific trade on a specific day.
Checked from your browser: not checked yet not checked yet
Streamable HTTP, stateless, no key. It is POST only: the server holds no session, so GET and DELETE answer 405 by design rather than opening a stream that never closes.
claude mcp add --transport http rain-check https://rain-check-mu.vercel.app/mcp
For anything that does not speak MCP, the identical operations sit at
/v1/<operation> and are described by an OpenAPI document generated from the same
constants the tools use, so a custom GPT Action and a Claude client cannot get different
answers to the same question.
The judgement is deliberately visible. Every threshold that produced a verdict comes back with it and can be overridden per call, so nothing is hidden from the model.
For a place and a set of dates, returns a GO, MARGINAL or NO GO per day for a given trade, with the rain, wind, temperature and daylight behind the call. Weather and access are reported separately, because a day can be fine to work and still fall on a public holiday.
Will not present a verdict as a safety clearance. These are planning thresholds, they are printed in every answer, and they are overridable.For when the question is "when can we book it" rather than "what about Thursday". Returns the next run of days that suits the trade.
The thresholds each trade is judged against, so you can see what you are changing before you override anything. Concreting, painting, roofing and the rest each break on different numbers.
Resolves an Australian place name to coordinates, a timezone and a state, which is what decides whose public holidays apply.
Will not pick between candidates. An ambiguous suburb comes back as a question with the options listed, because Richmond exists in five states and guessing produces a confident answer about the wrong site.State holidays for a date range, returned alongside the official state page every time.
Will not claim to cover regional show days, and says so in the answer. The data is third party and covers states. Anyone about to use it for pay needs to know that before they do.Counts working days between two dates for a given state, holidays excluded.
These probably say more about how I would work on someone's client build than the bug list does.
Twelve defects are logged in the repository. These are the three worth reading.
I wrote the transport layer against the Web Request object. It typechecked and
the tests passed, because the tests built their own Request objects. The
platform hands the handler a Node IncomingMessage. The fix to the code was
small; the useful fix was to the test, which now stands up a real HTTP server and talks to
it over a socket.
The geocoder takes countryCode, not country. The wrong name is
accepted without complaint and ignored, so a search for Richmond returned Virginia,
British Columbia and California, my Australia filter discarded every row, and the server
told the caller no such place existed. Fixed the parameter, widened the page size, and
filtered to populated-place codes so Richmond Oval stops presenting itself as a suburb.
A GET on the MCP endpoint opens the server-to-client notification stream. Stateless, there is no session and nothing to push, so the transport returned an SSE body that never closed and the function ran to its timeout. GET and DELETE now answer 405 with the reason, and the test asserts a prompt refusal rather than a status code, so a regression shows up as a hang instead of a silent pass.
There are no mocks anywhere in this project. npm run prove connects with the
official client SDK, then re-fetches every number straight from the upstream and compares field
by field, printing the URL it used. Last run: 30 of 30 values identical.
# 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"}'
Or the version that needs only a browser. Open both and compare the dates: rain_mm
in the first equals precipitation_sum in the second.
out_of_range with no data, and the tool tells the model in as many words not to substitute an opinion about the weather.