mcpField
P
pls-touch-grass

pls-touch-grass

本地服务
github.com/Rinava游戏娱乐010 周前更新

关于 pls-touch-grass

pls-touch-grass 是一个以幽默方式记录户外活动并提醒用户离开室内的 MCP 服务,适合希望演示 MCP 工具调用与共享状态的开发者。它结合情绪检测、天气和附近公园信息。

主要功能

  1. 01记录外出活动
  2. 02追踪室内时长
  3. 03检测挫败情绪并升级提醒
  4. 04查询天气与附近公园
  5. 05通过 JSON 文件保存状态

适用场景

  1. 01记录从公园返回的时间
  2. 02久坐时判断是否该出门
  3. 03情绪激动时触发休息提醒

MCP 相关

通过 stdio 向 MCP 客户端提供五种工具,用于记录户外活动、检查室内时长、检测挫败情绪、查询天气和寻找公园。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rinava-pls-touch-grass": {
"command": "npx",
"args": [
"-y",
"pls-touch-grass-mcp"
],
"env": {
"GRASS_STATE_FILE": "<GRASS_STATE_FILE>"
}
}
}
}
启动命令npx -y pls-touch-grass-mcp
需要配置的环境变量
GRASS_STATE_FILEPath to the JSON file holding your grass-touching history. Defaults to ~/.pls-touch-grass.json

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmpls-touch-grass-mcp0.3.0

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
notestring否用户在外面做了什么,例如 'went to the park'

详细介绍

pls-touch-grass-mcp

npm ci license: MIT

一个知道你已经多久没出去亲近大自然、还会对此念叨个不停的 MCP 服务。

你记录外出情况,它会追踪室内时间;它会发现你对 AI 大发脾气,然后先查看天气,再把你送去最近的公园。这是个玩笑,但也能教你 MCP:五个工具、共享状态,以及能让模型主动调用工具的描述。

安装

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

使用 -s user,否则服务只会在你运行命令的目录中存在。如果你是在克隆的项目中工作,可以跳过这条命令:根目录中有一个 .mcp.json,打开文件夹时 Claude Code 会提示你使用它。

Cursor

Add to Cursor

也可以将 JSON 放在 ~/.cursor/mcp.json(全局)或 .cursor/mcp.json(每个项目单独配置)中:

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

从 Releases 下载 .mcpb,然后依次选择 Settings → Extensions → Install Extension。依赖已打包,可离线安装。手动安装时,使用与 Cursor 相同的 JSON,并将其放在 claude_desktop_config.json 中(macOS 上为 ~/Library/Application Support/Claude/,Windows 上为 %APPDATA%\Claude\)。

claude.ai

不支持。自定义连接器需要通过 HTTPS 连接远程服务;而这是在你自己的机器上运行的 stdio 服务。HTTP 传输是待办事项中的首项。

从源代码安装
git clone https://github.com/Rinava/pls-touch-grass-mcp
cd pls-touch-grass-mcp
npm ci && npm run build

将上方任意配置指向 node /absolute/path/to/dist/index.js 即可。

npx -y 会在首次启动时下载软件包——现场观众和场馆 Wi-Fi 值得享有预热缓存。软件包已发布到 npm,名称为 pls-touch-grass-mcp;也已发布到 MCP Registry,名称为 io.github.Rinava/pls-touch-grass。

五个工具

工具功能模型调用时机
touched_grass记录你外出了一趟“我刚从公园回来”
gotta_go你需要出去走走吗?“我可以继续吗?”
frustration_detector发现你发火并升级处理你自己发脾气时自动调用;这正是它的用意
grass_conditions查询实际天气(Open-Meteo,无需密钥)在让你出门前
where_to_touch_grass查询附近公园及距离(OpenStreetMap)“我该去哪儿?”,或你提到某个地点时

模型不需要任何指导就能检测挫败情绪:工具描述本身就能做到。输入“什么都不管用!!!”试试看。

零配置

每次运行时,都会根据你的 IP 地址重新获取位置(ipwho.is)——有意只精确到城市级别。如果定位失败,就使用上次已知的位置,再不然就用方尖碑,跟其他人一样。向 where_to_touch_grass 提供社区名称或街道地址后,该位置就会固定下来:已知社区可离线解析,其他地点只会通过 OpenStreetMap 的 Nominatim 地理编码一次,并且只有你输入的文字会离开你的设备。你指定的地点优先于 IP 推测的位置,直到你指定另一个地点。

室内容忍时间默认为严苛的 2 分钟;向模型求情,它就会向 gotta_go 传入更大的 threshold_minutes。状态保存在一个 JSON 文件中:~/.pls-touch-grass.json。出去亲近大自然会重置怒气计数器。这就是宽恕之道。

演示魔咒

现场演示总会招来它:你刚说“看好了”,场馆 Wi-Fi 就会断。将 --demo 加到 args 中,所有回答都会使用预设内容——22°C、晴朗天气、方尖碑和精选地点。不会发起网络请求,也不会有意外。默认关闭;现实生活就该保持真实。

跟进工作坊

仓库按步骤打上了标签:

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

每个步骤都可以编译,并通过自己的测试。总共只有两个依赖:官方 MCP SDK 和 zod。

作业

  • HTTP 传输:SDK v2 中的 createMcpHandler 可通过 fetch 提供相同的工厂,这也是接入 claude.ai 的方式
  • 按项目设置阈值,而不是使用全局阈值
  • 跟踪连续几天接触草地的连续记录
  • 通过 PR 为你所在的城市添加演示地点:在 src/lib/demo.ts 中为每个公园添加一个对象,并附上你的看法

发布

npm run build:mcpb 会将 dist 和生产依赖打包到 pls-touch-grass-mcp-<version>.mcpb,该文件会发布到 GitHub Release。清单由 package.json 生成,无需手动保持同步。

贡献

欢迎提交问题和 PR——作业列表已整理成未解决问题,其中有几个标记为 good first issue。设置说明和项目规范请参阅 CONTRIBUTING.md(规范不多,但必须附上对演示地点的看法)。

许可证

MIT。草地免费,这份许可证也是。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。