402cron

Paid cron for AI agents: we call your https URL on schedule, signed. No account, paid with x402.

我该使用它吗

质量与安全性

A
描述质量
97%
模式完整度
85%
命名质量
98%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(1)

  • LOWTool 'get_service_status' description lacks action verb在 get_service_status 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~2,541token 数(工具定义)
~1.1 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.99%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "402cron": {
      "url": "https://402cron.com/mcp"
    }
  }
}

远程端点

https://402cron.com/mcpstreamable-http

它能做什么

工具清单

工具(16)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢get_pricing

What a delivery costs, which packs exist, and the exact x402 payment requirements for each. Balance is counted in DELIVERIES, not money, and packs never expire. Call this before buying.

输入模式

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_docs(section)

One section of the machine documentation: quickstart, headers, signature, notice, errors, billing or limits. Omit `section` to get the whole document.

输入模式

{
  "type": "object",
  "properties": {
    "section": {
      "type": "string",
      "enum": [
        "quickstart",
        "verification",
        "headers",
        "signature",
        "notice",
        "errors",
        "billing",
        "limits"
      ],
      "description": "Which section to return. Omit for all of it."
    }
  },
  "additionalProperties": false
}
🟢get_service_status

Whether the service is currently selling, on which network, and if not — why not. This is configuration, not liveness: the full health endpoint is at /health.

输入模式

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢list_tasks(state, limit, after)

Your tasks and their state. Needs your management token as an Authorization header on this connection.

输入模式

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Filter by state: live (default), all, or one exact state such as active or paused_by_client."
    },
    "limit": {
      "type": "integer",
      "description": "How many to return."
    },
    "after": {
      "type": "string",
      "description": "Cursor from a previous page."
    }
  },
  "additionalProperties": false
}
🟢get_task(id)

A single task: schedule, destination, state, next run, and how many failures in a row it carries.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟡create_task(name, cron, url, method, timeoutMs, ...)

Register a schedule against a destination you have already verified. Idempotent on "name": the same name updates the existing task instead of creating a second one. Creating costs nothing; each delivery ATTEMPT costs one credit.

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Your name for the task. Unique among your live tasks; creating with an existing name updates it."
    },
    "cron": {
      "type": "string",
      "description": "5 fields, UTC only, one minute at the finest. Operators: * a-b a,b */n a-b/n. Names: SUN-SAT (day), JAN-DEC (month). Macros: @yearly @annually @monthly @weekly @daily @midnight @hourly. Day-of-week is 0-6 with 0 = Sunday; 7 also means Sunday. Write days as names (MON-FRI). Numbers differ between schedulers: Quartz, AWS EventBridge and Cloudflare number Sunday as 1, we and croniter as 0. Translated for you: \"?\". \"?\" as a whole day-of-month or day-of-week field becomes \"*\". A NUMERIC day-of-week next to \"?\" is refused, because \"?\" means the expression was written where Sunday is 1. Refused: Quartz L, Quartz W, Quartz #, six fields (seconds), seven fields (year), @reboot, @every, CRON_TZ= prefixes, time zones of any kind — each with a code saying what to send instead."
    },
    "url": {
      "type": "string",
      "description": "The https:// destination. It must already be registered and verified — see register_destination."
    },
    "method": {
      "type": "string",
      "description": "HTTP method of the delivery. Default POST. GET and HEAD carry no body."
    },
    "timeoutMs": {
      "type": "integer",
      "description": "How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it."
    },
    "headers": {
      "type": "object",
      "description": "Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body."
    },
    "body": {
      "description": "The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON."
    }
  },
  "required": [
    "name",
    "cron",
    "url"
  ],
  "additionalProperties": false
}
🟡update_task(id, name, cron, url, method, ...)

Change the schedule, destination, method, timeout, headers or body of an existing task. Omit a field to leave it unchanged — sending null is refused, because "unchanged" and "cleared" must not look the same. State is NOT editable here: use pause_task and resume_task.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    },
    "name": {
      "type": "string",
      "description": "Your name for the task. Unique among your live tasks; creating with an existing name updates it."
    },
    "cron": {
      "type": "string",
      "description": "5 fields, UTC only, one minute at the finest. Operators: * a-b a,b */n a-b/n. Names: SUN-SAT (day), JAN-DEC (month). Macros: @yearly @annually @monthly @weekly @daily @midnight @hourly. Day-of-week is 0-6 with 0 = Sunday; 7 also means Sunday. Write days as names (MON-FRI). Numbers differ between schedulers: Quartz, AWS EventBridge and Cloudflare number Sunday as 1, we and croniter as 0. Translated for you: \"?\". \"?\" as a whole day-of-month or day-of-week field becomes \"*\". A NUMERIC day-of-week next to \"?\" is refused, because \"?\" means the expression was written where Sunday is 1. Refused: Quartz L, Quartz W, Quartz #, six fields (seconds), seven fields (year), @reboot, @every, CRON_TZ= prefixes, time zones of any kind — each with a code saying what to send instead."
    },
    "url": {
      "type": "string",
      "description": "The https:// destination. It must already be registered and verified — see register_destination."
    },
    "method": {
      "type": "string",
      "description": "HTTP method of the delivery. Default POST. GET and HEAD carry no body."
    },
    "timeoutMs": {
      "type": "integer",
      "description": "How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it."
    },
    "headers": {
      "type": "object",
      "description": "Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body."
    },
    "body": {
      "description": "The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
⚪pause_task(id)

Stop firing until you resume. Nothing is charged while a task is paused.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
⚪resume_task(id)

Start firing again on the schedule. Refused if your balance is empty — buy deliveries first.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
⚪run_task_now(id)

Deliver immediately, outside the schedule. THIS COSTS ONE CREDIT per attempt, exactly like a scheduled firing, and a timeout or unreachable host is retried up to three times — so one call can cost up to three credits. Use it to test a destination.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🔴delete_task(id)

Move the task to the recycle bin. It stops firing immediately and can be restored for 30 days with restore_task; after that it is unrecoverable. Credits already spent are not refunded.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
⚪restore_task(id)

Bring a task back from the recycle bin within 30 days. It comes back PAUSED — resume it explicitly.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Task id (UUID), as returned by create_task or list_tasks."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟡register_destination(url)

Claim an https:// URL you control. We answer with a challenge and a SIGNING SECRET that is shown ONCE and never again — store it before you do anything else; it is what lets you verify that a delivery really came from us. The permission covers that path and everything beneath it, nothing above. Verification is one request from us to the exact URL you registered: POST, headers X-402cron-Challenge: <value> and X-402cron-Event: verify, JSON body {"challenge":"<value>"}. Reply within 5 seconds, without a redirect, with a body that is the bare value or {"challenge":"<value>"}; we read the first 512 bytes and do not check the HTTP status (2xx is fine). Then call POST /api/destinations/{id}/verify within 15 minutes of registering. A fixed-response webhook cannot pass: you need an endpoint you can program. Registering a URL that is still pending issues a new challenge and a new signing secret every time — the old secret immediately stops verifying deliveries; a verified URL is left untouched unless you add ?rotate=1. The daily verification allowance (10 per destination, 40 per client, UTC day) does not reset on re-registration.

输入模式

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The https:// URL you control."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟡verify_destination(id)

Verification is one request from us to the exact URL you registered: POST, headers X-402cron-Challenge: <value> and X-402cron-Event: verify, JSON body {"challenge":"<value>"}. Reply within 5 seconds, without a redirect, with a body that is the bare value or {"challenge":"<value>"}; we read the first 512 bytes and do not check the HTTP status (2xx is fine). Then call POST /api/destinations/{id}/verify within 15 minutes of registering. A fixed-response webhook cannot pass: you need an endpoint you can program. Registering a URL that is still pending issues a new challenge and a new signing secret every time — the old secret immediately stops verifying deliveries; a verified URL is left untouched unless you add ?rotate=1. The daily verification allowance (10 per destination, 40 per client, UTC day) does not reset on re-registration. Until this passes, no task may point at the destination.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Destination id, as returned by register_destination."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_destinations

The URLs you have claimed and whether each is verified. The signing secrets are never shown again.

输入模式

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🔴delete_destination(id)

Remove a claimed URL. Refused while a task still points at it — delete the task first.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Destination id, as returned by register_destination."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

推荐提示词

browse_collection
Show me the [collection] from 402cron
预期工具: list_tasks
retrieve_data
Get details about [item] from 402cron
预期工具: get_pricing
explore_workflow
List available [items], then get details for each one using 402cron
预期工具: list_tasksget_pricing
fetch_info
Fetch [information type] using 402cron
预期工具: get_pricing
list_items
List all [items] available in 402cron
预期工具: list_tasks

社区

评价此服务器

证据

最近观测

已验证未记录版本16 个工具
已验证未记录版本16 个工具