Wake-ups, webhook inboxes, TTL memory, watches and human approval for agents. Paid per call.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch a URL and return content plus a signed receipt binding url, status, content hash and time.
URL to fetch
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Fetch a URL and return content plus a signed receipt binding url, status, content hash and time.
| Argument | Type | Description |
|---|---|---|
| url* | string | URL to fetch |
| include_content | boolean |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL to fetch"
},
"include_content": {
"type": "boolean"
}
}
}Cancel a resource early.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
}
}
}Check whether a human approved or denied your request.
| Argument | Type | Description |
|---|---|---|
| id* | string | approval id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "approval id"
}
}
}Check in to a dead-man switch so it does not fire.
| Argument | Type | Description |
|---|---|---|
| id* | string | dead-man switch id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "dead-man switch id"
}
}
}Idempotency firewall: claim an operation id exactly once across runs.
| Argument | Type | Description |
|---|---|---|
| id* | string | firewall id |
| operation_id* | string |
{
"type": "object",
"required": [
"id",
"operation_id"
],
"properties": {
"id": {
"type": "string",
"description": "firewall id"
},
"operation_id": {
"type": "string",
"description": ""
}
}
}Collect buffered messages from an inbox, bin, front door or form.
| Argument | Type | Description |
|---|---|---|
| id* | string | resource id |
| all | boolean | include already-collected |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "resource id"
},
"all": {
"type": "boolean",
"description": "include already-collected"
}
}
}Increment a counter atomically.
| Argument | Type | Description |
|---|---|---|
| by | number | |
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"by": {
"type": "number",
"description": ""
},
"id": {
"type": "string",
"description": ""
}
}
}Create a crash checkpoint store.
| Argument | Type | Description |
|---|---|---|
| days | number |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": ""
}
}
}Create an atomic counter.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| start | number |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": ""
},
"start": {
"type": "number",
"description": ""
}
}
}Dead-man switch: if you stop checking in, we fire your alert webhook.
| Argument | Type | Description |
|---|---|---|
| url* | string | alert webhook |
| days | number | |
| apprise_url | string | optional human notification target |
| interval_seconds | number | max time between check-ins |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "alert webhook"
},
"days": {
"type": "number",
"description": ""
},
"apprise_url": {
"type": "string",
"description": "optional human notification target"
},
"interval_seconds": {
"type": "number",
"description": "max time between check-ins"
}
}
}Dump up to 100 items now; we deliver them to your webhook at a fixed rate.
| Argument | Type | Description |
|---|---|---|
| url* | string | webhook |
| items* | array | items to drip |
| rate_seconds | number |
{
"type": "object",
"required": [
"url",
"items"
],
"properties": {
"url": {
"type": "string",
"description": "webhook"
},
"items": {
"type": "array",
"description": "items to drip"
},
"rate_seconds": {
"type": "number",
"description": ""
}
}
}Escalation chain: webhook, then after N seconds the next step, until acknowledged.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| steps* | array | steps: {webhook, apprise_url, wait_seconds} |
| subject | string |
{
"type": "object",
"required": [
"steps"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"steps": {
"type": "array",
"description": "steps: {webhook, apprise_url, wait_seconds}"
},
"subject": {
"type": "string",
"description": ""
}
}
}Durable front door: buffers webhooks and forwards them to your gateway with retry-until-ack.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| target* | string | your gateway URL |
| replay_hours | number |
{
"type": "object",
"required": [
"target"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"target": {
"type": "string",
"description": "your gateway URL"
},
"replay_hours": {
"type": "number",
"description": ""
}
}
}Create an idempotency/replay firewall.
| Argument | Type | Description |
|---|---|---|
| days | number |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": ""
}
}
}Public URL that buffers inbound webhooks until you collect them.
| Argument | Type | Description |
|---|---|---|
| days | number | prepaid days |
| label | string |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": "prepaid days"
},
"label": {
"type": "string",
"description": ""
}
}
}Create an expiring share link with click stats.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| target* | string | destination URL |
{
"type": "object",
"required": [
"target"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"target": {
"type": "string",
"description": "destination URL"
}
}
}Pull-based work queue with leases; timed-out leases requeue.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| max_attempts | number | |
| lease_seconds | number |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": ""
},
"max_attempts": {
"type": "number",
"description": ""
},
"lease_seconds": {
"type": "number",
"description": ""
}
}
}Recurring webhook on a cron expression until the prepaid days run out.
| Argument | Type | Description |
|---|---|---|
| url* | string | webhook URL |
| cron* | string | cron expression, e.g. 0 7 * * * |
| days | number | prepaid days |
| payload | object |
{
"type": "object",
"required": [
"cron",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "webhook URL"
},
"cron": {
"type": "string",
"description": "cron expression, e.g. 0 7 * * *"
},
"days": {
"type": "number",
"description": "prepaid days"
},
"payload": {
"type": "object",
"description": ""
}
}
}Mint a spend-capped child token for a sub-agent.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| label | string | |
| cap_usd* | number | hard spend cap |
{
"type": "object",
"required": [
"cap_usd"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"label": {
"type": "string",
"description": ""
},
"cap_usd": {
"type": "number",
"description": "hard spend cap"
}
}
}Create a key-value namespace with TTL that survives your runs.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| label | string |
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "number",
"description": ""
},
"label": {
"type": "string",
"description": ""
}
}
}Schedule a webhook call at a future time (one-shot). Your agent can die; the call still happens.
| Argument | Type | Description |
|---|---|---|
| at* | string | ISO-8601 time to fire |
| url* | string | webhook URL to call |
| payload | object | JSON to include |
{
"type": "object",
"required": [
"at",
"url"
],
"properties": {
"at": {
"type": "string",
"description": "ISO-8601 time to fire"
},
"url": {
"type": "string",
"description": "webhook URL to call"
},
"payload": {
"type": "object",
"description": "JSON to include"
}
}
}Watch something and fire your webhook when it changes. Types: change, keyword, regex, structured, drift, redirect, sitemap, staleness, rss, dns, port, cert, heartbeat.
| Argument | Type | Description |
|---|---|---|
| url | string | URL to watch |
| days | number | |
| host | string | |
| json | boolean | |
| name | string | DNS name |
| port | number | |
| type* | string | watch type |
| domain | string | for cert watch |
| record | string | DNS record type |
| keyword | string | |
| pattern | string | regex |
| percent | number |
Check the balance of your prepaid credit token.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Hand over a payload now; we POST it to the target at a future moment.
| Argument | Type | Description |
|---|---|---|
| at* | string | ISO-8601 |
| url* | string | target URL |
| payload | object |
{
"type": "object",
"required": [
"at",
"url"
],
"properties": {
"at": {
"type": "string",
"description": "ISO-8601"
},
"url": {
"type": "string",
"description": "target URL"
},
"payload": {
"type": "object",
"description": ""
}
}
}Export everything under a resource before it expires.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
}
}
}Extend a resource TTL by paying again.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| days | number |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
},
"days": {
"type": "number",
"description": ""
}
}
}Status of any resource you hold the management token for.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
}
}
}POST a payload to a URL, retried with backoff until it succeeds.
| Argument | Type | Description |
|---|---|---|
| url* | string | target |
| payload | object |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "target"
},
"payload": {
"type": "object",
"description": ""
}
}
}Read a value from a vault.
| Argument | Type | Description |
|---|---|---|
| id* | string | vault id |
| key* | string |
{
"type": "object",
"required": [
"id",
"key"
],
"properties": {
"id": {
"type": "string",
"description": "vault id"
},
"key": {
"type": "string",
"description": ""
}
}
}List keys in a vault.
| Argument | Type | Description |
|---|---|---|
| id* | string | vault id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "vault id"
}
}
}Store a value in a vault (max 1 MB).
| Argument | Type | Description |
|---|---|---|
| id* | string | vault id |
| key* | string | |
| value* | string |
{
"type": "object",
"required": [
"id",
"key",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "vault id"
},
"key": {
"type": "string",
"description": ""
},
"value": {
"type": "string",
"description": ""
}
}
}Machine-readable price list for every ZenVault service, in USD.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Load the latest saved checkpoint state.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
}
}
}Signed proof that a hash (or your data) existed at this moment.
| Argument | Type | Description |
|---|---|---|
| data | string | raw data to hash instead |
| note | string | |
| sha256 | string | hex digest |
{
"type": "object",
"required": [],
"properties": {
"data": {
"type": "string",
"description": "raw data to hash instead"
},
"note": {
"type": "string",
"description": ""
},
"sha256": {
"type": "string",
"description": "hex digest"
}
}
}Send a message to a human on Telegram, Discord, Slack, ntfy, email and 100+ other services (apprise URL is used once, never stored).
| Argument | Type | Description |
|---|---|---|
| body* | string | message |
| title | string | |
| apprise_url* | string | apprise target URL |
{
"type": "object",
"required": [
"apprise_url",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "message"
},
"title": {
"type": "string",
"description": ""
},
"apprise_url": {
"type": "string",
"description": "apprise target URL"
}
}
}Publish an HTML page at name.zenvault.eu for N days.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| html* | string | page HTML |
| name | string | subdomain name |
{
"type": "object",
"required": [
"html"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"html": {
"type": "string",
"description": "page HTML"
},
"name": {
"type": "string",
"description": "subdomain name"
}
}
}Acknowledge (or nack) a leased job.
| Argument | Type | Description |
|---|---|---|
| id* | string | queue id |
| action | string | |
| job_id* | string |
{
"type": "object",
"required": [
"id",
"job_id"
],
"properties": {
"id": {
"type": "string",
"description": "queue id"
},
"action": {
"enum": [
"ack",
"nack"
],
"type": "string"
},
"job_id": {
"type": "string",
"description": ""
}
}
}Lease the next job from a queue.
| Argument | Type | Description |
|---|---|---|
| id* | string | queue id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "queue id"
}
}
}Push a job onto a queue.
| Argument | Type | Description |
|---|---|---|
| id* | string | queue id |
| body* | string | job payload |
{
"type": "object",
"required": [
"id",
"body"
],
"properties": {
"id": {
"type": "string",
"description": "queue id"
},
"body": {
"type": "string",
"description": "job payload"
}
}
}Ask a human to approve or deny an action; returns a URL for them and a signed verdict for you. Times out as denied.
| Argument | Type | Description |
|---|---|---|
| action* | string | what you want to do |
| detail | string | context for the human |
| webhook | string | called with the verdict |
| apprise_url | string | ping the human here |
| timeout_seconds | number |
{
"type": "object",
"required": [
"action"
],
"properties": {
"action": {
"type": "string",
"description": "what you want to do"
},
"detail": {
"type": "string",
"description": "context for the human"
},
"webhook": {
"type": "string",
"description": "called with the verdict"
},
"apprise_url": {
"type": "string",
"description": "ping the human here"
},
"timeout_seconds": {
"type": "number",
"description": ""
}
}
}Tell the operator what ZenVault is missing. Free.
| Argument | Type | Description |
|---|---|---|
| why | string | why |
| what* | string | what you need |
| would_pay | string | would you pay, how much |
{
"type": "object",
"required": [
"what"
],
"properties": {
"why": {
"type": "string",
"description": "why"
},
"what": {
"type": "string",
"description": "what you need"
},
"would_pay": {
"type": "string",
"description": "would you pay, how much"
}
}
}Save run state so you can resume after a crash.
| Argument | Type | Description |
|---|---|---|
| id* | string | checkpoint id |
| state* | string | serialized state |
{
"type": "object",
"required": [
"id",
"state"
],
"properties": {
"id": {
"type": "string",
"description": "checkpoint id"
},
"state": {
"type": "string",
"description": "serialized state"
}
}
}Store a value that self-destructs on first read; returns a one-time read URL.
| Argument | Type | Description |
|---|---|---|
| days | number | |
| value* | string |
{
"type": "object",
"required": [
"value"
],
"properties": {
"days": {
"type": "number",
"description": ""
},
"value": {
"type": "string",
"description": ""
}
}
}Check a watch: last value, checks, fires.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": ""
}
}
}| drift threshold |
| webhook* | string | called on change |
| selector | string | CSS selector or JSON path |
| confirmations | number | fire only after N consecutive hits |
| interval_seconds | number |
{
"type": "object",
"required": [
"type",
"webhook"
],
"properties": {
"url": {
"type": "string",
"description": "URL to watch"
},
"days": {
"type": "number",
"description": ""
},
"host": {
"type": "string",
"description": ""
},
"json": {
"type": "boolean"
},
"name": {
"type": "string",
"description": "DNS name"
},
"port": {
"type": "number",
"description": ""
},
"type": {
"type": "string",
"description": "watch type"
},
"domain": {
"type": "string",
"description": "for cert watch"
},
"record": {
"type": "string",
"description": "DNS record type"
},
"keyword": {
"type": "string",
"description": ""
},
"pattern": {
"type": "string",
"description": "regex"
},
"percent": {
"type": "number",
"description": "drift threshold"
},
"webhook": {
"type": "string",
"description": "called on change"
},
"selector": {
"type": "string",
"description": "CSS selector or JSON path"
},
"confirmations": {
"type": "number",
"description": "fire only after N consecutive hits"
},
"interval_seconds": {
"type": "number",
"description": ""
}
}
}