@runhooks/mcp
Provides tools for managing failure alerts, including sending notifications to Slack channels.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@runhooks/mcpschedule a job to call https://example.com/webhook every hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@runhooks/mcp
Model Context Protocol (MCP) server for Runhooks — reliable HTTP scheduling infrastructure. It lets AI agents (Claude Desktop, Cursor, and any MCP client) schedule and manage recurring and one-off HTTP jobs directly.
The server runs locally on your machine: your MCP client spawns it with npx and it talks
to the Runhooks REST API over HTTPS. There is no hosted service — just this package.
Install
Add it to your MCP client config. For Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"runhooks": {
"command": "npx",
"args": ["-y", "@runhooks/mcp"],
"env": { "RUNHOOKS_API_KEY": "rh_live_..." }
}
}
}No API key yet? Leave env out and ask the agent to run the provision_account tool once — it
creates an instant account (no email), returns an rh_live_... key, and saves it locally to
~/.runhooks/mcp.json. The key is reused automatically from then on, so every other tool works
immediately with no restart and no need to provision again. (Setting RUNHOOKS_API_KEY is still the
most portable option across machines, and it always takes precedence over the saved key.)
Related MCP server: silentwatch-mcp
Verify
Check the server starts and advertises its tools (replace the key, or omit env and use
provision_account from inside your client):
RUNHOOKS_API_KEY=rh_live_... npx -y @runhooks/mcpEnvironment variables
Variable | Description | Default |
| Your API key ( | — |
| API origin. |
|
Tools
Tool | Description |
| Create an anonymous account and get an API key (no email). |
| Show the current account. |
| Rotate the API key. |
| Create a scheduled job (cron or interval). |
| List jobs with filters and pagination. |
| Get one job by ID. |
| Update a job. |
| Delete a job. |
| Pause or resume a job. |
| List a job's run history. |
| Re-run a past execution. |
| Show plan usage and limits. |
| Manage failure alerts (email, webhook, Slack). |
Links
Documentation: https://runhooks.app/docs/mcp
API reference: https://runhooks.app/docs/api
License
MIT
Available Tools
18 toolscreate_alertB
Create a failure alert. Fires when a job dead-letters. Channel is email, webhook, or slack.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| jobId | No | Scope to one job; omit for all jobs | |
| target | Yes | Email address, webhook URL, or Slack webhook URL | |
| channel | Yes | ||
| enabled | No | ||
| cooldownMinutes | No | ||
| consecutiveFailuresThreshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the trigger semantics (dead-letter) and the delivery channels, but says nothing about side effects, required permissions, whether alerts start enabled, what happens on duplicate names, or how consecutiveFailuresThreshold and cooldownMinutes change firing behavior. Too much of a mutation tool's behavior is left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with the core action first and no filler. Slightly reduced because the channel enumeration duplicates the schema enum rather than adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations, no output schema, and sparse schema descriptions, the definition is under-built. However, the trigger context it does give (dead-letter alerts, three channels) is the piece the schema could not convey, so it is not wholly inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, so the description must compensate and does not: enabled, cooldownMinutes, and consecutiveFailuresThreshold are undocumented anywhere. 'Channel is email, webhook, or slack' merely restates the enum, and the channel-to-target format mapping is already in the target property description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('Create a failure alert') plus the trigger condition ('fires when a job dead-letters'), which tells the agent this is a notification-config tool rather than a job-mutating one. It does not explicitly contrast with update_alert or get_alert, but the create/list/update/delete family makes the distinction largely self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The dead-letter trigger implies when this tool is relevant, but the description never states prerequisites (does the job need to exist? must jobId be supplied for a job-scoped alert?), nor when to choose create_alert over update_alert, or how to verify an alert exists first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_jobB
Create a new scheduled job — an HTTP request fired on a schedule. The schedule.type is one of: "cron" (schedule.expression is a cron string, e.g. "0 9 * * 1,4" for every Monday & Thursday at 09:00 — build/preview expressions at https://runhooks.app/tools/cron-expression-builder; optional IANA schedule.timezone), "interval" (schedule.expression is the number of milliseconds between runs, as a string), or "once" for a single future run (schedule.expression is an ISO-8601 date-time — either an absolute instant like "2026-12-25T14:00:00Z"/with offset, or a naive wall-clock time like "2026-12-25T09:00:00" interpreted in schedule.timezone, defaulting to UTC; the time must be in the future). One-off jobs support the same retries, alerts and logs as recurring jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| tags | No | ||
| schedule | Yes | ||
| httpConfig | Yes | ||
| description | No | ||
| retryPolicy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that jobs fire HTTP requests on a schedule, that once schedules must be in the future, and that one-off jobs support the same retries, alerts, and logs. It omits permissions, idempotency, immediate activation behavior, duplicate-name handling, and response details, leaving significant mutation context uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then spends its length on schedule semantics, which are genuinely complex and useful. It is somewhat dense and paragraph-heavy, but the detail largely earns its place rather than being filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six top-level parameters, nested objects, no annotations, no output schema, and no schema descriptions. The description is complete for schedule configuration but incomplete for HTTP request configuration, retry policy, tagging, and general creation behavior, so an agent would still lack important guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all parameters. It explains schedule.type, schedule.expression, and schedule.timezone in depth, but does not describe name, tags, httpConfig.url, httpConfig.method, headers, body, timeoutMs, description, or retryPolicy fields, leaving most parameters semantically unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: "Create a new scheduled job — an HTTP request fired on a schedule." It distinguishes creating a new job from updating an existing one, though it does not explicitly name sibling tools or contrast alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "Create a new scheduled job" and the description explains when to choose cron, interval, or once schedules. However, it gives no explicit guidance on when to use create_job versus update_job or other sibling tools, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_alertC
Delete an alert configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Delete' implies a destructive mutation, but the description does not disclose whether the deletion is permanent, what happens to associated alert history or notifications, whether confirmation is required, or what the response contains. This is a significant gap for a destructive operation with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, its brevity reflects under-specification rather than optimal conciseness for a destructive tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive mutation tool with no annotations, no output schema, and a required parameter that is undocumented in both the schema and the description, the definition is materially incomplete. An agent lacks enough context to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter 'id' has 0% schema description coverage, and the description provides no additional meaning—such as the ID format or where to obtain it. With one undocumented required parameter, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Delete an alert configuration'), which clearly distinguishes it from create_alert, update_alert, get_alert, and list_alerts among the siblings. It is clear what the tool does, though it does not describe the scope of the deletion (e.g., whether it affects only the configuration or also the alert history).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g., required permissions or whether the alert must be disabled first), and no warning about irreversibility. The agent must infer that this is the destructive counterpart to create_alert/update_alert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_jobC
Delete a job permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses only one trait: the deletion is permanent. It says nothing about whether execution history is also removed, whether a running job can be deleted, what permissions are required, or whether the call is idempotent for a missing id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though its brevity reflects under-specification rather than disciplined compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations, no output schema, and an undocumented parameter, the description should say more: cascade effects on executions, error behavior, and safety warnings. The one word 'permanently' is the only risk signal an agent gets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does not — the single 'id' parameter is never mentioned or clarified (job id vs. execution id vs. external id). The agent is left to infer the parameter's meaning entirely from the schema's bare type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb (Delete) with a specific resource (a job) and adds the scope qualifier 'permanently', so the agent knows exactly what operation is performed. It does not explicitly distinguish itself from siblings like pause_job or delete_alert, but the name plus description leaves no ambiguity about the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus pause_job or update_job, both of which are plausible alternatives for an agent dealing with an unwanted job. No preconditions (job must exist, must not be running) or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertC
Get a single alert configuration by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read, but nothing is said about whether it throws or returns null for an unknown ID, whether the caller needs ownership or scopes, or whether soft-deleted alerts are visible — all material for a by-ID lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the key phrase 'single alert configuration' arrives immediately. It is efficient, though the brevity shades into under-specification rather than pure economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a minimal one-parameter read tool with no output schema, the description covers the essential contract (what it returns, keyed by ID). The remaining gaps — not-found behavior, ID format, relation to list_alerts — are small individually but all fall on the description since no annotations or schema docs exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single 'id' parameter is documented nowhere except the phrase 'by its ID'. That adds no format detail (UUID, slug, numeric, prefix), no example, and no hint about where an agent would obtain a valid ID — the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a single alert configuration') plus the lookup key ('by its ID'), which is unambiguous. It implicitly separates itself from list_alerts by saying 'single', but never names a sibling or states the relationship explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus list_alerts (which can also surface alert configurations), no prerequisite or permission note, and no guidance on what happens when the ID does not exist. Usage must be inferred entirely from the noun phrase 'single alert configuration by its ID'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobC
Get a single job by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about error behavior when the ID does not exist, required permissions, or what a returned job contains. It is a low-risk read, but the disclosure is essentially absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. It is efficient, though its brevity borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no output schema and no annotations, the essentials are present, but the agent is left to guess at ID format and not-found behavior. Adequate minimum, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – the 'id' property is an untyped-in-prose string with no format hint. The description does clarify that the ID is a job identifier, which is the single most useful piece of context, but it does not give format or example syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a single job') and the lookup key ('by its ID'). The word 'single' implicitly contrasts with list_jobs, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of the alternative list_jobs for discovery. The agent must infer that this requires a known job ID rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageA
Show the current plan usage and limits for the account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Show' implies a non-destructive read, but it says nothing about whether results are cached, real-time, or whether limits are hard or soft. For a trivial read-only status tool this is a modest but tolerable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, and the key noun phrase ('plan usage and limits') is front-loaded after a short verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read there is no output schema, so the description is the agent's only hint about the response, and it only vaguely characterizes it as 'usage and limits' without saying what units, metrics, or nesting to expect. Adequate but leaves a real information gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters and full coverage, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly implies no input is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Show') and resource ('current plan usage and limits for the account'), so an agent knows exactly what data it returns. No sibling tool covers usage or quota, so it is distinguishable from the account/job/alert tools without further differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: a no-parameter read clearly belongs at the 'check my quota/status' moment, but the description never states when to call it or contrasts it with any alternative. With no close sibling covering usage, no exclusion is strictly needed, keeping this at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertsA
List your failure-alert configurations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the behavioral burden. 'Your' usefully signals that results are scoped to the caller's account, but the description says nothing about whether disabled alerts are included, ordering, or result size. For a zero-parameter read the risk is low, so this is an adequate but thin disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is arguably too terse for the information an agent may want, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-param list with no output schema, the essentials are present, yet the description never indicates what an alert configuration record contains or how many might return. It is minimally sufficient to call the tool correctly but leaves the agent guessing about the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters at all, which is the baseline-4 case; there is no parameter ambiguity to resolve. The description correctly implies the filter is the caller's identity rather than an argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') plus a qualified resource ('failure-alert configurations'), so the agent knows exactly what domain object is being read. It doesn't explicitly distinguish itself from the sibling read tools get_alert/list_jobs, but the verb+resource combination makes the distinction recoverable from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use as a read of the alert inventory is implied by 'List', and the presence of get_alert/create_alert/update_alert/delete_alert siblings makes the intent inferable. However, there is no explicit statement of when to choose this over get_alert, nor any prerequisite or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_executionsC
List recent executions (run history) for a job.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| jobId | Yes | ||
| limit | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't state that this is a read-only operation, what 'recent' means (window size, default limit), pagination behavior, or what fields are returned per execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with the resource named first and no filler. Efficient, though the terseness contributes to the missing-parameter gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 4-parameter tool with zero schema coverage, no annotations, and no output schema leaves the description responsible for behavior and parameter meaning, and it covers essentially none of it beyond the required job scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, and the description only implies jobId scoping. The status filter (7 enum values), page, and limit — all the parameters an agent would actually need to reason about — go unmentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('executions / run history') with the scoping qualifier 'for a job'. No sibling tool covers execution history, so it's distinguishable, though it never says so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus anything else, and no mention of replay_execution which is the natural follow-up sibling. Usage is only implied by the phrase 'run history'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsC
List your scheduled jobs with optional filters and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| name | No | Filter by name (regex) | |
| page | No | ||
| limit | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden and does little. 'Your' hints at per-caller scoping, but there is no statement of read-only nature, pagination defaults, ordering, result cap, or what happens when filters match nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler. It is efficient, though arguably over-terse for a five-parameter tool with no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A parameterized list tool with 20% schema coverage, no annotations, and no output schema needs more: return shape, pagination defaults, and filter interaction are all absent. An agent can guess how to call it but not what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20%, so the description should compensate more, but it does add real value by grouping the five params into 'filters' (tag/name/status) and 'pagination' (page/limit). It still leaves the status enum semantics, page/limit defaults, and tag matching behavior undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List your scheduled jobs') plus scope ('your'), which distinguishes it from list_executions and get_job by implication. It stops short of explicitly naming the sibling it is not, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or named alternative. The agent must infer on its own that list_executions covers runs and get_job covers a single job; nothing in the description routes it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_jobB
Pause a job — it stops executing until resumed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the core behavioral trait: the job stops executing and stays stopped until resumed. However, it says nothing about whether an in-flight execution is aborted or allowed to finish, whether the call is idempotent on an already-paused job, what permissions are required, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the verb and effect front-loaded and zero filler. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with no output schema, the description covers the essential effect adequately. It is still thin on side effects (in-flight executions), idempotency, and error conditions — gaps that matter for a state-changing tool with no annotations backing it up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it never mentions the single 'id' parameter. The name is self-explanatory given the tool name, which keeps this above the floor, but the format (job id vs execution id) is left entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Pause') and resource ('a job') and states the immediate effect: execution stops. It does not explicitly contrast with siblings like resume_job or delete_job, but the resource/verb pair is unambiguous against the rest of the job-management family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — 'until resumed' gestures at resume_job as the counterpart, but the description never states when to pause versus delete or update a job, nor any preconditions (e.g., only running jobs). An agent can infer the intent but must guess the boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_accountA
Create a new anonymous Runhooks account (no email required) and save its API key locally for reuse. Idempotent: if this server already has a key (from RUNHOOKS_API_KEY or a previous provision), it returns the EXISTING account instead of creating a duplicate. Call this at most once — never to recover from an auth error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses idempotency, that an existing key from RUNHOOKS_API_KEY or prior provision is returned rather than duplicated, and that a key is persisted locally. It does not describe the response shape or whether the local write can fail, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and side effect, followed by the idempotency semantics and the misuse warning. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter creation tool with no output schema, the description covers the important behaviors: idempotency, what is returned when a key exists, and local key persistence. Only the exact return payload is unspecified, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'name' parameter is already documented in the schema, so the baseline is 3. The description adds no further meaning about the name parameter, which is acceptable given full schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create an anonymous Runhooks account) plus a concrete side effect (save its API key locally). It does not explicitly name a sibling tool it is not, but the 'anonymous, no email required' framing is specific enough to separate it from account-related siblings like whoami and rotate_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use guidance: 'Call this at most once — never to recover from an auth error.' That negative guidance is exactly the routing information an agent needs to avoid misusing it after a 401.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replay_executionB
Re-run a past execution immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| executionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not explain whether re-running creates a new execution, side effects, permissions required, idempotency, or what 'immediately' means operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. 'Immediately' adds a small amount of temporal context without cluttering the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There are no annotations, no output schema, and no parameter documentation. The description states the basic action but omits information needed to invoke the tool confidently and understand its effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, executionId, with 0% description coverage. The description only implies that a past execution must be identified, but does not explain the parameter's source, format, or expected value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: re-running a past execution. It is clear what the tool does, but it does not differentiate itself from related siblings such as list_executions or job-creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for repeating an existing execution. There is no explicit guidance on when to use it versus alternatives, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_jobC
Resume a paused job.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a state transition (paused → running) but says nothing about failure behavior when the job isn't paused, whether execution resumes from where it stopped or restarts, idempotency, or required permissions for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. It is efficient, though the brevity reflects under-specification rather than tight elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and an undocumented required parameter needs far more than a four-word sentence. Missing: return value behavior, error conditions, and the meaning of 'id'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions the single 'id' parameter, leaving it unstated whether it is a job ID, execution ID, or name. With one required param and no schema documentation, the description should have clarified the identifier type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Resume a paused job' tells the agent exactly what operation is performed and on what state. It doesn't distinguish itself from the obvious sibling pause_job beyond the name, but the action itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to call this versus pause_job or replay_execution, and no stated preconditions beyond the incidental word 'paused'. The agent must infer that the job must currently be in a paused state and that resuming differs from replaying an execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_keyA
Rotate the API key. The old key stops working immediately; the new key is returned, saved locally, and used for the rest of this session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well: it discloses the destructive consequence (old key stops working immediately and irreversibly), the side effect (new key saved locally), and the session-scoped behavior of the new credential. These are exactly the traits an agent must know before invoking an irreversible operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 27-word sentence (plus a short follow-on clause) that front-loads the action and then the consequences in order of impact: destruction first, then return value, then persistence. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter mutation tool with no annotations and no output schema, this covers the essentials: what happens to the old key, what comes back, and where it goes. It falls short only on recoverability and error/permission behavior, which an irreversible credential operation would ideally mention.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to document and the baseline of 4 applies. The description correctly implies no input is needed by describing the new key as returned rather than supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rotate the API key') with no ambiguity, and no sibling tool in the list touches key management, so there is no overlap to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the effect described (old key immediately invalidated), but the description never says when an agent should rotate versus simply call whoami/provision_account, nor any prerequisite or caution against rotating mid-task. No explicit when/when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alertB
Update an alert configuration. Only the fields you provide are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| jobId | No | ||
| target | No | ||
| channel | No | ||
| enabled | No | ||
| cooldownMinutes | No | ||
| consecutiveFailuresThreshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral burden. It does disclose one important trait — omitted fields are preserved rather than reset — which is exactly the kind of mutation semantics an agent needs. But it omits permission requirements, error behavior for unknown ids, and whether changing channel forces target re-validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The partial-update constraint follows the purpose statement in exactly the right order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 8 undocumented parameters, this description is too thin. An agent can form the request but cannot tell what the tool will do on partial failure, invalid ids, or how channel/target interact — all of which matter for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate and does not. It never names a single field: the meaning of jobId (can it be nulled?), the enums on channel, the cooldownMinutes unit, or consecutiveFailuresThreshold semantics are all left to the caller to infer from property names and constraints alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Update an alert configuration.' An agent understands the intent immediately. It doesn't distinguish itself from siblings such as create_alert, delete_alert, or list_alerts beyond the verb itself, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Only the fields you provide are changed' implies PATCH-style partial-update semantics, which is a genuine usage signal. However, there is no explicit when-to-use/when-not guidance, no mention of prerequisites (does the alert need to exist? can you clear jobId?), and no routing away from create_alert or get_alert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_jobC
Update an existing job. Only the fields you provide are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| tags | No | ||
| status | No | ||
| schedule | No | ||
| httpConfig | No | ||
| description | No | ||
| retryPolicy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose one important trait — partial-update semantics, only supplied fields are changed — but says nothing about permissions, whether updating schedule/httpConfig affects in-flight executions, allowed status transitions, or irreversibility of mutations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed immediately by the most decision-relevant detail. Nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with eight parameters, nested configuration objects, no annotations, and no output schema, two sentences are substantially under-specified. The partial-update note is useful but does not cover param semantics, side effects, or response behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters including nested schedule, httpConfig, and retryPolicy objects, and the description compensates with no parameter detail at all. The agent must infer entirely from raw property names and enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Update an existing job'), so the agent knows this is a mutation targeting a single job by id. It does not distinguish itself from siblings like pause_job or resume_job, which could plausibly also change status-like fields, leaving some routing ambiguity for a general-purpose update tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, prerequisites, or alternatives. With pause_job, resume_job, and create_job as siblings, an agent gets no signal on whether status changes should go through this tool or the dedicated ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Show the currently authenticated Runhooks account (name, plan, API key prefix).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose two useful traits: the result is scoped to the 'currently authenticated' account (not an arbitrary user) and it exposes a sensitive API key prefix rather than a full key. It does not state read-only-ness explicitly or what happens without valid auth, but 'Show' plus the enumerated read-only fields make the safety profile unambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, and the parenthetical return-field list is placed where it adds the most value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, no-output-schema introspection tool, the description supplies all the caller needs: what is returned and that it is identity-scoped. Only a note on auth failure behavior or sensitivity of the key prefix would add more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; baseline 4 applies. The description correctly adds no parameter noise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('the currently authenticated Runhooks account') and enumerates what is returned (name, plan, API key prefix). It is immediately distinguishable from siblings like provision_account or rotate_key, which manage rather than disclose identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the identity/credential-inspection tool. No explicit when-to-use, no prerequisites, and no mention of the related siblings such as rotate_key or get_usage that an agent might confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
v0.1.10- First observed
create_alert - First observed
create_job - First observed
delete_alert - First observed
delete_job - First observed
get_alert - First observed
get_job - First observed
get_usage - First observed
list_alerts - First observed
list_executions - First observed
list_jobs - First observed
pause_job - First observed
provision_account - First observed
replay_execution - First observed
resume_job - First observed
rotate_key - First observed
update_alert - First observed
update_job - First observed
whoami
TDQS
Scored across 18 tools
Each tool maps to a distinct resource+action: account lifecycle (provision/whoami/rotate), job CRUD plus pause/resume, execution history vs. replay, and alert CRUD. The only mild adjacency is whoami (identity/plan) vs. get_usage (limits/consumption), but their descriptions make the boundary clear. No tool pair appears to do the same thing.
Nearly everything follows a clean snake_case verb_noun pattern (create_job, list_alerts, replay_execution, rotate_key). The single deviation is 'whoami', a conventional command-style name that breaks the pattern but remains instantly readable.
18 tools across five coherent sub-domains (account, jobs, executions, usage, alerts) is reasonable, and each tool earns its place. It sits at the upper edge of comfortable scope, but the job and alert CRUD sets justify their members rather than padding the surface.
Jobs and alerts have full CRUD plus lifecycle controls (pause/resume), which is strong. Executions, however, only offer list and replay — there is no get_execution or log/output retrieval, so an agent that needs to diagnose why a job failed hits a dead end despite logs being referenced in create_job.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Open-source Zapier/n8n alternative as an MCP server: agents build, run and debug your workflows.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for scheduling and executing Claude Code CLI tasks via cron expressions, featuring a web dashboard and webhook support. It enables users to dynamically create custom MCP servers, manage recurring AI jobs, and track execution history with token and cost analytics.24MIT
- AlicenseAqualityAmaintenanceAn MCP server that surfaces scheduled-job state and detects silent failures (exit 0 but no useful output) for cron, systemd timers, and OpenClaw schedulers, enabling AI agents to query job health and overdue status directly.635 PyPIMIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to execute real-world actions through 10 specialized engines covering authenticated API calls, browser automation, visual QA, shell commands, file operations, job scraping, and parallel task execution.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets AI agents manage cron jobs through natural language — adding, listing, pausing, removing, running, and viewing logs of scheduled jobs with plain-English schedule parsing, automatic log capture, missed-run detection, and failure alerts.MIT