Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
An MCP server that knows how long it's been since you touched grass
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
GRASS_STATE_FILEต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"pls-touch-grass": {
"command": "npx",
"args": [
"-y",
"pls-touch-grass-mcp"
],
"env": {
"GRASS_STATE_FILE": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add pls-touch-grass --env GRASS_STATE_FILE='ใส่ค่าของคุณ' -- npx -y pls-touch-grass-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"pls-touch-grass": {
"command": "npx",
"args": [
"-y",
"pls-touch-grass-mcp"
],
"env": {
"GRASS_STATE_FILE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"pls-touch-grass": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pls-touch-grass-mcp"
],
"env": {
"GRASS_STATE_FILE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
GRASS_STATE_FILE envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Rinava ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.0) เข้า registry 3 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Reelsaw
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Drive a self-hosted Reelsaw: turn long videos into vertical clips, edit, re-render and export them.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
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.
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"] } } }
.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).
No. Custom connectors want a remote server over HTTPS; this is stdio on your own machine. HTTP transport is the first item under Homework.
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.
| Tool | What it does | When the model calls it |
|---|---|---|
touched_grass | Logs that you went outside | "back from the park" |
gotta_go | Do you need to go out? | "can I keep going?" |
frustration_detector | Catches the rage and escalates | on its own, when you snap; that's the point |
grass_conditions | Real weather (Open-Meteo, no key) | before sending you outside |
where_to_touch_grass | Nearby 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.
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.
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.
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.
createMcpHandler in SDK v2 serves the same factory over fetch, and it's what gets you onto claude.aisrc/lib/demo.ts, with an opinionnpm run build:mcpb packs dist and the production dependencies into pls-touch-grass-mcp- .mcpb, the file that goes on a GitHub Release. The manifest is generated from package.json; nothing to keep in sync by hand.
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).
MIT. The grass is free and so is this.