{"id":135211,"date":"2025-12-10T08:00:00","date_gmt":"2025-12-10T08:00:00","guid":{"rendered":"https:\/\/fedoramagazine.org\/?p=42773"},"modified":"2025-12-10T08:00:00","modified_gmt":"2025-12-10T08:00:00","slug":"talk-to-your-fedora-system-with-the-linux-mcp-server","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2025\/12\/10\/talk-to-your-fedora-system-with-the-linux-mcp-server\/","title":{"rendered":"Talk to your Fedora system with the linux-mcp-server!"},"content":{"rendered":"<p><img decoding=\"async\" width=\"300\" height=\"127\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"Talk to your Fedora system with the Linux MCP Server!\" style=\"margin: auto;margin-bottom: 5px;max-width: 100%\" loading=\"lazy\" \/><\/p>\n<p>Generative AI systems are changing the way people interact with computers. MCP (model context protocol) is a way that enables LLMs to run commands and use tools to enable live, conversational interaction with systems. Using the new <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\">linux-mcp-server<\/a>, let&#8217;s walk through how you can talk with your Fedora system for understanding your system and getting help troubleshooting it!<\/p>\n<p> <span id=\"more-42773\"><\/span> <\/p>\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n<p>&nbsp;Large language models (LLMs) can be an invaluable tool when investigating an issue on a Linux system. However, this can involve a lot of copy\/pasting of information from the Linux terminal into a web based interface to an LLM model.&nbsp;&nbsp;<\/p>\n<p>The model context protocol (MCP) acts as a bridge, enabling LLMs to interact with external tools and data sources.&nbsp; The linux-mcp-server utilizes this protocol to give LLMs the ability to interact with a Fedora Linux system.&nbsp; Instead of you manually copying and pasting terminal output, the linux-mcp-server enables the LLM to directly query system information and log entries.&nbsp;&nbsp;<\/p>\n<p>By enabling an LLM direct access to system information and logs, it is transformed into an active part of the investigation process when troubleshooting an issue.&nbsp; It empowers an LLM to directly query the system state, allowing it to help identify performance bottlenecks, and identify important log entries that might be missed by a manual review.&nbsp;&nbsp;<\/p>\n<h2 class=\"wp-block-heading\">What is the model context protocol (MCP)?<\/h2>\n<p><a href=\"https:\/\/www.anthropic.com\/news\/model-context-protocol\" target=\"_blank\" rel=\"noreferrer noopener\">Anthropic introduced MCP in November 2024<\/a> as an open standard for LLM tool use. This provides a way for LLMs to interact with outside systems and data sources.&nbsp;&nbsp;<\/p>\n<p>Prior to MCP,&nbsp; there wasn\u2019t as strong a standard and ecosystem for LLM systems to call tools. LLMs were thus frequently limited to have only the information contained in their training. They were isolated from the outside world.&nbsp; For example, if you asked an LLM \u201c<em>what is the weather going to be next week<\/em>\u201d, the LLM would respond with a message indicating that it doesn\u2019t know what the weather will be, as it doesn\u2019t have access to that information. MCP helps solve this problem by enabling a standardized way for an LLM to access an outside data source, such as the weather forecast.&nbsp;&nbsp;&nbsp;<\/p>\n<p>At a high level, users can use an AI agent application, such as <a href=\"https:\/\/github.com\/block\/goose\">Goose<\/a> (open source), or Claude Desktop, and specify which MCP servers they would like to use.&nbsp; The AI agent application informs the LLM that there are tools available via these MCP servers that can be used to help answer the requests from the user. The LLM model can then decide when to invoke these tools.&nbsp;&nbsp;<\/p>\n<p>MCP is an open standard. You have the flexibility to use MCP servers, such as <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\">linux-mcp-server<\/a>, with either open source-licensed LLM models, or hosted proprietary LLM models.&nbsp;<\/p>\n<h2 class=\"wp-block-heading\">What is the linux-mcp-server?<\/h2>\n<p>The <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\" target=\"_blank\" rel=\"noreferrer noopener\">linux-mcp-server<\/a> is a project started by Red Hat\u2019s RHEL Engineering team.&nbsp; It provides a number of tools that enable an LLM to query information from a Linux system, such as system info, service information and logs, process information, journald and other logs, network information, and storage and disk information.&nbsp; For a full list of the tools provided, refer to the <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\" target=\"_blank\" rel=\"noreferrer noopener\">project&#8217;s Github page<\/a>.&nbsp;&nbsp;<\/p>\n<p>These tools, provided by <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\">linux-mcp-server<\/a>, are focused on providing the LLM access to read-only information.&nbsp; In the future, we\u2019ll be exploring expanding past these read-only use cases.&nbsp;&nbsp;<\/p>\n<p>The linux-mcp-server can be used to interact with the local Fedora Linux system that it is running on. It can also be used to interact with remote Fedora Linux systems over SSH.&nbsp; For example, if you have SSH key authentication setup with the remote systems, you could make a request to your AI agent application such as \u201c<em>Determine the current memory usage on the fedora1.example.com, fedora2.example.com, and fedora3.example.com servers<\/em>\u201d.&nbsp;&nbsp;<\/p>\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n<p>The main components needed are an AI agent application, access to LLM model inference, and the linux-mcp-server.&nbsp; <\/p>\n<p>There are a number of options for the AI agent application, both open source and proprietary.&nbsp; An example of an open source AI agent is <a href=\"https:\/\/github.com\/block\/goose\" target=\"_blank\" rel=\"noreferrer noopener\">Goose<\/a>, which provides an RPM that can be installed on Fedora.<\/p>\n<p>There are several LLM model inference options, ranging from locally hosted open source models, to proprietary hosted LLM models.&nbsp; If hosting a model locally, you generally need to have GPU\/accelerator hardware available.&nbsp;&nbsp;Open source tools that can be used to locally host LLM models include <a href=\"https:\/\/github.com\/containers\/ramalama\" target=\"_blank\" rel=\"noreferrer noopener\">RamaLama<\/a>, <a href=\"https:\/\/github.com\/ggml-org\/llama.cpp\" target=\"_blank\" rel=\"noreferrer noopener\">llama.cpp<\/a>, and <a href=\"https:\/\/github.com\/ollama\/ollama\" target=\"_blank\" rel=\"noreferrer noopener\">Ollama<\/a>. There are a number of open source LLM models capable of tool calling. These include models such as <a href=\"https:\/\/huggingface.co\/openai\/gpt-oss-20b\">gpt-oss-20b<\/a> and <a href=\"https:\/\/huggingface.co\/ibm-granite\/granite-4.0-h-small\">Granite 4 small<\/a>.<\/p>\n<p>Once you&#8217;ve installed your preferred AI agent application, the next step is to install the linux-mcp-server and configure your AI agent application to use it. The <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\" target=\"_blank\" rel=\"noreferrer noopener\">linux-mcp-server Github page<\/a> includes installation instructions, and configuration details for Goose and Claude Desktop.<\/p>\n<h2 class=\"wp-block-heading\">Use cases for linux-mcp-server<\/h2>\n<div id=\"warning\" style=\"border: 5px solid black;padding: 1em;line-height: 140%;background-color: #efefef;font-family: 'Lato', sans-serif\">\n<h3 style=\"margin-top: 0;font-family: 'Lato', sans-serif\"><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-1.png\" alt=\"\u26a0\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> NOTE<\/h3>\n<p>The example scenarios below include LLM generated output. The output is presented here as it was generated by the AI systems cited so you can assess the quality of the output they are capable of, particularly in a non-cloud, self-hosted scenario.<\/p>\n<p>The sample LLM output provided here is not intended to be run by readers without the same level of review we recommend anyone perform on AI generated content prior to use on their systems.<\/p>\n<\/div>\n<h3 class=\"wp-block-heading\">Dear Fedora, why are you so slow today?<\/h3>\n<p>Has this happened to you? Time to hop on a call and give a demo. You\u2019re pumped. It\u2019s your go-time aaaaand\u2026 your system starts lagging. Folks on the call say your video is choppy or they can\u2019t understand you. OH NO.<\/p>\n<p>You\u2019ve got to assess what\u2019s up, quickly. Run `top`, check `dmesg`, check your network connection (read the man page for `netstat` because you can\u2019t remember the flag you want), check `journalctl`, cross-reference what you\u2019re seeing, then start killing processes, restarting services, reloading kernel modules willy-nilly based on hastily-crafted theories, see if it improves\u2026&nbsp;<\/p>\n<p>This is a case where you could actually ask the system to tell you why it\u2019s slow and give it the ability to do the analysis via linux-mcp-tools. The LLM you connect with won\u2019t just run the commands through the MCP server; it will understand what the numbers it gets means in context and be able to explain in human terms.<\/p>\n<p>So let\u2019s start working with a relatively new laptop. It\u2019s a Thinkpad T14S with the AMD Ryzen<img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-2.png\" alt=\"\u2122\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> AI Pro 7&nbsp; ( Ryzen<img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-2.png\" alt=\"\u2122\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> AI 360 chip.) Recently one of the wifi networks it must connect to regularly was upgraded. It now has&nbsp; issues with the&nbsp; network connection stability. So let\u2019s talk to Goose + gpt-oss:20b +&nbsp; linux-mcp-server about it. Here\u2019s the initial prompt I used:<\/p>\n<pre class=\"wp-block-preformatted\">My Wifi doesn't work very well. It cuts out after a few minutes. Help me fix it. Can you find the error messages in the system logs and diagnose the problem?<\/pre>\n<p>It responded with the following:<\/p>\n<pre class=\"wp-block-preformatted\">I'll help you diagnose your WiFi connectivity issues by examining the system logs for error messages related to your network interfaces and wireless connectivity. Let me start by gathering information about your system and checking the relevant logs.<\/pre>\n<div style=\"line-height: 140%;padding: 2% 2.5%;background: #eee;border: 1px solid #ddd;margin-bottom: 1.5em\">\n<h3 style=\"margin-top: 0;font-family: Lato, sans-serif\"><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> LLM output <img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/><\/h3>\n<p style=\"font-family: Menlo, Monaco, monospace\">\nI&#8217;ll help you diagnose your WiFi connectivity issues by examining the system logs for error messages related to your network interfaces and wireless connectivity. Let me start by gathering information about your system and checking the relevant logs.\n<\/p>\n<\/div>\n<p>It then made a series of tool calls, including Get System Information, Get Network Interfaces, Get Journal Logs, Get Hardware Information, Get Service Status service_name:NetworkManager, Get Service Status service_name:wpa_supplicant, Read Log File. The result was this analysis, which is the actual problem I was hoping it could find!<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<div class=\"wp-block-group\">\n<div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div style=\"line-height: 140%;padding: 2% 2.5%;background: #eee;border: 1px solid #ddd\">\n<h3 style=\"margin-top: 0;font-family: Lato, sans-serif\"><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> LLM output <img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/><\/h3>\n<p> <title>Problem Summary \u2013 AT\u2011H12K PCI Wi\u2011Fi Issue<\/title><br \/>\n .wp-block-group table, .wp-block-group tr, .wp-block-group td, .wp-block-group pre { max-width: 100% !important;<br \/>\n} .wp-block-group td div.text { max-width: 200px !important;<br \/>\n}<\/p>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-4.png\" alt=\"\u26a1\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/>\u202fProblem Summary<\/h2>\n<p>Your ATH12K PCI (Qualcomm 802.11ax) wireless card repeatedly reports<\/p>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ath12k_pci 0000:c2:00.0: failed to enqueue rx buf: -28<\/div><\/div> <\/pre>\n<p>every few minutes, which triggers a drop of the wireless link. The driver is trying to enqueue an <strong>RX buffer<\/strong> for the hardware but fails with errno <strong>\u201128<\/strong>.<\/p>\n<blockquote>\n<p><strong>\u201128<\/strong> \u2192 <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">-ENOMEM<\/div>\n<\/div>\n<p> (out\u2011of\u2011memory for the driver buffer); the kernel cannot allocate a DMA\u2011coherent RX descriptor.<\/p>\n<\/blockquote>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-5.png\" alt=\"\u2705\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> Likely Root Causes<\/h2>\n<table>\n<thead>\n<tr>\n<th>Cause<\/th>\n<th>Evidence \/ Typical Scenario<\/th>\n<th>Fix \/ Work\u2011around<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Driver bug or missing patch<\/td>\n<td>The kernel\u2019s ath12k driver has had a long\u2011running issue with RX ring management in older 5.15\/5.4 series.<\/td>\n<td>Update the kernel or apply the latest patch from the <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">linux<\/div>\n<\/div>\n<p> tree (5.18+ or the <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ath12k<\/div>\n<\/div>\n<p> backports).<\/td>\n<\/tr>\n<tr>\n<td>Out\u2011of\u2011memory in the driver<\/td>\n<td>The error itself is \u201c\u201128\u201d \u2013 a memory\u2011allocation failure inside the driver.<\/td>\n<td>Reduce the number of RX descriptors, or enable <strong>fast\u2011RX<\/strong> disabled mode ( <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">modprobe ath12k_pci ath12k_pci_disable_fast_rx=1<\/div>\n<\/div>\n<p> ). <\/td>\n<\/tr>\n<tr>\n<td>Firmware mismatch \/ corruption<\/td>\n<td>Old firmware ( <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ath12k_hwgen<\/div>\n<\/div>\n<p> files) don\u2019t match the driver version.<\/td>\n<td>Reinstall firmware from your distro ( <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo apt\u2011install &#8211;reinstall linux\u2011firmware<\/div>\n<\/div>\n<p> ) or copy the latest from kernel source.<\/td>\n<\/tr>\n<tr>\n<td>System memory pressure<\/td>\n<td>If many big processes run, DMA\u2011coherent memory pool can be exhausted.<\/td>\n<td>Free RAM, close memory\u2011heavy apps, or add swap.<\/td>\n<\/tr>\n<tr>\n<td>ACPI\/PCIe power\u2011management quirk<\/td>\n<td>Some laptops throttle the Wi\u2011Fi device after idle, resetting the buffer queue.<\/td>\n<td>Add <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">pci_bus_reset = off<\/div>\n<\/div>\n<p> or set <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ath12k_pci_disable_ps=1<\/div>\n<\/div>\n<p> in a modprobe conf.<\/td>\n<\/tr>\n<tr>\n<td>Hardware issue (e.g., faulty PCIe slot or NIC)<\/td>\n<td>Persistent failure after multiple driver\/kernel upgrades.<\/td>\n<td>Test on another machine\/PCIe slot or replace the card.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-6.png\" alt=\"\ud83d\udd0e\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> Diagnostic Checklist<\/h2>\n<ol>\n<li><strong>Kernel &#038; Driver Version<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">uname -r<br \/>\nmodinfo ath12k_pci | grep ^version:<\/div><\/div> <\/pre>\n<\/li>\n<li><strong>Driver Parameters<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">cat \/sys\/module\/ath12k_pci\/parameters\/*<\/div><\/div> <\/pre>\n<p>\u2013 See if <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ath12k_pci_disable_fast_rx<\/div>\n<\/div>\n<p> or similar is already set.<\/p>\n<\/li>\n<li><strong>Firmware Location<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ls \/lib\/firmware\/ath12k\/ath12k\/ar9009\/ | grep wlan0 | head<\/div><\/div> <\/pre>\n<p>\u2013 If the files are missing or older than the driver, copy newer ones from <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">\/lib\/firmware<\/div>\n<\/div>\n<p> of a newer kernel.<\/p>\n<\/li>\n<li><strong>Kernel Log Around the Error<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo dmesg --ctime | grep -A3 'ath12k_pci 0000:c2:00.0'<\/div><\/div> <\/pre>\n<p>\u2013 Observe if there are any other \u201c-ENOMEM\u201d or \u201cresource exhaustion\u201d messages.<\/p>\n<\/li>\n<li><strong>Memory Usage Stats<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">free -h<br \/>\nvmstat 1 5<\/div><\/div> <\/pre>\n<\/li>\n<li><strong>PCIe Latency \/ Link State<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo lspci -vvv -s c2:00.0 | grep -iE &quot;link|latency&quot;<\/div><\/div> <\/pre>\n<\/li>\n<\/ol>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-7.png\" alt=\"\ud83d\ude80\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> Quick\u2011Fix Path (Try in this order)<\/h2>\n<table>\n<thead>\n<tr>\n<th>Step<\/th>\n<th>Command<\/th>\n<th>What it does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo apt update &amp;&amp; sudo apt upgrade linux-firmware<\/div><\/div> <\/pre>\n<\/td>\n<td>Refresh firmware to the latest distro version.<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo apt upgrade linux-image-$(uname -r)<\/div><\/div> <\/pre>\n<\/td>\n<td>Apply latest kernel with patched ath12k driver (or switch to 5.18+ if still on 5.15).<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">echo &quot;ath12k_pci ath12k_pci_disable_fast_rx=1&quot; | sudo tee \/etc\/modprobe.d\/ath12k.conf<\/div><\/div> <\/pre>\n<\/td>\n<td>Force the driver to use a more conservative RX scheme.<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>Reboot and monitor: <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">dmesg -T | grep ath12k_pci<\/div>\n<\/div>\n<\/td>\n<td>Verify the error disappears.<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>Optional: test on another machine or use a USB\u2011WiFi dongle (USB 802.11ax \/ 802.11ac) as a temporary workaround.<\/td>\n<td>Ensure the issue is not hardware\u2011specific.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>**Tip:** After reboot, you can also verify driver parameters: <\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">cat \/sys\/module\/ath12k_pci\/parameters\/ath12k_pci_disable_fast_rx<\/div>\n<\/div>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-8.png\" alt=\"\ud83d\udcfa\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> Advanced Debugging (if basic fixes don\u2019t help)<\/h2>\n<ol>\n<li><strong>Enable debug logs<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo bash -c 'echo 1 &gt; \/sys\/module\/ath12k_pci\/parameters\/debug'<br \/>\nsudo dmesg -T | grep ath12k<\/div><\/div> <\/pre>\n<\/li>\n<li><strong>Check PCIe device state<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo lspci -vv -s c2:00.0<\/div><\/div> <\/pre>\n<\/li>\n<li><strong>Use\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\">\n<div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">ethtool<\/div>\n<\/div>\n<p> on the Wi\u2011Fi interface<\/strong><\/p>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">sudo ethtool -S wlp4s0<\/div><\/div> <\/pre>\n<\/li>\n<li><strong>Look for firmware logs<\/strong>\n<pre> <div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px\"><div class=\"text codecolorer\" style=\"padding:5px;font:normal 12px\/1.4em Monaco, Lucida Console, monospace;white-space:nowrap\">grep -i 'ath12k' \/var\/log\/syslog<\/div><\/div> <\/pre>\n<\/li>\n<\/ol>\n<h2><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-9.png\" alt=\"\ud83d\udccc\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> Bottom Line<\/h2>\n<p>The \u201cfailed to enqueue rx buf: \u201328\u201d is an <strong>internal driver allocation failure<\/strong> that typically follows one of two paths:<\/p>\n<ol>\n<li>The driver or firmware is out of date \u2192 upgrade kernel\/firmware.<\/li>\n<li>The driver configuration is too aggressive for your system\u2019s memory budget \u2192 tweak module parameters or free RAM.<\/li>\n<\/ol>\n<p>If you&#039;re still stuck after following the quick\u2011fix path, it&#039;s worth capturing more detailed logs with the above diagnostic commands and sharing them. We can then cross\u2011reference the exact kernel version\/driver commit to see if a known patch exists.<\/p>\n<p>Feel free to let me know which step you\u2019ve tried or if you encounter any new log messages, and we\u2019ll dig deeper!<\/p>\n<\/p><\/div>\n<\/div>\n<\/div>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<p>Not too bad an analysis and set of debugging steps! I&#8217;ll follow up in the comments and let you know if the solution works.<\/p>\n<h3 class=\"wp-block-heading\">Where\u2019d my disk space go, Fedora?<\/h3>\n<p>Trawling through `du` on the command line, converting the numbers in your head, sorting them &#8211; it can be tedious. We even have graphical tools like `baobab`, but it takes time to load in the results and explore the data. And sometimes you might have questions it can\u2019t answer in terms of the risk of deleting a specific directory, or the age of a specific file. It\u2019s easier to be sloppy and just let the disk fill up. But there comes a time where that is no longer an option.<\/p>\n<p>You can ask the system using the linux-mcp-server to analyze your disk usage, give you a hitlist of the top space-eating places on the file system, and give you advice with a risk analysis of how to clean it up. <\/p>\n<p>Here\u2019s my prompt:<\/p>\n<pre class=\"wp-block-preformatted\">I need help analyzing disk usage on my system. Can you: 1. Show me the current disk usage across all filesystems using get_disk_usage\n2. Use list_directories_by_size to show me the 10 largest directories (this will help identify where disk space is being consumed)\n3. Check if there are any large log files consuming space using get_journal_logs or read_log_file\n4. Review running processes with list_processes to see if any are consuming excessive resources or creating temporary files After gathering this information, help me identify potential space-saving opportunities and assess the safety of cleaning up specific directories. Please don't only examine top-level directories. I want you to go deep if needed to find out where the largest files are!\n<\/pre>\n<p>I ran this prompt on my Fedora 42 system using linux-mcp-server with Goose connected to locally-served gpt-oss:20b, and here\u2019s the output I got:<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<div style=\"line-height: 140%;padding: 2% 2.5%;background: #eee;border: 1px solid #ddd\">\n<h3 style=\"margin-top: 0;font-family: Lato, sans-serif\"><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> LLM output <img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/><\/h3>\n<p><strong>Disk\u2011space overview (as of\u202fNov\u202f24\u202f2025 15:21)<\/strong><\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Filesystem<\/strong><\/td>\n<td><strong>Size<\/strong><\/td>\n<td><strong>Used<\/strong><\/td>\n<td><strong>Avail<\/strong><\/td>\n<td><strong>Use\u202f%<\/strong><\/td>\n<td><strong>Mounted on<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\/dev\/mapper\/luks\u201161cedb0e\u2026<\/td>\n<td>952.3\u202fGB<\/td>\n<td>548.9\u202fGB<\/td>\n<td>399.6\u202fGB<\/td>\n<td><strong>57.9\u202f%<\/strong><\/td>\n<td>\/<\/td>\n<\/tr>\n<tr>\n<td>\/dev\/mapper\/luks\u201161cedb0e\u2026<\/td>\n<td>952.3\u202fGB<\/td>\n<td>548.9\u202fGB<\/td>\n<td>399.6\u202fGB<\/td>\n<td>57.9\u202f%<\/td>\n<td>\/home<\/td>\n<\/tr>\n<tr>\n<td>\/dev\/nvme0n1p2<\/td>\n<td>973.4\u202fMB<\/td>\n<td>462.8\u202fMB<\/td>\n<td>443.4\u202fMB<\/td>\n<td>51.1\u202f%<\/td>\n<td>\/boot<\/td>\n<\/tr>\n<tr>\n<td>\/dev\/nvme0n1p1<\/td>\n<td>598.8\u202fMB<\/td>\n<td>19.3\u202fMB<\/td>\n<td>579.6\u202fMB<\/td>\n<td>3.2\u202f%<\/td>\n<td>\/boot\/efi<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><em>Overall usage is comfortably below 60\u202f% of a 952\u202fGB volume, so immediate capacity pressure isn\u2019t a concern. The biggest contributors to disk space today are in the <\/em><em>~\/.<\/em><em> hierarchy.<\/em><\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>1. Biggest directories on the system<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Path (relative to the mount point)<\/strong><\/td>\n<td><strong>Size (\u2248)<\/strong><\/td>\n<td><strong>Notes<\/strong><\/td>\n<\/tr>\n<tr>\n<td>~\/ \u2013 User home (2\u202fmounts: \/home + \/)<\/td>\n<td>1\u202fTB total<\/td>\n<td>57\u202f% used; the bulk of the space is in ~\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>| ~\/duffy\/.local\/share | <strong>238\u202fGB<\/strong> | Containers sub-dir, followed by Trash (7GB) &#8211; typical podman\/docker container images |<br \/>| ~\/duffy\/.local\/share\/containers | <strong>238\u202fGB<\/strong> | Container layers, images, root filesystems \u2013 the prime candidate for cleanup |<br \/>| ~\/duffy\/.local | 266\u202fGB | share (237\u202fGB) dominates it |<br \/>| ~\/duffy\/.local\/share\/containers (inside share) | 238\u202fGB | Same as above \u2013 just a different view |<br \/>| ~\/duffy\/.local\/lib | 13\u202fGB | Likely a virtual\u2011environment library set |<br \/>| ~\/duffy\/.local\/bin | 4\u202fGB | Helper binaries |<br \/>| ~\/duffy\/.local\/share\/Trash | 7\u202fGB | User\u2011deleted items still resident on disk |<br \/>| ~\/duffy\/.local\/share\/containers (nested) | 238\u202fGB | Same as above; redundant listings from recursive depth\u20111 scans |<br \/>| ~\/duffy\/.local\/share (top\u2011level) | 238\u202fGB | containers is the absolute largest item |<\/p>\n<p><strong>Take\u2011away<\/strong> \u2013 75\u202f% of the 238\u202fGB live inside three nested directories:<\/p>\n<ul class=\"wp-block-list\">\n<li>~\/duffy\/.local\/share\/containers (238\u202fGB) \u2192 <em>Rooted in Podman\/Container\u2011Store<\/em><\/li>\n<li>~\/duffy\/.local\/share (238\u202fGB) \u2192 <em>Same data exposed at a higher level<\/em><\/li>\n<li>~\/duffy\/.local\/share\/Trash (7\u202fGB)<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>2. Possible space savers<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Category<\/strong><\/td>\n<td><strong>Recommendation<\/strong><\/td>\n<td><strong>Rationale<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Containers<\/strong><\/td>\n<td>podman system prune -a (or docker system prune -a if Docker is in use)<\/td>\n<td>Removes <strong>unreferenced images, containers, and caches<\/strong>. This can reclaim 200\u2013250\u202fGB if most containers are outdated or no longer referenced.<\/td>\n<\/tr>\n<tr>\n<td><strong>Trash<\/strong><\/td>\n<td>gio trash &#8211;empty<\/td>\n<td>The 7\u202fGB in Trash is still taking physical space; simply emptying it will free that amount.<\/td>\n<\/tr>\n<tr>\n<td><strong>Large libs\/binaries<\/strong><\/td>\n<td>Check ~\/duffy\/.local\/lib \u2013 13\u202fGB, and ~\/duffy\/.local\/bin \u2013 4\u202fGB<\/td>\n<td>If these are not actively used by a project, consider uninstalling or moving them to a secondary, less\u2011frequented store.<\/td>\n<\/tr>\n<tr>\n<td><strong>Ramalama &amp; UV<\/strong><\/td>\n<td>9\u202fGB (ramalama), 8\u202fGB (uv)<\/td>\n<td>Possibly temporary files or caches from development tools. Inspecting the contents of these directories (du -h) can reveal if they are still needed.<\/td>\n<\/tr>\n<tr>\n<td><strong>Other caches<\/strong><\/td>\n<td>pnpm store prune, virtualenv or pip cache purge<\/td>\n<td>Development tool caches often accumulate; they\u2019re usually safe to delete once you\u2019re done with the current development sessions.<\/td>\n<\/tr>\n<tr>\n<td><strong>Logs<\/strong><\/td>\n<td>The system journal shows normal activity, and syslog access is blocked by policy.<\/td>\n<td>Systemd journal stores are rotated automatically; no urgent action required.<\/td>\n<\/tr>\n<tr>\n<td><strong>Boot partitions<\/strong><\/td>\n<td>Not relevant \u2013 they\u2019re low\u2011usage (boot\/efi only 3\u202f% used).<\/td>\n<td>No action needed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>3. Disk\u2011IO perspective<\/strong><\/h3>\n<ul class=\"wp-block-list\">\n<li>Reads: <strong>111.8\u202fGB<\/strong>; Writes: <strong>85.6\u202fGB<\/strong> since boot (\u2248\u202f1.2\u202fTB total).<\/li>\n<li>If writes are high relative to free space, consider enabling a <strong>tmpfs<\/strong> overlay for temporary files or moving large data to a separate, faster SSD. But in this case, writes are not approaching the 399\u202fGB free.<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>4. Suggested cleanup workflow<\/strong><\/h3>\n<p><em># 1. Empty Trash<\/em><\/p>\n<pre class=\"wp-block-preformatted\">gio trash --empty<\/pre>\n<p><em># 2. Prune unused containers\/images<\/em><\/p>\n<pre class=\"wp-block-preformatted\">podman system prune -a &nbsp; <em># or docker system prune -a<\/em><\/pre>\n<p><em># 3. Remove leftover caches<\/em><\/p>\n<pre class=\"wp-block-preformatted\">pnpm store prune &nbsp; &nbsp; &nbsp; &nbsp; <em># if pnpm is installed<\/em><\/pre>\n<pre class=\"wp-block-preformatted\">pip cache purge&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <em># for Python<\/em><\/pre>\n<pre class=\"wp-block-preformatted\">virtualenv --clean &nbsp; &nbsp; &nbsp; <em># optional<\/em><\/pre>\n<p><em># 4. Inspect large \u201cRAM\u201d directories manually if you need deeper cleanup<\/em><\/p>\n<pre class=\"wp-block-preformatted\">du -h --max-depth=1 ~\/duffy\/.local\/share\/containers<\/pre>\n<p><strong>Tip:<\/strong> After each step run df -h \/home or du -sh ~\/duffy\/.local\/* to see the impact.<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>5. Safety checklist<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Action<\/strong><\/td>\n<td><strong>Why it\u2019s safe (or risk)<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Emptying Trash<\/strong><\/td>\n<td>Deletes only user\u2011deleted files; confirm you don\u2019t need the content.<\/td>\n<\/tr>\n<tr>\n<td><strong>podman system prune -a<\/strong><\/td>\n<td>Deletes container <em>images<\/em>, <em>containers<\/em>, and <em>volumes<\/em> that are not referenced by any running or stopped container. Verify with podman ps -a before pruning.<\/td>\n<\/tr>\n<tr>\n<td><strong>Removing lib\/bin from <\/strong><strong>.local<\/strong><\/td>\n<td>Only safe if you\u2019re sure those libraries\/bin files aren\u2019t part of a running application.<\/td>\n<\/tr>\n<tr>\n<td><strong>Caution with <\/strong><strong>tmpfs<\/strong><strong> or moving large directories<\/strong><\/td>\n<td>If you move a directory on\u2011the\u2011fly, ensure no running application depends on that path.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h4 class=\"wp-block-heading\"><strong>Bottom line<\/strong><\/h4>\n<ul class=\"wp-block-list\">\n<li><strong>Current free space:<\/strong> \u2248\u202f400\u202fGB on both \/ and \/home.<\/li>\n<li><strong>Largest consumptions:<\/strong> User\u2011space under ~\/duffy\/.local\/share\/containers (\u2248\u202f238\u202fGB).<\/li>\n<li><strong>Actionable clean\u2011ups:<\/strong> Empty Trash, prune unused container images, and review large libraries\/binaries. This should reclaim <strong>over 200\u202fGB<\/strong> and bring the usage from <strong>57.9\u202f%<\/strong> down to roughly <strong>40\u201145\u202f%<\/strong> \u2013 plenty of headroom for the future.<\/li>\n<\/ul>\n<p>Feel free to ask what next steps you\u2019d like to dig into (e.g., detailed contents of the containers dir, specific application logs, or targeted pruning commands).<\/p>\n<\/p><\/div>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\">Upgrade planning<\/h3>\n<p>So you may have noticed a little detail above &#8211; the system is a Fedora 42 system\u2026 and Fedora 43\u2019s been out a month now! <img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-10.png\" alt=\"\ud83d\ude05\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> So, time to upgrade.<\/p>\n<p>This example shows where we have some tools missing from the set provided in the linux-mcp-server. We\u2019re including it for two reasons:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>So you can see how this works manually<\/strong><strong><br \/><\/strong>You can see that even when specific tools you might not need are available in the MCP server, you can have the response give you instructions on commands to run on your own, and copy\/paste the command output back into your chat to get analysis alongside the data the system is able to pull via the MCP tool calls;<\/li>\n<li><strong>To encourage you to submit additional tools to our project!<\/strong><br \/>We would love your additions to the project! Here\u2019s where to get started: <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\/blob\/main\/docs\/CONTRIBUTING.md\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\/blob\/main\/docs\/CONTRIBUTING.md<\/a><\/li>\n<\/ul>\n<p>Here\u2019s the prompt I started with, with the same Goose + gpt-oss:20b + linux-mcp-server combination:<\/p>\n<pre class=\"wp-block-preformatted\">You are a Linux system administrator assistant analyzing a Fedora system for upgrade readiness. TASK: Examine this Fedora 42 system and provide a comprehensive upgrade readiness report for Fedora 43. ANALYSIS CHECKLIST:\n1. Check current Fedora version: cat \/etc\/fedora-release\n2. Review system updates status: dnf check-update\n3. Identify third-party repositories: dnf repolist\n4. List installed packages from non-Fedora repos: dnf list installed | grep -v @fedora\n5. Check for broken dependencies: dnf check\n6. Review disk space on root partition: df -h \/\n7. Check for unsupported or deprecated packages\n8. Identify custom kernel modules: lsmod | grep -v \"^Module\"\n9. Review SELinux status: sestatus\n10. Check for pending system updates: dnf upgrade --refresh --assumeno REPORT FORMAT: # Fedora 43 Upgrade Readiness Report ## Current System Status\n- Fedora version: [version]\n- Kernel: [kernel version]\n- Updates status: [current\/outdated] ## Potential Issues\n[List blocking issues with HIGH\/MEDIUM\/LOW severity] ## Third-Party Software\n[List non-Fedora packages that may need attention] ## Recommendations\n[Specific pre-upgrade steps needed] ## Overall Readiness: [READY\/NEEDS ATTENTION\/NOT READY]\nRun the necessary commands and provide this analysis. Be specific about any issues found and give actionable recommendations.\n<\/pre>\n<p>Now, right away the model came back to me to complain it doesn\u2019t have access to `dnf`, `cat`, etc. And that\u2019s expected here. What it did was give me a list of homework to run for it to complete the analysis\u2026 for example, `dnf check-update` and `cat \/etc\/fedora-release`. I had a little back and forth in Goose with the model where it would ask me to run a command and I\u2019d copy the output into the context. This resulted, finally, in the following report:<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<div style=\"line-height: 140%;padding: 2% 2.5%;background: #eee;border: 1px solid #ddd\">\n<h3 style=\"margin-top: 0;font-family: Lato, sans-serif\"><img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/> LLM output <img decoding=\"async\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-3.png\" alt=\"\ud83e\udd16\" class=\"wp-smiley\" style=\"height: 1em;max-height: 1em\" \/><\/h3>\n<h2 class=\"wp-block-heading\"><strong>Fedora\u202f43 Upgrade Readiness Report<\/strong><\/h2>\n<p><strong>Analyzed System<\/strong> \u2013 Fedora\u202f42 (Kernel\u202f6.17.7\u2011200.fc42.x86_64)<br \/><strong>Date<\/strong> \u2013 2025\u201111\u201124<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>1. Current System Status<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Item<\/strong><\/td>\n<td><strong>Value<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Fedora release<\/strong><\/td>\n<td>42 (Adams)<\/td>\n<\/tr>\n<tr>\n<td><strong>Kernel<\/strong><\/td>\n<td>6.17.7\u2011200.fc42.x86_64<\/td>\n<\/tr>\n<tr>\n<td><strong>Root filesystem<\/strong><\/td>\n<td>953\u202fGB LUKS, 58\u202f% used (411\u202fGB free) \u2013 <strong>&gt;\u202f15\u202f% free<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>\/var \/usr<\/strong><\/td>\n<td>Same as root partition (mounted the same LUKS device)<\/td>\n<\/tr>\n<tr>\n<td><strong>SELinux<\/strong><\/td>\n<td><strong>enabled<\/strong> (policy <em>targeted<\/em>), <strong>currently permissive<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>System\u2011wide packages<\/strong><\/td>\n<td>No held packages (dnf versionlock list empty)<\/td>\n<\/tr>\n<tr>\n<td><strong>System modules<\/strong><\/td>\n<td>No modules held.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><strong>TL;DR<\/strong> \u2013 The base system is clean; the kernel is up\u2011to\u2011date for 42, there is ample disk space, and there are no version\u2011locked packages.<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>2. Third\u2011Party Repos &amp; Packages<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Repository<\/strong><\/td>\n<td><strong>Description<\/strong><\/td>\n<td><strong>Current <\/strong><strong>dnf repolist<\/strong><strong> status<\/strong><\/td>\n<\/tr>\n<tr>\n<td>rpm-fusion-free, rpm-fusion-nonfree, rpm-fusion-updates<\/td>\n<td>Widely used RPM\u2011Fusion components<\/td>\n<td><strong>Enabled<\/strong><\/td>\n<\/tr>\n<tr>\n<td>google-cloud-cli<\/td>\n<td>Google Cloud SDK (RPM built for EL\u202f10)<\/td>\n<td><strong>Enabled<\/strong><\/td>\n<\/tr>\n<tr>\n<td>visual-studio-code<\/td>\n<td>Microsoft VS Code RPMs<\/td>\n<td><strong>Enabled<\/strong><\/td>\n<\/tr>\n<tr>\n<td>command\u2011line\u2011assistant, google\u2011chrome, PyCharm, unsupported\u2011fedora\u2011packages, goose, leaktk<\/td>\n<td>Various Copr builds (mostly Fedora\u201142 based)<\/td>\n<td><strong>Enabled<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><strong>What we need to verify<\/strong><\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Is a Fedora\u202f43 build available<\/strong> for each of the non\u2011Fedora repos above?<\/li>\n<li><strong>Does <\/strong><strong>google-cloud-cli<\/strong><strong> have a Fedora\u202f43\u2011compatible package?<\/strong> (EL\u202f10 build may not be usable).<\/li>\n<li><strong>Are there any <\/strong><strong>el10<\/strong><strong>\u2011specific dependencies<\/strong> that could surface during the upgrade?<\/li>\n<li><strong>Any custom kernel modules<\/strong> that will require re\u2011compilation against the 43 kernel.<\/li>\n<\/ol>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>3. Potential Issues &amp; Severity<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Issue<\/strong><\/td>\n<td><strong>Severity<\/strong><\/td>\n<td><strong>Why it matters<\/strong><\/td>\n<td><strong>Immediate Remedy<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Non\u2011Fedora packages (e.g., google\u2011cloud\u2011cli)<\/strong><\/td>\n<td>MEDIUM<\/td>\n<td>May contain packages built for EL\u202f10; could conflict with Fedora\u202f43 libs.<\/td>\n<td>Verify if a Fedora\u202f43 build exists or plan to remove\/re\u2011build it.<\/td>\n<\/tr>\n<tr>\n<td><strong>Third\u2011party repos without 43 builds<\/strong><\/td>\n<td>MEDIUM<\/td>\n<td>dnf system-upgrade pulls all <em>enabled<\/em> repos; lacking 43 packages causes transaction failure.<\/td>\n<td>Disable such repos temporarily (dnf config-manager &#8211;set-disabled &lt;repo&gt;) or enable the 43 stream when available.<\/td>\n<\/tr>\n<tr>\n<td><strong>Custom kernel modules<\/strong><\/td>\n<td>LOW<\/td>\n<td>Modules compiled against 42 kernel won\u2019t load on 43; services may drop.<\/td>\n<td>Re\u2011compile or patch modules after upgrade.<\/td>\n<\/tr>\n<tr>\n<td><strong>Broken dependencies reported by <\/strong><strong>dnf check<\/strong><\/td>\n<td>HIGH<\/td>\n<td>Would block the upgrade transaction.<\/td>\n<td>Run sudo dnf check now; fix any reported issues.<\/td>\n<\/tr>\n<tr>\n<td><strong>Insufficient disk space<\/strong><\/td>\n<td>HIGH<\/td>\n<td>Upgrade scripts need &gt;\u202f15\u202f% free.<\/td>\n<td>Not an issue (58\u202f% free).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><strong>Current High\u2011Risk Items<\/strong> \u2013 None detected yet.<br \/><strong>Next Action<\/strong> \u2013 Confirm each third\u2011party repo has 43\u2011compatible packages and set SELinux to enforcing.<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>4. Recommendations (Pre\u2011Upgrade Checklist)<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Step<\/strong><\/td>\n<td><strong>Command<\/strong><\/td>\n<td><strong>Purpose<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Confirm 43\u2011stream packages<\/strong><\/td>\n<td>`dnf list &#8211;available *<\/td>\n<td>grep &lt;repo-id&gt;`<\/td>\n<\/tr>\n<tr>\n<td><strong>Verify SELinux enforcement<\/strong><\/td>\n<td>sestatus<\/td>\n<td>Should show <em>enforcing<\/em>.<\/td>\n<\/tr>\n<tr>\n<td><strong>Check for broken dependencies<\/strong><\/td>\n<td>sudo dnf check<\/td>\n<td>No errors should appear.<\/td>\n<\/tr>\n<tr>\n<td><strong>Refresh all repos<\/strong><\/td>\n<td>sudo dnf upgrade &#8211;refresh<\/td>\n<td>Pull latest metadata.<\/td>\n<\/tr>\n<tr>\n<td><strong>Dry\u2011run upgrade<\/strong><\/td>\n<td>sudo dnf system-upgrade download &#8211;releasever=43 &#8211;allowerasing<\/td>\n<td>Detect any missing packages or conflicts.<\/td>\n<\/tr>\n<tr>\n<td><strong>Optional: Disable problematic repos<\/strong><\/td>\n<td>sudo dnf config-manager &#8211;set-disabled &lt;repo&gt;<\/td>\n<td>Prevent upgrade crash if a repo has no 43 build.<\/td>\n<\/tr>\n<tr>\n<td><strong>Persist SELinux config<\/strong><\/td>\n<td>sudo sed -i &#8216;s\/SELINUX=permissive\/SELINUX=enforcing\/&#8217; \/etc\/selinux\/config<\/td>\n<td>Make enforcement permanent.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>5. Post\u2011Upgrade Actions<\/strong><\/h3>\n<ol class=\"wp-block-list\">\n<li><strong>Reboot into the new kernel<\/strong> (dnf system-upgrade reboot).<\/li>\n<li><strong>Re\u2011compile any custom kernel modules<\/strong> against the new kernel (yum install kernel-devel-$(uname -r) then rebuild modules).<\/li>\n<li><strong>Re\u2011enable any disabled repos<\/strong> once the upgrade completes.<\/li>\n<li><strong>Verify critical services<\/strong> (systemctl status &lt;service&gt;) and check logs.<\/li>\n<li><strong>Run <\/strong><strong>sudo dnf distro-sync<\/strong> to ensure all packages are the latest from Fedora\u202f43.<\/li>\n<\/ol>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h3 class=\"wp-block-heading\"><strong>6. Overall Readiness<\/strong><\/h3>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Criteria<\/strong><\/td>\n<td><strong>Status<\/strong><\/td>\n<td><strong>Comment<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Disk space<\/strong><\/td>\n<td><strong>Ready<\/strong><\/td>\n<td>58\u202f% free<\/td>\n<\/tr>\n<tr>\n<td><strong>Package health<\/strong><\/td>\n<td><strong>Ready<\/strong><\/td>\n<td>No held or broken packages<\/td>\n<\/tr>\n<tr>\n<td><strong>Third\u2011party repos<\/strong><\/td>\n<td><strong>Conditional<\/strong><\/td>\n<td>Verify 43\u2011compatibility<\/td>\n<\/tr>\n<tr>\n<td><strong>Custom modules<\/strong><\/td>\n<td><strong>Pending<\/strong><\/td>\n<td>Need to identify modules and re\u2011compile<\/td>\n<\/tr>\n<tr>\n<td><strong>Final verdict<\/strong><\/td>\n<td><strong>READY<\/strong> (after addressing above points)<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><strong>Next step<\/strong> \u2013 Run the three <strong>verification<\/strong> commands below and share the output with me:<\/p>\n<pre class=\"wp-block-preformatted\">sudo dnf check<\/pre>\n<pre class=\"wp-block-preformatted\">sudo dnf repolist<\/pre>\n<pre class=\"wp-block-preformatted\">dnf list installed | grep -v @fedora<\/pre>\n<p>With those outputs I can pinpoint any remaining blockers and give you a final, ready\u2011to\u2011proceed plan.<\/p>\n<p>Happy upgrading!<\/p>\n<\/p><\/div>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h2 class=\"wp-block-heading\">Give it a try, let us know what you think!<\/h2>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"468\" height=\"103\" src=\"https:\/\/sickgaming.net\/blog\/wp-content\/uploads\/2025\/12\/talk-to-your-fedora-system-with-the-linux-mcp-server-11.png\" alt=\"\" class=\"wp-image-42774\" \/><\/figure>\n<p>You can see from these few examples that tool calling with LLMs is a valuable tool for troubleshooting Linux systems. We could use your help building this and making it awesome! How can you help?<\/p>\n<ul class=\"wp-block-list\">\n<li>Give it a try, let us know what you think, <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\/issues\" target=\"_blank\" rel=\"noreferrer noopener\">file any bugs you find, and let us know what tools are missing<\/a> that you could use! You can respond in the comments here, <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\/issues\">file a bug<\/a>, or <a href=\"https:\/\/matrix.to\/#\/#ai-ml:fedoraproject.org\">chat with us on Fedora matrix<\/a>.<\/li>\n<li>We&#8217;re primarily working with <a href=\"https:\/\/github.com\/block\/goose\">Goose<\/a> as our client, but if you have another preferred client and want to help us support it better, we&#8217;d love to work with you!<\/li>\n<li>Get involved in the <a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\/issues\">linux-mcp-project<\/a> generally, we&#8217;d love to see your PRs!<\/li>\n<li>Let us know what you&#8217;d like to see in the future. What workflows would you like to see supported? How do you see this making your Fedora or overall Linux experience better? What larger workflows do you see this plugging into?<\/li>\n<\/ul>\n<p>Join us upstream at <strong><a href=\"https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/rhel-lightspeed\/linux-mcp-server<\/a><\/strong>! And come chat with us in the <a href=\"https:\/\/matrix.to\/#\/#ai-ml:fedoraproject.org\">Fedora AI\/ML SIG chat room<\/a> on Matrix!<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Generative AI systems are changing the way people interact with computers. MCP (model context protocol) is a way that enables LLMs to run commands and use tools to enable live, conversational interaction with systems. Using the new linux-mcp-server, let&#8217;s walk through how you can talk with your Fedora system for understanding your system and getting [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":135212,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[45,61,43,46,47],"class_list":["post-135211","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fedora-os","tag-fedora","tag-fedora-project-community","tag-for-system-administrators","tag-magazine","tag-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/135211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=135211"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/135211\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/135212"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=135211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=135211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=135211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}