Skip to main content
Glama
AiGanak

aiganak-aiops-mcp

by AiGanak
README.md
# ⚑ AiGanak-AIOps-MCP

> **Autonomous Infrastructure & Code Health Diagnostic Agent over Model Context Protocol (MCP)**  
> Developed by **Akshay Bankar | AiGanak Technologies ([aiganak.com](https://aiganak.com))** | Released under the Apache 2.0 License.

[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
[![Python Version](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/)
[![MCP Protocol](https://img.shields.io/badge/MCP-FastMCP-brightgreen.svg)](https://modelcontextprotocol.io/)
[![Orchestrator](https://img.shields.io/badge/Agent-LangGraph-orange.svg)](https://github.com/langchain-ai/langgraph)
[![Observability](https://img.shields.io/badge/LLMOps-Arize_Phoenix-purple.svg)](https://phoenix.arize.com/)

---

## 🌟 Overview

**aiganak-aiops-mcp** is a flagship reference architecture and open-source MCP server designed to automate infrastructure diagnostics, log root-cause analysis, and safe code patching.

By combining **DuckDB OLAP analytics**, **Python AST structural inspection**, **LangGraph cyclic state machines**, and **Arize Phoenix LLMOps observability**, this repository provides a top 1% reference blueprint for production-grade agentic integrations.

---

## πŸ“ System Architecture

### 1. High-Level Protocol & Component Boundaries

```text
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                       Client Layer (IDE / Agent)                            β”‚
    β”‚           (Cursor IDE / Claude Desktop / Custom LangGraph Agent)            β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                           β”‚
                                           β”‚ Standard STDIO / JSON-RPC
                                           β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    aiganak-aiops-mcp (FastMCP Server)                       β”‚
    β”‚                                                                             β”‚
    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
    β”‚  β”‚    query_log_file      β”‚ β”‚   inspect_code_ast    β”‚ β”‚ apply_code_patch  β”‚ β”‚
    β”‚  β”‚  (DuckDB OLAP Engine)  β”‚ β”‚  (Python AST Parser)  β”‚ β”‚ (Git Safety Gate) β”‚ β”‚
    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚                          β”‚                       β”‚
                   β–Ό                          β–Ό                       β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚  JSONL/CSV Logs   β”‚      β”‚  Source Code AST  β”‚    β”‚   Host Codebase   β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### 2. LangGraph Stateful Self-Healing Orchestrator

```text
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚       node_log_analyzer        β”‚ <───┐
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                 β”‚                      β”‚
                                 β–Ό                      β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                 β”‚      node_code_inspector       β”‚     β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                 β”‚                      β”‚
                                 β–Ό                      β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                 β”‚      node_patch_proposer       β”‚     β”‚ (Retry Loop)
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                 β”‚                      β”‚
                   [ Human Approval Gate Interrupt ]    β”‚
                                 β”‚                      β”‚
                        (Approved / Local)              β”‚
                                 β”‚                      β”‚
                                 β–Ό                      β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                 β”‚       node_patch_applier       β”‚     β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                 β”‚                      β”‚
                                 β–Ό                      β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                 β”‚         node_verifier          β”‚     β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                 β”‚                      β”‚
                    [ Verification Passed? ]            β”‚
                     /                    \             β”‚
                  (Yes)                  (No) β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
                    β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”
                 β”‚ END β”‚
                 β””β”€β”€β”€β”€β”€β”˜
```

TDQS

B3.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a clearly distinct task: log querying, code inspection, and code modification. There is no overlap between querying logs, parsing ASTs, and applying patches, so an agent would not confuse them.

Naming Consistency2/5

The naming is inconsistent: query_log_file uses a verb_noun_obj pattern, inspect_code_ast uses verb_noun_obj, but apply_code_patch uses verb_noun. The verbs (query, inspect, apply) are varied and not obviously part of a unified domain vocabulary, and the patterns differ across tools.

Tool Count3/5

Three tools is on the borderline of being too thin for an AIOps server, especially given the mixed domain of log analysis and code modification. The count is defensible, but the scope feels narrow for a server with 'aiops' in its name.

Completeness2/5

The tools span log querying, code inspection, and code patching, but each area has obvious gaps: there is no tool for writing log query results, no update/get verification for the patch step beyond the patch itself, and the log analysis surface gives no way to define or manage analysis workflows. The domain coverage is fragmented rather than complete.

Maintenance

ActivitySlowing
ResponsivenessNo issues