Skip to content
plugmcp
DirectorySkillsCategoriesBlog
EN/中文
Sign inSign up
Home/Servers/Pls Touch Grass

Pls Touch Grass

I
by io.github.Rinava

An MCP server that knows how long it's been since you touched grass

Power your agent

Add this server

The publisher's own command. Not a PlugMCP endpoint.

Local command
npx -y [email protected]
Credentials from the publisher
  • GRASS_STATE_FILE — Path to the JSON file holding your grass-touching history. Defaults to ~/.pls-touch-grass.json
Provider
Claude Code
GRASS_STATE_FILE=<value> claude mcp add io.github.rinava-pls-touch-grass -- npx -y [email protected]

Run in a terminal.

Claude Desktop
{
  "mcpServers": {
    "io.github.rinava-pls-touch-grass": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "GRASS_STATE_FILE": "<value>"
      }
    }
  }
}

claude_desktop_config.json

Step-by-step: add this in Claude

Remote URL or a command on your machine? How the two installs differ

Run on PlugMCP

Host a copy with our keys and logs.

A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.

Launch

Related MCP

View more
  • Firecrawl🔥 Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
  • N
    NotionToken-auth Notion MCP: pages, databases, blocks, comments, files. Runs headless in CI and agents.
  • Context7Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

Related skills

View all
  • reaReverse engineer anything with agents, from app behavior down to native binaries.
  • rea-changelog-updatePrepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
  • rea-tool-designDesign or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.

An MCP server that knows how long it's been since you touched grass

pls-touch-grass-mcp

An MCP server that knows how long it's been since you touched grass, and won't shut up about it.

You log grass, it tracks indoor time, it catches you raging at your AI and sends you to the nearest park, weather checked first. A joke, but one that teaches MCP: five tools, shared state, and descriptions that make the model call them unprompted.

Install

Claude Code

claude mcp add pls-touch-grass -s user -- npx -y pls-touch-grass-mcp

-s user, or the server only exists in the directory you ran that from. Working from a clone, skip the command: there's a .mcp.json in the root and Claude Code offers it when you open the folder.

Cursor

Or the JSON, in ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

{
  "mcpServers": {
    "pls-touch-grass": {
      "command": "npx",
      "args": ["-y", "pls-touch-grass-mcp"]
    }
  }
}

Claude Desktop

.mcpb from Releases, then Settings → Extensions → Install Extension. Dependencies are bundled; installs offline. By hand it's the same JSON as Cursor, in claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows).

claude.ai

No. Custom connectors want a remote server over HTTPS; this is stdio on your own machine. HTTP transport is the first item under Homework.

From source

git clone https://github.com/Rinava/pls-touch-grass-mcp
cd pls-touch-grass-mcp
npm ci && npm run build

Point any config above at node /absolute/path/to/dist/index.js instead.

npx -y downloads the package on first start — live audiences and venue wifi deserve a warm cache. Published on npm as pls-touch-grass-mcp, in the MCP Registry as io.github.Rinava/pls-touch-grass.

The five tools

ToolWhat it doesWhen the model calls it
touched_grassLogs that you went outside"back from the park"
gotta_goDo you need to go out?"can I keep going?"
frustration_detectorCatches the rage and escalateson its own, when you snap; that's the point
grass_conditionsReal weather (Open-Meteo, no key)before sending you outside
where_to_touch_grassNearby parks with distances (OpenStreetMap)"where should I go?", or when you name a place

Nobody teaches the model to detect frustration: the tool description does it alone. Type "NOTHING WORKS!!!" and watch.

Zero configuration

Location resolves fresh from your IP (ipwho.is) each run — city-level on purpose. Detection down: last known spot, then the Obelisco, like everyone else. Name a neighborhood or a street address to where_to_touch_grass and it sticks: known neighborhoods resolve offline, anything else is geocoded once through OpenStreetMap's Nominatim, and only the words you typed leave your machine. A place you named outranks a guess from your IP, until you name a different one.

Indoor tolerance defaults to a merciless 2 minutes; ask the model for clemency and it passes a bigger threshold_minutes to gotta_go. State is one JSON file, ~/.pls-touch-grass.json. Touching grass resets the rage counter. That's how absolution works.

The demo curse

Live demos summon it: the venue wifi dies the moment you say "watch this". Add --demo to the args and every answer goes canned — 22°C and clear, the Obelisco, the curated spots. Zero network calls, zero surprises. Off by default; real life should stay real.

Follow the workshop

The repo is tagged by step:

git checkout step-1   # stdio server + touched_grass
git checkout step-2   # + gotta_go (state and threshold)
git checkout step-3   # + frustration_detector (the demo)
git checkout step-4   # + grass_conditions (network with fallback)
git checkout step-5   # + where_to_touch_grass and this README
npm ci && npm test

Every step compiles and passes its own tests. Two dependencies total: the official MCP SDK and zod.

Homework

  • HTTP transport: createMcpHandler in SDK v2 serves the same factory over fetch, and it's what gets you onto claude.ai
  • Per-project thresholds instead of a global one
  • Streak tracking for consecutive grass days
  • Demo spots for your own city, via PR: one object per park in src/lib/demo.ts, with an opinion

Release

npm run build:mcpb packs dist and the production dependencies into pls-touch-grass-mcp-<version>.mcpb, the file that goes on a GitHub Release. The manifest is generated from package.json; nothing to keep in sync by hand.

Contributing

Issues and PRs welcome — the Homework list is seeded as open issues, several tagged good first issue. See CONTRIBUTING.md for setup and the house rules (there are few, but the demo-spot opinion is mandatory).

License

MIT. The grass is free and so is this.

How do I install Pls Touch Grass?
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Pls Touch Grass need an API key?
The publisher lists these environment variables: GRASS_STATE_FILE.
What transport does Pls Touch Grass use?
Pls Touch Grass runs locally over stdio.
When was Pls Touch Grass last checked?
Last checked 2026-10-16. An MCP server that knows how long it's been since you touched grass

No tool list yet. Remote servers get one after the first health check.

plugmcp

Plug any tool into any agent. MCP servers for people who do not write servers. Gateway for volume, n8n for apps.

  • github.com/TODO
  • x.com/TODO
  • linkedin.com/company/TODO

PlugMCP, 2026

Product
  • Browse
  • Install
  • Host your own
  • Voice mode
  • Browser
Directory
  • All MCP servers
  • Agent skills
  • Categories
  • New
  • Voice
  • Submit a server
Developers
  • Docs
  • Blog
  • What is MCP
  • What is WebMCP
  • Status
Company
  • About
  • Contact
  • Terms
  • Privacy
  • DPA