Standalone MCP server exposing GitHub read tools (recent commits, commit diff, pull request lookup) and server log access tools for incident investigation and log analysis via SSH
LogBridge-MCP demonstrates solid tool naming and comprehensive descriptions across 12 tools. All tools follow verb_noun conventions (getRecentCommits, searchLogs, checkServiceLiveness). Descriptions are detailed (100-300 chars) and include WHEN to use each tool. However, input schemas are not visible in the provided source code, only parameter names and descriptions appear in the @ToolParam annotations. No explicit JSON Schema definitions, type constraints, or enums are shown. Output schemas are completely undocumented. Error handling guidance is absent. The server exposes SSH-based log access with command allowlisting (runLogCommand), which is security-conscious, but no validation error messages or recovery guidance are visible.
Accurately check whether a registered service is actually alive, without relying on process-name matching. Reports which process (if any) currently holds the service's log file open (the process actually writing it, found via 'fuser') plus the log file's last-modified time and the server's current time, so recency can be judged directly. This fixes the false 'not running' flags that name-based pgrep checks produce for services launched as generic /app/app.jar processes (their process name never matches the service name). Read-only. Prefer this over getHostHealth's process check when you need a real per-service up/down answer.
Get the file-level diff for a specific commit SHA. Use this after finding a suspicious commit via getRecentCommits, to see exactly what changed.
Check basic OS-level health of a registered service's HOST (shared across services on the same box): CPU/memory load and disk usage. The trailing process check is a coarse, name-based match (pgrep) and is NOT reliable for per-service liveness on a shared multi-service host — many services run under generic /app/app.jar-style launch commands with no service name in the process list, which produces false 'not running' flags. Use checkServiceLiveness for an accurate per-service liveness check instead. Read-only.
Get the first and last log timestamp plus total line count for a service's live log file — useful to know what time range is actually covered before running other queries. Pair with listLogArchives to see how much history exists beyond this file.
Input schemas not visible in source code. Only @ToolParam annotations with descriptions are shown; no JSON Schema type definitions, constraints, or enums are declared. Cannot verify parameter types, ranges, or validation rules.
Output schemas completely undocumented. Tools return Map<String, Object> or List<Map<String, Object>> with no documentation of field names, types, or structure. LLMs cannot plan downstream calls or extract specific fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Look up a specific pull request by number, including its title, description, merge status, and merged_at timestamp. Use this to correlate a deployment with the PR that caused it.
Get the most recent commits on a GitHub repository's default branch. Use this to check what changed recently around the time an incident started.
Fetch the last N lines of a registered service's log file. Use this to check what a service was logging around the time an incident started.
List all log files available for a registered service, including the live log, rotated logs, and logs stored in archive directories. Use this before searching historical logs when the archive layout is unknown.
List all services currently registered for log access, so the model knows what it can query without guessing service names.
List all log files discovered for a registered service, including the live log, rotated logs, and archived logs. Files are returned from newest to oldest based on modification time.
Run a read-only diagnostic command against a registered service's server, from a fixed allowlist of binaries (tail, head, cat, grep/egrep/fgrep/zgrep, zcat, gunzip, wc, sort, uniq, echo, uptime, free, df, pgrep, journalctl, ls, stat, fuser, date, find). No chaining ('; && ||'), no command substitution, no file redirection, no backgrounding. Use this when a plain file tail isn't enough.
Search a service's log file for a pattern (case-insensitive) within an optional date prefix (e.g. '2026-09-01'). Returns matching lines, most recent first, capped at maxResults. Only searches the live log file — use searchArchivedLogs to include rotated/older logs.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. E.g., runLogCommand allows only a fixed allowlist of binaries, but no error message is shown for invalid commands.
Numeric parameters lack bounds. 'limit' in getRecentCommits and 'lines' in getRecentLogs have no documented min/max. LLMs could pass absurd values (limit=999999, lines=1000000) causing timeouts or memory exhaustion.
listRegisteredServices has empty input schema (no parameters) but description is generic ('List all services...'). Does not explain what structure is returned or how to use the result to call other tools.