Reported issues for pls-touch-grass
Pod holds 12 of 12 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to pls-touch-grass.
Most discussed
Keep the MCP Registry entry in sync on release
The server is listed in the MCP Registry as io.github.Rinava/pls-touch-grass, powered by a hand-maintained server.json. Hand-maintained version fields drift; it's what they do.
Shape
- Fold registry publishing into the release workflow from #5: after npm publish succeeds, update/validate
server.jsonand push it to the registry withmcp-publisher(GitHub OIDC works in Actions — no long-lived secret) - The version in
server.jsonshould come frompackage.jsonat build time, same ph
Read the thread · 2026-08-20 · open · 0 comments
Plan B: when the weather is hostile, offer indoor grass-adjacent absolution
When it rains, grass_conditions says "you're forgiven until it stops" — and that's it. A dead end. The user came for absolution and got a rain check.
Shape
- The hostile-weather verdicts (rain, 35°C+, and night/bad-air once #8/#9 land) should come with a plan B: stand near a window, water a houseplant, step onto a balcony, stretch — small, doable, indoors
- A short curated list in
src/lib/(rotating through them beats repeating one), appended to the existing verdict text in `src/tools/g
Read the thread · 2026-08-20 · open · 0 comments
grass_stats: the weekly reckoning
The state file already remembers every time you touched grass. A grass_stats tool would turn that history into a weekly reckoning: days outside, longest indoor stretch, current streak (#3), rage incidents absolved.
Shape
- New read-only tool in
src/tools/, registered insrc/index.tslike the other five - Derives everything from existing state in
~/.pls-touch-grass.json— if a stat needs new state, coordinate with #3 rather than inventing a second history - The description should mak
Read the thread · 2026-08-20 · open · 0 comments
It is 3am. Do not send the user to the park.
The server currently has no concept of night. Rage at your AI at 3:47am and frustration_detector will cheerfully route you toward a dark, closed park. This is legally distinct from wellness.
Shape
- Open-Meteo's forecast API returns
sunrise/sunsetin thedailyfields — one more parameter on the fetch thatgrass_conditionsalready makes - After dark, the verdict changes tone: acknowledge the hour, suggest the balcony/a window/going to bed, and forgive the grass debt until sunrise
Read the thread · 2026-08-20 · open · 0 comments
Air quality in grass_conditions — sometimes the outside is the hazard
grass_conditions checks temperature and rain, then shoves you out the door. But on a bad-air day the responsible thing is to keep you in. Open-Meteo has an air quality API — same provider, no key, same shape as what we already call:
https://air-quality-api.open-meteo.com/v1/air-quality?latitude=…&longitude=…¤t=us_aqi
Shape
- Second fetch in
src/tools/grass-conditions.ts, same 3s timeout discipline; if it fails, weather alone still answers — air quality is a bonus, never a
Read the thread · 2026-08-20 · open · 0 comments
Wheelchair-accessible park filtering in where_to_touch_grass
Everyone deserves to be sent outside against their will. The Overpass query in src/tools/where-to-touch-grass.ts fetches leisure=park and nothing else — but OpenStreetMap tags accessibility (wheelchair=yes/limited/no) on many parks, and we're leaving that data on the table.
Shape
- Ask Overpass for the
wheelchairtag in the same query (it'sout tags center 30territory — no extra request) - Surface it in the results ("step-free" or similar) so the model can mention it
- An optiona
Read the thread · 2026-08-20 · open · 0 comments
Windows: verify state path and add windows-latest to CI
CI runs on ubuntu-latest only. The README confidently tells Windows users where claude_desktop_config.json lives, but nothing actually verifies the server itself behaves on Windows — state file resolution (~/.pls-touch-grass.json), path handling, line endings in the stdio transport.
Shape
- Add
windows-latestto the matrix in.github/workflows/ci.ymland see what breaks (possibly nothing — that's a fine outcome, then this issue is just the matrix line) - If
~resolution is done by
Read the thread · 2026-08-20 · open · 0 comments
Release workflow: build and attach the .mcpb on tag push
Releases currently mean running npm run build:mcpb locally and dragging the file onto a GitHub Release by hand. The robot should do this.
Shape
- A workflow on
v*tag push:npm ci,npm test,npm run build:mcpb, create the Release, attachpls-touch-grass-mcp-<version>.mcpb - The manifest already generates from
package.json, so the version is the tag's problem alone - Bonus round:
npm publish --provenancefrom the same workflow, so npm shows the green checkmark and the whole r
Read the thread · 2026-08-20 · open · 0 comments
Most recent
Demo spots for your own city
--demo mode ships curated Buenos Aires spots. Your city has parks too, and they deserve representation.
How
- One object per park in
src/lib/demo.ts, following the existing shape - The opinion is mandatory. "A park" is data; "the park where the parakeets have formed a government" is a demo spot. Look at the existing entries for calibration
npm testmust stay green (test/demo.test.mjschecks the shapes)
This is a standing invitation, not a one-shot: PRs from any city, any time
Read the thread · 2026-08-20 · open · 0 comments
Streak tracking for consecutive grass days
You touched grass yesterday. And the day before. That's a streak, and streaks are how gyms and language apps have been manipulating humans for years — time to use that power for going outside.
Shape
touched_grass(src/tools/touched-grass.ts) already logs each event; derive or store the streak insrc/lib/state.ts- Report it in the tool's reply so the model can celebrate ("day 7 — a full week of being a person")
- Decide the edge honestly: does a day count by calendar date in local t
Read the thread · 2026-08-20 · open · 0 comments
Per-project thresholds instead of one global tolerance
Indoor tolerance is a single merciless global default (2 minutes). But some repos are greenhouses and some are basements: the threshold should be able to vary by project.
Shape
gotta_goalready acceptsthreshold_minutesper call; this is about remembering a preference per project (working directory is a reasonable key)- State lives in
~/.pls-touch-grass.json(src/lib/state.ts) — extend it, don't multiply files - The model should be able to set it conversationally ("this repo ge
Read the thread · 2026-08-20 · open · 0 comments
HTTP transport: serve the same factory over fetch
Right now this server is stdio on your own machine, which is why claude.ai gets a flat "No" in the README. SDK v2's createMcpHandler can serve the same server factory over fetch, which is the road to remote use (and onto claude.ai as a custom connector).
Shape
- Keep
src/index.tsas the stdio entry; add an HTTP entry that reuses the exact same tool registration — one factory, two transports - State is currently one JSON file in
~; decide what state means when the server isn't on your
Read the thread · 2026-08-20 · open · 0 comments
The remaining reports are on the project's issue tracker.