Skip to main content
Glama
README.md
# DevOps MCP Server

A small, working **Model Context Protocol (MCP) server** that automates common
DevOps tasks — CI/CD pipeline control, PR review, Git operations, and
monitoring/alerting — all gated behind a role-based access control layer.

Built as a portfolio project to demonstrate the concepts from an *MCP for
DevOps* course: MCP server architecture, security & access control, CI/CD
platform integration, PR review agents, approval workflows, and Git
automation.

## Why this project

Rather than one script per topic, this wires the concepts into **one
coherent system**: an AI assistant (or any MCP client) can call these tools
to check pipeline health, review a pull request for risky/secret-leaking
code, automate git branching/commits, and trigger deploys — but every action
is authorized against a role first, and every decision (allowed *or denied*)
is written to an audit log.

## Architecture

```
devops-mcp-server/
├── server/
│   ├── main.py        # MCP server entry point — registers all tools
│   ├── security.py     # RBAC: roles, authorization, audit log
│   ├── pipelines.py     # Simulated CI/CD backend + monitoring/alerts
│   ├── pr_review.py    # Static analysis PR review agent
│   └── git_ops.py       # Real git automation (subprocess against sandbox repo)
├── sandbox_repo/        # A real local git repo the tools operate on
├── demo/
│   └── run_demo.py      # Scripted walkthrough exercising every tool
└── requirements.txt
```

### Concept → implementation map

| Course topic | Where it lives |
|---|---|
| MCP Architecture / Server Design | `server/main.py` — tools registered via `FastMCP` |
| Security and Access Control in MCP | `server/security.py` — `Role` enum, `AccessControl`, audit trail |
| MCP Integration with CI/CD Platforms | `server/pipelines.py` — `list_pipelines`, `trigger_pipeline` |
| Pipeline Monitoring and Alerting | `server/pipelines.py` — `_raise_alert`, `list_alerts` |
| Building Intelligent PR Review Agents | `server/pr_review.py` — secret/risk pattern detection, recommendation |
| Approval Workflows / Human-AI Collaboration | `pipelines.py` — production deploys require `ADMIN` approval |
| Automated Git Operations via MCP | `server/git_ops.py` — branch creation, commits via real `git` |

## Roles (simulated identity directory)

| User | Role | Can do |
|---|---|---|
| `dave` | VIEWER | Read-only: view pipelines, status, alerts, repo state |
| `carol` | DEVELOPER | + review PRs, create branches, commit |
| `bob` | OPERATOR | + trigger pipelines, deploy to staging |
| `alice` | ADMIN | + approve production deploys, view audit log |

Every tool declares its minimum required role. Unauthorized calls are
rejected **and logged** — nothing fails silently.

## Running it

```bash
pip install -r requirements.txt

# Option A: scripted demo (no MCP client needed) — recommended first run
python demo/run_demo.py

# Option B: run as a real MCP server over stdio, e.g. to plug into
# Claude Desktop / any MCP client
python -m server.main
```

To wire it into an MCP client config (e.g. Claude Desktop), point it at:

```json
{
  "mcpServers": {
    "devops-mcp-server": {
      "command": "python",
      "args": ["-m", "server.main"],
      "cwd": "/path/to/devops-mcp-server"
    }
  }
}
```

## What the demo shows

`demo/run_demo.py` runs a full scripted transcript:

1. A `VIEWER` can read pipeline data but is **denied** when trying to trigger one.
2. An `OPERATOR` triggers a staging deploy — succeeds and runs.
3. An `OPERATOR` triggers a **production** deploy — it stalls in `awaiting_approval`.
4. The `OPERATOR` tries to self-approve production — **denied** (needs `ADMIN`).
5. An `ADMIN` approves it — the deploy proceeds.
6. A `DEVELOPER` submits a diff containing a hardcoded API key — the PR review
   agent flags it as **critical** and recommends `REQUEST_CHANGES`.
7. A `DEVELOPER` creates a real git branch and commits a real file to the
   sandbox repo — verifiable afterward with `git log`.
8. A `VIEWER` tries to read the audit log — **denied** (`ADMIN`-only).
9. An `ADMIN` reads the full audit log, showing every allowed/denied call.

## Notes on scope

- The CI/CD backend and identity directory are **simulated in-memory** so the
  project runs standalone with no cloud credentials — the interface shape
  (`list` / `status` / `trigger` / `approve`) mirrors a real GitHub
  Actions/Jenkins integration.
- Git operations are **real** — they run actual `git` commands against
  `sandbox_repo/`, so you can inspect the result with `git log` yourself.
- The PR review agent uses deterministic static-analysis rules so the demo
  runs fully offline; swapping in an LLM call (e.g. the Anthropic API) for
  natural-language review comments is a natural next step and slots cleanly
  into `pr_review.py`.

Maintenance

ActivityStale
ResponsivenessNo issues