402cron

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
85%
Calidad de los nombres
98%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'get_service_status' description lacks action verben get_service_status

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,541Tokens (definiciones de herramientas)
~1.1 KBTamaño de respuesta típico
Impacto moderado en la atención (1.99% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

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

Puntos de conexión remotos

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

Qué puede hacer

Inventario de herramientas

Herramientas (16)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

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

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

Esquema de entrada

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

Prompts recomendados

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

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada16 herramientas
verificadoversión no registrada16 herramientas