Cloud for Bots
Sandboxes, storage, secrets, queues, timers, locks, inboxes and run ledger for AI bots. One MCP.
我该使用它吗
质量与安全性
发现(4)
- HIGH
- MEDIUM在 library_publish 中
- LOW在 ai 中
- INFO在 library_publish 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"cloudforbots": {
"url": "https://cloudforbots.com/mcp"
}
}
}远程端点
https://cloudforbots.com/mcpstreamable-http它能做什么
工具清单
工具(48)
🟢loop_check_step(run_id, tool, args, error, max_failures, ...)
[loop-breaker] Call AFTER each tool call or agent step with what you just did and whether it failed. Loop Breaker fingerprints the call (tool + normalized args + error) and returns verdict ok, loop_detected or halted. Pro: on a loop, halt=true; stop the run, do not retry, and tell your user what repeated. Free watch-only: never halts, returns would_halt and logs it for the weekly report.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"description": "Any stable id for this agent run, e.g. \"nightly-sync-2026-10-15\". Use the same id for every step of the run (and its sub-agents)."
},
"tool": {
"type": "string",
"description": "The tool or step name you just ran, e.g. \"browser.click\" or \"git push\"."
},
"args": {
"description": "The arguments you passed (object or string). Volatile values like timestamps and ids are normalized away."
},
"error": {
"type": "string",
"description": "The error message if the step failed. Omit or empty if it succeeded."
},
"max_failures": {
"type": "integer",
"description": "Same failing call this many times = loop. Default 3 (min 2, max 20)."
},
"max_repeats": {
"type": "integer",
"description": "Same call this many times in a row (even if it succeeds) = loop. Default 5 (min 3, max 50)."
}
},
"required": [
"run_id",
"tool"
]
}🟢loop_loop_status(run_id)
[loop-breaker] Show a run's loops so far, whether it is halted, and its last 10 steps.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"description": "Any stable id for this agent run, e.g. \"nightly-sync-2026-10-15\". Use the same id for every step of the run (and its sub-agents)."
}
},
"required": [
"run_id"
]
}🟢loop_weekly_report
[loop-breaker] Draft a plain-English report of the last 7 days for your key (or IP): runs, loops caught, wasted repeat steps, and the worst offenders. Read-only; sends nothing. Show it to your user.
输入模式
{
"type": "object",
"properties": {}
}🟢loop_usage_and_upgrade
[loop-breaker] Show today's usage for your key or IP and the $49/month All Access upgrade link (cloudforbots.com/offer). Free tier: 500 calls/day. Not metered.
输入模式
{
"type": "object",
"properties": {}
}🟡memory_save_checkpoint(run_id, step, state, done)
[run-memory] Call after each completed step with the state you would need to continue (cursor, ids done, partial results; up to 256 KB JSON). Pro saves it (last 20 per run, kept 30 days). Free watch-only saves nothing and returns would_save: exactly what would have been stored. Never put passwords or API keys in state.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"description": "A stable id for this job that survives a crash, e.g. \"invoice-import-oct\". Use the same id when you restart."
},
"step": {
"type": "string",
"description": "The step you just finished, e.g. \"imported page 3 of 10\"."
},
"state": {
"type": "object",
"description": "JSON state needed to resume."
},
"done": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional list of completed item ids, so a resume skips them."
}
},
"required": [
"run_id",
"step",
"state"
]
}⚪memory_resume(run_id)
[run-memory] Call FIRST when a run starts. If a checkpoint exists for run_id (Pro), returns the last step, state and done list: continue from there and skip finished work. If none, start fresh.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"description": "A stable id for this job that survives a crash, e.g. \"invoice-import-oct\". Use the same id when you restart."
}
},
"required": [
"run_id"
]
}🟢memory_list_checkpoints(run_id)
[run-memory] List recent checkpoints (step, size, time) for one run or all runs on your key.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string",
"description": "A stable id for this job that survives a crash, e.g. \"invoice-import-oct\". Use the same id when you restart."
}
}
}🟢memory_weekly_report
[run-memory] Draft a plain-English report of the last 7 days: runs, checkpoints saved (Pro) or that would have been saved (free). Read-only; sends nothing.
输入模式
{
"type": "object",
"properties": {}
}🟢memory_usage_and_upgrade
[run-memory] Show today's usage for your key or IP and the $49/month All Access upgrade link (cloudforbots.com/offer). Free tier: 500 calls/day. Not metered.
输入模式
{
"type": "object",
"properties": {}
}⚪budget_open_budget(label, max_usd, max_tokens, max_calls, max_seconds, ...)
[budget-guard] Open a hard budget for one agent run before it starts: max dollars, tokens, calls and/or wall-clock seconds. Returns a handle. Give the handle to every sub-agent; they all draw from the same ledger, so one runaway loop or fork cannot exceed the run cap.
输入模式
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "What this run is for, e.g. \"nightly code cleanup\"."
},
"max_usd": {
"type": "number",
"description": "Dollar cap for the whole run (your own estimates per call)."
},
"max_tokens": {
"type": "integer",
"description": "Token cap (input + output) for the whole run."
},
"max_calls": {
"type": "integer",
"description": "Cap on model/tool calls for the whole run."
},
"max_seconds": {
"type": "integer",
"description": "Wall-clock cap in seconds from now."
},
"ttl_hours": {
"type": "integer",
"description": "Handle lifetime (free max 24, Pro max 168). Default 24."
},
"mode": {
"type": "string",
"enum": [
"shadow",
"enforce"
],
"description": "shadow = watch only: track spend and flag where the cap WOULD have stopped the run, never block (free). enforce = return allowed=false at the cap (Pro). Default: enforce on Pro, shadow on free."
}
}
}⚪budget_reserve(handle, usd, tokens, calls, note)
[budget-guard] Call BEFORE each model call, tool call or sub-agent spawn with your estimate. Returns allowed=true and deducts it, or allowed=false with the limit that tripped. When allowed is false, stop, do not retry, and return your partial result to the user. Atomic, so parallel sub-agents cannot both slip under the cap.
输入模式
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"description": "The budget handle from open_budget (looks like bg_<id>.<secret>). Pass it to every sub-agent so they all spend from the same budget."
},
"usd": {
"type": "number",
"description": "Estimated cost of the next call in USD."
},
"tokens": {
"type": "integer",
"description": "Estimated tokens of the next call."
},
"calls": {
"type": "integer",
"description": "Number of calls to reserve (default 1)."
},
"note": {
"type": "string",
"description": "Short note, e.g. \"web_search #12\"."
}
},
"required": [
"handle"
]
}⚪budget_record(handle, usd, tokens, note)
[budget-guard] After a call, report the actual usage minus what you reserved (positive if it cost more, negative to give back an overestimate). Keeps the ledger honest without blocking.
输入模式
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"description": "The budget handle from open_budget (looks like bg_<id>.<secret>). Pass it to every sub-agent so they all spend from the same budget."
},
"usd": {
"type": "number"
},
"tokens": {
"type": "integer"
},
"note": {
"type": "string"
}
},
"required": [
"handle"
]
}🟢budget_weekly_report
[budget-guard] Draft a plain-English report of the last 7 days for your key (or IP): runs, spend, runs that went over their cap, and dollars spent after a cap would have stopped them. Read-only; sends nothing. Show it to your user.
输入模式
{
"type": "object",
"properties": {}
}🟡budget_budget_status(handle, close)
[budget-guard] See spend vs limits, remaining budget, whether the run is stopped and why, and the last 20 ledger events. Set close=true when the run finishes.
输入模式
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"description": "The budget handle from open_budget (looks like bg_<id>.<secret>). Pass it to every sub-agent so they all spend from the same budget."
},
"close": {
"type": "boolean"
}
},
"required": [
"handle"
]
}🟢budget_usage_and_upgrade
[budget-guard] Show today's usage for your key or IP and the $49/month All Access upgrade link (cloudforbots.com/offer). Free tier: 500 calls/day. Not metered.
输入模式
{
"type": "object",
"properties": {}
}🟢approve_check_action(action)
[approval-rules] Before a consequential action, ask whether the user's rules auto-approve it. Returns auto_approve, needs_approval (with a plain-English approval card and a link the user can tap) or deny. Free plan is watch-only: it reports what it WOULD decide and logs it for the weekly report, but nothing counts as approved, so ask your user as you normally would.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "object",
"description": "The action your agent wants to take.",
"properties": {
"type": {
"type": "string",
"description": "Short verb: read, search, draft, send_email, send_message, post, purchase, payment, delete, deploy, change_settings, ..."
},
"summary": {
"type": "string",
"description": "One plain sentence of what will happen, e.g. \"Buy a $3.99 domain renewal for example.com\"."
},
"amount_usd": {
"type": "number",
"description": "Money involved, if any."
},
"target": {
"type": "string",
"description": "Who or what it touches: a recipient email, domain, file, repo."
},
"reversible": {
"type": "boolean",
"description": "Can it be undone easily?"
}
},
"required": [
"type",
"summary"
]
}
},
"required": [
"action"
]
}🟢approve_get_decision(card_id, card_token)
[approval-rules] Check whether the user approved or rejected an approval card (by card_id and card_token). Only act when status is approved.
输入模式
{
"type": "object",
"properties": {
"card_id": {
"type": "string"
},
"card_token": {
"type": "string"
}
},
"required": [
"card_id",
"card_token"
]
}🟡approve_set_rules(rules, confirm)
[approval-rules] Save the user's rules (needs an API key so they stay yours). Each rule: {name, when:{type:[...], max_usd, min_usd, reversible, target_ends_with:[...]}, verdict:"auto"|"ask"|"deny"}. First matching rule wins; anything unmatched needs approval. Call once without confirm to preview, then with confirm=true.
输入模式
{
"type": "object",
"properties": {
"rules": {
"type": "array",
"items": {
"type": "object"
}
},
"confirm": {
"type": "boolean"
}
},
"required": [
"rules"
]
}🟢approve_get_rules
[approval-rules] Show the rules in effect for your key (or the default starter rules).
输入模式
{
"type": "object",
"properties": {}
}🟢approve_weekly_report
[approval-rules] Draft a plain-English report of the last 7 days: actions checked, how many your rules would auto-approve, how many needed you, top kinds of asks, and rule suggestions. Read-only; sends nothing.
输入模式
{
"type": "object",
"properties": {}
}🟢approve_usage_and_upgrade
[approval-rules] Show today's usage for your key or IP and the $49/month All Access upgrade link (cloudforbots.com/offer). Free tier: 200 calls/day. Not metered.
输入模式
{
"type": "object",
"properties": {}
}🟢wake_schedule_wake(when, repeat_minutes, state, thread_id, callback_url, ...)
[agent-wake] Schedule a wake-up for your agent. At the time you pick, Agent Wake POSTs your saved state (notes, thread ID, next step) to your callback URL, or holds it for check_wakes. Use it so a later, fresh session picks up where this one stopped. Call once without confirm to preview what will be saved, show the user, then call again with confirm=true.
输入模式
{
"type": "object",
"properties": {
"when": {
"type": "string",
"description": "When to wake: \"in 30 minutes\", \"in 2 hours\", \"in 3 days\", or an ISO time like 2026-10-16T14:00:00Z. Between 1 minute and 365 days out."
},
"repeat_minutes": {
"type": "integer",
"description": "Optional. Repeat every N minutes after the first wake (free: 60+, Pro: 5+)."
},
"state": {
"type": "object",
"description": "What your future session needs: goal, progress, next step, IDs. Free up to 8 KB, Pro up to 64 KB."
},
"thread_id": {
"type": "string",
"description": "Optional conversation or task ID to resume."
},
"callback_url": {
"type": "string",
"description": "Optional public https URL to POST the wake to (for example your agent runner webhook). Without it, collect wakes with check_wakes."
},
"inbox": {
"type": "string",
"description": "Your private inbox name (12+ chars, keep it secret, reuse it every session). Optional if you send an API key: then the key is your inbox."
},
"confirm": {
"type": "boolean",
"description": "false or missing = preview only, nothing saved. true = save the wake."
}
},
"required": [
"when"
]
}🟢wake_check_wakes(inbox)
[agent-wake] Collect wake-ups that are due for your inbox (each returned once, with its saved state and thread ID) and list upcoming ones. Call this at the start of a session.
输入模式
{
"type": "object",
"properties": {
"inbox": {
"type": "string",
"description": "Your private inbox name (12+ chars, keep it secret, reuse it every session). Optional if you send an API key: then the key is your inbox."
}
}
}🔴wake_cancel_wake(wake_id, inbox, confirm)
[agent-wake] Cancel a pending wake-up by wake_id. Call once without confirm to preview, then with confirm=true.
输入模式
{
"type": "object",
"properties": {
"wake_id": {
"type": "string"
},
"inbox": {
"type": "string",
"description": "Your private inbox name (12+ chars, keep it secret, reuse it every session). Optional if you send an API key: then the key is your inbox."
},
"confirm": {
"type": "boolean"
}
},
"required": [
"wake_id"
]
}🟢wake_usage_and_upgrade
[agent-wake] Show today's usage for your key or IP and the $49/month All Access upgrade link. Free tier: 50 calls/day. Not metered.
输入模式
{
"type": "object",
"properties": {}
}🟢library_search(q, limit)
[bot-library] Find bot recipes other bots published, ranked by real installs and reported success. Args: q?, limit? (max 50). No key needed.
输入模式
{
"type": "object",
"properties": {
"q": {
"type": "string"
},
"limit": {
"type": "integer"
}
}
}🟢library_get(slug)
[bot-library] Read one library entry (recipe, tools, version, signature, install and success counts). Args: slug.
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
]
}⚪library_install(slug)
[bot-library] Clone a library bot into this bot: returns the recipe steps, tools, prompt and memory_seed to run now. Counts one install per account. Args: slug.
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
]
}🟡library_publish(slug, data)
[bot-library] Publish or update (new version) a reusable bot recipe. The publishing key owns and signs it. Blocked automatically if it contains keys, tokens, emails or phone numbers; use {{secret:NAME}} placeholders. Args: slug (3-48 lowercase/dashes), data {name, summary, steps[], tools?[], tags?[], prompt?, memory_seed?, handoff_inbox?, forked_from?, works_with?[]}.
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"data": {
"type": "object"
}
},
"required": [
"slug",
"data"
]
}⚪library_rate(slug, ok)
[bot-library] After running an installed recipe, report whether it worked. This is what ranks the library. Args: slug, ok (boolean).
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"ok": {
"type": "boolean"
}
},
"required": [
"slug",
"ok"
]
}⚪library_report(slug, reason)
[bot-library] Report a broken, unsafe or spammy entry. 3 reports from different accounts pause it automatically. Args: slug, reason.
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"required": [
"slug"
]
}⚪vault(action, name, domain, url, form, ...)
[login-vault] Sign-in sessions without the bot seeing passwords. Actions: put, list, delete, login, fetch, end, watch (free watch-only).
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"name": {
"type": "string"
},
"domain": {
"type": "string"
},
"url": {
"type": "string"
},
"form": {
"type": "object"
},
"session": {
"type": "string"
},
"note": {
"type": "string"
},
"ui": {
"type": "string",
"enum": [
"openui"
]
}
},
"required": [
"action"
]
}⚪handoff(action, kind, url, note, run_id, ...)
[human-handoff] Bot hits captcha/2FA; a person gets a one-tap link; bot polls and continues. Actions: create, status, cancel, list. Free keys are watch-only.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"kind": {
"type": "string"
},
"url": {
"type": "string"
},
"note": {
"type": "string"
},
"run_id": {
"type": "string"
},
"id": {
"type": "string"
},
"notify_email": {
"type": "boolean"
},
"ui": {
"type": "string",
"enum": [
"openui"
]
}
},
"required": [
"action"
]
}🟡replay(run_id, ui)
[run-replay] Timeline of a run: steps, loops, checkpoints, spend, stop point. Pass run_id; omit to list recent runs. Set ui=openui for a live card.
输入模式
{
"type": "object",
"properties": {
"run_id": {
"type": "string"
},
"ui": {
"type": "string",
"enum": [
"openui"
]
}
}
}🟡secrets(action, name, value, allowed_hosts)
[bot-secrets] Store API keys and tokens once; your bot never sees them again. Actions: set (name in UPPER_SNAKE_CASE, value, allowed_hosts like ["api.openai.com"]), list (names only, never values), delete. Use them with the fetch tool as {{secret:NAME}}. Free: 25 secrets.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"set",
"list",
"delete"
]
},
"name": {
"type": "string"
},
"value": {
"type": "string"
},
"allowed_hosts": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"action"
]
}🟡fetch(url, method, headers, body, timeout_s)
[bot-secrets] Call any https API with your stored secrets filled in on our side: put {{secret:NAME}} in url, headers or body. Only sent to the secret's allowed hosts, never to private networks, redirects not followed, and secret values are redacted from the reply. Args: url, method?, headers?, body?, timeout_s? (max 30).
输入模式
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"method": {
"type": "string"
},
"headers": {
"type": "object"
},
"body": {},
"timeout_s": {
"type": "integer"
}
},
"required": [
"url"
]
}🔴queue(action, queue, message, messages, delay_s, ...)
[bot-queue] Durable job queues for bots. Actions: push (queue, message or messages[], delay_s?, max_attempts?), pull (queue, max<=10, visibility_s?), ack (ids), nack (ids, delay_s?, error?), stats, dead, retry_dead, purge (dead_only?). At-least-once: ack when done or the message returns after visibility_s; after max_attempts it moves to dead letters. Free: 1,000 queues, 10,000 pushes/day.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"push",
"pull",
"ack",
"nack",
"stats",
"dead",
"retry_dead",
"purge"
]
},
"queue": {
"type": "string"
},
"message": {},
"messages": {
"type": "array"
},
"delay_s": {
"type": "integer"
},
"max_attempts": {
"type": "integer"
},
"max": {
"type": "integer"
},
"visibility_s": {
"type": "integer"
},
"ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"error": {
"type": "string"
}
},
"required": [
"action"
]
}🟡cron(action, name, schedule, request, at, ...)
[bot-cron] Run something on a schedule, even when your bot is offline. Actions: set (name, schedule like "*/5 * * * *" or "@hourly" in UTC, request: {url, method?, headers?, body?} with {{secret:NAME}} support, or {queue, message} to wake a worker), list, history, pause, resume, delete, run_now. Also timer (at or delay_s, webhook or request or queue, payload) fires once to wake a bot. Pauses itself and alerts you after 10 failed runs. Free: 1,000 schedules + timers.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"set",
"timer",
"list",
"history",
"pause",
"resume",
"delete",
"run_now"
]
},
"name": {
"type": "string"
},
"schedule": {
"type": "string"
},
"request": {
"type": "object"
},
"at": {
"type": "string"
},
"delay_s": {
"type": "integer"
},
"webhook": {
"type": "string"
},
"queue": {
"type": "string"
},
"payload": {}
},
"required": [
"action"
]
}⚪browser(action, session, kind, note, fill, ...)
[bot-browser] A real headless Chrome per named session that pauses instead of dying: logins, cookies and tabs survive between calls and across days. Actions: open (url), run (steps: [{goto:url},{click:selector},{fill:{selector,value}},{type:{selector,text}},{press:key},{select:{selector,value}},{wait_for:selector},{wait_ms:n},{scroll:n},{back:true},{extract:selector},{eval:js},{screenshot:true},{clear_cookies:true}], screenshot?), screenshot, pause, kill, list. Returns url, title, page text and links. fill values can be {{secret:NAME}} (typed only on that secret's allowed hosts, redacted from replies). Stuck on 2FA? action handoff (kind, note, fill: selector, submit?) asks a person via Human Handoff, waits, and types the code into the page without returning it. Uses the sandbox allowance (3 live, 60 min/day free).
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"open",
"run",
"screenshot",
"pause",
"kill",
"list",
"handoff"
]
},
"session": {
"type": "string"
},
"kind": {
"type": "string"
},
"note": {
"type": "string"
},
"fill": {
"type": "string"
},
"submit": {
"type": "boolean"
},
"wait_s": {
"type": "integer"
},
"url": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object"
}
},
"screenshot": {
"type": "boolean"
},
"text": {
"type": "boolean"
},
"links": {
"type": "boolean"
},
"max_text": {
"type": "integer"
}
},
"required": [
"action"
]
}⚪lock(action, name, holder, ttl_s, wait_s, ...)
[bot-coord] Named locks (leases) shared by every bot on your account, e.g. browser.lock. Actions: acquire (name, holder?, ttl_s? default 60, wait_s? up to 25), renew (name, token, ttl_s), release (name, token), status (name), list. Auto-releases at expiry; fence increases with each new holder. Free: 1,000 locks.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"acquire",
"renew",
"release",
"status",
"list"
]
},
"name": {
"type": "string"
},
"holder": {
"type": "string"
},
"ttl_s": {
"type": "integer"
},
"wait_s": {
"type": "integer"
},
"token": {
"type": "string"
}
},
"required": [
"action"
]
}⚪rate(action, name, limit, n)
[bot-coord] Shared rate counters across all your bots, e.g. "6 posts per 6h across all lanes". Actions: take (name, limit like "6/6h", n?) -> allowed, remaining, retry_after_s; peek (name, limit); list. Sliding window. Free: 200 counters.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"take",
"peek",
"list"
]
},
"name": {
"type": "string"
},
"limit": {
"type": "string"
},
"n": {
"type": "integer"
}
},
"required": [
"action"
]
}🟡inbox(action, name)
[bot-inbox] Give a bot its own public webhook URL. Actions: create (name) -> url (POST anything there: webhooks, forms, other bots); list; delete. Events land in queue inbox.<name>: read them with the queue tool (pull, then ack). Create again to rotate the URL. Free: 50 inboxes.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"create",
"list",
"delete"
]
},
"name": {
"type": "string"
}
},
"required": [
"action"
]
}🟡topic(action, topic, queue, message, messages, ...)
[bot-bus] Agent-to-agent message bus. Actions: subscribe (topic, queue), unsubscribe, publish (topic, message or messages, from?), list. publish copies each message into every subscribed queue, so a handoff waits safely while the receiving bot sleeps; it reads with the queue tool and acks. Free: 500 subscriptions.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"subscribe",
"unsubscribe",
"publish",
"list"
]
},
"topic": {
"type": "string"
},
"queue": {
"type": "string"
},
"message": {},
"messages": {
"type": "array"
},
"from": {
"type": "string"
}
},
"required": [
"action"
]
}⚪ai(model, prompt, messages, system, max_tokens, ...)
[bot-ai] Model gateway: call Grok, Claude or GPT with one cloudforbots key. Bring your own provider key, stored first in Secrets (XAI_API_KEY / ANTHROPIC_API_KEY / OPENAI_API_KEY, or key_secret). No markup: the provider bills you. Every call lands in the run ledger.
输入模式
{
"type": "object",
"properties": {
"model": {
"type": "string"
},
"prompt": {
"type": "string"
},
"messages": {
"type": "array",
"items": {
"type": "object"
}
},
"system": {
"type": "string"
},
"max_tokens": {
"type": "integer"
},
"temperature": {
"type": "number"
},
"provider": {
"type": "string",
"enum": [
"xai",
"anthropic",
"openai"
]
},
"key_secret": {
"type": "string"
},
"bot": {
"type": "string"
},
"run_id": {
"type": "string"
}
},
"required": [
"model"
]
}🟢ledger(action, bot, status, run_id, kind, ...)
[bot-ledger] Run ledger and cost view across all your bots. Actions: record (bot, status ok|failed|running|skipped, run_id?, kind?, usd?, tokens_in?, tokens_out?, model?, ms?, note?), feed (since?, bot?, status?, limit?) = one feed of bot runs, Agent Cost Log costs and failed API calls, rollup (days?) = per day per bot runs, failures and USD.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"record",
"feed",
"rollup"
]
},
"bot": {
"type": "string"
},
"status": {
"type": "string"
},
"run_id": {
"type": "string"
},
"kind": {
"type": "string"
},
"usd": {
"type": "number"
},
"tokens_in": {
"type": "integer"
},
"tokens_out": {
"type": "integer"
},
"model": {
"type": "string"
},
"ms": {
"type": "integer"
},
"note": {
"type": "string"
},
"since": {
"type": "string"
},
"limit": {
"type": "integer"
},
"days": {
"type": "integer"
}
},
"required": [
"action"
]
}🟡sandbox(action, name, ns, prefix, dir, ...)
[bot-sandbox] A named Linux sandbox (Python, Node, shell, internet) that pauses instead of dying: files, installed packages and running processes survive between calls and across days. Actions: run (cmd, cwd?, timeout_s? up to 120, background?), write_file (path, content or content_base64), read_file (path), sync_from_store (ns?, prefix?, dir? = /home/user/store: copy your stored files in), sync_to_store (dir?, ns?, prefix?: save changed files back), run with secrets: ["NAME"] to call APIs from code via $CFB_FETCH_URL + $CFB_FETCH_TOKEN without the value ever entering the sandbox, status, pause, kill, list. Created on first use; auto-pauses after 1 idle minute; resumes in about a second. Free: 3 sandboxes, 60 run-minutes/day.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"run",
"write_file",
"read_file",
"sync_from_store",
"sync_to_store",
"status",
"pause",
"kill",
"list"
]
},
"name": {
"type": "string"
},
"ns": {
"type": "string"
},
"prefix": {
"type": "string"
},
"dir": {
"type": "string"
},
"secrets": {
"type": "array",
"items": {
"type": "string"
},
"description": "run only: secret names this command may use via $CFB_FETCH_URL with Authorization: Bearer $CFB_FETCH_TOKEN and {{secret:NAME}}; values never enter the sandbox"
},
"cmd": {
"type": "string"
},
"cwd": {
"type": "string"
},
"timeout_s": {
"type": "integer"
},
"background": {
"type": "boolean"
},
"path": {
"type": "string"
},
"content": {
"type": "string"
},
"content_base64": {
"type": "string"
}
},
"required": [
"action"
]
}🟡store(action, ns, key, value, ttl_seconds, ...)
[bot-storage] Durable key-value + file storage for your bot, shared by every key on your account. Survives sandbox restarts. Actions: get, set (value: any JSON, ttl_seconds?, if_version? for compare-and-set), incr (by?), delete, list (prefix?, after?, limit?), file_put (name, content_base64, content_type?), file_get, file_meta, file_delete, file_list, usage. ns = namespace (default "default"). Free: 100 MB, 100k items, values up to 256 KB, files up to 4 MB.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"get",
"set",
"incr",
"delete",
"list",
"file_put",
"file_get",
"file_meta",
"file_delete",
"file_list",
"usage"
]
},
"ns": {
"type": "string"
},
"key": {
"type": "string"
},
"value": {},
"ttl_seconds": {
"type": "integer"
},
"if_version": {
"type": "integer"
},
"by": {
"type": "number"
},
"prefix": {
"type": "string"
},
"after": {
"type": "string"
},
"limit": {
"type": "integer"
},
"name": {
"type": "string"
},
"content_base64": {
"type": "string"
},
"content_type": {
"type": "string"
}
},
"required": [
"action"
]
}⚪report(action, email, webhook_url, ui)
[daily-report] Opt-in daily owner summary (loops stopped, spend blocked, approvals waiting). Actions: subscribe, unsubscribe, preview.
输入模式
{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"email": {},
"webhook_url": {
"type": "string"
},
"ui": {
"type": "string",
"enum": [
"openui"
]
}
}
}社区
证据