Apache AIops
Provides governed tools for Apache HTTP Server operations and diagnostics, including checking version and config syntax, parsing virtual hosts, modules, includes, and runtime configuration, reading optional mod_status metrics and bounded error logs, summarizing access status, probing configured HTTP health endpoints, correlating diagnostics, and performing guarded graceful reloads.
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., "@Apache AIopsdiagnose my local Apache deployment and summarize any config or health issues"
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.
Apache AIops
A dedicated, governed MCP server, CLI and skill for Apache HTTP Server with 17 MCP tools. It uses Apache's own apachectl diagnostics, optional operator-configured HTTP health and mod_status URLs, and bounded reads of an operator-configured error log plus a privacy-preserving access-log status summary. Every call is audited and budgeted by the vendored governance harness.
What it checks
Apache version, config syntax, parsed virtual hosts and loaded modules.
Build options and parsed runtime configuration.
Parsed config include tree, compiled modules and directives from static modules.
Optional machine-readable
mod_statusmetrics, bounded error-log tail and privacy-preserving access-status summary.Optional HTTP health status without downloading the response body.
apache_diagnosecorrelates the checks and preserves failures as errors withdata: null.
Related MCP server: mcp-vpsobs
Setup from source
Requires Python 3.11+, uv, and apachectl on the operator host. Run uv sync --dev, uv run apache-aiops init, then uv run apache-aiops doctor. Manual ~/.apache-aiops/config.yaml:
targets:
- name: local
apachectl_bin: apachectl
probe_url: http://127.0.0.1/health
status_url: http://127.0.0.1/server-status?auto
error_log: /var/log/apache2/error.log
access_log: /var/log/apache2/access.log
timeout: 10
verify_ssl: trueRun uv run apache-aiops diagnose. The MCP entry point is uv run apache-aiops-mcp. The optional HTTP probe is configured by the operator, not chosen by a tool caller. TLS verification is enabled by default, and ca_file accepts a custom CA PEM.
Scope and verification
graceful-reload first runs configtest, supports dry-run and two CLI confirmations, and reports an unknown final outcome even if the command returned: existing workers may still serve the old config. It has no safe inverse when the prior config file is not snapshotted. Vhost editing, TLS certificate management and module changes remain outside this release. See verification. Missing operations and live-environment feedback are welcome as issues or PRs.
Available Tools
17 toolsapache_access_statusBRead-only
[READ] Count HTTP statuses in recent common/combined access logs, without raw requests.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the '[READ]' prefix merely repeats that. The description does add real context beyond annotations: output is status counts with no raw request lines, and it only covers common/combined log formats, which tells the agent what it will and won't get back.
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 wasted words; the scope qualifier and the 'without raw requests' clarification both earn their place. It is perhaps too terse for the gaps it leaves.
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 read-only aggregation tool with no output schema, the description conveys the essential behavior (status counts from recent access logs). However, neither parameter is explained and the meaning of 'recent' is unspecified, leaving an agent unsure how to control the scan 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 coverage is 0% for two parameters (limit, target), and the description never mentions either. 'Recent' weakly hints that limit controls the window, but what 'target' means (host, path, or log file) is left entirely undefined, so the description does not compensate for the schema 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 names a specific verb (count) and resource (HTTP statuses) scoped to recent common/combined access logs, and the phrase 'without raw requests' signals an aggregated summary rather than log retrieval, which separates it from siblings like apache_error_log or apache_server_status. It does not explicitly name a sibling, so it falls 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?
There is no statement of when to choose this over apache_server_status, apache_access_log-style retrieval, or apache_error_log. Usage is only implicitly inferable from the words 'count HTTP statuses', and no preconditions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_buildCRead-only
[READ] Show Apache build options and compiled paths.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description is not required to establish safety, but it adds essentially no behavior beyond that. It does not say what a "build option" entry looks like, whether output includes compiler flags, configure arguments, or install prefixes, nor whether the underlying file must exist. For a diagnostic tool, that is a meaningful 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 short sentence, front-loaded with the read framing and the resource. There is no filler or repetition. It is concise to the point of under-specification, 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 one-parameter, optional-argument read tool this could be nearly complete, but the sole parameter is undocumented in both schema and description, and there is no output schema to explain the returned structure. Given the crowded apache_* sibling set, the missing scope boundary leaves the agent insufficiently equipped to choose this tool confidently.
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 optional parameter "target" has 0% schema description coverage, and the description never mentions it at all. The agent cannot tell whether "target" means a build target, a host triple, a config file path, or a component selector, nor what happens when it is omitted (schema default is null). The description does nothing 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?
"Show Apache build options and compiled paths" gives a verb and a resource, so the agent knows it is a read of compile-time configuration. However, it does not distinguish itself from close siblings such as apache_version or apache_compiled_modules, which plausibly return overlapping information. The bracketed "[READ]" tag adds nothing the name and resource do not already convey.
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 contains no when-to-use guidance, no exclusions, and does not name any alternative tool. With 15 sibling apache_* tools, the agent is left to guess whether build options belong here or in apache_version / apache_compiled_modules. Only the implicit "build" framing hints at scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_compiled_modulesARead-only
[READ] List modules compiled into Apache, excluding dynamic modules.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The [READ] tag and readOnlyHint=true agree, so safety is already covered by structured data. The description adds the static-vs-dynamic scope, but says nothing about how results are returned or what happens when no Apache install is detected, which matters since there is no output schema.
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, front-loaded with the read tag and the verb, with zero redundant wording. Nothing to trim.
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 read-only listing tool this covers the core purpose, but with no output schema and an undocumented 'target' parameter the definition leaves an agent guessing about both the input's meaning and the shape of the result.
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?
With exactly one optional parameter named 'target' and 0% schema description coverage, the description gives no hint whether it is a host, container, or config path. This is a real gap, but it is a single nullable parameter with a default, so the tool is still callable without it.
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 (modules compiled into Apache) plus an explicit scope boundary: dynamic modules are excluded. That exclusion is what separates it from the sibling apache_modules, so an agent can pick between them without opening a schema.
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 'excluding dynamic modules' clause implies that dynamic modules belong to another tool (apache_modules), but no alternative is named and no condition is stated explicitly. Usage is inferable rather than instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_config_checkCRead-only
[READ] Run Apache's native config syntax test.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is purely a read operation, and the description is consistent with that. What it adds beyond the annotations is only the phrase 'native config syntax test'; it says nothing about what happens on failure (exit status, error output, line numbers) or whether it validates the live server config versus a supplied target.
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?
It's a single sentence with no redundant wording and the key concept is front-loaded. The brevity is appropriate in form, though it edges into 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?
With no output schema and 0% parameter coverage, the description must explain both the ambiguous 'target' argument and what a syntax-test result looks like. It does neither, so an agent cannot confidently determine valid input values or interpret the outcome.
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% for the single, nullable 'target' parameter, so the description carries the full burden and fails it. The description never mentions 'target' and does not explain what a target means here (a config file path, a vhost, a server instance), which is the one piece of information an agent needs to call this correctly.
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: run Apache's native config syntax test. That is concrete enough to separate it from siblings like apache_config_includes or apache_runtime_config, although it doesn't name those siblings or contrast itself with apache_diagnose 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 when-to-use guidance at all: nothing says to run this before apache_graceful_reload, nothing says when apache_diagnose would be preferable, and nothing states prerequisites. The only implicit cue is the [READ] tag, which merely restates the readOnlyHint annotation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_config_includesCRead-only
[READ] Show Apache's parsed config include tree with bounded output.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so '[READ]' is redundant. The one piece of added value is 'bounded output', which warns that results may be truncated, but it doesn't say what the bound is, why truncation happens, or what the agent should do about it.
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 tightly-packed sentence with the key scope front-loaded and no filler. The '[READ]' prefix is minor duplication of the annotation but costs almost nothing.
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 no output schema and an undocumented optional parameter, the description needs to do more than one line. An agent still cannot tell what 'target' accepts or what the returned tree looks like or how it is bounded before calling the 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?
There is one parameter ('target') with 0% schema description coverage, so the description carries the full burden of explaining it — and it says nothing about what a target is (host, container, config path, site?). This is a clear gap the description fails to compensate for.
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 ('Apache's parsed config include tree'), which is distinguishable from siblings like apache_static_directives or apache_config_check. It lacks any explicit comparison to those siblings, 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?
There is no when-to-use guidance, no prerequisites, and no mention of when an agent should prefer apache_config_check or apache_static_directives instead. The agent must infer the use case purely from the nouns in the sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_diagnoseCRead-only
[READ] Correlate version, config, vhosts, modules and optional HTTP probe.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds that multiple Apache data sources are correlated plus an optional HTTP probe. However, it does not explain what the probe does, whether it requires a reachable target, or what kind of diagnostic output is produced.
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 compact sentence with the [READ] marker front-loaded and no wasted wording. It is appropriately sized for a concise summary, though its brevity contributes to missing parameter and usage detail.
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?
This is a complex aggregation tool with no output schema and an undocumented parameter, yet the description is only one terse line. It does not explain target semantics, probe behavior, prerequisites, or what the diagnostic correlation contains.
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 only parameter, target, has 0% schema description coverage and is not mentioned in the description. The phrase 'optional HTTP probe' hints at target use but does not define whether target is a host, URL, or something else, leaving the parameter 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?
The description states a clear diagnostic action: correlating version, config, vhosts, modules, and an optional HTTP probe. This distinguishes it from narrower siblings such as apache_version or apache_vhosts by making it an aggregate diagnostic tool, though it does not fully describe the resulting diagnosis.
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 is given about when to use this aggregate diagnostic instead of siblings like apache_config_check, apache_probe, or apache_server_status. The optional HTTP probe is mentioned but without conditions for enabling it or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_error_logCRead-only
[READ] Tail an operator-configured Apache error log, with explicit truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the "[READ]" prefix merely restates that. The description does add genuine context beyond annotations: the log path is operator-configured (so no arbitrary path access) and output is explicitly truncated. It does not say how truncation is signaled or what a tail of an empty/rotated log looks like.
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; the read-only marker and the two key traits (operator-configured path, truncation) come first. It is efficient, though the terseness trades away information the parameters need.
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 two-parameter tool with no output schema and 0% schema coverage, the description should explain what `target` and `limit` do and what the returned entries look like. Neither is covered, leaving the agent guessing on invocation despite the clean one-line framing.
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% for two parameters. "Explicit truncation" loosely gestures at `limit` (default 50) but never states that it caps lines returned, and `target` is left completely unexplained — an agent cannot tell whether it selects a log path, a host, or a vhost.
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 ("Tail") plus specific resource ("Apache error log") tells an agent exactly what the tool returns. It is distinguishable from the access-log-flavored sibling apache_access_status, though it never names that sibling explicitly and the ambiguous "target" parameter leaves the log source slightly open.
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 when-to-use statement, no exclusion, and no pointer to alternatives such as apache_access_status or apache_diagnose when the error log is not the right place to look. The agent must infer usage purely from the tool name and the word "Tail".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_graceful_reloadBDestructive
[WRITE] Config-check then request a graceful reload; outcome needs operator check.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The write/destructive profile is already declared by annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the description gets no credit for the [WRITE] tag alone. It does add two genuinely useful facts beyond annotations: the tool performs a config validation before the reload, and the outcome is not self-verifying, so an operator must confirm. It omits what a graceful reload does to in-flight connections and what a failure response looks like.
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 clause pair with zero filler; the write marker and the caveat both land immediately. Nothing is redundant, though the terse phrasings ('outcome needs operator check') push some interpretive burden onto the agent.
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 two-parameter, no-output-schema mutation tool, the description conveys the core action and the manual-verification caveat, which is the minimum an agent needs to act responsibly. It falls short on parameter meaning and on the consequences of a graceful reload, which are not recoverable from the bare anyOf/boolean schema.
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% for both parameters, and the description mentions neither. The meaning of 'target' (which server, host, or config to reload?) and the semantics of 'dry_run' (does it stop after the config check?) are left entirely unexplained, which is a real gap given the tool is destructive.
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?
Description names a specific action sequence (config-check, then request a graceful reload) on an identifiable resource, Apache. The [WRITE] tag distinguishes it from read-only siblings like apache_config_check and apache_runtime_config, though it does not name the reload-vs-restart alternative 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?
The implied usage — apply configuration changes without a hard restart — is inferable from 'config-check then request a graceful reload'. There is no explicit when-not guidance, no mention of when a full restart is required instead, and no pointer to apache_config_check or apache_diagnose as prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_modulesCRead-only
[READ] List Apache's loaded modules.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the "[READ]" prefix merely restates that annotation. Beyond it, the description discloses nothing about what a module entry looks like, whether output is per-target, or how the result is scoped.
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 short sentence, front-loaded with the verb and resource, with no filler. It is efficient but the brevity borders on under-specification given the undocumented target parameter.
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 no output schema and no annotation coverage beyond readOnlyHint, so the description carries the burden of explaining the single target parameter and the shape of the module list. Neither is addressed, leaving an agent unable to call it correctly beyond guessing.
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 optional parameter, target, at 0% description coverage, and the description says nothing about it — not whether it names a host, a config file, or a server instance. With low coverage the description is expected to compensate, and it 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 (List) and resource (Apache's loaded modules), so the operation is unambiguous. The word "loaded" implicitly distinguishes it from sibling apache_compiled_modules, but the description never names that sibling to make the contrast explicit.
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 when-to-use guidance, no prerequisites, and no mention of when an agent should prefer apache_compiled_modules or apache_static_directives instead. Usage is only inferable from the resource name, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_probeBRead-only
[READ] GET the configured health URL without downloading its body.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description is consistent with that. It adds one useful behavioral detail beyond the annotations: the response body is not downloaded, making this a lightweight check. It says nothing about timeouts, failure behavior, or what the probe returns on an unhealthy endpoint.
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, front-loaded with the [READ] marker and the verb, with no filler. Every word (health URL, without downloading body) carries 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?
No output schema exists, so the description should explain what a probe returns (status code, reachability boolean), but it does not. Combined with the undocumented 'target' parameter, an agent cannot fully predict inputs or outputs for this 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% for the single optional 'target' parameter, and the description does not explain what 'target' means (URL override? host name? default to the configured health URL?). The description does imply a default configured URL exists, which is a small amount of meaning beyond the schema.
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 and resource: GET the configured health URL, with the [READ] tag reinforcing the operation type. It is clear what the tool does, though it does not distinguish itself from siblings such as apache_server_status or apache_access_status, which also report server health.
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 choose this over sibling status tools like apache_server_status or apache_access_status, and no prerequisites or exclusions are stated. The agent must infer usage from the phrase 'configured health URL' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_runtime_configCRead-only
[READ] Dump Apache's parsed runtime configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the "[READ]" prefix merely restates it. The description says nothing about what the dump contains, whether it reflects live in-memory state versus on-disk files, how large the output could be, or whether a reload is needed to observe changes.
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, front-loaded with the action and resource, with no filler. The "[READ]" prefix is wasted space since the annotation already declares read-only behavior, which is the only minor inefficiency.
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 no output schema, the description is the only place to learn what a "parsed runtime configuration" dump looks like, and it does not say. Combined with an undocumented optional target parameter, an agent has enough to attempt a call but not enough to predict or interpret the result.
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 parameter "target" has 0% schema description coverage, so the description carries the full burden and provides nothing about it. An agent cannot tell whether target scopes to a vhost, a server, or a config section, or what null (the default) means versus supplying a 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?
"Dump Apache's parsed runtime configuration" gives a specific verb (dump) and a specific resource (the runtime/parsed config), which distinguishes it reasonably well from siblings like apache_config_check, apache_static_directives, and apache_vhosts. It stops short of explicitly naming which sibling to prefer, but the resource is concrete enough for an agent to form a hypothesis.
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 instead of apache_config_check, apache_config_includes, apache_static_directives, or apache_probe, all of which sound adjacent. The only usage signal is the bracketed "[READ]" tag, which is implied by the annotation rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_server_statusBRead-only
[READ] Get bounded machine-readable mod_status metrics from configured URL.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so '[READ]' is redundant. The description does add value by disclosing that output is machine-readable and 'bounded' (i.e., truncated/limited metrics), but says nothing about what the bound is, auth requirements, or failure behavior for an unreachable URL.
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 tight sentence with the key information front-loaded and no filler. The '[READ]' prefix is mildly redundant with the readOnly annotation but costs little.
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 single-optional-param read tool with no output schema, the description covers the basic purpose but leaves the parameter undefined and gives no sense of what the returned metrics look like or what 'bounded' means in practice.
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% and the single 'target' parameter is completely undocumented. 'From configured URL' hints that target may default to a preconfigured endpoint, but the description never explains what target means, its format, or that it is optional.
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 ... mod_status metrics') and adds scope qualifiers ('bounded machine-readable', 'from configured URL'). This distinguishes it reasonably from siblings like apache_access_status or apache_probe, though it never names an alternative 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 explicit when-to-use or when-not-to-use guidance and no mention of alternatives among the many apache_* siblings. 'Configured URL' only implies that a target was preconfigured; the agent must infer when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_static_directivesCRead-only
[READ] List directives from Apache's static modules with bounded output.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description need only add context. "Bounded output" is a genuinely useful disclosure that results may be truncated or capped, but it is left vague — no indication of the bound, whether truncation is signalled, or what "static" scoping excludes.
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 short without being padded, though the brevity comes at the cost of the detail the schema and annotations don't supply.
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 an undocumented parameter, no output schema, and a crowded sibling set of Apache config tools, the definition does too little. The agent lacks enough information to know what target does or how this differs from the other directive/config listing tools.
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 one parameter, "target," with 0% schema description coverage and no default explanation beyond null. The description never mentions it, so the agent cannot tell whether target is a host, a file path, a module name, or an optional filter.
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 names a specific verb and resource: "List directives from Apache's static modules." That distinguishes it reasonably from siblings like apache_config_includes and apache_runtime_config, though what counts as a "static module" versus apache_compiled_modules or apache_modules is left unexplained.
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 choose this over apache_runtime_config, apache_config_includes, or apache_modules. The "[READ]" tag restates the readOnlyHint annotation rather than helping an agent route between the many overlapping Apache config siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_versionBRead-only
[READ] Get Apache HTTP Server version from apachectl -v.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context that the value comes from shelling out to `apachectl -v`, but says nothing about failure behavior when apachectl is missing, or whether the target is local or remote.
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 [READ] marker first and the data source last. Nothing is wasted and no filler is present.
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 trivial read-only probe with no output schema, the description is nearly sufficient, but the entirely unexplained `target` argument leaves a real hole in how to actually invoke the tool. Sibling disambiguation against `apache_build` is also absent.
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 parameter `target` has 0% schema description coverage and receives no explanation in the description at all — an agent cannot tell whether it is a hostname, a container, or a path to apachectl. With one undocumented parameter, the description needed to compensate and 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 gives a specific verb and resource ("Get Apache HTTP Server version") and even names the underlying source (`apachectl -v`), so the agent knows exactly what it returns. It does not differentiate from the similar-sounding sibling `apache_build`, which is why 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?
There is no explicit statement of when to call this versus `apache_build`, `apache_probe`, or `apache_diagnose`, nor any preconditions such as requiring apachectl to be installed. Usage is only inferable from the obvious [READ] tag and the word "version".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apache_vhostsCRead-only
[READ] Show Apache's parsed virtual-host mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The "[READ]" prefix merely restates the readOnlyHint=true annotation, adding no new information. Nothing is said about what the "parsed mapping" contains, how parse failures or a missing Apache install are surfaced, or whether output is keyed by server name or file.
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 or redundancy. It is efficient, though its brevity is achieved by omitting content rather than by tight editing.
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 tool whose only parameter is undocumented and which has no output schema, the description should at minimum explain the target argument and roughly what the mapping looks like. Instead it supplies only a one-line purpose statement, leaving key invocation details missing.
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 optional parameter "target" has 0% schema description coverage and the description never mentions it, leaving the agent to guess whether it is a hostname, a config path, or a remote host selector. With one undocumented parameter, 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?
The description gives a specific verb ("Show") and resource ("Apache's parsed virtual-host mapping"), which is clearly distinct from siblings like apache_static_directives or apache_runtime_config. It stops short of explicitly contrasting itself with those siblings, so it is clear but not fully differentiated.
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 apache_config_includes, apache_runtime_config, or other Apache inspection tools, and no stated prerequisites (e.g., an Apache config being present on the target). The agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_applyADestructive
[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.
The inverse runs through its own governed tool, so it is audited under its own risk tier. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once.
Args:
undo_id: The undoId from undo_list (or an _undo_id in a write result).
dry_run: If True, preview the inverse tool + params without running it.
target: Passed through to the inverse tool when it accepts a target.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| undo_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, readOnly=false; the description adds that the inverse executes through its own governed tool and risk tier (audit behavior) and that tokens are single-use. Useful beyond the annotations, though it doesn't say what the inverse might mutate.
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 [WRITE][risk=medium] tag front-loads the mode and risk, and the body is tight. The Args block partially restates the schema titles, but each line adds semantics, so little 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?
No output schema, but the description explains the dispatch model, the dry-run preview path, and the one-time token constraint, which covers the essentials for a mutation tool. It could clarify failure behavior (e.g., applying an already-used token) to be fully complete.
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 carry the load, and it documents all three params: undo_id's source, dry_run's preview semantics, and target's pass-through role. The 'target' explanation ('when it accepts a target') is a bit thin but directionally complete.
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 ('apply') and resource ('a recorded undo') plus the mechanism (dispatching its inverse tool). This clearly distinguishes it from the sibling undo_list, which only enumerates tokens.
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 concrete guidance: undo_id comes from undo_list or an _undo_id in a write result, use dry_run=True to preview, and a token can only be applied once. It stops short of saying when not to use it or when preview is mandatory, 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.
undo_listARead-only
[READ] List recorded, not-yet-applied undo tokens (most recent first).
Each entry names the original tool, the inverse tool that undo_apply
would run, and a human note. Use the undoId with undo_apply.
One extra row is read so truncated is measured rather than guessed from
the row count matching the limit; when it is true, older tokens exist.
Each entry carries effectVerified. False means the original write
lost its response, so the change it reverses is PROBABLE, not confirmed —
check the live state before applying, and do not report the result as a
restore of a state that may never have been reached.
Args: limit: Max rows to return (default 50, capped at 500). target: Unused (undo state is host-local); accepted for CLI uniformity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, yet the description discloses substantial behavior: an extra row is read so 'truncated' is measured rather than inferred, effectVerified=false means the reversed change is probable not confirmed, and it warns against reporting an unverified restore. This is well beyond what the annotation covers.
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?
Front-loaded with purpose, then usage, then a non-obvious implementation note, then args. The paragraph on effectVerified is long but every clause carries decision-relevant information; nothing is 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?
No output schema exists, so the description supplies the return shape itself (original tool, inverse tool, human note, truncated, effectVerified) plus the truncation semantics. Nothing an agent needs to call and interpret this tool is missing.
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 carry the burden — and it does: limit is documented with default 50 and a cap of 500 (the cap is absent from the schema), and target is explicitly marked unused and explained as CLI uniformity.
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 recorded, not-yet-applied undo tokens') with ordering scope ('most recent first') and the [READ] marker. It is immediately distinguishable from its sibling undo_apply, which it names.
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?
Explicitly routes the agent onward ('Use the undoId with undo_apply') and gives a conditional check before applying when effectVerified is false. It doesn't state an explicit when-not-to-use case for undo_list itself, but the workflow context is clear.
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.
17 tool updates
v0.2.0- First observed
apache_access_status - First observed
apache_build - First observed
apache_compiled_modules - First observed
apache_config_check - First observed
apache_config_includes - First observed
apache_diagnose - First observed
apache_error_log - First observed
apache_graceful_reload - First observed
apache_modules - First observed
apache_probe - First observed
apache_runtime_config - First observed
apache_server_status - First observed
apache_static_directives - First observed
apache_version - First observed
apache_vhosts - First observed
undo_apply - First observed
undo_list
TDQS
Scored across 17 tools
Most tools target distinct diagnostic facets such as build info, loaded vs compiled modules, access logs, error logs, server status, and probes. There is some overlap among apache_runtime_config, apache_static_directives, apache_config_includes, apache_vhosts, and apache_diagnose, but the descriptions and aggregate-vs-specific framing make selection reasonably clear.
The Apache domain tools consistently use an apache_ snake_case prefix, and the undo helpers use a consistent undo_ prefix. The mixed prefix families are logical rather than chaotic, though the set is not a single uniform verb_noun pattern.
Seventeen tools is slightly above the ideal compact range, but the surface spans several legitimate Apache diagnostic areas: config, modules, vhosts, logs, status, reload, and undo. Each tool has a plausible operational role rather than being redundant filler.
The set covers key Apache AIops workflows: version/build inspection, config checking, module and vhost discovery, log/status inspection, diagnosis, graceful reload, and undo support. It lacks broader service lifecycle controls such as start/stop/restart and config mutation, but those are minor gaps for a primarily diagnostic server.
Maintenance
Related MCP Connectors
Read-only server insight: why a Linux server or K8s cluster is slow, failing or changed.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Read-only agent-commerce audit, upgrade verification, diagnosis and x402 probing.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables reading diagnostic data from remote servers over SSH using a whitelist of read-only commands, with secret redaction.545 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only observability of a Linux host via MCP, exposing allowlisted systemd, docker, nginx, logs, disk, and cert info without shell access.MIT
- FlicenseNot gradedqualityBmaintenanceEnables read-only system diagnostics on approved Linux hosts over SSH, with allowlisted commands, bounded output, and secure log access.-
- AlicenseAqualityAmaintenanceEnables AI agents to monitor server health and capacity, diagnose outages, inspect Docker and deployment status, and perform safe, bounded recovery actions via MCP without granting unrestricted shell or SSH access.101Apache 2.0