tenable-patch-management-logs-mcp
You can analyze Tenable Patch Management logs to diagnose issues, surface errors, and compare devices using read-only MCP tools.
Check which TPM logs are available, parseable, and what devices, time spans, TPM versions, and advisories they cover.
Add or remove log sources (folders, UNC paths, single log files, .zip/.tar.gz bundles) that persist between sessions.
List log files with device, role, purpose, size, and time span.
Summarize warnings and errors into ranked, de-duplicated issues with decoded error codes, root causes, examples, and known fixes; separates platform noise.
Search across all logs with literal or regex patterns, context, paging, and redaction.
Build merged chronological timelines of server and client logs, collapsing repeats.
Run symptom playbooks (diagnose) for patch install failure, content download, connectivity, VM integration, feeds, content publication, service health, database, client upgrade, and feature update readiness.
Compare a problem device against a healthy one to see unique or more frequent warnings and errors.
Detect anomalies (new signatures, spikes, restart loops, quiet logs) compared to a baseline window.
Explain log files, error codes (MSI/HRESULT/HTTP), symptoms, or known issues.
Record baseline snapshots so anomaly detection survives log rotation.
Safety: read-only; credentials masked; no silent truncation; defensive bundle extraction; no network or Tenable API keys.
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., "@tenable-patch-management-logs-mcp why are my Tenable VM vulnerabilities not showing up in TPM?"
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.
tenable-patch-management-logs-mcp
An MCP server that does the log digging for Tenable Patch Management (TPM) SaaS. Point it at your tenant's server logs (the Admin Portal zip) and client logs (device folders, collector bundles, or a log requested from a client), then ask questions like "why are my Tenable VM vulnerabilities not showing up in TPM?" or "what changed on the server in the last 24 hours?".
The server does the analysis. Parsing, de-duplication across logs, error-code decoding,
known-issue matching and threshold comparisons all happen in Python; tools return finished,
structured results (verdict, ranked issues with counts and fixes, findings with
reasoning) instead of piles of raw lines for the model to add up.
What it gives you
Tool | Purpose |
| Start here. Sources, devices, server/client/setup logs, time span, TPM versions, version advisories, where to get missing logs, and a flag on anything that does not look like a SaaS tenant's logs. |
| Every warning and error grouped into distinct issues, ranked, de-duplicated across logs, with decoded error codes, root causes, the latest example (file and line) and known-issue fixes. Platform noise is counted separately. |
| Symptom playbooks with a verdict: |
| Literal or regex search across all logs, including multi-line messages and stack traces, with context and paging. |
| Server and client logs merged into one time-ordered sequence, around a moment or over a window. |
| Warnings and errors a problem device has that a healthy device does not. |
| A recent window compared with the days before it: new error signatures, error spikes, restart loops, logs that went quiet. |
| Files with device, role, purpose, size and time span. |
| What a log file records, what an error code means ( |
| Save today's per-day error counts so |
| Register a folder, UNC path, single log file, |
Safety properties worth knowing:
Read-only. Sources are never modified. Every write stays in the data dir:
data/sources.json(sources added withadd_log_source), an extracted copy of each bundle underdata/bundles, anddata/baselines.dbwhen you callrecord_baseline_snapshot- which stores device names, components, normalised signatures, days and counts, never message text.Nothing that looks like a credential is returned. TPM writes the Tenable VM access key into
VulnerabilityManagement.logandadaptiva.errin plain text; 64-hex key material,token:/password=/secretKey=values, bearer tokens and URL passwords are masked to their last 4 characters. Host names, IPs, e-mail addresses, GUIDs and client IDs are kept because troubleshooting needs them.No silent truncation. Each call reads at most 1 GB / 5,000 files (newest first); anything not read is listed in
coveragewith how to narrow the call. Lines in an unrecognised format are never merged into one entry.Bundles are extracted defensively: path-traversal entries are skipped, and extraction stops at 8 GB or 100,000 files.
No network access and no Tenable API keys. TPM has no documented public API; everything comes from its logs.
Related MCP server: Log Analyzer MCP Server
What it reads
Logs | Where they come from |
Server | Admin Portal → gear icon → Logs → Download All Server Logs, then |
Client | Copy |
SaaS only. Self-hosted Adaptiva OneSite servers are out of scope: their server logs name a SQL
Server database and carry ntlmauth.log, and check_log_sources flags a source like that as
unsupported_source instead of analysing it as a tenant. Client logs are the same either way, but
nothing in the knowledge base, the playbooks or the remediation advice assumes a server you run
yourself.
Requirements
Python 3.11+
TPM logs (see above). No Tenable credentials are needed.
Setup
uv sync --extra devOptionally copy .env.example to .env to preconfigure sources:
cp .env.example .envVariable | Meaning |
|
|
| Also use a TPM client installed on this machine ( |
| Where runtime sources, extracted bundles and recorded baselines live. Default |
|
|
| The zone every result is shown in. Defaults to |
| Your own known issues and |
Sources can also be added in conversation with add_log_source, which is usually easier for
support bundles.
Run the server directly (it speaks MCP over stdio, so it will just sit there waiting for a client - that is the correct behaviour):
uv run python -m tenable_patch_management_logs_mcpConnecting a client
Use the absolute path to this folder in the config below.
Claude Desktop
Edit claude_desktop_config.json (%APPDATA%\Claude\claude_desktop_config.json on Windows,
~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"tenable-patch-logs": {
"command": "uv",
"args": [
"--directory",
"C:\\path\\to\\tenable-patch-management-logs-mcp",
"run",
"python",
"-m",
"tenable_patch_management_logs_mcp"
],
"env": {
"TPM_LOG_SOURCES": "saas-server=C:\\cases\\acme\\logs.zip;clients=C:\\cases\\acme\\TPM-Logs-20260917"
}
}
}
}Restart Claude Desktop afterwards. If uv is not on the launcher's PATH, use its absolute
path ((Get-Command uv).Source / which uv) as command. The env block is optional.
Claude Code
claude mcp add tenable-patch-logs -- uv --directory /absolute/path/to/tenable-patch-management-logs-mcp run python -m tenable_patch_management_logs_mcpAdd --env TPM_LOG_SOURCES=... to preconfigure sources, or add the same block as above to a
project-level .mcp.json.
Getting the logs
Server: Admin Portal → gear icon → Logs → Download All Server Logs. The zip contains
adaptiva-server/withadaptiva*.log,adaptiva.err,componentlogs/andworkflowlogs/. Downloading it twice gives two slightly different snapshots; use the newer one.Clients, several at once (Windows):
.\collect\Collect-TPMLogs.ps1 -ComputerName WS-BAD07, WS-GOOD01 -Days 3One folder per device, zipped, plus the Client Validator results from the registry. Include a healthy device so
compare_deviceshas something to compare against.Linux / macOS clients:
sudo ./collect/collect-tpm-logs.sh 3 /tmp(tar.gz, includes theadaptivaclientdjournal).One client from the console: 10.2.973.9 and later can request a log file from a client; the download (
<clientId>_adaptiva.log) can be registered as is.
Example questions to ask once connected
"Add C:\cases\acme\logs.zip as acme-saas and check the log sources."
"Summarise what's wrong on the TPM server over the last 7 days, ignoring noise."
"Why is Tenable VM data not showing up in Patch Management?" (runs
diagnose vm_integration)"Why did patching fail on WS-BAD07 yesterday? Decode the exit codes."
"Build a timeline for WS-BAD07 from 30 minutes before the first installer failure."
"What does WS-BAD07 have that WS-GOOD01 doesn't?"
"Anything new or spiking in the last 24 hours compared with the week before?"
"Which clients is the server retrying messages to?"
"The server logs in UTC and these clients in Singapore time - line them up and show me the timeline."
"Record a baseline snapshot now, so next week's comparison still has this week."
How the analysis works
Parsing. Log layouts were taken from real TPM 10.2.973.9 logs (a SaaS server bundle and a Windows client), plus the standard Windows Installer log:
Layout | Where | Example |
|
|
|
|
|
|
|
|
|
|
|
|
| setup logs, exported journalctl |
|
Multi-line messages (the component suffix can sit on a later line) and stack traces stay attached
to their entry. Rotated files (adaptiva.2.log, Feeds.1.log, .gz) are read as one log.
De-duplication. TPM writes an error to adaptiva.log or a component log and to
adaptiva.err. Events are matched on device, timestamp, level, thread and message, and counted
once (duplicate_lines_in_other_logs reports how many repeats were removed).
Severity. TPM sometimes logs real failures at INFO. The documented Services-sensor issue, for
example, is an INFO line carrying an exception. Entries with a stack trace or a non-zero Adaptiva
Error Code are raised to ERROR and flagged with raised_from_lower_level.
Known issues (tenable_patch_management_logs_mcp/knowledge.py) each carry a confidence:
documented: described by Tenable or Adaptiva, with a source link (for example the 9.2 Services-sensor DLL issue, or the 9.1.965.x client upgrade failure).observed: seen in real TPM 10.2.973.9 logs, explained from the message and surrounding lines (for example Tenable VM keys rejected with "not related to any active containers", periodic feed check failures, CDN publication failures, clients rejected for missing install authentication).generic: standard Java, Windows, SQL or network errors.
Issues with impact: none are platform noise (for example the SQL Server monitoring query that
fails daily on the SaaS PostgreSQL database, or receipt-cleanup warnings). About two thirds of the
warning and error events in the real SaaS bundle were noise. They are counted under noise, not
listed as issues.
Error codes are decoded from context: MSI / Win32 exit codes (1603, 1618, 3010),
HRESULTs including HRESULT_FROM_WIN32 values (0x80070643), Windows Update (0x8024xxxx),
component servicing (0x800Fxxxx), negative decimal HRESULTs and HTTP statuses. Adaptiva's own
Error Code = N values are shown but never decoded as Windows errors.
Anomalies compare a window with the period before it, read from the same logs, so no state
has to build up. Thresholds are constants at the top of tenable_patch_management_logs_mcp/anomaly.py and are echoed in every
result:
Constant | Default | Meaning |
|
| Window rate per day must exceed this multiple of the baseline rate |
|
| Minimum window events before a spike is flagged |
|
| A new ERROR signature with this many events is rated high |
|
| Below this share of the baseline covered by a log, "new" findings are low confidence |
|
| Service starts in the window that count as repeated restarts |
|
| Baseline entries a log needs before going quiet is notable |
Each finding is judged against the log(s) it appears in. A log that only started recently is not reported as a spike just because the device's other logs go back further. Days that have rotated away are filled in from recorded snapshots when there are any (see Baselines that survive rotation); every result says how many days came from the logs and how many from the store.
Time. Relative windows (90m, 24h, 7d, 2w) count back from the newest entry in the
selected logs, not from now, so an old support bundle still gives sensible results. Pass
anchor="now" to measure from this machine's clock instead, or an ISO time to measure from a
moment. Whatever the anchor, any device whose logs end well before it is listed in
devices_behind_anchor with how far behind it is, so a quiet device is never mistaken for a healthy
one. Timestamps are shown as written unless zones are configured (see Time zones);
TPM 10.2 SaaS server logs and Windows client logs were observed to be in UTC.
Fitting it to your environment
Time zones
TPM timestamps carry no zone, so a server logging in UTC and a client logging in Asia/Singapore sit eight hours apart in a merged timeline. Declare what each one writes and everything is converted into a single display zone before any window, timeline or comparison is worked out:
TPM_LOG_TIMEZONES=saas-server=UTC;WS-BAD07=Asia/Singapore;*=UTC
TPM_DISPLAY_TIMEZONE=Asia/SingaporeKeys match a source name first, then a device name, then *. Values are IANA names, fixed offsets
(+08:00), UTC or local (this machine). add_log_source(..., timezone="+08:00") sets it for one
source. Every result says what was converted, and names any device left as written - nothing shifts
silently. Lines that carry their own offset (2026-09-10T08:15:02+0800) are converted from that
offset whatever the configuration says. Without configuration nothing is converted, exactly as
before.
Your own known issues
The built-in catalog cannot know your environment. A knowledge file adds signatures, marks noise you
have already decided to ignore, and decodes the PatchDeploymentResult numbers Tenable does not
document - no code change, picked up on the next call:
{
"known_issues": [
{
"id": "acme_proxy_407",
"title": "Proxy rejects client downloads (ticket OPS-4711)",
"pattern": "407 Proxy Authentication Required",
"impact": "high",
"explanation": "Our proxy asks TPM clients to authenticate, which they cannot do.",
"remediation": "Allow *.adaptiva.cloud through the proxy without inspection."
},
{ "id": "acme_chatter", "title": "Cleanup message we ignore", "pattern": "receipts.*no in-memory cleanup", "impact": "none" }
],
"patch_deployment_results": {
"operation_status": { "3": "Failed" },
"reason_code": { "3010": "Success, reboot required" }
}
}Only id, title and pattern are required; impact: none marks noise. Entries are matched before
the built-in ones, so reusing a built-in id replaces it. Rejected entries are listed with the reason
by check_log_sources - a knowledge file never fails silently. See
examples/known_issues.example.json.
Baselines that survive rotation
detect_log_anomalies compares a window with the days before it in the same logs, so a heavily
rotated log gives it a short baseline (findings then carry low_confidence). Recording a snapshot
keeps the daily counts after the file they came from is gone:
# after each collection, or on a schedule against a live log folder
uv run python -c "from tenable_patch_management_logs_mcp import anomaly, sources; \
print(anomaly.record_baseline_snapshot(sources.SourceRegistry(), since='30d')['message'])"Each device is then asked only for the days its own logs no longer reach, so nothing is counted
twice, and baseline_history in every result says which days came from where. Re-recording a day
keeps the larger count, so running it twice cannot inflate a baseline. Deleting data/baselines.db
deletes the history.
Layout
tenable_patch_management_logs_mcp/
__main__.py python -m tenable_patch_management_logs_mcp
server.py MCP entrypoint and the twelve tool definitions
sources.py Source configuration, bundle extraction, device / role / rotation detection
logformat.py Line layouts, multi-line entries, encodings, time spans
classifier.py Redaction, signatures, severity, known-issue matching, extractions
error_codes.py Win32 / MSI / HRESULT / Windows Update / CBS / HTTP code decoding
knowledge.py Log catalog, known issues, playbooks, version advisories, where to get logs
customknowledge.py Your own known issues and PatchDeploymentResult meanings, loaded from a file
timezones.py Which zone each log is written in, and the zone results are shown in
history.py Recorded daily baselines (SQLite), so anomalies survive log rotation
analysis.py Scoped, bounded scanning; summaries, search, timelines, playbooks, comparisons
anomaly.py Window-versus-baseline findings, thresholds and snapshot recording
examples/
known_issues.example.json Starting point for your own known issues and value mappings
collect/
Collect-TPMLogs.ps1 Windows collector (local or WinRM), one folder per device
collect-tpm-logs.sh Linux / macOS collector
scripts/
smoke_local.py Offline end-to-end run of every tool
live_check.py Read-only run against your configured logs
tests/
sample_logs.py Synthetic, sanitised logs in the real layouts
test_*.pyDependency direction is one-way: server → {analysis, anomaly} → {classifier, sources, history} → {logformat, error_codes, knowledge, customknowledge, timezones}.
Testing
1. Unit tests (no network)
uv run pytest -q232 tests covering every layout, rotation and encoding, bundle extraction guards, device/role
detection, redaction, signatures, severity escalation, known issues, site knowledge files, zone
conversion, window anchoring, recorded baselines, every playbook, anomaly thresholds and the tool
contracts. All fixtures are synthetic (tests/sample_logs.py); no real log
content is stored in the repository.
2. Offline end-to-end
uv run python scripts/smoke_local.pyRegisters a synthetic SaaS server bundle, a two-device client bundle and a single requested client log through the tools, calls every tool, and asserts the results: duplicates counted once, noise set aside, planted secrets redacted, known issues found, bad input returned as a structured error. Exits non-zero on any failure, so it works as a CI gate.
3. Against your logs (read-only)
uv run python scripts/live_check.py 7dUses the same configuration as the server and prints sources, the zone / knowledge / baseline configuration in force, the error summary, the playbooks relevant to the logs you have, and anomalies. On a real 80 MB SaaS bundle a 7-day summary took about 4 seconds, an unfiltered search about 6, and the slowest call measured - a 30-day summary across every file - about 9.
4. Through an MCP client
npx @modelcontextprotocol/inspector uv --directory . run python -m tenable_patch_management_logs_mcpOr connect Claude Desktop / Claude Code (above) and ask one of the example questions.
Known limitations
Formats validated on 10.2.973.9 server logs and a Windows client
adaptiva.log. Linux and macOS clients use the same Java logging and are expected to match, but have not been checked against real samples.check_log_sourceslists any file whose format was not recognised.Client component logs were not in the real samples. The playbooks for
_SDMErrors.log,SoftwareInstaller.logandWindowsPatching.logrely on exit codes, HRESULTs, exceptions and the documentedPatchDeploymentResultline rather than exact message wording. Add the wording you meet to your own knowledge file; no code change is needed.PatchDeploymentResultstatus and reason values are undocumented. They are shown as logged, and failure evidence comes from non-zero reason codes and exceptions. Map the values your console shows underpatch_deployment_resultsand they are decoded alongside them.Time zones have to be declared. TPM writes local timestamps with no zone, so no tool can detect one: set
TPM_LOG_TIMEZONES(ortimezoneonadd_log_source) when logs come from machines in different zones. Anything without a declared zone is shown as written and named in the results rather than guessed at.Recorded baselines start when you start recording.
record_baseline_snapshotcannot recover days that rotated away before its first run, and it keeps counts per day, so a burst inside one day is judged against that whole day.The knowledge base is a starting point. Built-in issues marked
observedcome from one tenant's logs; confirm fixes against current Tenable documentation, and put what your own environment keeps seeing into a knowledge file.
Disclaimer
Not affiliated with, endorsed by, or supported by Tenable, Inc. or Adaptiva. "Tenable", "Tenable Patch Management", "Tenable Vulnerability Management" and "Adaptiva" are trademarks of their respective owners. This project reads log files you already have; it is an independent troubleshooting aid, not a Tenable product, and its findings should be confirmed against current vendor documentation before you act on them.
Sources
Tenable Patch Management docs: client logs, server logs, client install logs, Client Validator, SaaS vs self-hosted, 2025 and 2026 release notes.
Adaptiva (the TPM platform): logging configuration, Services sensor issue (9.2), client upgrade issue (9.1.965), 10.0.971 known issues, feature updates.
Available Tools
11 toolsadd_log_sourceA
Register TPM logs to analyse; remembered between sessions.
Nothing at path is modified. Bundles are extracted once into the server's data
folder.
Args: name: Short label, e.g. "acme-saas-server" or "clients-0917" (letters, digits, '.', '_', '-'). path: A folder (local or UNC, e.g. \tpm01\c$\Program Files\Tenable\PatchServer\logs), a single log file (e.g. 13_adaptiva.log requested from a client), or a .zip / .tar.gz bundle such as the Admin Portal "Download All Server Logs" zip. deployment: "saas", "onprem" or "auto" (infer from the logs).
Returns: The registered source, the devices and log counts found, and the next step.
Inputs: name (required), path (required), deployment. Returns: object
build_timelineARead-onlyIdempotent
Merge all logs into one chronological sequence - what happened before and after.
Useful for "what led up to this failure": server and client logs are interleaved
by timestamp, duplicates across logs removed, and consecutive repeats collapsed
(repeats). When there are more rows than limit, WARN and above are always
kept and the rest are sampled evenly (sampled).
Args:
around: Centre the window on this time (ISO, or relative like 2h).
minutes_before: Minutes before around (default 15).
minutes_after: Minutes after around (default 15).
since: Window start when not using around. Default: the last 60 minutes of logs.
until: Window end when not using around.
source: Source name; omit for all sources.
device: Only this device.
role: "server", "client" or "setup".
files: Log names or globs.
min_severity: INFO (default), WARN, ERROR; DEBUG to include debug lines.
keyword: Only entries containing this text.
include_noise: Include known platform noise.
collapse_repeats: Merge consecutive identical rows (default true).
limit: Rows to return (10-1000).
Returns:
rows in time order, each with time, device, severity, log, component, message
and at (file:line).
Inputs: role, files, limit, since, +10 more. Returns: object
check_log_sourcesARead-onlyIdempotent
Show which TPM logs are available, and whether they can be read and parsed.
Run this first. For every source it reports the devices found (server / client / setup logs), the time span each device's logs cover, whether the deployment looks like SaaS or on-prem (with the evidence), TPM versions seen in service start lines, version advisories, and any files whose line format was not recognised. It also says where to get missing logs (for example the Admin Portal zip for SaaS server logs).
Returns:
A dict with ok, a message, per-source details, guidance for missing
logs, and the active configuration.
Inputs: no named parameters. Returns: object
compare_devicesARead-onlyIdempotent
Show warnings and errors on a problem device that a healthy device does not have.
Args: healthy_device: A device that patches correctly. problem_device: The device with the problem. since: Window start (ISO or relative). Default 7d. until: Window end. source: Source name; omit for all sources. min_severity: WARN (default) or ERROR. include_noise: Include known platform noise. top: Issues per list (1-100).
Returns:
only_on_problem_device and more_frequent_on_problem_device, with counts.
Inputs: healthy_device (required), problem_device (required), top, since, +4 more. Returns: object
detect_log_anomaliesARead-onlyIdempotent
Compare a recent window with the days before it, in the same logs.
Flags error signatures never seen in the baseline, errors whose rate jumped above the spike threshold, services that started repeatedly, and logs that stopped writing. Each finding has evidence, the threshold crossed and a reasoning sentence. Findings are marked low confidence when the logs do not reach far enough back.
Args: since: Window start (ISO or relative like 24h, counted back from the newest entry). until: Window end. Default: newest entry. baseline_days: Days before the window to compare against (1-90, default 7). source: Source name; omit for all sources. device: Only this device. role: "server", "client" or "setup".
Returns:
Severity-ordered findings, counts by type and severity, baseline coverage and
the active thresholds.
Inputs: role, since, until, device, +2 more. Returns: object
diagnoseARead-onlyIdempotent
Run a symptom playbook: read the right logs and return a verdict with evidence.
Symptoms:
patch_install_failed - deployment results, installer exit codes (decoded), MSI failures
content_download - content / peer-to-peer / CDN download problems on clients
client_connectivity - client transport errors, server retries per client ID, registrations rejected for missing install authentication
vm_integration - Tenable VM / Security Center access settings, API key failures, vulnerability import runs
feeds - periodic feed checks, last success, failure root causes
content_publication - content uploads to the CDN that failed
service_health - service starts with versions, restart loops, crashes, out-of-memory
database - SQL errors, SQL Server authentication, deadlocks
client_upgrade - upgrade problems and versions seen over time
feature_update_readiness - free disk space vs the 50 GB requirement, NOT INSTALLED scans
Args: symptom: One of the symptom ids above. since: Window start (ISO or relative like 24h). Default 7d. until: Window end. source: Source name; omit for all sources. device: Only this device.
Returns:
verdict, findings (known issues with remediation), other related errors,
playbook-specific details, missing_logs with how to get them, and advice.
Inputs: symptom (required), since, until, device, +1 more. Returns: object
explainARead-onlyIdempotent
Explain a TPM log file, an error code, a symptom or a known issue.
Args: topic: A log name ("_SDMErrors.log", "13_adaptiva.log"), an error code ("0x80070643", "-2147467259", "1603", "http 407"), a symptom id ("patch_install_failed") or a known issue id. Omit for the index.
Returns: What the topic is, where it comes from, and related symptoms or fixes.
Inputs: topic. Returns: object
list_log_filesARead-onlyIdempotent
List log files with device, role, purpose, size and the time span they cover.
Args: source: Source name; omit for all sources. device: Device name (e.g. "server", "client-13", "WS-BAD07"). role: "server", "client", "setup" or "unknown". name: Log name or glob, e.g. "adaptiva.log", "_SDMErrors.log", "content*.log". Rotated files (adaptiva.2.log) match their base name. limit: Maximum rows (1-1000).
Returns:
files (one row per file) plus counts by device, role and log name.
Inputs: name, role, limit, device, +1 more. Returns: object
remove_log_sourceA
Unregister a source added with add_log_source.
The original folder or bundle is never touched; only the extracted copy of a bundle kept by this server is deleted. Sources from TPM_LOG_SOURCES or auto-discovery are configured outside the server and cannot be removed here.
Args: name: The source name.
Returns: What was removed.
Inputs: name (required). Returns: object
search_logsARead-onlyIdempotent
Search every log, including multi-line messages and stack traces.
Matches are whole entries (not single lines), de-duplicated across logs that repeat the same event, sorted by time, and redacted.
Args: pattern: Text to find (literal unless regex=true), e.g. a KB number, patch ID, client ID, content ID ("Policy_104117") or error text. regex: Treat pattern as a regular expression. case_sensitive: Default false. since: Window start (ISO or relative like 24h); default all history. until: Window end. source: Source name; omit for all sources. device: Only this device. role: "server", "client" or "setup". files: Log names or globs to search. component: Exact component name, e.g. "TenableClient". min_severity: Only entries at or above INFO/WARN/ERROR. context: Entries of context before and after each match from the same file (0-5). limit: Matches to return (1-200). offset: Skip this many matches (paging; see next_offset). order: "newest" (default) or "oldest" first.
Returns:
total_matches, matches (with file, line, component, thread, codes) and paging.
Inputs: pattern (required), role, files, limit, +11 more. Returns: object
summarize_errorsARead-onlyIdempotent
Group every warning and error into distinct issues, ranked, with known fixes.
The best first call for "what is wrong?". Repeats are collapsed into signatures
(IDs, GUIDs, IPs, numbers and paths normalised); the same event written to several
logs is counted once. Each issue has counts, first/last seen, devices, decoded error
codes, root causes from stack traces, the latest example with file and line, and -
when recognised - a known-issue explanation and remediation. INFO lines that carry
stack traces are raised to ERROR (flagged). Known platform noise is counted under
noise instead of cluttering issues.
Args:
since: Window start: ISO time (2026-09-17T08:00) or relative (90m, 24h, 7d, 2w)
counted back from the newest log entry. Default 7d.
until: Window end (same formats). Default: newest entry.
source: Source name; omit for all sources.
device: Only this device.
role: "server", "client" or "setup".
files: Log names or globs, e.g. ["VulnerabilityManagement.log"].
min_severity: WARN (default), ERROR or FATAL.
include_noise: Include known platform noise in issues.
top: Issues to return (1-100).
Returns:
totals, ranked issues, noise, top components/logs and coverage.
Inputs: top, role, files, since, +5 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool has a clearly distinct responsibility: source lifecycle, listing, searching, timeline building, error summarization, symptom diagnosis, device comparison, and anomaly detection. Even the analysis tools are well-separated by their inputs and outputs, so an agent is unlikely to confuse them.
The tool names mostly follow a predictable verb_noun pattern in snake_case, such as add_log_source, list_log_files, and summarize_errors. Minor deviations exist: 'explain' and 'diagnose' are bare verbs without an object, and source appears as both singular and plural, but the overall convention remains readable.
With 11 tools, the server is well-scoped for a log-analysis domain. The number feels justified: source management, log discovery, search, timeline, error analysis, diagnosis, comparison, and anomaly detection all earn their place without redundancy.
The tool surface covers the full workflow from registering log sources, checking their health, listing and searching files, building timelines, summarizing errors, and running symptom-specific diagnoses. There are no obvious dead ends; even advanced needs like comparative and baseline anomaly analysis are addressed.
Maintenance
Related MCP Connectors
Search log events, investigate anomalies, and manage cases in your Knowledge Grid tenant.
Read LogBrew errors, slow traces, logs, and product analytics, and triage issues with consent.
Triage failing GitHub Actions jobs and see what self-heal repaired, in natural language.
CVE intelligence: exploitation (KEV/EPSS), detection coverage, fixed versions, CPE configurations.
Related MCP Servers
- FlicenseBqualityCmaintenanceEnables AI-assisted analysis of log files through advanced searching, filtering, and test execution capabilities. Supports time-based queries, pattern matching, test summarization, and code coverage reporting directly within compatible MCP clients.12-
- FlicenseNot gradedqualityDmaintenanceEnables querying and analyzing logs from multiple remote Unix hosts via the Log Collector API, with tools for search, error detection, and summary generation.-
- AlicenseAqualityDmaintenanceEnables querying and analyzing Tenable Vulnerability Management audit logs, including activity summaries, API key usage, and anomaly detection through MCP tools.6MIT
- AlicenseNot gradedqualityBmaintenanceEnables log analysis through MCP tools for searching logs, retrieving error contexts, and summarizing incidents with self-verified root-cause hypotheses.11 npmMIT