关于 pls-touch-grass
pls-touch-grass 是一个以幽默方式记录户外活动并提醒用户离开室内的 MCP 服务,适合希望演示 MCP 工具调用与共享状态的开发者。它结合情绪检测、天气和附近公园信息。
主要功能
- 01记录外出活动
- 02追踪室内时长
- 03检测挫败情绪并升级提醒
- 04查询天气与附近公园
- 05通过 JSON 文件保存状态
适用场景
- 01记录从公园返回的时间
- 02久坐时判断是否该出门
- 03情绪激动时触发休息提醒
MCP 相关
通过 stdio 向 MCP 客户端提供五种工具,用于记录户外活动、检查室内时长、检测挫败情绪、查询天气和寻找公园。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| note | string | 否 | 用户在外面做了什么,例如 'went to the park' |
详细介绍
pls-touch-grass-mcp
一个知道你已经多久没出去亲近大自然、还会对此念叨个不停的 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
也可以将 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。草地免费,这份许可证也是。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。