Gives Claude direct access to systemd journal logs for incident response and forensic analysis. Exposes tools to query journal entries with natural language datetime filtering (like "2 hours ago" or "yesterday at 3pm"), filter by systemd unit or syslog identifier, and search message content. Also provides resources to list all units and identifiers across time ranges, plus fetch the first entry datetime. Built on systemd-python and supports stdio, SSE, or HTTP transports. Reach for this when you need to troubleshoot Linux systems, correlate service failures, or hunt through logs without leaving your Claude conversation. Requires systemd-journal group access to run as non-root.
An MCP server for accessing systemd journal logs.
# Install dependencies
uv sync
Run as non-root: Give the user systemd-journal group access usermod -aG systemd-journal $USER
Run the server with:
uv run server.py [OPTIONS]
--transport: Transport protocol to use (stdio, sse, or streamable-http). Default: stdio--port: Port to listen on for HTTP transport (ignored for stdio transport). Default: 3002--log-level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL). Default: INFORun with stdio transport (default, for MCP clients that communicate via stdin/stdout):
python server.py
Run with HTTP transport on custom port:
python server.py --transport streamable-http --port 8080
Run with SSE transport:
python server.py --transport sse --port 3000
Run with debug logging:
python server.py --log-level DEBUG
The server provides the following MCP resources and tools:
journal://units: List unique systemd units from journal logs (all accessible time)journal://syslog-identifiers: List unique syslog identifiers from journal logs (all accessible time)journal://first-entry-datetime: Get the datetime of the first entry in the journaljournal://units/{since}/{until}: List unique systemd units within a specified time rangejournal://syslog-identifiers/{since}/{until}: List unique syslog identifiers within a specified time rangeget_journal_entries: Get journal entries with datetime filtering
since (optional), until (optional), unit (optional), identifier (optional), message_contains (optional), limit (default: 100)since="2 hours ago", message_contains="error"get_recent_logs: Get recent journal logs from the last N minutes
minutes (default: 60), unit (optional), limit (default: 50)The server uses natural language datetime parsing via the dateparser library. Supported formats include:
All times are interpreted as UTC and returned in human-readable format: "YYYY-MM-DD HH:MM:SS UTC"
This project uses:
journald-mcp-server/
├── journald_mcp_server/ # Main package
│ ├── __init__.py
│ ├── server.py # MCP server implementation
│ └── datetime_utils.py # Datetime parsing and formatting utilities
├── tests/ # Test suite
│ ├── __init__.py
│ └── test_server.py
├── server.py # Entry point wrapper
├── pyproject.toml
└── README.md
python -m pytest tests/
io.github.infoinlet-marketplace/mcp-observability
betterdb-inc/monitor
com.mcparmory/datadog
thotischner/observability-mcp
io.github.tantiope/datadog-mcp
io.github.us-all/datadog