# 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](/mcp/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.json` and push it to the registry with `mcp-publisher` (GitHub OIDC works in Actions — no long-lived secret)
- The version in `server.json` should come from `package.json` at build time, same ph

[Read the thread](https://github.com/Rinava/pls-touch-grass-mcp/issues/12) · 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/11) · 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 in `src/index.ts` like 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/10) · 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`/`sunset` in the `daily` fields — one more parameter on the fetch that `grass_conditions` already 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/9) · 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=…&current=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](https://github.com/Rinava/pls-touch-grass-mcp/issues/8) · 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 `wheelchair` tag in the same query (it's `out tags center 30` territory — no extra request)
- Surface it in the results ("step-free" or similar) so the model can mention it
- An optiona

[Read the thread](https://github.com/Rinava/pls-touch-grass-mcp/issues/7) · 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-latest` to the matrix in `.github/workflows/ci.yml` and 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/6) · 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, attach `pls-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 --provenance` from the same workflow, so npm shows the green checkmark and the whole r

[Read the thread](https://github.com/Rinava/pls-touch-grass-mcp/issues/5) · 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 test` must stay green (`test/demo.test.mjs` checks the shapes)

This is a standing invitation, not a one-shot: PRs from any city, any time

[Read the thread](https://github.com/Rinava/pls-touch-grass-mcp/issues/4) · 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 in `src/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](https://github.com/Rinava/pls-touch-grass-mcp/issues/3) · 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_go` already accepts `threshold_minutes` per 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/2) · 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.ts` as 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](https://github.com/Rinava/pls-touch-grass-mcp/issues/1) · 2026-08-20 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/Rinava/pls-touch-grass-mcp/issues).
