Know when cron jobs and AI agents stop running: create monitors and check in from your agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by a Vivere API key (vv_...), created at https://vivere.dev/app/keys
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.
Add the account of a person with a Vivere login to a team. Joining a team that has pages takes a seat.
Their login email
Team id
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add the account of a person with a Vivere login to a team. Joining a team that has pages takes a seat.
| Argument | Type | Description |
|---|---|---|
| email* | string | Their login email |
| team_id* | integer | Team id |
{
"type": "object",
"required": [
"team_id",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Their login email"
},
"team_id": {
"type": "integer",
"description": "Team id"
}
}
}Report on a heartbeat monitor: 'success' after a completed run (resets the deadline), 'start' when a run begins, 'fail' when it failed. Include a short message; it is kept as the run log.
| Argument | Type | Description |
|---|---|---|
| items | integer | Optional: how many items the run handled (tickets, rows, emails) |
| model | string | Optional: the model the run used, e.g. claude-sonnet-4-5 |
| status | string | Default success |
| message | string | Optional summary or error text to store with the run |
| cost_usd | number | Optional: what the run cost in US dollars, e.g. 0.042 |
| monitor_id* | string | Monitor id (the last path segment of the ping URL) |
| input_tokens | integer | Optional: input tokens the run used |
| output_tokens | integer | Optional: output tokens the run used |
| cache_read_tokens | integer | Optional: cache read input tokens |
| cache_write_tokens | integer | Optional: cache creation input tokens |
{
"type": "object",
"required": [
"monitor_id"
],
"properties": {
"items": {
"type": "integer",
"description": "Optional: how many items the run handled (tickets, rows, emails)"
},
"model": {
"type": "string",
"description": "Optional: the model the run used, e.g. claude-sonnet-4-5"
},
"status": {
"enum": [
"success",
"start",
"fail"
],
"type": "string",
"description": "Default success"
},
"message": {
"type": "string",
"description": "Optional summary or error text to store with the run"
},
"cost_usd": {
"type": "number",
"description": "Optional: what the run cost in US dollars, e.g. 0.042"
},
"monitor_id": {
"type": "string",
"description": "Monitor id (the last path segment of the ping URL)"
},
"input_tokens": {
"type": "integer",
"description": "Optional: input tokens the run used"
},
"output_tokens": {
"type": "integer",
"description": "Optional: output tokens the run used"
},
"cache_read_tokens": {
"type": "integer",
"description": "Optional: cache read input tokens"
},
"cache_write_tokens": {
"type": "integer",
"description": "Optional: cache creation input tokens"
}
}
}Add an alert channel. Settings by kind: email {to}; webhook {url, secret}; slack {url}; discord {url}; telegram {token, chat_id}; ntfy {url, token}. Slack, Discord, Telegram and ntfy need a paid plan.
| Argument | Type | Description |
|---|---|---|
| kind* | string | |
| name* | string | Channel name |
| config* | object | The kind's settings |
{
"type": "object",
"required": [
"kind",
"name",
"config"
],
"properties": {
"kind": {
"enum": [
"email",
"webhook",
"slack",
"discord",
"telegram",
"ntfy"
],
"type": "string"
},
"name": {
"type": "string",
"description": "Channel name"
},
"config": {
"type": "object",
"description": "The kind's settings",
"additionalProperties": {
"type": "string"
}
}
}
}Create a heartbeat monitor (default) or an HTTP check on the account's first page or on page_id, which may be a page shared with this account as editor. Returns the monitor and, for heartbeats, the ping URL to call after each run.
| Argument | Type | Description |
|---|---|---|
| url | string | HTTP check: the public URL to request. |
| cron | string | Heartbeat alternative to period: five-field cron expression, e.g. '0 2 * * *'. |
| kind | string | heartbeat (the job pings us) or http (we request a URL) |
| name* | string | Human name, e.g. 'nightly report agent' |
| tags | string | Optional space-separated tags. |
| grace | string | Heartbeat: how late a check-in may be before alerting, e.g. 15m. Default 15m. |
| period | string | Heartbeat: expected time between successful check-ins, e.g. 30m, 1h, 1d. Default 1h. |
| page_id | integer | Page to put it on (from list_pages). Default: the account's first page. |
| interval | string | HTTP check: how often to request it, e.g. 5m. |
Add a page to group monitors under, within the plan's pages. Its slug is its public address, made from the title when not given.
| Argument | Type | Description |
|---|---|---|
| slug | string | Lowercase letters, digits and dashes |
| title* | string | Page title |
{
"type": "object",
"required": [
"title"
],
"properties": {
"slug": {
"type": "string",
"description": "Lowercase letters, digits and dashes"
},
"title": {
"type": "string",
"description": "Page title"
}
}
}Make a tracking pixel, within the plan's pixels. Returns the <img> tag to paste into a page or an email.
| Argument | Type | Description |
|---|---|---|
| name* | string | Pixel name |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Pixel name"
}
}
}Make a team, on the Team plan.
| Argument | Type | Description |
|---|---|---|
| name* | string | Team name |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Team name"
}
}
}Delete an alert channel. Monitors stop sending alerts to it.
| Argument | Type | Description |
|---|---|---|
| channel_id* | integer | Channel id |
{
"type": "object",
"required": [
"channel_id"
],
"properties": {
"channel_id": {
"type": "integer",
"description": "Channel id"
}
}
}Delete a monitor and all its history. This cannot be undone; pause_monitor stops alerts without losing anything.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
}
}
}Delete one of your pages. Only an empty page that is not your first can go.
| Argument | Type | Description |
|---|---|---|
| page_id* | integer | Page id |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "integer",
"description": "Page id"
}
}
}Delete a pixel and every load it recorded.
| Argument | Type | Description |
|---|---|---|
| pixel_id* | string | Pixel id |
{
"type": "object",
"required": [
"pixel_id"
],
"properties": {
"pixel_id": {
"type": "string",
"description": "Pixel id"
}
}
}Delete a team. Its members lose the pages it gave them.
| Argument | Type | Description |
|---|---|---|
| team_id* | integer | Team id |
{
"type": "object",
"required": [
"team_id"
],
"properties": {
"team_id": {
"type": "integer",
"description": "Team id"
}
}
}Which account this key belongs to, its plan's limits and what it uses of them, and what this key may do: its permission on each resource (none, read or write) and the pages it is limited to, if any.
No arguments.
{
"type": "object",
"properties": {}
}Get one monitor by id, including its ping URL for heartbeat monitors, or by page_id and slug, which also works on a page shared to view.
| Argument | Type | Description |
|---|---|---|
| id | string | Monitor id, for monitors this account owns or edits |
| slug | string | Monitor slug, with page_id |
| page_id | integer | Page id, with slug |
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Monitor id, for monitors this account owns or edits"
},
"slug": {
"type": "string",
"description": "Monitor slug, with page_id"
},
"page_id": {
"type": "integer",
"description": "Page id, with slug"
}
}
}One page: its public address, monitors and, on your own pages, who it is shared with and as what.
| Argument | Type | Description |
|---|---|---|
| page_id* | integer | Page id |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "integer",
"description": "Page id"
}
}
}One pixel and its newest loads: when, from which page, browser, language and platform.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many loads, 1 to 200; default 50 |
| pixel_id* | string | Pixel id |
{
"type": "object",
"required": [
"pixel_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many loads, 1 to 200; default 50"
},
"pixel_id": {
"type": "string",
"description": "Pixel id"
}
}
}One run with the output it sent (the log), where it came from and what it cost.
| Argument | Type | Description |
|---|---|---|
| run_id* | integer | Run id, from list_runs |
{
"type": "object",
"required": [
"run_id"
],
"properties": {
"run_id": {
"type": "integer",
"description": "Run id, from list_runs"
}
}
}One team: its members and the pages shared with it.
| Argument | Type | Description |
|---|---|---|
| team_id* | integer | Team id |
{
"type": "object",
"required": [
"team_id"
],
"properties": {
"team_id": {
"type": "integer",
"description": "Team id"
}
}
}Your alert channels. Secret settings are never shown; secrets_set names the ones that have a value.
No arguments.
{
"type": "object",
"properties": {}
}Status changes across the account's own monitors, newest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many, 1 to 200; default 50 |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "How many, 1 to 200; default 50"
}
}
}One monitor's status changes (up, down, late, paused), newest first.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
| limit | integer | How many, 1 to 200; default 50 |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
},
"limit": {
"type": "integer",
"description": "How many, 1 to 200; default 50"
}
}
}List the monitors on every page this account can see, or on one page, with status, page and access. Monitors on a page shared to view have no id; address them by page_id and slug.
| Argument | Type | Description |
|---|---|---|
| page_id | integer | Only this page (from list_pages) |
{
"type": "object",
"properties": {
"page_id": {
"type": "integer",
"description": "Only this page (from list_pages)"
}
}
}List the pages this account can see: its own, then pages other accounts share with it, each with the access it has there (owner, editor or viewer) and how many monitors are on it and down.
No arguments.
{
"type": "object",
"properties": {}
}Your tracking pixels, with the tag to paste and how often each has loaded.
No arguments.
{
"type": "object",
"properties": {}
}A heartbeat monitor's newest runs with their outcome, duration, exit code and any model, tokens and cost they reported, plus what its runs cost over 30 days.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
| limit | integer | How many, 1 to 200; default 50 |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
},
"limit": {
"type": "integer",
"description": "How many, 1 to 200; default 50"
}
}
}Your teams, with how many members and pages each has.
No arguments.
{
"type": "object",
"properties": {}
}Turn off Public on every monitor on one of your pages, which takes its public status page down.
| Argument | Type | Description |
|---|---|---|
| page_id* | integer | Page id |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "integer",
"description": "Page id"
}
}
}Pause a monitor so it stops alerting until resumed or pinged again.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
}
}
}Take an account out of a team.
| Argument | Type | Description |
|---|---|---|
| team_id* | integer | Team id |
| account_id* | integer | The member's account id, from get_team |
{
"type": "object",
"required": [
"team_id",
"account_id"
],
"properties": {
"team_id": {
"type": "integer",
"description": "Team id"
},
"account_id": {
"type": "integer",
"description": "The member's account id, from get_team"
}
}
}Rename a team.
| Argument | Type | Description |
|---|---|---|
| name* | string | New name |
| team_id* | integer | Team id |
{
"type": "object",
"required": [
"team_id",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "New name"
},
"team_id": {
"type": "integer",
"description": "Team id"
}
}
}Resume a paused monitor.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
}
}
}Share one of your pages with the account of a person who has a Vivere login (email) or with one of your teams (team_id), as viewer or editor, or change the role they have. Needs a paid plan, a free seat for anybody new, and the Team plan for teams.
| Argument | Type | Description |
|---|---|---|
| role* | string | viewer sees status and history; editor can also add, change and delete monitors and route their alerts |
| string | The person's login email | |
| page_id* | integer | Page id |
| team_id | integer | Or a team id, from list_teams |
{
"type": "object",
"required": [
"page_id",
"role"
],
"properties": {
"role": {
"enum": [
"viewer",
"editor"
],
"type": "string",
"description": "viewer sees status and history; editor can also add, change and delete monitors and route their alerts"
},
"email": {
"type": "string",
"description": "The person's login email"
},
"page_id": {
"type": "integer",
"description": "Page id"
},
"team_id": {
"type": "integer",
"description": "Or a team id, from list_teams"
}
}
}Send a test alert to a channel.
| Argument | Type | Description |
|---|---|---|
| channel_id* | integer | Channel id |
{
"type": "object",
"required": [
"channel_id"
],
"properties": {
"channel_id": {
"type": "integer",
"description": "Channel id"
}
}
}Stop sharing one of your pages with an account (account_id, from get_page) or a team (team_id). Their alert channels come off its monitors.
| Argument | Type | Description |
|---|---|---|
| page_id* | integer | Page id |
| team_id | integer | Or the team |
| account_id | integer | The account to stop sharing with |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"page_id": {
"type": "integer",
"description": "Page id"
},
"team_id": {
"type": "integer",
"description": "Or the team"
},
"account_id": {
"type": "integer",
"description": "The account to stop sharing with"
}
}
}Rename a channel or change its settings. Settings left out keep their value.
| Argument | Type | Description |
|---|---|---|
| name | string | New name |
| config | object | |
| channel_id* | integer | Channel id |
{
"type": "object",
"required": [
"channel_id"
],
"properties": {
"name": {
"type": "string",
"description": "New name"
},
"config": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"channel_id": {
"type": "integer",
"description": "Channel id"
}
}
}Change a monitor. Only the fields given change; its kind cannot. Setting cron switches a heartbeat to a cron schedule and setting period switches it back. Only the page's owner can move it, with page_id, to another of their own pages.
| Argument | Type | Description |
|---|---|---|
| id* | string | Monitor id |
| url | string | HTTP check URL |
| cron | string | Five-field cron expression; empty switches back to period |
| name | string | New name |
| tags | string | Space-separated tags |
| grace | string | Heartbeat grace, e.g. 15m |
| method | string | GET, HEAD or POST |
| period | string | Heartbeat period, e.g. 1h |
| public | boolean | Show it on the page's public status page |
| keyword | string | Text the response must contain |
Rename one of your pages or change its slug, which moves its public address.
| Argument | Type | Description |
|---|---|---|
| slug | string | New slug |
| title | string | New title |
| page_id* | integer | Page id |
{
"type": "object",
"required": [
"page_id"
],
"properties": {
"slug": {
"type": "string",
"description": "New slug"
},
"title": {
"type": "string",
"description": "New title"
},
"page_id": {
"type": "integer",
"description": "Page id"
}
}
}| timezone | string | IANA timezone for the cron expression, e.g. Asia/Seoul. Default UTC. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"url": {
"type": "string",
"description": "HTTP check: the public URL to request."
},
"cron": {
"type": "string",
"description": "Heartbeat alternative to period: five-field cron expression, e.g. '0 2 * * *'."
},
"kind": {
"enum": [
"heartbeat",
"http"
],
"type": "string",
"description": "heartbeat (the job pings us) or http (we request a URL)"
},
"name": {
"type": "string",
"description": "Human name, e.g. 'nightly report agent'"
},
"tags": {
"type": "string",
"description": "Optional space-separated tags."
},
"grace": {
"type": "string",
"description": "Heartbeat: how late a check-in may be before alerting, e.g. 15m. Default 15m."
},
"period": {
"type": "string",
"description": "Heartbeat: expected time between successful check-ins, e.g. 30m, 1h, 1d. Default 1h."
},
"page_id": {
"type": "integer",
"description": "Page to put it on (from list_pages). Default: the account's first page."
},
"interval": {
"type": "string",
"description": "HTTP check: how often to request it, e.g. 5m."
},
"timezone": {
"type": "string",
"description": "IANA timezone for the cron expression, e.g. Asia/Seoul. Default UTC."
}
}
}| page_id |
| integer |
| Move it to this page (owner only) |
| timeout | integer | Seconds, 1 to 60 |
| channels | array | Alert channel ids (from list_channels); replaces the ones you can see |
| interval | string | HTTP check interval, e.g. 5m |
| timezone | string | IANA timezone for cron |
| description | string | Notes |
| cost_alert_usd | number | Alert when one run costs more than this; 0 turns it off |
| fail_threshold | integer | Failed checks in a row before it is down, 1 to 10 |
| expected_status | integer | HTTP status to expect; 0 accepts any 2xx or 3xx |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Monitor id"
},
"url": {
"type": "string",
"description": "HTTP check URL"
},
"cron": {
"type": "string",
"description": "Five-field cron expression; empty switches back to period"
},
"name": {
"type": "string",
"description": "New name"
},
"tags": {
"type": "string",
"description": "Space-separated tags"
},
"grace": {
"type": "string",
"description": "Heartbeat grace, e.g. 15m"
},
"method": {
"type": "string",
"description": "GET, HEAD or POST"
},
"period": {
"type": "string",
"description": "Heartbeat period, e.g. 1h"
},
"public": {
"type": "boolean",
"description": "Show it on the page's public status page"
},
"keyword": {
"type": "string",
"description": "Text the response must contain"
},
"page_id": {
"type": "integer",
"description": "Move it to this page (owner only)"
},
"timeout": {
"type": "integer",
"description": "Seconds, 1 to 60"
},
"channels": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Alert channel ids (from list_channels); replaces the ones you can see"
},
"interval": {
"type": "string",
"description": "HTTP check interval, e.g. 5m"
},
"timezone": {
"type": "string",
"description": "IANA timezone for cron"
},
"description": {
"type": "string",
"description": "Notes"
},
"cost_alert_usd": {
"type": "number",
"description": "Alert when one run costs more than this; 0 turns it off"
},
"fail_threshold": {
"type": "integer",
"description": "Failed checks in a row before it is down, 1 to 10"
},
"expected_status": {
"type": "integer",
"description": "HTTP status to expect; 0 accepts any 2xx or 3xx"
}
}
}