第 2 课
接上 MCP:让 Agent 调用 take_screenshot
把 CurlShot MCP 接到 Cursor / Claude,让 Agent 调用 take_screenshot,并掌握配额与省 token 技巧。
学习位置仅保存在当前浏览器,有效期 180 天。
图文教材
接上 MCP:让 Agent 调用 take_screenshot
本课按官方 Using the API from AI agents 整理。
目标:在 MCP 客户端里挂上https://curlshot.com/api/mcp,手搓一次 JSON-RPC,再配置 Cursor/Claude 常用 JSON;学会默认参数、省 token 与配额错误处理。
主要来源:AI agents 指南 · llms.txt · .well-known/mcp.json
你将得到什么
- 理解 MCP 端点:streamable HTTP + JSON-RPC 2.0,
POSTonly - 两个工具:
take_screenshot(耗配额)、list_devices(免费、可无 key) - 一份可粘贴的 MCP 客户端配置片段
课前准备
- 已完成第一课,手头有 access key(建议单独建一把「仅给 Agent」的 key,方便吊销)。
- 该 key 不要开启「仅接受签名请求」——MCP 调用不带 signature,否则会
signature_required(官方指南原文提醒)。 - 仍用环境变量,勿把 key 写进 Prompt。
export CURLSHOT_KEY='你的_access_key'
一、MCP 端点长什么样
- URL:
https://curlshot.com/api/mcp - 传输:streamable HTTP(每次独立
POST,无会话流;对端GET会 405) - 鉴权:
Authorization: Bearer YOUR_ACCESS_KEY(take_screenshot需要) - 协议:JSON-RPC 2.0;支持的 protocolVersion 含
2025-06-18等(见官方 initialize 响应)
Agent 可读总图:https://curlshot.com/llms.txt ;全量:https://curlshot.com/llms-full.txt 。
二、手搓 initialize(可不带 key)
curl -X POST "https://curlshot.com/api/mcp" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "kun-academy", "version": "1.0.0" }
}
}'
对照结果
- HTTP 200,JSON 含
"serverInfo",名称多为CurlShot instructions里会提示用 Bearer 传 access key,并指向 https://curlshot.com/agent-md
常见方法(官方表):
| Method | 作用 | 要 key? |
|---|---|---|
initialize | 握手 | 否 |
ping | 探活 | 否 |
tools/list | 列出工具与参数 | 否 |
tools/call | 调用工具 | 仅 take_screenshot |
单 IP 另有约 120 次/分钟 的 MCP 入口限流(与套餐限流分开,以官方为准)。
三、调用 take_screenshot(可抄)
官方示例:
curl -X POST "https://curlshot.com/api/mcp" \
-H "Authorization: Bearer ${CURLSHOT_KEY}" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "take_screenshot",
"arguments": { "url": "https://example.com", "format": "webp" }
}
}'
对照结果(成功)
result.isError为falsecontent通常含:- text:摘要(地址、像素、体积、本周期剩余次数、
Download:临时链接) - image:base64 图 +
mimeType(模型可直接「看见」页面)
- text:摘要(地址、像素、体积、本周期剩余次数、
- 计 1 次截图配额
MCP 默认与 REST 不同(官方强调):
经 MCP 时,未指定则format默认 jpeg,且block_ads、block_cookie_banners默认 true。普通 API 默认是 png,且两项拦截默认 false。
文件 超过约 6 MB 时,仍可能成功,但只回 text + Download 链接、不内嵌 base64——模型就「看」不到图了。应缩小视口、改用 jpeg/webp、或去掉 full_page。
四、list_devices(免费)
curl -X POST "https://curlshot.com/api/mcp" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": { "name": "list_devices", "arguments": {} }
}'
对照结果
- 不需要 key、不耗配额
- 返回设备预设列表(
name即viewport_device可用值,如手机/平板/笔记本)
五、接到 MCP 客户端(Cursor / Claude 等)
官方给出的通用配置形状(路径因客户端而异):
{
"mcpServers": {
"screenshots": {
"type": "http",
"url": "https://curlshot.com/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_ACCESS_KEY"
}
}
}
}
操作提示:
- 把
YOUR_ACCESS_KEY换成环境变量或客户端密钥槽,不要写进发给模型的用户消息。 - 重启/重载 MCP 后,让客户端执行
tools/list,应看到take_screenshot与list_devices。 - 对 Agent 说:「打开 https://example.com 截一张 webp,不要全页」,并确认它走了 MCP 工具而非瞎编。
更细的 Claude / Cursor / VS Code 说明见官方指南中的 MCP 仓库链接;本课以官网 JSON 为准即可跑通。
六、省 token 与缓存(跟做建议)
官方给 Agent 的建议(摘要):
- 优先 jpeg / webp,视口适中(默认约 1280×1024;扫一眼可用更小)
- 非必要不要
full_page - 只关心一块 UI 时传
selector - 同一页反复看:
"cache": true(命中免费;你刚改过页面则不要开)
示例 arguments:
{
"url": "https://developer.mozilla.org",
"format": "webp",
"cache": true
}
七、失败时 Agent 该怎么做
工具失败时 HTTP 往往仍是 200,看 isError: true 与 text 里的错误码:
| 信号 | 建议 |
|---|---|
quota_exceeded | 停止重试,告诉用户升级或等下周期;对应 REST 约 402 |
rate_limited / concurrency_limit | 按文案等待 N 秒再试一次;对应约 429 |
invalid_options | 改参数,勿盲重试同一错误请求 |
成功摘要末尾会带「本周期还剩多少次」,便于 Agent 提前刹车。
八、本课检查清单
-
initialize返回 CurlShot serverInfo -
take_screenshot对 example.com 成功且isError=false -
list_devices无 key 可跑 - MCP 客户端配置使用 Bearer,key 未进 Prompt
- 知道 MCP 默认 jpeg + 拦广告/cookie 条
