Server definition
- Hash
- sha256:9733b5d95dafee0cf8e41fc4bb0b265bd3f764ede4d3f62836f37b3fdf795d6c
- What it is
- What a remote MCP server returned when asked what it offers: 16 tools
The blob, as servednamed by its sha256
{
"instructions": "Scheduled HTTP delivery for autonomous agents, paid with x402. Management tools need `Authorization: Bearer <management token>` — the token is issued ONCE when you buy, and there is no OAuth and no account. Start with `get_pricing`: it returns the payment requirements and the buy URL for each pack. Pay over plain HTTP with your x402 client; the response carries your token. You need your own public https:// endpoint that can echo a one-time verification challenge.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"body": {
"description": "The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON."
},
"cron": {
"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.",
"type": "string"
},
"headers": {
"description": "Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body.",
"type": "object"
},
"method": {
"description": "HTTP method of the delivery. Default POST. GET and HEAD carry no body.",
"type": "string"
},
"name": {
"description": "Your name for the task. Unique among your live tasks; creating with an existing name updates it.",
"type": "string"
},
"timeoutMs": {
"description": "How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it.",
"type": "integer"
},
"url": {
"description": "The https:// destination. It must already be registered and verified — see register_destination.",
"type": "string"
}
},
"required": [
"name",
"cron",
"url"
],
"type": "object"
},
"name": "create_task",
"outputSchema": null
},
{
"description": "Remove a claimed URL. Refused while a task still points at it — delete the task first.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Destination id, as returned by register_destination.",
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_destination",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_task",
"outputSchema": null
},
{
"description": "One section of the machine documentation: quickstart, headers, signature, notice, errors, billing or limits. Omit `section` to get the whole document.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"section": {
"description": "Which section to return. Omit for all of it.",
"enum": [
"quickstart",
"verification",
"headers",
"signature",
"notice",
"errors",
"billing",
"limits"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_docs",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_pricing",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_service_status",
"outputSchema": null
},
{
"description": "A single task: schedule, destination, state, next run, and how many failures in a row it carries.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_task",
"outputSchema": null
},
{
"description": "The URLs you have claimed and whether each is verified. The signing secrets are never shown again.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_destinations",
"outputSchema": null
},
{
"description": "Your tasks and their state. Needs your management token as an Authorization header on this connection.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"after": {
"description": "Cursor from a previous page.",
"type": "string"
},
"limit": {
"description": "How many to return.",
"type": "integer"
},
"state": {
"description": "Filter by state: live (default), all, or one exact state such as active or paused_by_client.",
"type": "string"
}
},
"type": "object"
},
"name": "list_tasks",
"outputSchema": null
},
{
"description": "Stop firing until you resume. Nothing is charged while a task is paused.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "pause_task",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"url": {
"description": "The https:// URL you control.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "register_destination",
"outputSchema": null
},
{
"description": "Bring a task back from the recycle bin within 30 days. It comes back PAUSED — resume it explicitly.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "restore_task",
"outputSchema": null
},
{
"description": "Start firing again on the schedule. Refused if your balance is empty — buy deliveries first.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "resume_task",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "run_task_now",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"body": {
"description": "The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON."
},
"cron": {
"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.",
"type": "string"
},
"headers": {
"description": "Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body.",
"type": "object"
},
"id": {
"description": "Task id (UUID), as returned by create_task or list_tasks.",
"type": "string"
},
"method": {
"description": "HTTP method of the delivery. Default POST. GET and HEAD carry no body.",
"type": "string"
},
"name": {
"description": "Your name for the task. Unique among your live tasks; creating with an existing name updates it.",
"type": "string"
},
"timeoutMs": {
"description": "How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it.",
"type": "integer"
},
"url": {
"description": "The https:// destination. It must already be registered and verified — see register_destination.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "update_task",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "Destination id, as returned by register_destination.",
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "verify_destination",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9733b5d95dafee0cf8e41fc4bb0b265bd3f764ede4d3f62836f37b3fdf795d6c | sha256sum