A Model Context Protocol server for analyzing Linux SOS reports
SosAlot demonstrates solid definition quality with clear naming, comprehensive descriptions, and well-structured schemas. All 7 tools follow verb-noun conventions (query_, list_, find_, read_, search_, get_). Descriptions are substantial (100-400+ chars) and explain WHAT the tool does, WHEN to use it, and dependencies (e.g., 'Use this tool FIRST to find available SOS reports'). All parameters have types and descriptions. However, there are gaps in output schema documentation, minimal error guidance, and no tool annotations (readOnlyHint). The tools are read-only operations on filesystem/diagnostic data with good security posture (path validation), but lack structured error recovery patterns and per-tool risk classification.
Find files by name pattern within a single directory (non-recursive). Searches ONLY in the specified directory, NOT in subdirectories. Pattern matching is CASE-INSENSITIVE and matches against FILENAME only (not full path). Supports pagination for large directories. Args: report: Report ID from query_sos_reports (e.g., "centos9-original_20251209_1430") pattern: Glob pattern to match filenames (e.g., "*swap*", "*.log", "*hostname*", "ip_*") search_path: Path within report to search (default: search report root directory) offset: Skip this many matching items (for pagination, default 0) limit: Return at most this many items (default 50, max 100) max_search: Stop searching after finding this many total matches (default 500, max 2000) Returns: Dictionary with search results and pagination info Search Behavior: - NON-RECURSIVE: Searches only the specified directory - CASE-INSENSITIVE: "Swap" matches "swap", "SWAP", "SwAp" - FILENAME ONLY: Pattern matches against filename, not full path - PAGINATED: Use offset/limit to browse large directories Common patterns: - "*swap*" - Find files containing "swap" in filename (case-insensitive) - "*hostname*" - Find hostname-related files - "*.conf" - Find configuration files - "ip_*" - Find files starting with "ip_" Examples: - find_files_by_name("report1", "*.conf", "etc", limit=20) → First 20 .conf files in etc/ directory only - find_files_by_name("report1", "*SWAP*", "sos_commands/memory") → Find swapon, swapoff files in memory directory only Security: Globstar (**) patterns are not allowed.
Find files by name pattern recursively through all subdirectories. Searches RECURSIVELY through all subdirectories from the search_path. Pattern matching is CASE-INSENSITIVE and matches against FILENAME only (not full path). Supports pagination for very large result sets. Args: report: Report ID from query_sos_reports (e.g., "centos9-original_20251209_1430") pattern: Glob pattern to match filenames (e.g., "*swap*", "*.log", "*hostname*") search_path: Path within report to search recursively (default: search report root) offset: Skip this many matching items (for pagination, default 0) limit: Return at most this many items (default 50, max 100) max_search: Stop searching after finding this many total matches (default 500, max 2000) Returns: Dictionary with search results and pagination info Search Behavior: - RECURSIVE: Searches all subdirectories from search_path - CASE-INSENSITIVE: "Swap" matches "swap", "SWAP", "SwAp" - FILENAME ONLY: Pattern matches against filename, not full path - PAGINATED: Use offset/limit to browse very large result sets Common patterns: - "*swap*" - Find all files containing "swap" in filename (case-insensitive) - "*hostname*" - Find all hostname-related files - "*.log" - Find all log files throughout report - "*.conf" - Find all configuration files Examples: - find_files_by_name_recursive("report1", "*.conf") → Find ALL .conf files in entire report - find_files_by_name_recursive("report1", "*error*", "var/log") → Find all error files in var/log and all subdirectories Security: Globstar (**) patterns are not allowed.
Output schema documentation is missing or incomplete. Tools document return fields in narrative descriptions (e.g., 'Dictionary with items, total_items, pagination'), but lack formal JSON Schema for responses. Agents cannot infer downstream field types without seeing actual response structures.
No tool annotations present. All 7 tools are read-only operations (operate on archived SOS reports, no side effects), but lack readOnlyHint annotations. This forces LLMs to re-read descriptions to infer safety/idempotency rather than machine-readable metadata.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Get information source guidance for a specific domain in a SOS report. This tool provides intelligent guidance on where to find specific types of information within SOS reports, returning only files that actually exist in the specified report. Args: domain: Information domain to get guidance for. Must be one of: [DOMAINS_PLACEHOLDER] report: SOS report ID to search within (e.g., "centos9-original_20251209_2142"). Use query_sos_reports() tool first to get available report IDs. Returns: JSON string with structured guidance showing actual existing files for the specified domain in the given report. Only returns files that exist - no placeholders or missing file indicators.
List contents of a directory within a SOS report with pagination. Args: report: Report ID from query_sos_reports (e.g., "centos9-original_20251209_1430") path: Path within the report (e.g., "etc", "var/log", "proc"). Use empty string for root. offset: Skip this many matching items (default: 0) limit: Return at most this many items (default: 50) max_search: Stop searching after finding this many total matches (default: 500) Returns: Dictionary with: - 'items': List of directory contents with type info - 'total_items': Total number of items found - 'pagination': Pagination information Note: Directories end with '/' in the name field. Common useful paths: - "etc" - Configuration files (hostname, os-release, etc.) - "var/log" - Log files - "sos_commands" - Command outputs organized by category - "proc" - Process and system information
Query and list available SOS reports with their metadata. Use this tool FIRST to find available SOS reports. Each report has a report_id that you'll use with other tools. SOS reports contain Linux system diagnostic data. Args: hostname: Filter by hostname (partial match, case-insensitive) serial_number: Filter by hardware serial number (exact match) date_contains: Filter by creation date (partial match) Returns: Dictionary with 'reports' list containing report metadata including: - report_id: Simplified ID for use with other tools (e.g., "centos9-original_20251209_1430") - report_name: Original directory name - hostname: Extracted hostname from the report - serial_number: Hardware serial number - creation_date: When the report was created Example: First call query_sos_reports() to get report_id, then use that with other tools like read_file(report="centos9-original_20251209_1430", path="etc/hostname")
Read and return the contents of a file within a SOS report. Args: report: Report ID from query_sos_reports (e.g., "centos9-original_20251209_1430") path: Path to file within report (e.g., "etc/hostname", "var/log/messages") offset: Character offset to start reading from (default: 0) limit: Maximum number of characters to return (default: 10000, max: 100000) Returns: Dictionary with file contents and pagination/truncation info: - 'content': File content (truncated if necessary) - 'truncated': Whether content was truncated - 'offset': Starting character position - 'returned': Number of characters returned - 'total_size': Total file size in characters - 'next_offset': Offset for next chunk if truncated, null if EOF Common files to read: - "etc/hostname" - System hostname - "etc/os-release" - OS version information - "etc/fstab" - Filesystem mount table - "var/log/messages" - System messages log - "var/log/secure" - Authentication log - "sos_commands/networking/ip_addr" - IP address information - "sos_commands/system/ps" - Running processes For large files, use offset and limit to paginate through content.
Search for a substring within a file and return matching lines with context. Args: report: Report ID from query_sos_reports (e.g., "centos9-original_20251209_1430") path: Path to file within report to search (e.g., "var/log/messages") substring: Text to search for (case-sensitive by default) case_insensitive: If True, search is case-insensitive (default: False) lines_before: Number of lines to include before each match (default: 0) lines_after: Number of lines to include after each match (default: 0) offset: Skip this many matching lines (for pagination, default: 0) limit: Return at most this many matching contexts (default: 50) Returns: Dictionary with: - 'matches': List of matching lines with context - 'total_matches': Total number of matches found - 'pagination': Pagination information Common searches: - search_file(report="r1", path="var/log/messages", substring="error", lines_after=2) → Find error lines with 2 lines of context after - search_file(report="r1", path="var/log/secure", substring="Failed", case_insensitive=True) → Case-insensitive search for login failures - search_file(report="r1", path="etc/passwd", substring="root") → Find lines containing "root" in passwd file For large files with many matches, use offset/limit to paginate.
Error responses lack recovery guidance. Validation errors (e.g., 'Globstar (**) patterns are not supported') are present, but most error paths return minimal context. No guidance on 'what to do next', e.g., if a report_id is invalid, suggest calling query_sos_reports() first.
get_info_sources_for_domain parameter 'domain' lacks an enum constraint. Description contains placeholder '[DOMAINS_PLACEHOLDER]' which is not expanded, leaving LLMs unable to see valid domain options without trial-and-error.
Pagination implementation inconsistency. Some tools use 'offset + limit' (list_dir, find_files_by_name), others mention pagination in return but lack clear 'has_more' or 'next_cursor' fields in documented output (read_file returns 'next_offset' but others less explicit).