OpenClaw 快速上手(六):Skills、MCP、以及交付一个真正有用的东西

写第一个 Skill,接一个 MCP 浏览器自动化服务器,配 cron 跑起来,落地一个真正的早间简报 Agent——也就是这套安装从 Demo 变成“少了会想念”的那一刻。

前五篇你应该已经有一个能用的 OpenClaw 加上一条聊天渠道。这一篇让它不再是 Demo。

我们要做什么

一个早间简报 Agent:

  1. 工作日早 7 点跑
  2. 抓 Hacker News 头条(用 Playwright MCP)
  3. 读今天日历(用一个包了 gcalcli 的 Skill)
  4. 把两份合成一段,推到我的 Telegram

这是一个真实工作流。读完你会有骨架,可以把数据源换成自己的。

第一步:写一个 Skill

Skill 住在 ~/.openclaw/skills/<name>/SKILL.md。先写"总结头条"那个:

1
mkdir -p ~/.openclaw/skills/summarize-headlines

新建 ~/.openclaw/skills/summarize-headlines/SKILL.md

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
name: summarize-headlines
description: 把一组头条总结成一段简报
trigger: 当用户要新闻简报、头条总结、每日新闻摘要时
tools_required: [web_search]
---

# 总结头条

你拿到的是一组头条与对应来源 URL。
输出一段总结。

## 规则
- 最多 4 句。
- 把相关头条合到一句里。
- 标题不清或付费墙的,跳过。
- 高信息量的放最前,不按时间顺序。
- 语气:干、分析。不要"激动人心"或"重大突破"。

## 输出模板
> [最多 4 句]
>
> _来源:[domain1], [domain2], [domain3]_

两个设计点:

  • trigger 是模型决定该不该用这个技能时看到的。要从用户视角写,不要从实现视角写。
  • 正文 是 SOP。当成新人入职文档来写——例子、边界情况、输出格式。越具体越好。

重启 Gateway 验证 Skill 加载:

1
2
openclaw skills list | grep summarize
# summarize-headlines  (loaded)

第二步:接 MCP 服务器

OpenClaw 不直接支持 MCP,用 MCPorter 当中间层:

1
2
npm i -g mcporter
curl -LsSf https://astral.sh/uv/install.sh | sh   # 给某些 MCP 服务器要用的 uvx

通过 MCPorter 加 Playwright:

1
mcporter add playwright npx @playwright/mcp@latest

openclaw.json 告诉 OpenClaw MCPorter 在哪:

1
2
3
4
"mcp": {
  "porter_endpoint": "http://127.0.0.1:7890",
  "servers": ["playwright"]
}

重启 Gateway。Playwright MCP 暴露浏览器自动化工具(navigatescreenshotclickextract_text),Agent 现在可以调用了。

在 TUI 里测:

用 Playwright 打开 https://news.ycombinator.com,
取前 5 条故事的标题和 URL。

如果 Agent 返回一份列表,链路就通了。

第三步:包一个 CLI 工具的 Skill

我用 gcalcli 看日历。Skill:

1
mkdir -p ~/.openclaw/skills/today-calendar

~/.openclaw/skills/today-calendar/SKILL.md

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
---
name: today-calendar
description: 取当天的 Google Calendar 事件
trigger: 当用户问今天日历、今天会议、今天日程时
tools_required: [exec]
---

# 今天的日历

跑命令 `gcalcli agenda --tsv "$(date +%F) 00:00" "$(date +%F) 23:59"`
解析 TSV 输出(列:start, end, title, location)。

按这个 markdown 列表输出:
- HH:MM–HH:MM **标题**(地点,如有)

如果今天没有事件,回复"今天没安排"。

注意 Skill 本质是一份配方,不是函数。模型是运行时。exec 是动词。Skill 是把它们串起来的"知识名词"。

第四步:一个组合 Skill

再写一个用前两个的:

1
mkdir -p ~/.openclaw/skills/morning-briefing

~/.openclaw/skills/morning-briefing/SKILL.md

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
---
name: morning-briefing
description: 生成每日早间简报
trigger: 当用户要早间简报、每日简报、7 点报告时
tools_required: [exec]
skills_required: [today-calendar, summarize-headlines]
---

# 早间简报

1.`today-calendar` 拿今天日程。
2. 用 Playwright MCP 工具抓 https://news.ycombinator.com 前 5 条。
3.`summarize-headlines` 把这 5 条总结。
4. 合成最终消息:

早间简报 — YYYY-MM-DD

今天

[today-calendar 的输出]

新闻

[summarize-headlines 的输出]


把结果发到默认渠道。

skills_required 字段告诉 OpenClaw:当本 Skill 被触发时,把这两个的正文也热加载,免得二次 fetch、免得增加延迟。

第五步:cron

openclaw.json 里:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
"cron": {
  "jobs": [
    {
      "name": "morning-briefing",
      "schedule": "0 7 * * 1-5",
      "skill": "morning-briefing",
      "channel": "telegram"
    }
  ]
}

0 7 * * 1-5 是周一到周五早 7 点。重启 Gateway。验证:

1
2
openclaw cron list
# morning-briefing | 0 7 * * 1-5 | next: 明天 07:00 | channel: telegram

第一次跑的时候盯 Gateway 日志,能看到 Agent 循环点火、Skill 加载、Playwright 工具调用滚过、最后一条消息落到你 Telegram。

现在你拥有什么

  • 一个长跑 Agent,连着真实聊天平台
  • 把领域知识与 Agent 循环分开的 Skills
  • 一个 MCP 服务器,提供 OpenClaw 原生没有的能力
  • 一条 cron,把"我得问"变成"它自己来"

这就是完整循环。官方文档里其它案例——第二大脑、内容流水线、运维自动化——都是这五步的变奏。换 Skill、换 MCP、换 cron 行就是了。

接下来我会做什么

按工作量从小到大排:

  1. 加反馈回路。 在简报上回复纠正(“跳过加密货币头条”)。让一个 Skill 把这些写进 ~/.openclaw/memory/feedback/morning-briefing.md。明天的简报会拉进来。
  2. 新闻源可配置。 写一个从 ~/openclaw-workspace/sources.yaml 读取并迭代的 Skill。基本就免费拿到了"作为 Agent 的 RSS 阅读器"。
  3. 接第二个渠道。 同一个 Agent,工作时段还在钉钉里出现。Skills 不动。

QuickStart 系列就停在这。剩下的官方文档对每一层都有深入;现在你已经有地图去导航它们。

如果只能记一句:枯燥的层(Skills、Memory、Channels)才是价值所在。Agent 循环大家都一样。让你的安装变得有用的是你建立的技能库,以及你把它接到哪些渠道上。祝顺利。

翻完了?

去 GitHub 关注一下,新一篇通常隔一周就到。

GitHub