<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: call518</title>
    <description>The latest articles on DEV Community by call518 (@call518).</description>
    <link>https://dev.to/call518</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3387607%2F26a7cef4-5154-40f7-a9f6-a9755c2fe398.jpg</url>
      <title>DEV Community: call518</title>
      <link>https://dev.to/call518</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/call518"/>
    <language>en</language>
    <item>
      <title>MCP-Server for Ambari Cluster : MCP-Ambari-API</title>
      <dc:creator>call518</dc:creator>
      <pubDate>Mon, 22 Sep 2025 13:07:46 +0000</pubDate>
      <link>https://dev.to/call518/mcp-server-for-ambari-cluster-mcp-ambari-api-2jh6</link>
      <guid>https://dev.to/call518/mcp-server-for-ambari-cluster-mcp-ambari-api-2jh6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/call518/MCP-Ambari-API" rel="noopener noreferrer"&gt;https://github.com/call518/MCP-Ambari-API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  MCP Ambari API - Apache Hadoop Cluster Management Automation
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚀 Automate Apache Ambari operations with AI/LLM&lt;/strong&gt;: Natural language commands for Hadoop cluster management, service control, configuration monitoring, and real-time status tracking via Model Context Protocol (MCP) tools.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Architecture &amp;amp; Internal (DeepWiki)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://deepwiki.com/call518/MCP-Ambari-API" rel="noopener noreferrer"&gt;https://deepwiki.com/call518/MCP-Ambari-API&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP Ambari API&lt;/strong&gt; is a powerful Model Context Protocol (MCP) server that enables seamless Apache Ambari cluster management through natural language commands. Built for DevOps engineers, data engineers, and system administrators who work with Hadoop ecosystems.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎯 What You Can Do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Service Management&lt;/strong&gt;: Start, stop, restart Hadoop services (HDFS, YARN, Spark, etc.) with simple commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Monitoring&lt;/strong&gt;: Monitor cluster health, service status, and performance metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration Management&lt;/strong&gt;: View, update, and manage cluster configurations across all services
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert Management&lt;/strong&gt;: Track and manage cluster alerts and notifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User &amp;amp; Host Management&lt;/strong&gt;: Manage cluster users, permissions, and host assignments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request Tracking&lt;/strong&gt;: Monitor long-running operations with detailed progress tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Docuement for Airflow REST-API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/index.md" rel="noopener noreferrer"&gt;Ambari API Documents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Topics
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;apache-ambari&lt;/code&gt; &lt;code&gt;hadoop-cluster&lt;/code&gt; &lt;code&gt;mcp-server&lt;/code&gt; &lt;code&gt;cluster-automation&lt;/code&gt; &lt;code&gt;devops-tools&lt;/code&gt; &lt;code&gt;big-data&lt;/code&gt; &lt;code&gt;infrastructure-management&lt;/code&gt; &lt;code&gt;ai-automation&lt;/code&gt; &lt;code&gt;llm-tools&lt;/code&gt; &lt;code&gt;python-mcp&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Queries - Cluster Info/Status
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfc053eaphjjwhk3zpqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfc053eaphjjwhk3zpqn.png" alt=" " width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="//./src/mcp_ambari_api/prompt_template.md#5-example-queries"&gt;Go to More Example Queries&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 QuickStart Guide /w Docker
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The following instructions assume you are using the &lt;code&gt;streamable-http&lt;/code&gt; mode for MCP Server.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Flow Diagram of Quickstart/Tutorial
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlrlblxi4oto9kgbm3eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlrlblxi4oto9kgbm3eq.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Prepare Ambari Cluster (Test Target)
&lt;/h3&gt;

&lt;p&gt;To set up a Ambari Demo cluster, follow the guide at: &lt;a href="https://medium.com/@call518/install-ambari-3-0-with-docker-297a8bb108c8" rel="noopener noreferrer"&gt;Install Ambari 3.0 with Docker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvxsytino5mby52p8f8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvxsytino5mby52p8f8x.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Run Docker-Compose
&lt;/h3&gt;

&lt;p&gt;Start the &lt;code&gt;MCP-Server&lt;/code&gt;, &lt;code&gt;MCPO&lt;/code&gt;(MCP-Proxy for OpenAPI), and &lt;code&gt;OpenWebUI&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure Docker and Docker Compose are installed on your system.&lt;/li&gt;
&lt;li&gt;Clone this repository and navigate to its root directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up environment configuration:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Copy environment template and configure your settings&lt;/span&gt;
   &lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
   &lt;span class="c"&gt;# Edit .env with your Ambari cluster information&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure your Ambari connection in &lt;code&gt;.env&lt;/code&gt; file:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Ambari cluster connection&lt;/span&gt;
   &lt;span class="nv"&gt;AMBARI_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host.docker.internal
   &lt;span class="nv"&gt;AMBARI_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;7070
   &lt;span class="nv"&gt;AMBARI_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin
   &lt;span class="nv"&gt;AMBARI_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin
   &lt;span class="nv"&gt;AMBARI_CLUSTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;TEST-AMBARI

   &lt;span class="c"&gt;# (Optional) Enable authentication for streamable-http mode&lt;/span&gt;
   &lt;span class="c"&gt;# Recommended for production environments&lt;/span&gt;
   &lt;span class="nv"&gt;REMOTE_AUTH_ENABLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
   &lt;/span&gt;&lt;span class="nv"&gt;REMOTE_SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secure-secret-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;OpenWebUI will be available at: &lt;code&gt;http://localhost:${DOCKER_EXTERNAL_PORT_OPENWEBUI}&lt;/code&gt; (default: 3001)&lt;/li&gt;
&lt;li&gt;The MCPO-Proxy will be accessible at: &lt;code&gt;http://localhost:${DOCKER_EXTERNAL_PORT_MCPO_PROXY}&lt;/code&gt; (default: 8001)
&lt;/li&gt;
&lt;li&gt;The MCPO API Docs: &lt;code&gt;http://localhost:${DOCKER_EXTERNAL_PORT_MCPO_PROXY}/ambari-api/docs&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2w84qxnl6hbmngs2uov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2w84qxnl6hbmngs2uov.png" alt=" " width="792" height="1194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Registering the Tool in OpenWebUI
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;logging in to OpenWebUI with an admin account&lt;/li&gt;
&lt;li&gt;go to "Settings" → "Tools" from the top menu.&lt;/li&gt;
&lt;li&gt;Enter the &lt;code&gt;ambari-api&lt;/code&gt; Tool address (e.g., &lt;code&gt;http://localhost:8000/ambari-api&lt;/code&gt;) to connect MCP Tools with your Ambari cluster.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. More Examples: Using MCP Tools to Query Ambari Cluster
&lt;/h3&gt;

&lt;p&gt;Below is an example screenshot showing how to query the Ambari cluster using MCP Tools in OpenWebUI:&lt;/p&gt;

&lt;h4&gt;
  
  
  Example Query - Cluster Configuration Review &amp;amp; Recommendations
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggojyvzxcyc52k2odzdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggojyvzxcyc52k2odzdp.png" alt=" " width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Example Query - Restart HDFS Service
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpkmeuds44sc92vzsnx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpkmeuds44sc92vzsnx9.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbdmwn9b0m9kr2h0h581.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbdmwn9b0m9kr2h0h581.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Tool Example Queries
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔍 Cluster &amp;amp; Service Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;get_cluster_info&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show cluster summary and basic information."&lt;/li&gt;
&lt;li&gt;"What's the cluster name and version?"&lt;/li&gt;
&lt;li&gt;"Display cluster overview with service counts."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Cluster name, version, service counts, basic cluster information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_cluster_services&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show all cluster services and their current status."&lt;/li&gt;
&lt;li&gt;"List all services with their states."&lt;/li&gt;
&lt;li&gt;"Display service overview for the cluster."&lt;/li&gt;
&lt;li&gt;"Which services are running in the cluster?"&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Service names, states, health status overview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_service_status&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What's the status of HDFS service?"&lt;/li&gt;
&lt;li&gt;"Check if YARN is running properly."&lt;/li&gt;
&lt;li&gt;"Show current state of HBase service."&lt;/li&gt;
&lt;li&gt;"Is the MapReduce service healthy?"&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Individual service state, health check, status details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_service_components&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show HDFS components and which hosts they're running on."&lt;/li&gt;
&lt;li&gt;"List all YARN components with their host assignments."&lt;/li&gt;
&lt;li&gt;"Display component distribution for Kafka service."&lt;/li&gt;
&lt;li&gt;"Which hosts are running NameNode components?"&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Component-to-host mapping, service distribution analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_service_details&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Get detailed information about HDFS service including all components."&lt;/li&gt;
&lt;li&gt;"Show comprehensive YARN service overview with component states."&lt;/li&gt;
&lt;li&gt;"Display full service details for Spark with host assignments."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Complete service overview with components and host details&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ Service Operations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;start_service / stop_service / restart_service&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Start the HDFS service."&lt;/li&gt;
&lt;li&gt;"Stop the MapReduce service."&lt;/li&gt;
&lt;li&gt;"Restart the YARN service."&lt;/li&gt;
&lt;li&gt;"Please restart the HBase service."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Individual service lifecycle management&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Note&lt;/strong&gt;: Returns request ID for operation tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;start_all_services / stop_all_services / restart_all_services&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Start all cluster services."&lt;/li&gt;
&lt;li&gt;"Stop all services in the cluster."&lt;/li&gt;
&lt;li&gt;"Restart all cluster services."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Bulk service operations for entire cluster&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Warning&lt;/strong&gt;: These are high-impact operations affecting the entire cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Operations &amp;amp; Monitoring
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;get_active_requests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show all running operations."&lt;/li&gt;
&lt;li&gt;"List current service requests in progress."&lt;/li&gt;
&lt;li&gt;"What operations are currently active?"&lt;/li&gt;
&lt;li&gt;"Display ongoing cluster operations."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Real-time operation status, request monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_request_status&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Check the status of request ID 123."&lt;/li&gt;
&lt;li&gt;"Show progress for operation 456."&lt;/li&gt;
&lt;li&gt;"Get details for the last restart request."&lt;/li&gt;
&lt;li&gt;"Monitor request 789 completion status."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Detailed request progress, completion status, error tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🖥️ Host Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;list_hosts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"List all hosts in the cluster."&lt;/li&gt;
&lt;li&gt;"Show cluster node inventory."&lt;/li&gt;
&lt;li&gt;"Display all available hosts."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Host inventory, cluster node overview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_host_details&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show detailed information for host node1.example.com."&lt;/li&gt;
&lt;li&gt;"Get component status on host node2.example.com."&lt;/li&gt;
&lt;li&gt;"Display all host details with component states."&lt;/li&gt;
&lt;li&gt;"Show hardware and component information for specific host."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Hardware specs, component states, host health status&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Omit hostname parameter to get details for all hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔧 Configuration Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;dump_configurations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show all configuration types available."&lt;/li&gt;
&lt;li&gt;"Display HDFS configuration settings."&lt;/li&gt;
&lt;li&gt;"Get YARN resource manager configuration."&lt;/li&gt;
&lt;li&gt;"Show core-site.xml configuration values."&lt;/li&gt;
&lt;li&gt;"Find all configurations containing 'memory' settings."&lt;/li&gt;
&lt;li&gt;"Display summarized view of all service configurations."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Configuration type exploration, property search, service-specific configs&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Use &lt;code&gt;summarize=True&lt;/code&gt; for overview, &lt;code&gt;filter&lt;/code&gt; parameter for specific properties&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👥 User Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;list_users&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show all cluster users."&lt;/li&gt;
&lt;li&gt;"List users with access to Ambari."&lt;/li&gt;
&lt;li&gt;"Display user accounts and their roles."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: User accounts, role assignments, access permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_user&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Get detailed information for user 'admin'."&lt;/li&gt;
&lt;li&gt;"Show profile and permissions for user 'operator'."&lt;/li&gt;
&lt;li&gt;"Display authentication details for specific user."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: User profile, permissions, authentication source, role details&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚨 Alert Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;get_alerts_history (current mode)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show current active alerts."&lt;/li&gt;
&lt;li&gt;"Display all current alert states."&lt;/li&gt;
&lt;li&gt;"List active alerts for HDFS service."&lt;/li&gt;
&lt;li&gt;"Show critical alerts that are currently active."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Real-time alert monitoring, service-specific alerts, severity filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;get_alerts_history (history mode)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show alert history for the last 24 hours."&lt;/li&gt;
&lt;li&gt;"Display HDFS alerts from yesterday."&lt;/li&gt;
&lt;li&gt;"Get critical alerts from last week."&lt;/li&gt;
&lt;li&gt;"Show all alerts that occurred in the past month."&lt;/li&gt;
&lt;li&gt;"Find alerts for specific host from last 7 days."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Historical alert analysis, time-based filtering, trend analysis&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Smart Time Processing&lt;/strong&gt;: Supports natural language time expressions in any language&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 System Information
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;get_prompt_template&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show available prompt template sections."&lt;/li&gt;
&lt;li&gt;"Get tool usage guidelines."&lt;/li&gt;
&lt;li&gt;"Display example queries for reference."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Template documentation, usage guidelines, section navigation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🐛 Usage &amp;amp; Configuration
&lt;/h2&gt;

&lt;p&gt;This MCP server supports two connection modes: &lt;strong&gt;stdio&lt;/strong&gt; (traditional) and &lt;strong&gt;streamable-http&lt;/strong&gt; (Docker-based). You can configure the transport mode using CLI arguments or environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration Priority:&lt;/strong&gt; CLI arguments &amp;gt; Environment variables &amp;gt; Default values&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI Arguments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--type&lt;/code&gt; (&lt;code&gt;-t&lt;/code&gt;): Transport type (&lt;code&gt;stdio&lt;/code&gt; or &lt;code&gt;streamable-http&lt;/code&gt;) - Default: &lt;code&gt;stdio&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--host&lt;/code&gt;: Host address for HTTP transport - Default: &lt;code&gt;127.0.0.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--port&lt;/code&gt; (&lt;code&gt;-p&lt;/code&gt;): Port number for HTTP transport - Default: &lt;code&gt;8000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--auth-enable&lt;/code&gt;: Enable Bearer token authentication for streamable-http mode - Default: &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--secret-key&lt;/code&gt;: Secret key for Bearer token authentication (required when auth enabled)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Environment Variables
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Project Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PYTHONPATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Python module search path for MCP server imports&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app/src&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MCP_LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Server logging verbosity (DEBUG, INFO, WARNING, ERROR)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MCP transport protocol (stdio for CLI, streamable-http for web)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stdio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;streamable-http&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP server bind address (0.0.0.0 for all interfaces)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP server port for MCP communication&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REMOTE_AUTH_ENABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable Bearer token authentication for streamable-http mode&lt;br&gt;&lt;strong&gt;Default: false&lt;/strong&gt; (if undefined, empty, or null)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REMOTE_SECRET_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Secret key for Bearer token authentication&lt;br&gt;&lt;strong&gt;Required when REMOTE_AUTH_ENABLE=true&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;your-secret-key-here&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AMBARI_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ambari server hostname or IP address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;host.docker.internal&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AMBARI_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ambari server port number&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AMBARI_USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Username for Ambari server authentication&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AMBARI_PASS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Password for Ambari server authentication&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AMBARI_CLUSTER_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the target Ambari cluster&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TEST-AMBARI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TEST-AMBARI&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_OPENWEBUI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for Open WebUI container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3001&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_MCP_SERVER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for MCP server container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;18001&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_MCPO_PROXY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for MCPO proxy container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8001&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;code&gt;AMBARI_CLUSTER_NAME&lt;/code&gt; serves as the default target cluster for operations when no specific cluster is specified. All environment variables can be configured via the &lt;code&gt;.env&lt;/code&gt; file. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transport Selection Logic:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration Priority:&lt;/strong&gt; CLI arguments &amp;gt; Environment variables &amp;gt; Default values&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transport Selection Logic:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLI Priority&lt;/strong&gt;: &lt;code&gt;--type streamable-http --host 0.0.0.0 --port 18001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Priority&lt;/strong&gt;: &lt;code&gt;FASTMCP_TYPE=streamable-http FASTMCP_HOST=0.0.0.0 FASTMCP_PORT=18001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legacy Support&lt;/strong&gt;: &lt;code&gt;FASTMCP_PORT=18001&lt;/code&gt; (automatically enables streamable-http mode)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;stdio&lt;/code&gt; mode when no configuration is provided&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Environment Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/call518/MCP-Ambari-API.git
&lt;span class="nb"&gt;cd &lt;/span&gt;MCP-Ambari-API

&lt;span class="c"&gt;# 2. Set up environment configuration&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env

&lt;span class="c"&gt;# 3. Configure your Ambari connection in .env file&lt;/span&gt;
&lt;span class="nv"&gt;AMBARI_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-ambari-host
&lt;span class="nv"&gt;AMBARI_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-ambari-port  
&lt;span class="nv"&gt;AMBARI_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-username
&lt;span class="nv"&gt;AMBARI_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-password
&lt;span class="nv"&gt;AMBARI_CLUSTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-cluster-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔐 Security &amp;amp; Authentication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bearer Token Authentication
&lt;/h3&gt;

&lt;p&gt;For &lt;code&gt;streamable-http&lt;/code&gt; mode, this MCP server supports Bearer token authentication to secure remote access. This is especially important when running the server in production environments.&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuration
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Enable Authentication:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In .env file&lt;/span&gt;
&lt;span class="nv"&gt;REMOTE_AUTH_ENABLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;REMOTE_SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secure-secret-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or via CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_ambari_api &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="nt"&gt;--auth-enable&lt;/span&gt; &lt;span class="nt"&gt;--secret-key&lt;/span&gt; your-secure-secret-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Security Levels
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;stdio mode&lt;/strong&gt; (Default): Local-only access, no authentication needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http + REMOTE_AUTH_ENABLE=false/undefined&lt;/strong&gt;: Remote access without authentication ⚠️ &lt;strong&gt;NOT RECOMMENDED for production&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http + REMOTE_AUTH_ENABLE=true&lt;/strong&gt;: Remote access with Bearer token authentication ✅ &lt;strong&gt;RECOMMENDED for production&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🔒 Default Policy&lt;/strong&gt;: &lt;code&gt;REMOTE_AUTH_ENABLE&lt;/code&gt; defaults to &lt;code&gt;false&lt;/code&gt; if undefined, empty, or null. This ensures the server starts even without explicit authentication configuration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Client Configuration
&lt;/h4&gt;

&lt;p&gt;When authentication is enabled, MCP clients must include the Bearer token in the Authorization header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://your-server:8000/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer your-secure-secret-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Security Best Practices
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always enable authentication&lt;/strong&gt; when using streamable-http mode in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use strong, randomly generated secret keys&lt;/strong&gt; (32+ characters recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use HTTPS&lt;/strong&gt; when possible (configure reverse proxy with SSL/TLS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict network access&lt;/strong&gt; using firewalls or network policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate secret keys regularly&lt;/strong&gt; for enhanced security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor access logs&lt;/strong&gt; for unauthorized access attempts&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Error Handling
&lt;/h4&gt;

&lt;p&gt;When authentication fails, the server returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized&lt;/strong&gt; for missing or invalid tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed error messages&lt;/strong&gt; in JSON format for debugging&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Method 1: Local MCP (transport="stdio")
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-ambari-api"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"host.docker.internal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PASS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_CLUSTER_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TEST-AMBARI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Method 2: Remote MCP (transport="streamable-http")
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;On MCP-Client Host:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:18001/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With Bearer Token Authentication (Recommended for production):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:18001/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer your-secure-secret-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example usage: Claude-Desktop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;claude_desktop_config.json&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-ambari-api"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"localhost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7070"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PASS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_CLUSTER_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TEST-AMBARI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx34t9pnqpgycyrbqyxec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx34t9pnqpgycyrbqyxec.png" alt=" " width="800" height="773"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(Option) Configure Multiple Ambari Cluster&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Ambari-Cluster-A"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-ambari-api"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a.foo.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin-user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PASS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin-pass"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_CLUSTER_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AMBARI-A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Ambari-Cluster-B"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-ambari-api"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b.bar.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin-user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_PASS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin-pass"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AMBARI_CLUSTER_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AMBARI-B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Remote Access with Authentication (Claude Desktop):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ambari-api-remote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://your-server-ip:18001/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer your-secure-secret-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Core Features &amp;amp; Capabilities
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Service Operations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hadoop Service Management&lt;/strong&gt;: Start, stop, restart HDFS, YARN, Spark, HBase, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk Operations&lt;/strong&gt;: Control all cluster services simultaneously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status Monitoring&lt;/strong&gt;: Real-time service health and performance tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified Config Tool&lt;/strong&gt;: Single interface for all configuration types (yarn-site, hdfs-site, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk Configuration&lt;/strong&gt;: Export and manage multiple configurations with filtering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration Validation&lt;/strong&gt;: Syntax checking and validation before applying changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monitoring &amp;amp; Alerting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Alerts&lt;/strong&gt;: Current and historical cluster alerts with filtering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request Tracking&lt;/strong&gt;: Monitor long-running operations with detailed progress&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host Monitoring&lt;/strong&gt;: Hardware metrics, component states, and resource utilization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Administration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Management&lt;/strong&gt;: Check cluster user administration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host Management&lt;/strong&gt;: Node registration, component assignments, and health monitoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Available MCP Tools
&lt;/h2&gt;

&lt;p&gt;This MCP server provides the following tools for Ambari cluster management:&lt;/p&gt;

&lt;h3&gt;
  
  
  Cluster Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_cluster_info&lt;/code&gt; - Retrieve basic cluster information and status&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_active_requests&lt;/code&gt; - List currently active/running operations&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_request_status&lt;/code&gt; - Check status and progress of specific requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Service Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_cluster_services&lt;/code&gt; - List all services with their status&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_status&lt;/code&gt; - Get detailed status of a specific service&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_components&lt;/code&gt; - List components and host assignments for a service&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_details&lt;/code&gt; - Get comprehensive service information&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start_service&lt;/code&gt; - Start a specific service&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stop_service&lt;/code&gt; - Stop a specific service&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;restart_service&lt;/code&gt; - Restart a specific service&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start_all_services&lt;/code&gt; - Start all services in the cluster&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stop_all_services&lt;/code&gt; - Stop all services in the cluster&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;restart_all_services&lt;/code&gt; - Restart all services in the cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dump_configurations&lt;/code&gt; - Unified configuration tool (replaces &lt;code&gt;get_configurations&lt;/code&gt;, &lt;code&gt;list_configurations&lt;/code&gt;, and the former internal &lt;code&gt;dump_all_configurations&lt;/code&gt;). Supports:

&lt;ul&gt;
&lt;li&gt;Single type: &lt;code&gt;dump_configurations(config_type="yarn-site")&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bulk summary: &lt;code&gt;dump_configurations(summarize=True)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Filter by substring (type or key): &lt;code&gt;dump_configurations(filter="memory")&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Service filter (narrow types by substring): &lt;code&gt;dump_configurations(service_filter="yarn", summarize=True)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Keys only (no values): &lt;code&gt;dump_configurations(include_values=False)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Limit number of types: &lt;code&gt;dump_configurations(limit=10, summarize=True)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Breaking Change: &lt;code&gt;get_configurations&lt;/code&gt; and &lt;code&gt;list_configurations&lt;/code&gt; were removed in favor of this single, more capable tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Host Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_hosts&lt;/code&gt; - List all hosts in the cluster&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_host_details&lt;/code&gt; - Get detailed information for specific or all hosts (includes component states, hardware metrics, and service assignments)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  User Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_users&lt;/code&gt; - List all users in the Ambari system with their usernames and API links&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_user&lt;/code&gt; - Get detailed information about a specific user including:

&lt;ul&gt;
&lt;li&gt;Basic profile (ID, username, display name, user type)&lt;/li&gt;
&lt;li&gt;Status information (admin privileges, active status, login failures)&lt;/li&gt;
&lt;li&gt;Authentication details (LDAP user status, authentication sources)&lt;/li&gt;
&lt;li&gt;Group memberships, privileges, and widget layouts&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Alert Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_alerts_history&lt;/code&gt; - &lt;strong&gt;Unified alert tool&lt;/strong&gt; for both current and historical alerts:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Current mode&lt;/strong&gt; (&lt;code&gt;mode="current"&lt;/code&gt;): Retrieve current/active alerts with real-time status&lt;/li&gt;
&lt;li&gt;Current alert states across cluster, services, or hosts&lt;/li&gt;
&lt;li&gt;Maintenance mode filtering (ON/OFF)&lt;/li&gt;
&lt;li&gt;Summary formats: basic summary and grouped by definition&lt;/li&gt;
&lt;li&gt;Detailed alert information including timestamps and descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History mode&lt;/strong&gt; (&lt;code&gt;mode="history"&lt;/code&gt;): Retrieve historical alert events from the cluster&lt;/li&gt;
&lt;li&gt;Scope filtering: cluster-wide, service-specific, or host-specific alerts&lt;/li&gt;
&lt;li&gt;Time range filtering: from/to timestamp support&lt;/li&gt;
&lt;li&gt;Pagination support for large datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Common features&lt;/strong&gt; (both modes):&lt;/li&gt;
&lt;li&gt;State filtering: CRITICAL, WARNING, OK, UNKNOWN alerts&lt;/li&gt;
&lt;li&gt;Definition filtering: filter by specific alert definition names&lt;/li&gt;
&lt;li&gt;Multiple output formats: detailed, summary, compact&lt;/li&gt;
&lt;li&gt;Unified API for consistent alert querying experience&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Contributing &amp;amp; Support
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How to Contribute
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🐛 &lt;strong&gt;Report Bugs&lt;/strong&gt;: &lt;a href="https://github.com/call518/MCP-Ambari-API/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Request Features&lt;/strong&gt;: &lt;a href="https://github.com/call518/MCP-Ambari-API/issues" rel="noopener noreferrer"&gt;Feature Requests&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;Submit PRs&lt;/strong&gt;: &lt;a href="https://github.com/call518/MCP-Ambari-API/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guidelines&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Improve Docs&lt;/strong&gt;: Help make documentation better&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technologies Used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: Python 3.11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: Apache Ambari REST API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transport&lt;/strong&gt;: stdio (local) and streamable-http (remote)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Docker, Docker Compose, PyPI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dev Env.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;WSL2(networkingMode = bridged) + Docker-Desktop

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.wslconfig&lt;/code&gt;: tested with &lt;code&gt;networkingMode = bridged&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Python 3.11 venv
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;### Option-1: with uv&lt;/span&gt;
  uv venv &lt;span class="nt"&gt;--python&lt;/span&gt; 3.11 &lt;span class="nt"&gt;--seed&lt;/span&gt;

  &lt;span class="c"&gt;### Option-2: with pip&lt;/span&gt;
  python3.11 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
  &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
  pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ❓ Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: What Ambari versions are supported?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Ambari 2.7+ is recommended. Earlier versions may work but are not officially tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can I use this with cloud-managed Hadoop clusters?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Yes, as long as Ambari API endpoints are accessible, it works with on-premise, cloud, and hybrid deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I troubleshoot connection issues?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Check your &lt;code&gt;AMBARI_HOST&lt;/code&gt;, &lt;code&gt;AMBARI_PORT&lt;/code&gt;, and network connectivity. Enable debug logging with &lt;code&gt;MCP_LOG_LEVEL=DEBUG&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How does this compare to Ambari Web UI?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: This provides programmatic access via AI/LLM commands, perfect for automation, scripting, and integration with modern DevOps workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;🤝 &lt;strong&gt;Got ideas? Found bugs? Want to add cool features?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're always excited to welcome new contributors! Whether you're fixing a typo, adding a new monitoring tool, or improving documentation - every contribution makes this project better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ways to contribute:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Report issues or bugs&lt;/li&gt;
&lt;li&gt;💡 Suggest new PostgreSQL monitoring features&lt;/li&gt;
&lt;li&gt;📝 Improve documentation &lt;/li&gt;
&lt;li&gt;🚀 Submit pull requests&lt;/li&gt;
&lt;li&gt;⭐ Star the repo if you find it useful!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; The codebase is designed to be super friendly for adding new tools. Check out the existing &lt;code&gt;@mcp.tool()&lt;/code&gt; functions in &lt;code&gt;mcp_main.py&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📄 License
&lt;/h2&gt;

&lt;p&gt;This project is licensed under the MIT License.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MCP-OpenStack-Ops : MCP-Server for OpenStack Cluster</title>
      <dc:creator>call518</dc:creator>
      <pubDate>Mon, 22 Sep 2025 13:01:05 +0000</pubDate>
      <link>https://dev.to/call518/mcp-openstack-ops-mcp-server-for-openstack-cluster-4h7g</link>
      <guid>https://dev.to/call518/mcp-openstack-ops-mcp-server-for-openstack-cluster-4h7g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GitHub: &lt;a href="https://github.com/call518/MCP-OpenStack-Ops" rel="noopener noreferrer"&gt;https://github.com/call518/MCP-OpenStack-Ops&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  MCP-OpenStack-Ops
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Architecture &amp;amp; Internal (DeepWiki)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://deepwiki.com/call518/MCP-OpenStack-Ops" rel="noopener noreferrer"&gt;https://deepwiki.com/call518/MCP-OpenStack-Ops&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Single Project Scope&lt;/strong&gt;: Operates within the configured &lt;code&gt;OS_PROJECT_NAME&lt;/code&gt; project scope for complete tenant isolation. All operations are restricted to resources within the specified project, ensuring data privacy and security in multi-tenant environments.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;OpenStack SDK Integration&lt;/strong&gt;: Direct integration with OpenStack SDK for real-time project operations.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Enhanced Operation Safety&lt;/strong&gt;: Built-in safety controls with &lt;code&gt;ALLOW_MODIFY_OPERATIONS&lt;/code&gt; environment variable and comprehensive error handling that prevents false success claims and provides clear guidance for asynchronous operations.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Smart Async Operation Handling&lt;/strong&gt;: Intelligent detection and guidance for OpenStack asynchronous operations (instance management, volume operations, network changes) with tool-specific timing expectations and verification commands.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Enhanced Project Monitoring&lt;/strong&gt;: Comprehensive project status reports with health scoring system, resource utilization analysis, instance state tracking, and detailed health breakdown by service categories.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Complete Service Coverage&lt;/strong&gt;: 93+ comprehensive tools covering Identity, Compute, Network, Storage, Image, Orchestration, Load Balancer, and Monitoring services within project scope.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Advanced Instance Management&lt;/strong&gt;: Enhanced server lifecycle operations with backup, migration, rescue, and administrative functions including state analysis.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;🆕 Bulk Operations &amp;amp; Filter-based Targeting&lt;/strong&gt;: Advanced bulk operations for instances, volumes, images, networks, keypairs, and snapshots with intelligent filtering (name_contains, status, etc.) enabling one-step operations like "stop all instances containing 'test'".&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;🆕 Post-Action Status Verification&lt;/strong&gt;: Automatic status verification after operations with emoji indicators (🟢🔴🟡) providing immediate feedback on operation success and current resource states.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;🆕 Unified Resource Queries&lt;/strong&gt;: Consolidated get_instance tool replacing multiple separate query tools, providing comprehensive resource information in a single call.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Server Event Tracking&lt;/strong&gt;: Detailed server event history and lifecycle monitoring with comprehensive logging.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Network Analysis&lt;/strong&gt;: Comprehensive network operations with external/private network classification, floating IP management, and port operations within project scope.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Volume Management&lt;/strong&gt;: Comprehensive volume attachment/detachment operations with state analysis and capacity tracking.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Smart Image Filtering&lt;/strong&gt;: Access to public, community, shared, and project-owned images with intelligent visibility filtering that prevents zero-image count issues.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Enterprise Features&lt;/strong&gt;: User management, role assignments, keypair management, floating IP operations, volume snapshots within project boundaries.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Intelligent Search&lt;/strong&gt;: Flexible instance search with partial matching and case-sensitive options.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Load Balancer Integration&lt;/strong&gt;: Complete load balancer management with health monitoring within project scope.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Connection Optimization&lt;/strong&gt;: Global connection caching and automatic retry mechanisms.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Multi-Project Support&lt;/strong&gt;: Deploy multiple MCP servers with different &lt;code&gt;OS_PROJECT_NAME&lt;/code&gt; values for complete multi-tenant project management with full isolation.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Docker Support&lt;/strong&gt;: Containerized deployment optimized for OpenStack Epoxy environments.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Flexible Transport&lt;/strong&gt;: Support for both &lt;code&gt;stdio&lt;/code&gt; and &lt;code&gt;streamable-http&lt;/code&gt; transports with comprehensive logging.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Compatibility Notice&lt;/strong&gt;: This MCP server is developed and optimized for &lt;strong&gt;OpenStack Epoxy (2025.1)&lt;/strong&gt; as the primary target environment. However, it is compatible with most modern OpenStack releases (Dalmatian, Caracal, Bobcat, etc.) as the majority of APIs remain consistent across versions. Only a few specific API endpoints may require adaptation for full compatibility with older releases.&lt;/p&gt;

&lt;p&gt;🚧 &lt;strong&gt;Coming Soon&lt;/strong&gt;: Dynamic multi-version OpenStack API compatibility is actively under development and will be available in upcoming releases, providing seamless support for all major OpenStack deployments automatically.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OpenStack Dashboard (Epoxy 2025.1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg8dwj5i0uu7vtmgauww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg8dwj5i0uu7vtmgauww.png" alt=" " width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Query Example - Cluster Status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysvt1drubhyjj0ct2fop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysvt1drubhyjj0ct2fop.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🆕 Latest Enhancements (v1.x)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bulk Operations &amp;amp; Filter-based Targeting&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Revolutionary approach to resource management enabling one-step operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Traditional approach (multiple steps):&lt;/span&gt;
1. search_instances&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; → get list
2. set_instance&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"vm1"&lt;/span&gt;, &lt;span class="s2"&gt;"stop"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; → stop individually  
3. set_instance&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"vm2"&lt;/span&gt;, &lt;span class="s2"&gt;"stop"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; → stop individually

&lt;span class="c"&gt;# NEW enhanced approach (single step):&lt;/span&gt;
set_instance&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"stop"&lt;/span&gt;, &lt;span class="nv"&gt;name_contains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# ✨ Stops ALL instances containing "test"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Supported Tools with Enhanced Capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/strong&gt;: Bulk lifecycle management with filtering (name_contains, status, flavor_contains, image_contains)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_volume&lt;/code&gt;&lt;/strong&gt;: Bulk volume operations with filtering (name_contains, status, size filtering)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_image&lt;/code&gt;&lt;/strong&gt;: Bulk image management with filtering (name_contains, status)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_networks&lt;/code&gt;&lt;/strong&gt;: Bulk network operations with filtering (name_contains, status)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_keypair&lt;/code&gt;&lt;/strong&gt;: Bulk keypair management with filtering (name_contains)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;set_snapshot&lt;/code&gt;&lt;/strong&gt;: Bulk snapshot operations with filtering (name_contains, status)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Input Format Flexibility:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Single resource
&lt;/span&gt;&lt;span class="n"&gt;resource_names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vm1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Multiple resources (comma-separated)
&lt;/span&gt;&lt;span class="n"&gt;resource_names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vm1,vm2,vm3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# JSON array format
&lt;/span&gt;&lt;span class="n"&gt;resource_names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vm1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vm2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vm3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;# Filter-based (automatic target identification)
&lt;/span&gt;&lt;span class="n"&gt;name_contains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ACTIVE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Post-Action Status Verification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every operation now provides immediate feedback with visual indicators:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;✅ Bulk Instance Management - Action: stop
📊 Total instances: 3
✅ Successes: 2
❌ Failures: 1

Post-Action Status:
🟢 test-vm-1: SHUTOFF  
🟢 test-vm-2: SHUTOFF
🔴 test-vm-3: ERROR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Unified Resource Queries&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;New consolidated &lt;code&gt;get_instance&lt;/code&gt; tool replaces multiple separate tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Old: &lt;code&gt;get_instance_details&lt;/code&gt;, &lt;code&gt;get_instance_info&lt;/code&gt;, &lt;code&gt;get_instance_status&lt;/code&gt;, &lt;code&gt;get_instance_network_info&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ New: &lt;code&gt;get_instance(instance_names="vm1,vm2")&lt;/code&gt; - Single tool, comprehensive information&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📊 OpenStack CLI vs MCP Tools Mapping
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Detailed Mapping by Category&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 🖥️ &lt;strong&gt;Compute (Nova)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;NEW UNIFIED&lt;/strong&gt; - Pagination, filtering support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Replaces get_instance_by_name, get_instance_by_id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk creation support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server start/stop/reboot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk operations with filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk deletion with name_contains filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server backup create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_server_backup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Backup creation with rotation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server image create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="snapshot")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image/snapshot creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server shelve/unshelve&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance shelving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server lock/unlock&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance locking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server pause/unpause&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance pausing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server suspend/resume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance suspension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server resize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="resize")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance resizing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server resize confirm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="confirm_resize")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Resize confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server resize revert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="revert_resize")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Resize revert&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server rebuild&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_instance&lt;/code&gt; (action="rebuild")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Instance rebuilding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server rescue/unrescue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_instance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Recovery mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migrate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="migrate")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Live migration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server evacuate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="evacuate")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server evacuation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migration list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="list")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Migration listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migration show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="show")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Migration details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migration abort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="abort")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Migration abort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migration confirm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="confirm")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Migration confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server migration force complete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_migration&lt;/code&gt; (action="force_complete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Force migration completion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add network&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_network&lt;/code&gt; (action="add_network")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Network attachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove network&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_network&lt;/code&gt; (action="remove_network")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Network detachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_network&lt;/code&gt; (action="add_port")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port attachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_network&lt;/code&gt; (action="remove_port")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port detachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add floating ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_floating_ip&lt;/code&gt; (action="add")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP association&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove floating ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_floating_ip&lt;/code&gt; (action="remove")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP disassociation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add fixed ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_fixed_ip&lt;/code&gt; (action="add")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Fixed IP addition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove fixed ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_fixed_ip&lt;/code&gt; (action="remove")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Fixed IP removal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add security group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_security_group&lt;/code&gt; (action="add")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Security group addition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove security group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_security_group&lt;/code&gt; (action="remove")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Security group removal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_volume&lt;/code&gt; (action="attach")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume attachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server remove volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_volume&lt;/code&gt; (action="detach")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume detachment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_properties&lt;/code&gt; (action="set")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server property setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_server_properties&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server property unsetting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server dump create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_server_dump&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server dump creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server event list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_server_events&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server event tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server group list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_server_groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server group listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server group create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_server_group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server group management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack flavor list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_flavor_list&lt;/code&gt; (via cluster_status)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack flavor create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_flavor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack keypair list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_keypair_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Keypair listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack keypair create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_keypair&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Keypair management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack hypervisor list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_hypervisor_details&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Hypervisor querying&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack availability zone list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_availability_zones&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone listing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. 🌐 &lt;strong&gt;Network (Neutron)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_network_details&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Detailed network information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_network_details&lt;/code&gt; (name param)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific network query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_networks&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk network creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_networks&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk deletion with filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_networks&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ENHANCED&lt;/strong&gt; - Bulk updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack subnet list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_network_details&lt;/code&gt; (includes subnets)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Subnet information included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack subnet create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_subnets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Subnet management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack router list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_routers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Router listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack router create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Router management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_floating_ips&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip&lt;/code&gt; (action="set")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP property setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip&lt;/code&gt; (action="show")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP property clearing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip pool list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_floating_ip_pools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Floating IP pool listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip port forwarding create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip_port_forwarding&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port forwarding creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip port forwarding delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip_port_forwarding&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port forwarding deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip port forwarding list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip_port_forwarding&lt;/code&gt; (action="list")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port forwarding listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip port forwarding set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip_port_forwarding&lt;/code&gt; (action="set")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port forwarding updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack floating ip port forwarding show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_floating_ip_port_forwarding&lt;/code&gt; (action="show")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port forwarding details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack security group list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_security_groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Security group listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack security group create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Security group management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack port list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_network_details&lt;/code&gt; (includes ports)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port information included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack port create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_network_ports&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Port management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network qos policy list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;QoS policy listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network qos policy create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_network_qos_policies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;QoS policy management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network agent list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_service_status&lt;/code&gt; (includes agents)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Network agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack network agent set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_network_agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Network agent management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. 💾 &lt;strong&gt;Storage (Cinder)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_volume_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_volume_list&lt;/code&gt; (filtering)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific volume query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume creation/deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_volume&lt;/code&gt; (action="modify")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume property modification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume type list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_volume_types&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume type listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume type create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Volume type management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume snapshot list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_volume_snapshots&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Snapshot listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume snapshot create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_snapshot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Snapshot management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack backup list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Backup listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack backup create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_volume_backups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume backup management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume transfer request list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Volume transfer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server volume list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_server_volumes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server volume listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack server add/remove volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_server_volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Server volume attach/detach&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume group list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Volume group listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume group create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_volume_groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Volume group management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume qos list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;QoS listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack volume qos create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_volume_qos&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;QoS management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4. 🖼️ &lt;strong&gt;Image (Glance)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_image_detail_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_image_detail_list&lt;/code&gt; (filtering)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific image query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_image&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Enhanced image creation with min_disk, min_ram, properties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_image&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_image&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image property modification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image save&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_image&lt;/code&gt; (action="save")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image download&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image add project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Project sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image member list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Member listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image member create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_image_members&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image member management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image set --property&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_image_metadata&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack image set --public/private&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_image_visibility&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Image visibility setting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5. 👥 &lt;strong&gt;Identity (Keystone)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack user list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_user_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;User listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack user show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_user_list&lt;/code&gt; (filtering)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific user query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack user create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;User management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack project list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_project_details&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Project listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack project show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_project_details&lt;/code&gt; (name param)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific project query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack project create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Project management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack role list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_role_assignments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Role listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack role assignment list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_role_assignments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Role assignment listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack role create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_roles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Role management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack domain list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Domain listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack domain create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_domains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Domain management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack group list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Group listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack group create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_identity_groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Group management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack service list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_service_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Service listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack service create/delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_services&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Service management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack endpoint list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_service_status&lt;/code&gt; (includes endpoints)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Endpoint information&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6. 🔥 &lt;strong&gt;Orchestration (Heat)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_heat_stacks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Stack listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_heat_stacks&lt;/code&gt; (filtering)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Specific stack query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_heat_stack&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Stack creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_heat_stack&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Stack deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_heat_stack&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Stack update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack suspend/resume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_heat_stack&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Stack suspend/resume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack resource list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Stack resource listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack event list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Stack event listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack template show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Template query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack stack output list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(Not yet implemented)&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Stack output listing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7. ⚖️ &lt;strong&gt;Load Balancer (Octavia)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer listing with pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer detailed information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer property update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer stats show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer status show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer status tree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer failover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer&lt;/code&gt; (action="failover")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer failover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Load balancer property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Listener Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_listeners&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener listing for load balancer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_listener&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener creation (HTTP/HTTPS/TCP/UDP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_listener&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_listeners&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener detailed information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_listener&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener property update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener stats show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_listeners&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer listener unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_listener&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Listener property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pool Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_pools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool listing (all or by listener)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_pool&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool creation with algorithms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_pool&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_pool&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool property update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_pools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool detailed information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool stats show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_pools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer pool unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_pool&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Member Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_members&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_member&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_member&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_member&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member property update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_members&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member detailed information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer member unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_member&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Pool member property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Health Monitor Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_health_monitors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_health_monitor&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_health_monitor&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_health_monitor&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_health_monitors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor detailed information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer healthmonitor unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_health_monitor&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Health monitor property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L7 Policy Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_l7_policies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_policy&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_policy&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_policy&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_l7_policies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7policy unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_policy&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 policy property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;L7 Rule Management&lt;/strong&gt; 🆕&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_l7_rules&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_rule&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_rule&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_rule&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_l7_rules&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer l7rule unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_l7_rule&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;L7 rule property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Amphora Management&lt;/strong&gt; 🆕&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_amphorae&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Amphora listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_amphora&lt;/code&gt; (action="show")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Amphora details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora configure&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_amphora&lt;/code&gt; (action="configure")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Amphora configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora failover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_amphora&lt;/code&gt; (action="failover")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Amphora failover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Not supported by OpenStack SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer amphora stats show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Not supported by OpenStack SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provider Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer provider list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_providers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Provider listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer provider capability list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_providers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Provider capability listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Availability Zone Management&lt;/strong&gt; 🆕&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_availability_zones&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_availability_zones&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_availability_zone&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_availability_zone&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_availability_zone&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer availabilityzone unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_availability_zone&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Availability zone property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Flavor Management&lt;/strong&gt; 🆕&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_flavors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_flavors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavor unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flavor Profile Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_flavor_profiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor profile listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_flavor_profiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor profile details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor_profile&lt;/code&gt; (action="create")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor profile creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor_profile&lt;/code&gt; (action="update")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor profile update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile unset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor_profile&lt;/code&gt; (action="unset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Flavor profile property unset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer flavorprofile delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_flavor_profile&lt;/code&gt; (action="delete")&lt;/td&gt;
&lt;td&gt;🚧&lt;/td&gt;
&lt;td&gt;Pending implementation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Quota Management&lt;/strong&gt; 🆕&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer quota list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_quotas&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer quota show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_load_balancer_quotas&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer quota set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_quota&lt;/code&gt; (action="set")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack loadbalancer quota reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;set_load_balancer_quota&lt;/code&gt; (action="reset")&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota reset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  8. 📊 &lt;strong&gt;Monitoring &amp;amp; Logging&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resource monitoring&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_resource_monitoring&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Resource monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service status&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_service_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Service status query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cluster overview&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_cluster_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Cluster overview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_service_logs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Service log management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System metrics&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_metrics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Metrics management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alarm management&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_alarms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Alarm management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compute agents&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_compute_agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Compute agent management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage statistics&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_usage_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Usage statistics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  9. 📏 &lt;strong&gt;Usage &amp;amp; Quota&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OpenStack CLI Command&lt;/th&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack quota show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_quota&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack quota set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_quota&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Quota setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack usage show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_usage_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Usage query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openstack limits show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_quota&lt;/code&gt; (includes limits)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Limits query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource utilization&lt;/td&gt;
&lt;td&gt;&lt;code&gt;get_resource_monitoring&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Resource utilization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98alygcehqd70b7mj160.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98alygcehqd70b7mj160.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Environment Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone and navigate to project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;MCP-OpenStack-Ops

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
uv &lt;span class="nb"&gt;sync&lt;/span&gt;

&lt;span class="c"&gt;# Configure environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Edit .env with your OpenStack credentials&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Environment Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configure your &lt;code&gt;.env&lt;/code&gt; file with OpenStack credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# OpenStack Authentication (required)&lt;/span&gt;
&lt;span class="nv"&gt;OS_AUTH_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-openstack-host
&lt;span class="nv"&gt;OS_AUTH_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5000
&lt;span class="nv"&gt;OS_IDENTITY_API_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3
&lt;span class="nv"&gt;OS_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-username
&lt;span class="nv"&gt;OS_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-password
&lt;span class="nv"&gt;OS_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-project
&lt;span class="nv"&gt;OS_PROJECT_DOMAIN_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default
&lt;span class="nv"&gt;OS_USER_DOMAIN_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default
&lt;span class="nv"&gt;OS_REGION_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;RegionOne

&lt;span class="c"&gt;# OpenStack Service Ports (customizable)&lt;/span&gt;
&lt;span class="nv"&gt;OS_COMPUTE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8774
&lt;span class="nv"&gt;OS_NETWORK_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9696
&lt;span class="nv"&gt;OS_VOLUME_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8776
&lt;span class="nv"&gt;OS_IMAGE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9292
&lt;span class="nv"&gt;OS_PLACEMENT_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8780
&lt;span class="nv"&gt;OS_HEAT_STACK_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8004
&lt;span class="nv"&gt;OS_HEAT_STACK_CFN_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8000

&lt;span class="c"&gt;# MCP Server Configuration (optional)&lt;/span&gt;
&lt;span class="nv"&gt;MCP_LOG_LEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;INFO
&lt;span class="nv"&gt;ALLOW_MODIFY_OPERATIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;FASTMCP_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stdio
&lt;span class="nv"&gt;FASTMCP_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;span class="nv"&gt;FASTMCP_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Run Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start all services&lt;/span&gt;
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Check logs&lt;/span&gt;
docker-compose logs mcp-server
docker-compose logs mcpo-proxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Container Architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mcp-server&lt;/strong&gt;: OpenStack MCP server with tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mcpo-proxy&lt;/strong&gt;: OpenAPI (REST-API)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;open-webui&lt;/strong&gt;: Web interface for testing and interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Service URLs - Docker Internal&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP Server: &lt;code&gt;localhost:8080&lt;/code&gt; (HTTP transport)&lt;/li&gt;
&lt;li&gt;MCPO Proxy: &lt;code&gt;localhost:8000&lt;/code&gt; (OpenStack API proxy)&lt;/li&gt;
&lt;li&gt;Open WebUI: &lt;code&gt;localhost:3000&lt;/code&gt; (Web interface)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Service URLs - Docker External&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP Server: &lt;code&gt;host.docker.internal:18005&lt;/code&gt; (HTTP transport)&lt;/li&gt;
&lt;li&gt;MCPO Proxy: &lt;code&gt;host.docker.internal:8005&lt;/code&gt; (OpenStack API proxy)&lt;/li&gt;
&lt;li&gt;Open WebUI: &lt;code&gt;host.docker.internal:3005&lt;/code&gt; (Web interface)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  For Claude Desktop Integration
&lt;/h4&gt;

&lt;p&gt;Add to your Claude Desktop configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openstack-ops"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-openstack-ops"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_AUTH_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-openstack-host"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_AUTH_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PROJECT_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-project"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_USERNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-username"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-password"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_USER_DOMAIN_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PROJECT_DOMAIN_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_REGION_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RegionOne"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_IDENTITY_API_VERSION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_INTERFACE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"internal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_COMPUTE_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8774"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_NETWORK_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"9696"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_VOLUME_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8776"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_IMAGE_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"9292"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PLACEMENT_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8780"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_HEAT_STACK_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_HEAT_STACK_CFN_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18888"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ALLOW_MODIFY_OPERATIONS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Server Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command Line Options
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops &lt;span class="nt"&gt;--help&lt;/span&gt;

Options:
  &lt;span class="nt"&gt;--log-level&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;DEBUG,INFO,WARNING,ERROR,CRITICAL&lt;span class="o"&gt;}&lt;/span&gt;
                        Logging level
  &lt;span class="nt"&gt;--type&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;stdio,streamable-http&lt;span class="o"&gt;}&lt;/span&gt;
                        Transport &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default: stdio&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;--host&lt;/span&gt; HOST          Host address &lt;span class="k"&gt;for &lt;/span&gt;HTTP transport &lt;span class="o"&gt;(&lt;/span&gt;default: 127.0.0.1&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt; PORT          Port number &lt;span class="k"&gt;for &lt;/span&gt;HTTP transport &lt;span class="o"&gt;(&lt;/span&gt;default: 8080&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;--auth-enable&lt;/span&gt;        Enable Bearer token authentication &lt;span class="k"&gt;for &lt;/span&gt;streamable-http mode
  &lt;span class="nt"&gt;--secret-key&lt;/span&gt; SECRET  Secret key &lt;span class="k"&gt;for &lt;/span&gt;Bearer token authentication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Variables
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenStack Authentication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_AUTH_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack Identity service host&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Authentication host address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_AUTH_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack Identity service port&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Authentication port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_USERNAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack username&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;User credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack password&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;User credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_PROJECT_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack project name&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Project scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_IDENTITY_API_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identity API version&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_PROJECT_DOMAIN_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project domain name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Domain scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_USER_DOMAIN_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;User domain name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Domain scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_REGION_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenStack region&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RegionOne&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Regional scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenStack Service Ports&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_COMPUTE_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compute service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8774&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nova endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_NETWORK_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Network service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;9696&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Neutron endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_VOLUME_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Volume service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8776&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cinder endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_IMAGE_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Image service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;9292&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Glance endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_PLACEMENT_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Placement service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8780&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Placement endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_HEAT_STACK_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heat orchestration service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8004&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heat API endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS_HEAT_STACK_CFN_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heat CloudFormation service port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;18888&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Heat CFN API endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP Server Configuration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MCP_LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logging level&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Development debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ALLOW_MODIFY_OPERATIONS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable modify operations&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Safety control for state modifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transport type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stdio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rarely needed to change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP host address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For HTTP mode only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP port number&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For HTTP mode only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Authentication (Optional)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REMOTE_AUTH_ENABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable Bearer token authentication for streamable-http mode&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Production security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REMOTE_SECRET_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Secret key for Bearer token authentication&lt;/td&gt;
&lt;td&gt;Required when auth enabled&lt;/td&gt;
&lt;td&gt;Production security&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔒 Project Isolation &amp;amp; Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single Project Scope Operation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;MCP-OpenStack-Ops operates within a strictly defined project scope&lt;/strong&gt; determined by the &lt;code&gt;OS_PROJECT_NAME&lt;/code&gt; environment variable. This provides complete tenant isolation and data privacy in multi-tenant OpenStack environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Security Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;100% Complete Resource Isolation&lt;/strong&gt;: All operations are restricted to resources within the specified project with enhanced security validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cross-tenant Data Leakage&lt;/strong&gt;: Advanced project ownership validation prevents access to resources from other projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-layer Security Filtering&lt;/strong&gt;: Each service implements intelligent resource filtering by current project ID with additional validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Resource Lookup&lt;/strong&gt;: All resource searches use project-scoped lookup with ownership verification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared Resource Access&lt;/strong&gt;: Intelligently includes shared/public resources (networks, images) while maintaining strict security boundaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Project Access Prevention&lt;/strong&gt;: Enhanced protection against accidental operations on similarly-named resources in other projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Filtered Resources by Project:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Project-Scoped Resources&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Users (via role assignments), Role assignments&lt;/td&gt;
&lt;td&gt;Only users with roles in current project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compute&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Instances, Flavors (embedded data), Keypairs&lt;/td&gt;
&lt;td&gt;All instances within project scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Private images (owned), Public/Community/Shared images&lt;/td&gt;
&lt;td&gt;Smart filtering prevents zero-image issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Networks, Subnets, Security Groups, Floating IPs, Routers&lt;/td&gt;
&lt;td&gt;Includes shared/external networks for access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Volumes, Snapshots, Backups&lt;/td&gt;
&lt;td&gt;All storage resources within project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Heat Stacks, Stack Resources&lt;/td&gt;
&lt;td&gt;All orchestration within project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Load Balancer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Load Balancers, Listeners, Pools&lt;/td&gt;
&lt;td&gt;All load balancing within project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource usage, Project quotas&lt;/td&gt;
&lt;td&gt;Project-specific monitoring data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Security Validation &amp;amp; Testing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Isolation Security Test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To verify that project isolation is working correctly, run the included security test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run project isolation security test&lt;/span&gt;
python test_project_isolation.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Test Results:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔒 OpenStack Project Isolation Security Test
==================================================
📋 Testing project isolation for: your-project

1️⃣ Testing Connection and Project ID...
✅ Connection successful
✅ Current project ID: abc123-def456-ghi789
✅ Project name 'your-project' matches project ID

2️⃣ Testing Resource Ownership Validation...
✅ Found 5 compute instances
   Instance web-server-01: ✅ Owned
   Instance db-server-01: ✅ Owned
✅ Found 3/8 owned networks
✅ Found 10/10 owned volumes

3️⃣ Testing Service-Level Project Filtering...
✅ Compute service returned 5 instances
✅ Network service returned 3 networks  
✅ Storage service returned 10 volumes

4️⃣ Testing Secure Resource Lookup...
ℹ️  Network 'admin' not found or not accessible in current project
ℹ️  Instance 'demo' not found or not accessible in current project

🎯 Project Isolation Test Results
========================================
✅ All security tests passed!
✅ Project 'your-project' isolation verified
✅ Cross-project access prevention confirmed

🔒 Your OpenStack MCP Server is properly secured!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security Features Validated:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Project ID verification and matching&lt;/li&gt;
&lt;li&gt;✅ Resource ownership validation for all services&lt;/li&gt;
&lt;li&gt;✅ Service-level project filtering&lt;/li&gt;
&lt;li&gt;✅ Secure resource lookup with cross-project protection&lt;/li&gt;
&lt;li&gt;✅ Prevention of accidental operations on other projects' resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For managing multiple OpenStack projects, deploy multiple MCP server instances with different &lt;code&gt;OS_PROJECT_NAME&lt;/code&gt; values:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Managing 3 Projects&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Project 1: Production Environment&lt;/span&gt;
&lt;span class="nv"&gt;OS_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production
&lt;span class="c"&gt;# ... other config&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops &lt;span class="nt"&gt;--type&lt;/span&gt; stdio

&lt;span class="c"&gt;# Project 2: Development Environment  &lt;/span&gt;
&lt;span class="nv"&gt;OS_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;development
&lt;span class="c"&gt;# ... other config  &lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="nt"&gt;--port&lt;/span&gt; 8001

&lt;span class="c"&gt;# Project 3: Testing Environment&lt;/span&gt;
&lt;span class="nv"&gt;OS_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;testing  
&lt;span class="c"&gt;# ... other config&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="nt"&gt;--port&lt;/span&gt; 8002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Claude Desktop Multi-Project Configuration Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openstack-production"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp_openstack_ops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PROJECT_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_USERNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-password"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_AUTH_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.35.2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openstack-development"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp_openstack_ops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PROJECT_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_USERNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-password"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_AUTH_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.35.2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openstack-testing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp_openstack_ops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; 
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PROJECT_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"testing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_USERNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-password"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"OS_AUTH_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.168.35.2"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows Claude to access each project independently with complete isolation between environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📁 Ready-to-use Configuration File:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A complete multi-project configuration example is available at &lt;code&gt;mcp-config.json.multi-project&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production&lt;/strong&gt;: Read-only operations for safety (&lt;code&gt;ALLOW_MODIFY_OPERATIONS=false&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development&lt;/strong&gt;: Full operations enabled (&lt;code&gt;ALLOW_MODIFY_OPERATIONS=true&lt;/code&gt;) &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Debug logging enabled (&lt;code&gt;MCP_LOG_LEVEL=DEBUG&lt;/code&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Copy and customize the multi-project configuration&lt;/span&gt;
&lt;span class="nb"&gt;cp &lt;/span&gt;mcp-config.json.multi-project ~/.config/claude-desktop/mcp_servers.json
&lt;span class="c"&gt;# Edit with your OpenStack credentials&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Safety Controls
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Modification Operations Protection
&lt;/h3&gt;

&lt;p&gt;By default, all operations that can modify or delete OpenStack resources are &lt;strong&gt;disabled&lt;/strong&gt; for safety:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Default setting - Only read-only operations allowed&lt;/span&gt;
&lt;span class="nv"&gt;ALLOW_MODIFY_OPERATIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Protected Operations (when &lt;code&gt;ALLOW_MODIFY_OPERATIONS=false&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instance management (start, stop, restart, pause, unpause)&lt;/li&gt;
&lt;li&gt;Volume operations (create, delete, attach, detach)&lt;/li&gt;
&lt;li&gt;Keypair management (create, delete, import)&lt;/li&gt;
&lt;li&gt;Floating IP operations (create, delete, associate, disassociate)&lt;/li&gt;
&lt;li&gt;Snapshot management (create, delete)&lt;/li&gt;
&lt;li&gt;Image management (create, delete, update)&lt;/li&gt;
&lt;li&gt;Heat stack operations (create, delete, update)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Always Available (Read-Only Operations):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cluster status and monitoring&lt;/li&gt;
&lt;li&gt;Resource listings (instances, volumes, networks, etc.)&lt;/li&gt;
&lt;li&gt;Service status checks&lt;/li&gt;
&lt;li&gt;Usage and quota information&lt;/li&gt;
&lt;li&gt;Search and filtering operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚠️ To Enable Modify Operations:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable all operations (USE WITH CAUTION)&lt;/span&gt;
&lt;span class="nv"&gt;ALLOW_MODIFY_OPERATIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tool Registration Behavior:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When &lt;code&gt;ALLOW_MODIFY_OPERATIONS=false&lt;/code&gt;: Only read-only tools are registered with the MCP server&lt;/li&gt;
&lt;li&gt;When &lt;code&gt;ALLOW_MODIFY_OPERATIONS=true&lt;/code&gt;: All tools (read-only + modify operations) are registered&lt;/li&gt;
&lt;li&gt;Tool availability is determined at server startup - restart required after changing this setting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Practices:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;code&gt;ALLOW_MODIFY_OPERATIONS=false&lt;/code&gt; in production environments&lt;/li&gt;
&lt;li&gt;Enable modify operations only in development/testing environments&lt;/li&gt;
&lt;li&gt;Use separate configurations for different environments&lt;/li&gt;
&lt;li&gt;Review operations before enabling modify capabilities&lt;/li&gt;
&lt;li&gt;Restart the MCP server after changing the &lt;code&gt;ALLOW_MODIFY_OPERATIONS&lt;/code&gt; setting&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Example Queries &amp;amp; Usage Patterns
&lt;/h2&gt;

&lt;p&gt;For comprehensive examples of how to interact with this MCP server, including natural language queries and their corresponding tool mappings, see:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📖 &lt;a href="//src/mcp_openstack_ops/prompt_template.md#7-example-queries--usage-patterns"&gt;Example Queries &amp;amp; Usage Patterns&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This section includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 Cluster overview and status queries&lt;/li&gt;
&lt;li&gt;�️ Instance management operations&lt;/li&gt;
&lt;li&gt;🌐 Network configuration tasks&lt;/li&gt;
&lt;li&gt;� Storage management workflows&lt;/li&gt;
&lt;li&gt;🔥 Heat orchestration examples&lt;/li&gt;
&lt;li&gt;⚖️ Load balancer operations&lt;/li&gt;
&lt;li&gt;� Advanced search patterns&lt;/li&gt;
&lt;li&gt;📊 Monitoring and troubleshooting&lt;/li&gt;
&lt;li&gt;🧠 Complex multi-tool query combinations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Performance Optimization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Large-Scale Environment Support
&lt;/h3&gt;

&lt;p&gt;The MCP server is optimized for large OpenStack environments with thousands of instances:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pagination Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default limits prevent memory overflow (50 instances per request)&lt;/li&gt;
&lt;li&gt;Configurable safety limits (maximum 200 instances per request)&lt;/li&gt;
&lt;li&gt;Offset-based pagination for browsing large datasets&lt;/li&gt;
&lt;li&gt;Performance metrics tracking (processing time, instances per second)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Search Optimization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2-phase search process (basic info filtering → detailed info retrieval)&lt;/li&gt;
&lt;li&gt;Intelligent caching with connection reuse&lt;/li&gt;
&lt;li&gt;Selective API calls to minimize overhead&lt;/li&gt;
&lt;li&gt;Case-sensitive search options for precise filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connection Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global connection caching with validity testing&lt;/li&gt;
&lt;li&gt;Automatic retry mechanisms for transient failures&lt;/li&gt;
&lt;li&gt;Connection pooling for high-throughput scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Usage Examples:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Safe large environment browsing&lt;/span&gt;
get_instance_details&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50, &lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;     &lt;span class="c"&gt;# First 50 instances&lt;/span&gt;
get_instance_details&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50, &lt;span class="nv"&gt;offset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50&lt;span class="o"&gt;)&lt;/span&gt;    &lt;span class="c"&gt;# Next 50 instances&lt;/span&gt;

&lt;span class="c"&gt;# Emergency override for small environments&lt;/span&gt;
get_instance_details&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;include_all&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True&lt;span class="o"&gt;)&lt;/span&gt;       &lt;span class="c"&gt;# All instances (use with caution)&lt;/span&gt;

&lt;span class="c"&gt;# Optimized search for large datasets&lt;/span&gt;
search_instances&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"web"&lt;/span&gt;, &lt;span class="s2"&gt;"name"&lt;/span&gt;, &lt;span class="nv"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20&lt;span class="o"&gt;)&lt;/span&gt;    &lt;span class="c"&gt;# Search with reasonable limit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Adding New Tools
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;src/mcp_openstack_ops/mcp_main.py&lt;/code&gt; to add new MCP tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;my_openstack_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Brief description of the tool&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s purpose.

    Functions:
    - List specific functions this tool performs
    - Describe the operations it enables
    - Mention when to use this tool

    Use when user requests [specific scenarios].

    Args:
        param: Description of the parameter

    Returns:
        Description of return value format.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tool called with param: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Implementation using functions.py helpers
&lt;/span&gt;        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;my_helper_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;error_msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: Failed to execute tool - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;error_msg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Helper Functions
&lt;/h3&gt;

&lt;p&gt;Add utility functions to &lt;code&gt;src/mcp_openstack_ops/functions.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;my_helper_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Helper function for OpenStack operations&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_openstack_connection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;# OpenStack SDK operations
&lt;/span&gt;        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;some_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some_operation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Operation completed successfully&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Helper function error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Testing &amp;amp; Validation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Local Testing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test with MCP Inspector (recommended)&lt;/span&gt;
./scripts/run-mcp-inspector-local.sh

&lt;span class="c"&gt;# Test with debug logging&lt;/span&gt;
&lt;span class="nv"&gt;MCP_LOG_LEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DEBUG uv run python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops

&lt;span class="c"&gt;# Validate OpenStack connection&lt;/span&gt;
uv run python &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"from src.mcp_openstack_ops.functions import get_openstack_connection; print(get_openstack_connection())"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔐 Security &amp;amp; Authentication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bearer Token Authentication
&lt;/h3&gt;

&lt;p&gt;For &lt;code&gt;streamable-http&lt;/code&gt; mode, this MCP server supports Bearer token authentication to secure remote access. This is especially important when running the server in production environments.&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuration
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Enable Authentication:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In .env file&lt;/span&gt;
&lt;span class="nv"&gt;REMOTE_AUTH_ENABLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;REMOTE_SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secure-secret-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or via CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python &lt;span class="nt"&gt;-m&lt;/span&gt; mcp_openstack_ops &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="nt"&gt;--auth-enable&lt;/span&gt; &lt;span class="nt"&gt;--secret-key&lt;/span&gt; your-secure-secret-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Security Levels
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;stdio mode&lt;/strong&gt; (Default): Local-only access, no authentication needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http + REMOTE_AUTH_ENABLE=false/undefined&lt;/strong&gt;: Remote access without authentication ⚠️ &lt;strong&gt;NOT RECOMMENDED for production&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http + REMOTE_AUTH_ENABLE=true&lt;/strong&gt;: Remote access with Bearer token authentication ✅ &lt;strong&gt;RECOMMENDED for production&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🔒 Default Policy&lt;/strong&gt;: &lt;code&gt;REMOTE_AUTH_ENABLE&lt;/code&gt; defaults to &lt;code&gt;false&lt;/code&gt; if undefined, empty, or null. This ensures the server starts even without explicit authentication configuration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Client Configuration
&lt;/h4&gt;

&lt;p&gt;When authentication is enabled, MCP clients must include the Bearer token in the Authorization header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openstack-ops"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://your-server:8000/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer your-secure-secret-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Security Best Practices
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always enable authentication&lt;/strong&gt; when using streamable-http mode in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use strong, randomly generated secret keys&lt;/strong&gt; (32+ characters recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use HTTPS&lt;/strong&gt; when possible (configure reverse proxy with SSL/TLS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict network access&lt;/strong&gt; using firewalls or network policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate secret keys regularly&lt;/strong&gt; for enhanced security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor access logs&lt;/strong&gt; for unauthorized access attempts&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Error Handling
&lt;/h4&gt;

&lt;p&gt;When authentication fails, the server returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized&lt;/strong&gt; for missing or invalid tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed error messages&lt;/strong&gt; in JSON format for debugging&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Recent Improvements &amp;amp; Enhancements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;🔒 Complete Project Isolation Security Implementation&lt;/strong&gt; ✨
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;100% Project Isolation Guarantee:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Multi-layer Security Validation&lt;/strong&gt;: Added comprehensive project ownership validation for all resource operations&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Enhanced Delete Operation Security&lt;/strong&gt;: All delete operations now use secure project-scoped lookup with ownership verification&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Create Operation Security&lt;/strong&gt;: Resource references during creation (networks, images, etc.) verified for project ownership&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Query Security Enhancement&lt;/strong&gt;: All list/get operations include explicit project validation with resource ownership checks&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Cross-Project Access Prevention&lt;/strong&gt;: Advanced protection against accidental operations on similarly-named resources in other projects&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Security Test Suite&lt;/strong&gt;: Added &lt;code&gt;test_project_isolation.py&lt;/code&gt; for comprehensive security validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technical Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;New Security Utilities&lt;/strong&gt;: Added &lt;code&gt;get_current_project_id()&lt;/code&gt;, &lt;code&gt;validate_resource_ownership()&lt;/code&gt;, &lt;code&gt;find_resource_by_name_or_id()&lt;/code&gt; functions&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Service-Level Security&lt;/strong&gt;: Enhanced all service modules (compute, network, storage, etc.) with project ownership validation&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Secure Resource Lookup&lt;/strong&gt;: Replaced unsafe name-based loops with secure project-scoped resource lookup&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Error Message Enhancement&lt;/strong&gt;: Improved error messages to clearly indicate project access restrictions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Complete Project Scoping Implementation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Security &amp;amp; Tenant Isolation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;All Services Project-Scoped&lt;/strong&gt;: Identity, Compute, Network, Storage, Image, Orchestration, Load Balancer, and Monitoring services now filter resources by current project ID&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero Cross-Tenant Data Leakage&lt;/strong&gt;: Automatic filtering at OpenStack SDK level using &lt;code&gt;current_project_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Smart Resource Access&lt;/strong&gt;: Intelligent handling of shared/public resources (networks, images) while maintaining security boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fixed Image Service Issues&lt;/strong&gt; 🖼️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Resolved Zero-Image Count Problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Enhanced Image Filtering&lt;/strong&gt;: Now includes public, community, shared, and project-owned images&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Intelligent Visibility Handling&lt;/strong&gt;: Proper handling of different image visibility types&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Prevented Empty Results&lt;/strong&gt;: Fixed filtering logic that was too restrictive&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Improved vCPU/RAM Calculation&lt;/strong&gt; ⚡
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fixed Instance Resource Display:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Embedded Flavor Data Usage&lt;/strong&gt;: Uses server.flavor attributes directly, avoiding 404 API errors&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Accurate Resource Reporting&lt;/strong&gt;: Proper vCPU and RAM values in cluster status reports&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Eliminated API Failures&lt;/strong&gt;: No more flavor lookup failures causing zero resource values&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Enhanced Documentation&lt;/strong&gt; 📚
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Comprehensive Project Scoping Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Multi-Project Management Guide&lt;/strong&gt;: Complete setup instructions for managing multiple OpenStack projects&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Security &amp;amp; Isolation Details&lt;/strong&gt;: Detailed explanation of tenant isolation features&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Ready-to-Use Configuration&lt;/strong&gt;: Pre-configured &lt;code&gt;mcp-config.json.multi-project&lt;/code&gt; for quick setup&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Updated Environment Variables&lt;/strong&gt;: Enhanced &lt;code&gt;.env.example&lt;/code&gt; with project scoping guidance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;This project is licensed under the MIT License - see the LICENSE file for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Fork the repository&lt;/li&gt;
&lt;li&gt;Create a feature branch (&lt;code&gt;git checkout -b feature/amazing-feature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Commit your changes (&lt;code&gt;git commit -m 'Add some amazing feature'&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Push to the branch (&lt;code&gt;git push origin feature/amazing-feature&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Open a Pull Request&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>cloud</category>
      <category>monitoring</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>MCP-Server for PostgreSQL Operations</title>
      <dc:creator>call518</dc:creator>
      <pubDate>Fri, 22 Aug 2025 17:16:09 +0000</pubDate>
      <link>https://dev.to/call518/mcp-server-for-postgresql-operations-5e5l</link>
      <guid>https://dev.to/call518/mcp-server-for-postgresql-operations-5e5l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/call518/MCP-PostgreSQL-Ops" rel="noopener noreferrer"&gt;https://github.com/call518/MCP-PostgreSQL-Ops&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  MCP Server for PostgreSQL Operations and Database Monitoring
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;A professional MCP server for PostgreSQL database operations, monitoring, and management. Supports PostgreSQL 12-17 with comprehensive database analysis, performance monitoring, and intelligent maintenance recommendations through natural language queries. Most features work independently, but advanced query analysis capabilities are enhanced when &lt;code&gt;pg_stat_statements&lt;/code&gt; and (optionally) &lt;code&gt;pg_stat_monitor&lt;/code&gt; extensions are installed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture &amp;amp; Internal (DeepWiki)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://deepwiki.com/call518/MCP-PostgreSQL-Ops" rel="noopener noreferrer"&gt;https://deepwiki.com/call518/MCP-PostgreSQL-Ops&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero Configuration&lt;/strong&gt;: Works with PostgreSQL 12-17 out-of-the-box with automatic version detection.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Natural Language&lt;/strong&gt;: Ask questions like "Show me slow queries" or "Analyze table bloat."&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Production Safe&lt;/strong&gt;: Read-only operations, RDS/Aurora compatible with regular user permissions.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Extension Enhanced&lt;/strong&gt;: Optional &lt;code&gt;pg_stat_statements&lt;/code&gt; and &lt;code&gt;pg_stat_monitor&lt;/code&gt; for advanced query analytics.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Comprehensive Database Monitoring&lt;/strong&gt;: Performance analysis, bloat detection, and maintenance recommendations.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Smart Query Analysis&lt;/strong&gt;: Slow query identification with &lt;code&gt;pg_stat_statements&lt;/code&gt; and &lt;code&gt;pg_stat_monitor&lt;/code&gt; integration.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Schema &amp;amp; Relationship Discovery&lt;/strong&gt;: Database structure exploration with detailed relationship mapping.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;VACUUM &amp;amp; Autovacuum Intelligence&lt;/strong&gt;: Real-time maintenance monitoring and effectiveness analysis.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Multi-Database Operations&lt;/strong&gt;: Seamless cross-database analysis and monitoring.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Enterprise-Ready&lt;/strong&gt;: Safe read-only operations with RDS/Aurora compatibility.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Developer-Friendly&lt;/strong&gt;: Simple codebase for easy customization and tool extension.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔧 &lt;strong&gt;Advanced Capabilities&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Version-aware I/O statistics (enhanced on PostgreSQL 16+).&lt;/li&gt;
&lt;li&gt;Real-time connection and lock monitoring.&lt;/li&gt;
&lt;li&gt;Background process and checkpoint analysis.&lt;/li&gt;
&lt;li&gt;Replication status and WAL monitoring.&lt;/li&gt;
&lt;li&gt;Database capacity and bloat analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tool Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📸 &lt;strong&gt;&lt;a href="https://github.com/call518/MCP-PostgreSQL-Ops/wiki/Tool-Usage-Example" rel="noopener noreferrer"&gt;More Examples with Screenshots →&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi026k1sm6s0zwiomqwrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi026k1sm6s0zwiomqwrz.png" alt=" " width="800" height="722"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famt0pmr9m0abypksnlcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famt0pmr9m0abypksnlcn.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⭐ Quickstart (5 minutes)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &lt;code&gt;postgresql&lt;/code&gt; container included in &lt;code&gt;docker-compose.yml&lt;/code&gt; is intended for quickstart testing purposes only. You can connect to your own PostgreSQL instance by adjusting the environment variables as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to use your own PostgreSQL instance instead of the built-in test container:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update the target PostgreSQL connection information in your &lt;code&gt;.env&lt;/code&gt; file (see POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB).&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;docker-compose.yml&lt;/code&gt;, comment out (disable) the &lt;code&gt;postgres&lt;/code&gt; and &lt;code&gt;postgres-init-extensions&lt;/code&gt; containers to avoid starting the built-in test database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Flow Diagram of Quickstart/Tutorial
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxyg0pk6riwusr0z3amv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxyg0pk6riwusr0z3amv.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Environment Setup
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: While superuser privileges provide access to all databases and system information, the MCP server also works with regular user permissions for basic monitoring tasks.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/call518/MCP-PostgreSQL-Ops.git
&lt;span class="nb"&gt;cd &lt;/span&gt;MCP-PostgreSQL-Ops

&lt;span class="c"&gt;### Check and modify .env file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
cp .env.example .env&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
### No need to modify defaults, but if using your own PostgreSQL server, edit below:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
POSTGRES_HOST=host.docker.internal&lt;br&gt;
POSTGRES_PORT=15432&lt;br&gt;
POSTGRES_USER=postgres&lt;br&gt;
POSTGRES_PASSWORD=changeme!@34&lt;br&gt;
POSTGRES_DB=ecommerce # Default connection DB. Superusers can access all DBs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;gt; **Note**: `PGDATA=/data/db` is preconfigured for the Percona PostgreSQL Docker image, which requires this specific path for proper write permissions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Start Demo Containers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start all containers including built-in PostgreSQL for testing&lt;/span&gt;
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Alternative: If using your own PostgreSQL instance&lt;/span&gt;
&lt;span class="c"&gt;# Comment out postgres and postgres-init-extensions services in docker-compose.yml&lt;/span&gt;
&lt;span class="c"&gt;# Then use the custom configuration:&lt;/span&gt;
&lt;span class="c"&gt;# docker-compose -f docker-compose.custom-db.yml up -d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Access to OpenWebUI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://localhost:3003/" rel="noopener noreferrer"&gt;http://localhost:3003/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The list of MCP tool features provided by &lt;code&gt;swagger&lt;/code&gt; can be found in the MCPO API Docs URL.

&lt;ul&gt;
&lt;li&gt;e.g: &lt;code&gt;http://localhost:8003/docs&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Registering the Tool in OpenWebUI
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;logging in to OpenWebUI with an admin account&lt;/li&gt;
&lt;li&gt;go to "Settings" → "Tools" from the top menu.&lt;/li&gt;
&lt;li&gt;Enter the &lt;code&gt;postgresql-ops&lt;/code&gt; Tool address (e.g., &lt;code&gt;http://localhost:8003/postgresql-ops&lt;/code&gt;) to connect MCP Tools.&lt;/li&gt;
&lt;li&gt;Setup Ollama or OpenAI.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  (NOTE) Sample Test Data Overview
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;create-test-data.sql&lt;/code&gt; script is executed by the &lt;code&gt;postgres-init-extensions&lt;/code&gt; container (defined in docker-compose.yml) on first startup, automatically generating comprehensive test databases for MCP tool testing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Schema &amp;amp; Tables&lt;/th&gt;
&lt;th&gt;Scale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ecommerce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;E-commerce system&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;public&lt;/strong&gt;: categories, products, customers, orders, order_items&lt;/td&gt;
&lt;td&gt;10 categories, 500 products, 100 customers, 200 orders, 400 order items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Analytics &amp;amp; reporting&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;public&lt;/strong&gt;: page_views, sales_summary&lt;/td&gt;
&lt;td&gt;1,000 page views, 30 sales summaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Warehouse management&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;public&lt;/strong&gt;: suppliers, inventory_items, purchase_orders&lt;/td&gt;
&lt;td&gt;10 suppliers, 100 items, 50 purchase orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;hr_system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HR management&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;public&lt;/strong&gt;: departments, employees, payroll&lt;/td&gt;
&lt;td&gt;5 departments, 50 employees, 150 payroll records&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Test users created:&lt;/strong&gt; &lt;code&gt;app_readonly&lt;/code&gt;, &lt;code&gt;app_readwrite&lt;/code&gt;, &lt;code&gt;analytics_user&lt;/code&gt;, &lt;code&gt;backup_user&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized for testing:&lt;/strong&gt; Intentional table bloat, various indexes (used/unused), time-series data, complex relationships&lt;/p&gt;




&lt;h2&gt;
  
  
  Tool Compatibility Matrix
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Automatic Adaptation:&lt;/strong&gt; All tools work transparently across supported versions - no configuration needed!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🟢 &lt;strong&gt;Extension-Independent Tools (No Extensions Required)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Name&lt;/th&gt;
&lt;th&gt;Extensions Required&lt;/th&gt;
&lt;th&gt;PG 12&lt;/th&gt;
&lt;th&gt;PG 13&lt;/th&gt;
&lt;th&gt;PG 14&lt;/th&gt;
&lt;th&gt;PG 15&lt;/th&gt;
&lt;th&gt;PG 16&lt;/th&gt;
&lt;th&gt;PG 17&lt;/th&gt;
&lt;th&gt;System Views/Tables Used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_server_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;version()&lt;/code&gt;, &lt;code&gt;pg_extension&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_active_connections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_activity&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_postgresql_config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_settings&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_database&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;information_schema.tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_schema_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;information_schema.*&lt;/code&gt;, &lt;code&gt;pg_indexes&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_schema_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pg_namespace&lt;/code&gt;, &lt;code&gt;pg_class&lt;/code&gt;, &lt;code&gt;pg_proc&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_relationships&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;information_schema.*&lt;/code&gt; (constraints)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_user_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pg_user&lt;/code&gt;, &lt;code&gt;pg_roles&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_index_usage_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_indexes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_size_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_database_size()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_size_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_total_relation_size()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_vacuum_analyze_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_current_database_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pg_database&lt;/code&gt;, &lt;code&gt;current_database()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_bloat_analysis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_bloat_overview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_autovacuum_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_autovacuum_activity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_running_vacuum_operations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_activity&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_vacuum_effectiveness_analysis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_bloat_analysis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_bloat_overview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_lock_monitoring&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pg_locks&lt;/code&gt;, &lt;code&gt;pg_stat_activity&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_wal_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_current_wal_lsn()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_database&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_table_io_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_statio_user_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_index_io_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_statio_user_indexes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_database_conflicts_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_database_conflicts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Version-Aware Tools (Auto-Adapting)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Name&lt;/th&gt;
&lt;th&gt;Extensions Required&lt;/th&gt;
&lt;th&gt;PG 12&lt;/th&gt;
&lt;th&gt;PG 13&lt;/th&gt;
&lt;th&gt;PG 14&lt;/th&gt;
&lt;th&gt;PG 15&lt;/th&gt;
&lt;th&gt;PG 16&lt;/th&gt;
&lt;th&gt;PG 17&lt;/th&gt;
&lt;th&gt;Special Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_io_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅ Basic&lt;/td&gt;
&lt;td&gt;✅ Basic&lt;/td&gt;
&lt;td&gt;✅ Basic&lt;/td&gt;
&lt;td&gt;✅ Basic&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PG16+: &lt;code&gt;pg_stat_io&lt;/code&gt; support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_bgwriter_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Special&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;PG15: Separate checkpointer stats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_replication_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅ Compatible&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PG13+: &lt;code&gt;wal_status&lt;/code&gt;, &lt;code&gt;safe_wal_size&lt;/code&gt;; PG16+: enhanced WAL receiver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_all_tables_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;td&gt;✅ Compatible&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PG13+: &lt;code&gt;n_ins_since_vacuum&lt;/code&gt; tracking for vacuum maintenance optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_user_functions_stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;⚙️ Config Required&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Requires &lt;code&gt;track_functions=pl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🟡 &lt;strong&gt;Extension-Dependent Tools (Extensions Required)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Name&lt;/th&gt;
&lt;th&gt;Required Extension&lt;/th&gt;
&lt;th&gt;PG 12&lt;/th&gt;
&lt;th&gt;PG 13&lt;/th&gt;
&lt;th&gt;PG 14&lt;/th&gt;
&lt;th&gt;PG 15&lt;/th&gt;
&lt;th&gt;PG 16&lt;/th&gt;
&lt;th&gt;PG 17&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_pg_stat_statements_top_queries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_statements&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Compatible&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PG12: &lt;code&gt;total_time&lt;/code&gt; → &lt;code&gt;total_exec_time&lt;/code&gt;; PG13+: native &lt;code&gt;total_exec_time&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_pg_stat_monitor_recent_queries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_stat_monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Compatible&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;✅ &lt;strong&gt;Enhanced&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PG12: &lt;code&gt;total_time&lt;/code&gt; → &lt;code&gt;total_exec_time&lt;/code&gt;; PG13+: native &lt;code&gt;total_exec_time&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📋 PostgreSQL 18 Support&lt;/strong&gt;: PostgreSQL 18 is currently in beta phase and not yet supported by Percona Distribution PostgreSQL. Support will be added once PostgreSQL 18 reaches stable release and distribution support becomes available.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Desktop Integration
&lt;/h3&gt;

&lt;p&gt;(Recommended) Add to your Claude Desktop configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"postgresql-ops"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-postgresql-ops"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15432"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"changeme!@34"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_DB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ecommerce"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Show all active connections in a clear and readable html table format."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqh2gme5k7bicnnad3ex7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqh2gme5k7bicnnad3ex7.png" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Show all relationships for customers table in ecommerce database as a Mermaid diagram."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyelfrw7kdrtwowpstlv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyelfrw7kdrtwowpstlv.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Optional) Run with Local Source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"postgresql-ops"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src.mcp_postgresql_ops.mcp_main"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"PYTHONPATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/MCP-PostgreSQL-Ops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15432"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"changeme!@34"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_DB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ecommerce"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run MCP-Server as Standalon
&lt;/h3&gt;

&lt;h4&gt;
  
  
  /w Pypi and uvx (Recommended)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Stdio mode&lt;/span&gt;
uvx &lt;span class="nt"&gt;--python&lt;/span&gt; 3.11 mcp-postgresql-ops &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt; stdio

&lt;span class="c"&gt;# HTTP mode&lt;/span&gt;
uvx &lt;span class="nt"&gt;--python&lt;/span&gt; 3.11 mcp-postgresql-ops
  &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--host&lt;/span&gt; 127.0.0.1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt; 8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--log-level&lt;/span&gt; DEBUG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  (Option) Configure Multiple PostgreSQL Instances
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Postgresql-A"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-postgresql-ops"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a.foo.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5432"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_DB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Postgresql-B"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"--python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-postgresql-ops"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_HOST"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b.bar.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PORT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5432"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_USER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_PASSWORD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"POSTGRES_DB"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgres"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  /w Local Source
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Stdio mode&lt;/span&gt;
&lt;span class="nv"&gt;PYTHONPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/MCP-PostgreSQL-Ops
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.mcp_postgresql_ops.mcp_main &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt; stdio

&lt;span class="c"&gt;# HTTP mode&lt;/span&gt;
&lt;span class="nv"&gt;PYTHONPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/MCP-PostgreSQL-Ops
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.mcp_postgresql_ops.mcp_main &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt; streamable-http &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--host&lt;/span&gt; 127.0.0.1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt; 8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--log-level&lt;/span&gt; DEBUG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Environment Variables
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Project Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PYTHONPATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Python module search path for MCP server imports&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app/src&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MCP_LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Server logging verbosity (DEBUG, INFO, WARNING, ERROR)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MCP transport protocol (stdio for CLI, streamable-http for web)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stdio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;streamable-http&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP server bind address (0.0.0.0 for all interfaces)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FASTMCP_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP server port for MCP communication&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PGSQL_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL major version for Docker image selection&lt;/td&gt;
&lt;td&gt;&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PGDATA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL data directory inside Docker container (&lt;strong&gt;Do not modify&lt;/strong&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/var/lib/postgresql/data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/data/db&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL server hostname or IP address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;host.docker.internal&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL server port number&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5432&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;15432&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL connection username (needs read permissions)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL user password (supports special characters)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;changeme!@34&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;changeme!@34&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_DB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default database name for connections&lt;/td&gt;
&lt;td&gt;&lt;code&gt;testdb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ecommerce&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POSTGRES_MAX_CONNECTIONS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL max_connections configuration parameter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_OPENWEBUI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for Open WebUI container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3003&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_MCP_SERVER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for MCP server container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;18003&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOCKER_EXTERNAL_PORT_MCPO_PROXY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Host port mapping for MCPO proxy container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;8003&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;code&gt;POSTGRES_DB&lt;/code&gt; serves as the default target database for operations when no specific database is specified. In Docker environments, if set to a non-default name, this database will be automatically created during initial PostgreSQL startup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Required PostgreSQL Extensions
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;For more details, see the ## Tool Compatibility Matrix&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Most MCP tools work without any PostgreSQL extensions. section below. Some advanced performance analysis tools require the following extensions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Query performance statistics (required only for get_pg_stat_statements_top_queries)&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;pg_stat_statements&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Advanced monitoring (optional, used by get_pg_stat_monitor_recent_queries)&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;pg_stat_monitor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick Setup&lt;/strong&gt;: For new PostgreSQL installations, add to &lt;code&gt;postgresql.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;shared_preload_libraries = 'pg_stat_statements'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart PostgreSQL and run the CREATE EXTENSION commands above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pg_stat_statements&lt;/code&gt; is required only for slow query analysis tools.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pg_stat_monitor&lt;/code&gt; is optional and used for real-time query monitoring.&lt;/li&gt;
&lt;li&gt;All other tools work without these extensions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Minimum Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL 12+ (tested with PostgreSQL 17)&lt;/li&gt;
&lt;li&gt;Python 3.11&lt;/li&gt;
&lt;li&gt;Network access to PostgreSQL server&lt;/li&gt;
&lt;li&gt;Read permissions on system catalogs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required PostgreSQL Configuration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Statistics Collection Settings&lt;/strong&gt;:&lt;br&gt;
Some MCP tools require specific PostgreSQL configuration parameters to collect statistics. Choose one of the following configuration methods:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools affected by these settings&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;get_user_functions_stats&lt;/strong&gt;: Requires &lt;code&gt;track_functions = pl&lt;/code&gt; or &lt;code&gt;track_functions = all&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;get_table_io_stats&lt;/strong&gt; &amp;amp; &lt;strong&gt;get_index_io_stats&lt;/strong&gt;: More accurate timing with &lt;code&gt;track_io_timing = on&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;get_database_stats&lt;/strong&gt;: Enhanced I/O timing with &lt;code&gt;track_io_timing = on&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verification&lt;/strong&gt;:&lt;br&gt;
After applying any method, verify the settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_settings&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'track_activities'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'track_counts'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'track_io_timing'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'track_functions'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

       &lt;span class="n"&gt;name&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;context&lt;/span&gt;  
&lt;span class="c1"&gt;------------------+---------+-----------&lt;/span&gt;
 &lt;span class="n"&gt;track_activities&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;superuser&lt;/span&gt;
 &lt;span class="n"&gt;track_counts&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;superuser&lt;/span&gt;
 &lt;span class="n"&gt;track_functions&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;pl&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;superuser&lt;/span&gt;
 &lt;span class="n"&gt;track_io_timing&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;superuser&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Method 1: postgresql.conf (Recommended for Self-Managed PostgreSQL)
&lt;/h4&gt;

&lt;p&gt;Add the following to your &lt;code&gt;postgresql.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# Basic statistics collection (usually enabled by default)
&lt;/span&gt;&lt;span class="py"&gt;track_activities&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;on&lt;/span&gt;
&lt;span class="py"&gt;track_counts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;on&lt;/span&gt;

&lt;span class="c"&gt;# Required for function statistics tools
&lt;/span&gt;&lt;span class="py"&gt;track_functions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;pl    # Enables PL/pgSQL function statistics collection&lt;/span&gt;

&lt;span class="c"&gt;# Optional but recommended for accurate I/O timing
&lt;/span&gt;&lt;span class="py"&gt;track_io_timing&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;on    # Enables I/O timing statistics collection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart PostgreSQL server.&lt;/p&gt;

&lt;h4&gt;
  
  
  Method 2: PostgreSQL Startup Parameters
&lt;/h4&gt;

&lt;p&gt;For Docker or command-line PostgreSQL startup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Docker example&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mypassword &lt;span class="se"&gt;\&lt;/span&gt;
  postgres:17 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_activities&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_counts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_functions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pl &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_io_timing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on

&lt;span class="c"&gt;# Direct postgres command&lt;/span&gt;
postgres &lt;span class="nt"&gt;-D&lt;/span&gt; /data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_activities&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_counts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_functions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pl &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;track_io_timing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Method 3: Dynamic Configuration (AWS RDS, Azure, GCP, Managed Services)
&lt;/h4&gt;

&lt;p&gt;For managed PostgreSQL services where you cannot modify &lt;code&gt;postgresql.conf&lt;/code&gt;, use SQL commands to change settings dynamically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Enable basic statistics collection (usually enabled by default)&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_activities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Enable function statistics collection (requires superuser privileges)&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_functions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'pl'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Enable I/O timing statistics (optional but recommended)&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_io_timing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Reload configuration without restart (run separately)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;pg_reload_conf&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Alternative for session-level testing&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Set for current session only (temporary)&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_activities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_functions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'pl'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_io_timing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: When using command-line tools, run each SQL statement separately to avoid transaction block errors.&lt;/p&gt;




&lt;h2&gt;
  
  
  RDS/Aurora Compatibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This server is read-only and works with regular roles on RDS/Aurora. For advanced analysis enable pg_stat_statements; pg_stat_monitor is not available on managed engines.&lt;/li&gt;
&lt;li&gt;On RDS/Aurora, prefer DB Parameter Group over ALTER SYSTEM for persistent settings.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;  &lt;span class="c1"&gt;-- Verify preload setting&lt;/span&gt;
  &lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;shared_preload_libraries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Enable extension in target DB&lt;/span&gt;
  &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;pg_stat_statements&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Recommended visibility for monitoring&lt;/span&gt;
  &lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;pg_read_all_stats&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;app_user&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example Queries
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🟢 Extension-Independent Tools (Always Available)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;get_server_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show PostgreSQL server version and extension status."&lt;/li&gt;
&lt;li&gt;"Check if pg_stat_statements is installed."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_active_connections&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show all active connections."&lt;/li&gt;
&lt;li&gt;"List current sessions with database and user."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_postgresql_config&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show all PostgreSQL configuration parameters."&lt;/li&gt;
&lt;li&gt;"Find all memory-related configuration settings."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_list&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"List all databases and their sizes."&lt;/li&gt;
&lt;li&gt;"Show database list with owner information."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_list&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"List all tables in the ecommerce database."&lt;/li&gt;
&lt;li&gt;"Show table sizes in the public schema."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_schema_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show detailed schema information for the customers table in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Get column details and constraints for products table in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Analyze table structure with indexes and foreign keys for orders table in sales schema of ecommerce database."&lt;/li&gt;
&lt;li&gt;"Show schema overview for all tables in public schema of inventory database."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Column types, constraints, indexes, foreign keys, table metadata&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Required&lt;/strong&gt;: &lt;code&gt;database_name&lt;/code&gt; parameter must be specified&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_schema_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show all schemas in ecommerce database with their contents."&lt;/li&gt;
&lt;li&gt;"Get detailed information about sales schema in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Analyze schema structure and permissions for inventory database."&lt;/li&gt;
&lt;li&gt;"Show schema overview with table counts and sizes for hr_system database."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Schema owners, permissions, object counts, sizes, contents&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Required&lt;/strong&gt;: &lt;code&gt;database_name&lt;/code&gt; parameter must be specified&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_relationships&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show all relationships for customers table in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Analyze foreign key relationships for orders table in sales schema of ecommerce database."&lt;/li&gt;
&lt;li&gt;"Get database-wide relationship overview for ecommerce database."&lt;/li&gt;
&lt;li&gt;"Find all tables that reference products table in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Show cross-schema relationships in inventory database."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Foreign key relationships (inbound/outbound), cross-schema dependencies, constraint details&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Required&lt;/strong&gt;: &lt;code&gt;database_name&lt;/code&gt; parameter must be specified&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Leave &lt;code&gt;table_name&lt;/code&gt; empty for database-wide relationship analysis&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_user_list&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"List all database users and their roles."&lt;/li&gt;
&lt;li&gt;"Show user permissions for a specific database."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_index_usage_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze index usage efficiency."&lt;/li&gt;
&lt;li&gt;"Find unused indexes in the current database."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_size_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show database capacity analysis."&lt;/li&gt;
&lt;li&gt;"Find the largest databases by size."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_size_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show table and index size analysis."&lt;/li&gt;
&lt;li&gt;"Find largest tables in a specific schema."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_vacuum_analyze_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show recent VACUUM and ANALYZE operations."&lt;/li&gt;
&lt;li&gt;"List tables needing VACUUM."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_current_database_info&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"What database am I connected to?"&lt;/li&gt;
&lt;li&gt;"Show current database information and connection details."&lt;/li&gt;
&lt;li&gt;"Display database encoding, collation, and size information."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Database name, encoding, collation, size, connection limits&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_bloat_analysis&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze table bloat in the current database."&lt;/li&gt;
&lt;li&gt;"Show dead tuple ratios and bloat estimates for user_logs table pattern."&lt;/li&gt;
&lt;li&gt;"Find tables with high bloat that need VACUUM maintenance."&lt;/li&gt;
&lt;li&gt;"Analyze bloat in specific schema with minimum 100 dead tuples."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Dead tuple ratios, bloat size estimates, VACUUM recommendations, pattern filtering&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Extension-Independent approach using pg_stat_user_tables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_bloat_overview&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show database-wide bloat summary by schema."&lt;/li&gt;
&lt;li&gt;"Get high-level view of storage efficiency across all schemas."&lt;/li&gt;
&lt;li&gt;"Identify schemas requiring maintenance attention."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Schema-level aggregation, total bloat estimates, maintenance status&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_autovacuum_status&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Check autovacuum configuration and trigger conditions."&lt;/li&gt;
&lt;li&gt;"Show tables needing immediate autovacuum attention."&lt;/li&gt;
&lt;li&gt;"Analyze autovacuum threshold percentages for public schema."&lt;/li&gt;
&lt;li&gt;"Find tables approaching autovacuum trigger points."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Trigger threshold analysis, urgency classification, configuration status&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Extension-Independent autovacuum monitoring using pg_stat_user_tables&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_autovacuum_activity&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show autovacuum activity patterns for the last 48 hours."&lt;/li&gt;
&lt;li&gt;"Monitor autovacuum execution frequency and timing."&lt;/li&gt;
&lt;li&gt;"Find tables with irregular autovacuum patterns."&lt;/li&gt;
&lt;li&gt;"Analyze recent autovacuum and autoanalyze history."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Activity patterns, execution frequency, timing analysis&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Historical autovacuum pattern analysis&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_running_vacuum_operations&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show currently running VACUUM and ANALYZE operations."&lt;/li&gt;
&lt;li&gt;"Monitor active maintenance operations and their progress."&lt;/li&gt;
&lt;li&gt;"Check if any VACUUM operations are blocking queries."&lt;/li&gt;
&lt;li&gt;"Find long-running maintenance operations."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Real-time operation status, elapsed time, impact level, process details&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Real-time maintenance monitoring using pg_stat_activity&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_vacuum_effectiveness_analysis&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze VACUUM effectiveness and maintenance patterns."&lt;/li&gt;
&lt;li&gt;"Compare manual VACUUM vs autovacuum efficiency."&lt;/li&gt;
&lt;li&gt;"Find tables with suboptimal maintenance patterns."&lt;/li&gt;
&lt;li&gt;"Check VACUUM frequency vs table activity ratios."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Maintenance pattern analysis, effectiveness assessment, DML-to-VACUUM ratios&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;PostgreSQL 12-17&lt;/strong&gt;: Fully compatible, no extensions required&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Usage&lt;/strong&gt;: Strategic VACUUM analysis using existing statistics&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_bloat_analysis&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze table bloat in the public schema."&lt;/li&gt;
&lt;li&gt;"Show tables with high dead tuple ratios in ecommerce database."&lt;/li&gt;
&lt;li&gt;"Find tables requiring VACUUM maintenance."&lt;/li&gt;
&lt;li&gt;"Check bloat for tables with more than 5000 dead tuples."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Dead tuple ratios, estimated bloat size, VACUUM recommendations&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Required&lt;/strong&gt;: Specify &lt;code&gt;database_name&lt;/code&gt; for cross-database analysis&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_bloat_overview&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show database-wide bloat summary by schema."&lt;/li&gt;
&lt;li&gt;"Get bloat overview for inventory database."&lt;/li&gt;
&lt;li&gt;"Identify schemas with highest bloat ratios."&lt;/li&gt;
&lt;li&gt;"Database maintenance planning with bloat statistics."&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Features&lt;/strong&gt;: Schema-level aggregation, maintenance priorities, size recommendations&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_lock_monitoring&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show all current locks and blocked sessions."&lt;/li&gt;
&lt;li&gt;"Show only blocked sessions with granted=false filter."&lt;/li&gt;
&lt;li&gt;"Monitor locks by specific user with username filter."&lt;/li&gt;
&lt;li&gt;"Check exclusive locks with mode filter."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_wal_status&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show WAL status and archiving information."&lt;/li&gt;
&lt;li&gt;"Monitor WAL generation and current LSN position."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_replication_status&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Check replication connections and lag status."&lt;/li&gt;
&lt;li&gt;"Monitor replication slots and WAL receiver status."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show comprehensive database performance metrics."&lt;/li&gt;
&lt;li&gt;"Analyze transaction commit ratios and I/O statistics."&lt;/li&gt;
&lt;li&gt;"Monitor buffer cache hit ratios and temporary file usage."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_bgwriter_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze checkpoint performance and timing."&lt;/li&gt;
&lt;li&gt;"Show me checkpoint performance."&lt;/li&gt;
&lt;li&gt;"Show background writer efficiency statistics."&lt;/li&gt;
&lt;li&gt;"Monitor buffer allocation and fsync patterns."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_user_functions_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze user-defined function performance."&lt;/li&gt;
&lt;li&gt;"Show function call counts and execution times."&lt;/li&gt;
&lt;li&gt;"Identify performance bottlenecks in custom functions."&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Requires&lt;/strong&gt;: &lt;code&gt;track_functions = pl&lt;/code&gt; in postgresql.conf&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_table_io_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Analyze table I/O performance and buffer hit ratios."&lt;/li&gt;
&lt;li&gt;"Identify tables with poor buffer cache performance."&lt;/li&gt;
&lt;li&gt;"Monitor TOAST table I/O statistics."&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Enhanced with&lt;/strong&gt;: &lt;code&gt;track_io_timing = on&lt;/code&gt; for accurate timing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_index_io_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Show index I/O performance and buffer efficiency."&lt;/li&gt;
&lt;li&gt;"Identify indexes causing excessive disk I/O."&lt;/li&gt;
&lt;li&gt;"Monitor index cache-friendliness patterns."&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Enhanced with&lt;/strong&gt;: &lt;code&gt;track_io_timing = on&lt;/code&gt; for accurate timing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_database_conflicts_stats&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Check replication conflicts on standby servers."&lt;/li&gt;
&lt;li&gt;"Analyze conflict types and resolution statistics."&lt;/li&gt;
&lt;li&gt;"Monitor standby server query cancellation patterns."&lt;/li&gt;
&lt;li&gt;"Monitor WAL generation and current LSN position."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_replication_status&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"Check replication connections and lag status."&lt;/li&gt;
&lt;li&gt;"Monitor replication slots and WAL receiver status."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Version-Aware Tools (Auto-Adapting)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;get_io_stats&lt;/strong&gt; (New!)

&lt;ul&gt;
&lt;li&gt;"Show comprehensive I/O statistics." (PostgreSQL 16+ provides detailed breakdown)&lt;/li&gt;
&lt;li&gt;"Analyze I/O statistics."&lt;/li&gt;
&lt;li&gt;"Analyze buffer cache efficiency and I/O timing."&lt;/li&gt;
&lt;li&gt;"Monitor I/O patterns by backend type and context."&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;PG16+&lt;/strong&gt;: Full pg_stat_io with timing, backend types, and contexts&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;PG12-15&lt;/strong&gt;: Basic pg_statio_* fallback with buffer hit ratios&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_bgwriter_stats&lt;/strong&gt; (Enhanced!)

&lt;ul&gt;
&lt;li&gt;"Show background writer and checkpoint performance."&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;PG15&lt;/strong&gt;: Separate checkpointer and bgwriter statistics (unique feature)&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;PG12-14, 16+&lt;/strong&gt;: Combined bgwriter stats (includes checkpointer data)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_server_info&lt;/strong&gt; (Enhanced!)

&lt;ul&gt;
&lt;li&gt;"Show server version and compatibility features."&lt;/li&gt;
&lt;li&gt;"Check server compatibility."&lt;/li&gt;
&lt;li&gt;"Check what MCP tools are available on this PostgreSQL version."&lt;/li&gt;
&lt;li&gt;"Displays feature availability matrix and upgrade recommendations."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_all_tables_stats&lt;/strong&gt; (Enhanced!)

&lt;ul&gt;
&lt;li&gt;"Show comprehensive statistics for all tables." (version-compatible for PG12-17)&lt;/li&gt;
&lt;li&gt;"Include system tables with include_system=true parameter."&lt;/li&gt;
&lt;li&gt;"Analyze table access patterns and maintenance needs."&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;PG13+&lt;/strong&gt;: Tracks insertions since vacuum (&lt;code&gt;n_ins_since_vacuum&lt;/code&gt;) for optimal maintenance scheduling&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;PG12&lt;/strong&gt;: Compatible mode with NULL for unsupported columns&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🟡 Extension-Dependent Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;get_pg_stat_statements_top_queries&lt;/strong&gt; (Requires &lt;code&gt;pg_stat_statements&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;"Show top 10 slowest queries."&lt;/li&gt;
&lt;li&gt;"Analyze slow queries in the inventory database."&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Version-Compatible&lt;/strong&gt;: PG12 uses &lt;code&gt;total_time&lt;/code&gt; → &lt;code&gt;total_exec_time&lt;/code&gt; mapping; PG13+ uses native columns&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Cross-Version&lt;/strong&gt;: Automatically adapts query structure for PostgreSQL 12-17 compatibility&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;get_pg_stat_monitor_recent_queries&lt;/strong&gt; (Optional, uses &lt;code&gt;pg_stat_monitor&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;"Show recent queries in real time."&lt;/li&gt;
&lt;li&gt;"Monitor query activity for the last 5 minutes."&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Version-Compatible&lt;/strong&gt;: PG12 uses &lt;code&gt;total_time&lt;/code&gt; → &lt;code&gt;total_exec_time&lt;/code&gt; mapping; PG13+ uses native columns&lt;/li&gt;
&lt;li&gt;💡 &lt;strong&gt;Cross-Version&lt;/strong&gt;: Automatically adapts query structure for PostgreSQL 12-17 compatibility&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 Pro Tip&lt;/strong&gt;: All tools support multi-database operations using the &lt;code&gt;database_name&lt;/code&gt; parameter. This allows PostgreSQL superusers to analyze and monitor multiple databases from a single MCP server instance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connection Issues
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Check PostgreSQL server status&lt;/li&gt;
&lt;li&gt;Verify connection parameters in &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Ensure network connectivity&lt;/li&gt;
&lt;li&gt;Check user permissions&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Extension Errors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;get_server_info&lt;/code&gt; to check extension status&lt;/li&gt;
&lt;li&gt;Install missing extensions:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;pg_stat_statements&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;pg_stat_monitor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Restart PostgreSQL if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Configuration Issues
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"No data found" for function statistics&lt;/strong&gt;: Check &lt;code&gt;track_functions&lt;/code&gt; setting
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;track_functions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;-- Should be 'pl' or 'all'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick fix for managed services (AWS RDS, etc.)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_functions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'pl'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;pg_reload_conf&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Missing I/O timing data&lt;/strong&gt;: Enable timing collection
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;track_io_timing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;-- Should be 'on'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick fix&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;track_io_timing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'on'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;pg_reload_conf&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Apply configuration changes&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-managed&lt;/strong&gt;: Add settings to &lt;code&gt;postgresql.conf&lt;/code&gt; and restart server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed services&lt;/strong&gt;: Use &lt;code&gt;ALTER SYSTEM SET&lt;/code&gt; + &lt;code&gt;SELECT pg_reload_conf()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporary testing&lt;/strong&gt;: Use &lt;code&gt;SET parameter = value&lt;/code&gt; for current session&lt;/li&gt;
&lt;li&gt;Generate some database activity to populate statistics&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Performance Issues
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Use &lt;code&gt;limit&lt;/code&gt; parameters to reduce result size&lt;/li&gt;
&lt;li&gt;Run monitoring during off-peak hours&lt;/li&gt;
&lt;li&gt;Check database load before running analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Version Compatibility Issues
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;For more details, see the ## Tool Compatibility Matrix&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run compatibility check first&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# "Use get_server_info to check version and available features"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Understanding feature availability&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL 16-17&lt;/strong&gt;: All features available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL 15+&lt;/strong&gt;: Separate checkpointer stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL 14+&lt;/strong&gt;: Parallel query tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL 12-13&lt;/strong&gt;: Core functionality only&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;If a tool shows "Not Available"&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feature requires newer PostgreSQL version&lt;/li&gt;
&lt;li&gt;Tool will automatically use best available alternative&lt;/li&gt;
&lt;li&gt;Consider upgrading PostgreSQL for enhanced monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Testing &amp;amp; Development
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test with MCP Inspector&lt;/span&gt;
./scripts/run-mcp-inspector-local.sh

&lt;span class="c"&gt;# Direct execution for debugging&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.mcp_postgresql_ops.mcp_main &lt;span class="nt"&gt;--log-level&lt;/span&gt; DEBUG

&lt;span class="c"&gt;# Test version compatibility (requires different PostgreSQL versions)&lt;/span&gt;
&lt;span class="c"&gt;# Modify POSTGRES_HOST in .env to point to different versions&lt;/span&gt;

&lt;span class="c"&gt;# Run tests (if you add any)&lt;/span&gt;
uv run pytest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Version Compatibility Testing
&lt;/h3&gt;

&lt;p&gt;The MCP server automatically adapts to PostgreSQL versions 12-17. To test across versions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up test databases&lt;/strong&gt;: Different PostgreSQL versions (12, 14, 15, 16, 17)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run compatibility tests&lt;/strong&gt;: Point to each version and verify tool behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check feature detection&lt;/strong&gt;: Ensure proper version detection and feature availability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify fallback behavior&lt;/strong&gt;: Confirm graceful degradation on older versions&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Security Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All tools are &lt;strong&gt;read-only&lt;/strong&gt; - no data modification capabilities&lt;/li&gt;
&lt;li&gt;Sensitive information (passwords) are masked in outputs&lt;/li&gt;
&lt;li&gt;No direct SQL execution - only predefined queries&lt;/li&gt;
&lt;li&gt;Follows principle of least privilege&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;🤝 &lt;strong&gt;Got ideas? Found bugs? Want to add cool features?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're always excited to welcome new contributors! Whether you're fixing a typo, adding a new monitoring tool, or improving documentation - every contribution makes this project better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ways to contribute:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Report issues or bugs&lt;/li&gt;
&lt;li&gt;💡 Suggest new PostgreSQL monitoring features&lt;/li&gt;
&lt;li&gt;📝 Improve documentation &lt;/li&gt;
&lt;li&gt;🚀 Submit pull requests&lt;/li&gt;
&lt;li&gt;⭐ Star the repo if you find it useful!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; The codebase is designed to be super friendly for adding new tools. Check out the existing &lt;code&gt;@mcp.tool()&lt;/code&gt; functions in &lt;code&gt;mcp_main.py&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  MCPO Swagger Docs
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;[MCPO Swagger URL] &lt;a href="http://localhost:8003/postgresql-ops/docs" rel="noopener noreferrer"&gt;http://localhost:8003/postgresql-ops/docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7o4d1g5spvjrq5ckp40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7o4d1g5spvjrq5ckp40.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Freely use, modify, and distribute under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⭐ Other Projects
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Other MCP servers by the same author:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/call518/MCP-Airflow-API" rel="noopener noreferrer"&gt;MCP-Airflow-API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/call518/MCP-Ambari-API" rel="noopener noreferrer"&gt;MCP-Ambari-API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/call518/LogSentinelAI" rel="noopener noreferrer"&gt;LogSentinelAI - LLB-Based Log Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>postgres</category>
      <category>tooling</category>
      <category>monitoring</category>
      <category>opensource</category>
    </item>
    <item>
      <title>[LogSentinelAI] LLM-Powered Log Analyzer for Security Events and Anomalies</title>
      <dc:creator>call518</dc:creator>
      <pubDate>Fri, 25 Jul 2025 11:09:27 +0000</pubDate>
      <link>https://dev.to/call518/llm-based-log-analyzer-detecting-security-events-and-storing-results-in-elasticsearch-for-52cm</link>
      <guid>https://dev.to/call518/llm-based-log-analyzer-detecting-security-events-and-storing-results-in-elasticsearch-for-52cm</guid>
      <description>&lt;h1&gt;
  
  
  GitHub Repo
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/call518/LogSentinelAI" rel="noopener noreferrer"&gt;https://github.com/call518/LogSentinelAI&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Hello everyone,&lt;/p&gt;

&lt;p&gt;After seeing how brittle and time-consuming rule-based log parsing can be in real-world environments, I set out to build LogSentinelAI, an open-source, LLM-powered log analysis tool. LLM-powered log analysis tool. Whereas traditional solutions force you to normalize logs and write rigid parsing rules, LogSentinelAI works on both structured and unstructured logs: you simply define the fields you care about, and the LLM automatically extracts, semantically analyzes, and understands context across log entries. In our Demo, we even showcase visualization with Elastic Stack.&lt;/p&gt;

&lt;p&gt;I’d love feedback from system/security engineers, developers, and ops folks:&lt;/p&gt;

&lt;p&gt;How accurate is field extraction on your real-world logs?&lt;/p&gt;

&lt;p&gt;Does performance (throughput, latency) and cost feel reasonable?&lt;/p&gt;

&lt;p&gt;Are there any security or privacy concerns I haven’t considered?&lt;/p&gt;

&lt;p&gt;Your honest critiques and improvement ideas will be hugely valuable.&lt;br&gt;
Full details and examples on Medium:&lt;br&gt;
&lt;a href="https://medium.com/@call518/logsentinelai-practical-llm-based-ai-log-analysis-for-security-engineering-fed4c941dee2" rel="noopener noreferrer"&gt;https://medium.com/@call518/logsentinelai-practical-llm-based-ai-log-analysis-for-security-engineering-fed4c941dee2&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Dashboard Example
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyn16gvdipiaml467mfk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyn16gvdipiaml467mfk.png" alt="Kibana Dashboard" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 JSON Output Example
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4heyeazfiq192ulgsuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4heyeazfiq192ulgsuh.png" alt="JSON Output" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  LogSentinelAI - LLM-Powered Log Analyzer for Security Events and Anomalies
&lt;/h1&gt;

</description>
      <category>llm</category>
      <category>log</category>
      <category>ai</category>
      <category>analytics</category>
    </item>
  </channel>
</rss>
