Read Dead Man's Snitch monitors and status; create, tag, pause and unpause snitches.
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.
WRITE: add one or more tags to a snitch, keeping the existing ones. Returns the snitch's full tag list. POST /v1/snitches/{token}/tags.
The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: add one or more tags to a snitch, keeping the existing ones. Returns the snitch's full tag list. POST /v1/snitches/{token}/tags.
| Argument | Type | Description |
|---|---|---|
| tags* | array | |
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch",
"tags"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A tag."
},
"maxItems": 20,
"minItems": 1
},
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
}
}
}WRITE: create a new snitch (monitor). Returns it with its check-in URL (https://nosnch.in/<token>), which the job must call on every run; keep it secret. Fails with 402 when the plan's snitch limit is reached. POST /v1/snitches.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name of the snitch. |
| tags | array | |
| notes | string | Free-text notes. |
| interval* | string | Expected check-in frequency. The *_minute values are only available on the Basic plan; weekly = Monday to Monday. |
| alert_type | string | Default basic. |
| alert_email | array | Email addresses that get this snitch's alerts instead of all team members (max 10; this limit is ours, not the vendor's). An empty list clears the override. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"interval"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Name of the snitch."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A tag."
},
"maxItems": 50
},
"notes": {
"type": "string",
"maxLength": 5000,
"description": "Free-text notes."
},
"interval": {
"enum": [
"1_minute",
"2_minute",
"3_minute",
"5_minute",
"10_minute",
"15_minute",
"30_minute",
"hourly",
"2_hour",
"3_hour",
"4_hour",
"6_hour",
"8_hour",
"12_hour",
"daily",
"weekly",
"monthly"
],
"type": "string",
"description": "Expected check-in frequency. The *_minute values are only available on the Basic plan; weekly = Monday to Monday."
},
"alert_type": {
"enum": [
"basic",
"smart"
],
"type": "string",
"description": "Default basic."
},
"alert_email": {
"type": "array",
"items": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254
},
"maxItems": 10,
"description": "Email addresses that get this snitch's alerts instead of all team members (max 10; this limit is ours, not the vendor's). An empty list clears the override."
}
}
}One snitch with its full details, including the check-in URL (https://nosnch.in/<token>). The check-in URL is a secret: anyone who has it can check in and so silence the alert; share it only where the job runs. GET /v1/snitches/{token}.
| Argument | Type | Description |
|---|---|---|
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch"
],
"properties": {
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
}
}
}List the snitches (cron/heartbeat monitors) of the account with status (pending, healthy, failed, errored, paused), interval, alert type, tags and last check-in. Tokens are masked (the token is also the check-in secret); pass the masked token or the name to the other snitch tools. The API has no paging: all snitches come back. Optionally filter by tags (must have all) or status. GET /v1/snitches.
| Argument | Type | Description |
|---|---|---|
| tags | array | Only snitches that have ALL of these tags. |
| status | string | Only snitches in this status (filtered here). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A tag."
},
"maxItems": 50,
"description": "Only snitches that have ALL of these tags."
},
"status": {
"enum": [
"pending",
"healthy",
"failed",
"errored",
"paused"
],
"type": "string",
"description": "Only snitches in this status (filtered here)."
}
}
}WRITE: pause a snitch, which SILENCES its alerts: a job that stops running goes unnoticed while it is paused. `until` says when alerting resumes: 'healthy' (default: on the next healthy check-in), 'unpaused' (stays paused until deadmanssnitch_unpause_snitch) or a future ISO 8601 time. A snitch that has never checked in (pending) cannot be paused. POST /v1/snitches/{token}/pause.
| Argument | Type | Description |
|---|---|---|
| until | string | 'healthy' (default), 'unpaused', or a future ISO 8601 time with timezone, e.g. 2026-10-20T08:00:00Z. |
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch"
],
"properties": {
"until": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "'healthy' (default), 'unpaused', or a future ISO 8601 time with timezone, e.g. 2026-10-20T08:00:00Z."
},
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
}
}
}WRITE: remove one tag from a snitch (the snitch itself is untouched). Returns the remaining tags. DELETE /v1/snitches/{token}/tags/{tag}.
| Argument | Type | Description |
|---|---|---|
| tag* | string | A tag. |
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch",
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A tag."
},
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
}
}
}WRITE: resume alerting for a paused snitch (safe on a snitch that is not paused). POST /v1/snitches/{token}/unpause.
| Argument | Type | Description |
|---|---|---|
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch"
],
"properties": {
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
}
}
}WRITE: change a snitch. Only the fields you pass change. `tags` REPLACES the whole tag list (use deadmanssnitch_add_tags to add) and `alert_email` replaces the alert recipients (an empty list = all team members). Returns the updated snitch with the token masked. PATCH /v1/snitches/{token}.
| Argument | Type | Description |
|---|---|---|
| name | string | New name. |
| tags | array | The complete new tag list (replaces the old one; [] removes all tags). |
| notes | any | New notes; null clears them. |
| snitch* | string | The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name. |
| interval | string | Expected check-in frequency. The *_minute values are only available on the Basic plan; weekly = Monday to Monday. |
| alert_type | string | basic = fixed deadline; smart = learns when the job usually checks in and alerts earlier. |
| alert_email | array | Email addresses that get this snitch's alerts instead of all team members (max 10; this limit is ours, not the vendor's). An empty list clears the override. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"snitch"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "New name."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A tag."
},
"maxItems": 50,
"description": "The complete new tag list (replaces the old one; [] removes all tags)."
},
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 5000,
"description": "Free-text notes."
},
{
"type": "null"
}
],
"description": "New notes; null clears them."
},
"snitch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The snitch: its token, the masked token shown by deadmanssnitch_list_snitches (e.g. ab…yz), or its exact name."
},
"interval": {
"enum": [
"1_minute",
"2_minute",
"3_minute",
"5_minute",
"10_minute",
"15_minute",
"30_minute",
"hourly",
"2_hour",
"3_hour",
"4_hour",
"6_hour",
"8_hour",
"12_hour",
"daily",
"weekly",
"monthly"
],
"type": "string",
"description": "Expected check-in frequency. The *_minute values are only available on the Basic plan; weekly = Monday to Monday."
},
"alert_type": {
"enum": [
"basic",
"smart"
],
"type": "string",
"description": "basic = fixed deadline; smart = learns when the job usually checks in and alerts earlier."
},
"alert_email": {
"type": "array",
"items": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254
},
"maxItems": 10,
"description": "Email addresses that get this snitch's alerts instead of all team members (max 10; this limit is ours, not the vendor's). An empty list clears the override."
}
}
}