automation-health-mcp
Click on "Install 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., "@automation-health-mcpAudit all cron jobs for failures"
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.
automation-health-mcp
An MCP server that finds the automation which stopped working without telling anyone.
Most automation does not fail loudly. It keeps running, keeps exiting zero, keeps writing to its log — and quietly stops doing the work. The dashboard stays green. Nobody finds out until somebody asks a question about the numbers.
This server gives an LLM agent the tools to go and check.
> Audit the automation on this machine.
critical com.acme.sync scheduled job is failing (exit code 1)
critical publisher.log no output for 74h (threshold 26h)
critical api.example.com/accounts HTTP 200 but 'data' is empty —
the endpoint answers while holding nothing
warning worker.log recent errors: login_required
warning billing.py:42 unfinished logic returning a hardcoded valueWhy this exists
I audited my own stack and found six scheduled jobs that had been dead for weeks. Every one of them reported success in the way that mattered to whatever was watching:
a messaging job authenticated, received
login_required, and exited quietlya publishing integration returned
HTTP 200while holding zero connected accountsa report had been renamed
.DISABLEDduring debugging and never renamed backa budget function read its input file, ignored it, and returned the constant it was seeded with
None of these are exotic. They are the normal ways automation dies, and none of them trip a conventional "is the process running" check.
Related MCP server: Audit Bridge MCP
What it checks
Tool | Question it answers |
| What is scheduled on this machine, and what did it exit with? |
| Which scheduled jobs are failing right now? |
| Which daily jobs have produced no output in over a day? |
| Which logs show failures in the last 24 hours? |
| Does this integration return content, or just a status code? |
| Which functions are marked TODO and still return a hardcoded number? |
| All of the above, in one prioritised report |
Two design decisions worth calling out:
Recent errors only, tail only. Scanning whole log files resurfaces failures that were fixed weeks ago and turns the report into noise you learn to ignore. Only recently-modified files are read, and only their last lines.
Payload over status code. check_endpoint takes a JSON path — data, result.accounts — and treats an empty collection there as critical. This is the check that catches a disconnected integration, which presents itself as a perfectly healthy HTTP 200.
Install
uvx --from automation-health-mcp automation-healthOr add it to your MCP client configuration:
{
"mcpServers": {
"automation-health": {
"command": "uvx",
"args": ["--from", "automation-health-mcp", "automation-health"]
}
}
}Requires Python 3.10+. macOS reads launchd; Linux reads systemd.
Use it from an agent
Audit /var/log with job prefix "com.acme." and code in ~/src/api.
Check whether https://api.example.com/v1/accounts still holds live accounts —
the JSON path is "data".Use the checks directly
The check layer has no MCP dependency, so it also works as a plain library — in a cron job, a CI step, or a health endpoint:
from automation_health import checks
findings = (
checks.failing_jobs("com.acme.")
+ checks.log_freshness("/var/log/acme", max_age_hours=26)
+ checks.recent_errors("/var/log/acme")
)
for f in findings:
print(f.severity, f.subject, f.detail)The part that actually matters
The checks are the easy half. The half that decides whether any of this works is where the findings go.
I had a monitoring script before any of this. It ran daily, correctly detected that my main plan file was eleven days stale, and wrote that finding to a log file. Nobody reads log files. I had built a smoke detector and installed it in a room I never enter.
A detector whose output nobody consumes is not a detector. It is a diary.
So route the output of audit somewhere unavoidable: a Slack channel, the top of a dashboard, a file that gets injected into your agent's context at the start of every session. Push, not pull.
The question to ask about any automated system is not "is it running?" It is:
"If this stopped working tonight, how exactly would I find out?"
Development
uv run --with pytest --with "mcp[cli]" python -m pytest tests/ -qLicence
MIT — see LICENSE.
Built by Elite Product LLC. We build and stabilise automation systems for companies: integrations, AI agents, and the reliability layer that tells you when they quietly stop working.
Available Tools
7 toolsauditA
Run every check and return one prioritised report.
This is the tool to call first. It answers: what on this machine is broken right now and nobody has been told?
| Name | Required | Description | Default |
|---|---|---|---|
| job_prefix | No | ||
| log_directory | Yes | ||
| code_directory | No | ||
| max_log_age_hours | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly indicates the tool is read-only/audit in nature ('run every check,' 'return one prioritised report'), establishing a non-destructive profile. However, it doesn't disclose behavioral details like runtime, network dependencies, permissions required, or failure behavior of individual checks, though the output schema existence helps somewhat. The core behavioral trait (aggregate, non-mutating) is conveyed, but depth beyond that is limited.
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 exceptionally concise: two short paragraphs totaling three sentences. Every line earns its place — the first states the function, the second positions it as the primary entry point, and the third gives a memorable mission framing. No filler or redundancy.
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 aggregate tool that runs 'every check,' the description explains the purpose well but with zero schema documentation coverage for 4 parameters. However, the output schema exists (has output schema: true), so return values don't need explaining. The main gap is parameter semantics — with 0% coverage, the description should illuminate what log_directory, code_directory, job_prefix, and max_log_age_hours control, which it does only implicitly via 'log' references. Still, the core intent and usage priority are complete enough for a first-call tool.
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 none of the 4 parameters are documented in the schema. The description mentions log_directory implicitly (the audit inspects logs), but doesn't explain job_prefix, code_directory, or max_log_age_hours specifically. Since coverage is 0%, the description should compensate but doesn't describe what each parameter means or their default behaviors beyond what titles provide. Given the 0% coverage, this is a notable 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?
The description clearly states the tool runs every check and returns one prioritised report, with a specific verb ('run'), resource ('every check'), and outcome ('one prioritised report'). It distinguishes itself from siblings like find_failing_jobs or check_log_freshness by being the aggregate 'run everything' tool that surfaces unknown issues. The mission statement 'what on this machine is broken right now and nobody has been told?' makes the purpose unmistakable.
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 explicitly states 'This is the tool to call first,' giving clear sequencing guidance. It contrasts with the granular sibling tools (find_failing_jobs, check_log_freshness, etc.) by being the comprehensive first-pass option. While it doesn't enumerate specific when-not-to-use scenarios, the 'call first' directive and the aggregate nature clearly position it against the specific checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_endpointA
Check an integration by its payload, not its status code.
Set require_json_path to the part of the response that proves the
integration is alive — for example "data" for a list of connected accounts.
An endpoint returning HTTP 200 with an empty list is a disconnected
integration, and this is the check that catches it.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| headers | No | ||
| require_json_path | No | ||
| require_non_empty | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It discloses a subtle non-obvious behavior: the tool inspects payload rather than status code, and that an empty/absent path denotes a failing check. It also explains the require_non_empty semantics implicitly via the empty-list example. It doesn't cover network/error behavior, but the core distinguishing behavior is clearly disclosed.
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 tightly written: two sentences of prose plus a clarifying example. The core contrast (payload not status code) is front-loaded in the first sentence. Every sentence earns its place — the require_json_path guidance and the 200-with-empty-list example are both load-bearing. Zero waste.
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 check tool with an output schema and only one required parameter, the description is quite complete. It captures the tool's reason-to-exist (distinguishing live from disconnected integrations), explains the key toggle, and gives a concrete usage pattern. Remaining gaps (behavior when require_non_empty=false, error/handling on unexpected shapes) are minor for a validation-type tool.
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 the four parameters. It directly explains require_json_path with a concrete example ('data') and clarifies require_non_empty semantics through the empty-list scenario. However, it does not explain url, headers, or the exact meaning of require_non_empty=false, leaving some parameters under-documented.
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 carries a strong, distinct verb+resource: 'Check an integration by its payload, not its status code.' It clearly differentiates from sibling tools (list_jobs, check_recent_errors, etc.) by framing the check as payload-based rather than status-based. The key example (HTTP 200 with empty list = disconnected) crystallizes what makes this tool unique versus the 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?
The description gives concrete guidance on how to use the tool (set require_json_path to the part proving liveness) and the motivating scenario (catching disconnected integrations behind HTTP 200). It implies when to use it versus plain status-checking tools, but doesn't explicitly name sibling alternatives or state when NOT to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_log_freshnessA
Report logs that have not been written to recently.
A daily job whose log is 26 hours old has not run. This is the cheapest liveness check available and it requires no instrumentation.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | *.log | |
| directory | Yes | ||
| max_age_hours | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains that 26 hours for a daily job indicates non-run and frames it as a passive check. However, it doesn't disclose the return format, whether it's read-only (which is heavily implied by 'liveness check' and 'no instrumentation'), or how it handles missing directories. The behavioral traits are partially disclosed but incomplete.
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 concise (three sentences) and front-loaded with the purpose. The example in the second sentence is useful and earns its place. Slightly more detail on parameters or output could be added, but as written there's no wasted text.
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 is an output schema, which reduces the burden on the description for return values. The tool is moderately complex with 3 params. The description explains the core use case and heuristic, but doesn't fully cover edge cases or clarify how it differs from tools like check_recent_errors or find_stale_placeholders beyond the cheapest-liveness framing. Adequate but with some 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%, so the description carries the burden for params. The description's 26-hour example maps to max_age_hours and implies directory is the logs location, but it doesn't explain pattern's role or clarify parameter format/edge cases. The description adds some context (the 26h heuristic) but doesn't systematically cover all three parameters.
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 the tool reports logs that haven't been written to recently, using 'liveness check' and provides a concrete example (a daily job whose log is 26 hours old has not run). This is a specific verb+resource. It distinguishes somewhat from siblings like check_recent_errors and find_failing_jobs, though it doesn't explicitly name them as 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?
The description gives clear context for when to use it: as a liveness check for scheduled jobs. It notes this is the 'cheapest liveness check available' and 'requires no instrumentation,' implying it's a good first choice for job health monitoring. It doesn't explicitly specify when NOT to use it or name sibling alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_recent_errorsA
Scan the tail of recently-written logs for error signatures.
Only recent files and only their last lines, so that failures fixed last week do not keep reappearing in the report.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes | ||
| tail_lines | No | ||
| within_hours | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It transparently reveals the scoping behavior: only recent files, only last lines, and explains the rationale (avoiding stale failures). It does not reveal return format or pagination behavior, but the output schema exists to cover that 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?
Two tight sentences plus a clarifying follow-up. Every sentence earns its place: the first states the action, the second explains the scoping rationale. Zero waste, efficiently front-loaded.
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 3-parameter tool with no annotations and 0% schema coverage, the description provides the core behavioral contract (time-boxed tail-scanning). The output schema exists, reducing the need to describe return values. It could slightly improve by explicitly defining parameter bounds, but overall it is reasonably complete for its complexity.
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%, so description must compensate, but it only explains the 'tail' and 'recent' concepts implicitly through the prose rather than mapping to specific parameters (within_hours, tail_lines). The parameters themselves (directory, tail_lines, within_hours) are fairly self-explanatory by name and defaults, but the description doesn't explicitly define their semantics or bounds.
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+resource ('Scan the tail of recently-written logs for error signatures') and clearly distinguishes itself from siblings. The detail about 'only recent files and only their last lines' explains the behavioral scoping that differentiates it from generic log-search tools like find_failing_jobs.
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 explains the when ('recently-written logs') and why the scope matters (failures fixed last week should not reappear). It implies this tool is for time-boxed error scanning, though it doesn't explicitly name sibling alternatives or state when NOT to use it. Clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_failing_jobsA
Return only the scheduled jobs whose last run exited with an error.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the filtering behavior (only failing jobs) which is a non-trivial detail. However, it doesn't disclose what happens when no jobs fail (empty list?), whether it paginates, or whether the 'last run' reflects a specific time window. For a read-only listing tool this is modest but adequate 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, lean sentence that conveys the core purpose with zero waste. Front-loaded with the verb and resource, then the filtering criterion. Appropriate length for a focused listing 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?
The tool has an output schema which relieves the need to describe return values. With one optional parameter and a clear simple purpose, the description is arguably sufficient. However, the prefix parameter is undocumented and sibling disambiguation is absent, so complete guidance would require a bit more. Overall adequate but not rich.
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?
There is 1 parameter (prefix) with 0% schema description coverage, so the description should explain what 'prefix' filters. It does not mention the prefix parameter at all. However, the param has a default of empty string and is optional, so the agent might infer it filters job names. The description adds no meaning for the parameter beyond what the schema name implies, so this is a moderate 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?
The description has a specific verb ('return') and resource ('scheduled jobs'), and qualifies the filter clearly ('whose last run exited with an error'). This distinguishes it from siblings like list_jobs (which likely returns all). However, it doesn't explicitly name the sibling alternative way of achieving this, so it stops short of a 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?
The description implies when to use it (when you need failing jobs only), but doesn't give explicit exclusions or alternatives. Given siblings like check_recent_errors and check_log_freshness exist, some guidance on when to use find_failing_jobs vs those would help the agent disambiguate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stale_placeholdersA
Find functions marked TODO that still return a hardcoded value.
Catches the reporting function that reads its input file, ignores it, and returns the constant it was seeded with during development.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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. The description does convey that this is a scanning/detection tool that searches for TODO functions with hardcoded return values, and names a detected pattern rather than just 'detecting something.' However, it does not disclose whether this could be a read-only analysis operation, whether it modifies code, the scope of scanning, or what parameters beyond directory it might depend on. No annotations make full disclosure impossible, but given the description does illuminate purpose behavior, a 3 is fair.
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 two paragraphs, with the first sentence stating the core purpose and the second paragraph illustrating with a concrete example. It is efficient and front-loaded. The example paragraph adds genuine value via a real detection scenario rather than fluff. No wasted sentences.
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 the tool has only 1 parameter, no annotations, but has an output schema (which presumably documents results), the description covers the essential 'what does it find and why it matters' context well. It could add detail about the scope of search, common match patterns, or false positives, but for a single-parameter pattern-detection tool, the current description is reasonably complete. The concrete example fills in expected-use context that a bare schema cannot.
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 'directory' parameter has no description), so the description must compensate. The description mentions 'reads its input file' and performs analysis in a directory context, but it never explicitly references the 'directory' parameter or explains its meaning beyond what the schema type implies (a string). The parameter is intuitive given 'directory' naming, but the description does not add semantic depth about what kind of directory this should be or constraints.
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 what the tool does: 'Find functions marked TODO that still return a hardcoded value.' This uses a specific verb with a resource type (functions), and goes on to illustrate with a concrete use case (reporting function seeded with a constant). It distinguishes itself from siblings like find_failing_jobs and check_endpoint by targeting TODO-flagged placeholders specifically.
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 a clear concrete scenario ('Catches the reporting function that reads its input file, ignores it, and returns the constant'), which implies when to use it. However, it does not explicitly state when NOT to use it or name alternative tools for related but different tasks (e.g., find_failing_jobs for actual failures). The 'when to use' is implied well, but exclusions/alternatives are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsA
List scheduled jobs (launchd on macOS, systemd on Linux) with exit status.
Args: prefix: only return jobs whose label starts with this string, e.g. "com.mycompany." to skip the operating system's own jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 mentions this lists listings on two OSes (macOS/Linux) and returns exit status, which is useful behavioral context. However, it doesn't describe the return format details, pagination, or whether this is a pure read operation (which is likely but not stated explicitly).
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 appropriately concise—a functional summary plus one parameter explanation with a concrete example. No wasted words, efficiently front-loaded with the core purpose. Every sentence earns its place.
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?
With a single optional parameter, an output schema present, and no nested objects, the tool is fairly simple. The description explains what the tool does and how the prefix parameter works, but doesn't describe the output shape or behavior on systems without launchd/systemd. For a moderately simple tool with no annotations, this is adequate but could add more behavioral detail.
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%, meaning the description must fully explain the prefix parameter. It does: 'only return jobs whose label starts with this string' with a concrete example ('com.mycompany.'). This is meaningful added value beyond the schema, which only says 'string, default empty'. The description makes the parameter's purpose and usage clear.
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 the verb (list) and resource (scheduled jobs) and specifies it works on both launchd (macOS) and systemd (Linux), a useful cross-platform clarification. It also mentions exit status as part of the output. However, it doesn't explicitly differentiate from siblings like find_failing_jobs, though the scope is reasonably clear on its own.
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 implies usage via the prefix argument example, but doesn't explicitly state when to use this tool vs alternatives like find_failing_jobs or audit. The prefix example ('skip the operating system's own jobs') gives some contextual guidance but doesn't cover exclusions or comparisons to sibling tools.
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. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
audit - First observed
check_endpoint - First observed
check_log_freshness - First observed
check_recent_errors - First observed
find_failing_jobs - First observed
find_stale_placeholders - First observed
list_jobs
TDQS
Scored across 7 tools
Mostly distinct purposes: list_jobs lists, find_failing_jobs filters, check_log_freshness and check_recent_errors both target logs but with different focus (staleness vs errors), and audit is an umbrella. check_log_freshness vs check_recent_errors could cause some confusion since both deal with recent log analysis, but their descriptions are clear enough.
Consistent verb_noun pattern: list_jobs, find_failing_jobs, check_log_freshness, check_recent_errors, check_endpoint, find_stale_placeholders, audit. The verbs vary somewhat (list/find/check/audit) but all follow the same shape and audit as a single verb is a reasonable deviation as the umbrella command.
Seven tools is a well-scoped set for a system health/automation monitoring server. Each tool covers a distinct monitoring concern: jobs, logs, endpoints, placeholders, and a meta-tool that aggregates. No bloat, no obvious filler.
The surface covers the main health-monitoring concerns: job listing, failure detection, log freshness, log error scanning, endpoint verification, and placeholder detection, plus an aggregate audit. Minor gaps exist (e.g., no tool to trigger or retry a job, no alerting mechanism exposed), but the core monitoring workflow is complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Autopilot MCP server for GEO analyses, reports, content, audits, memories and agents.
An MCP server that automatically collects feedback on your MCP server.
Independent trust scores, tool surfaces and change history for MCP servers.
Read-only MCP server for turva.dev, an agent-readiness audit and advisory service.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for running infrastructure health checks with TIBET provenance. It enables users to define, execute, and audit process health checks with dependency chaining and drift tracking.6MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for orchestrating Windows system auditing tools, supporting system checks, configuration adjustments, and security operations via a standardized interface.-
- AlicenseAqualityCmaintenanceAn MCP server that automatically discovers API endpoints from any codebase, generates and runs tests, and produces per-role QA audit reports in PDF and XLSX.10753MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that audits ERC-8004 agent registrations, diagnosing issues and providing fix lists.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/chainwright/automation-health-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server