Skip to main content
Glama
aasthapit

ocp-triage-mcp

by aasthapit

ocp-triage-mcp

MCP-сервер, который выполняет триаж алертов OpenShift, оркестрируя вышестоящий OCP MCP-сервер (тот, что предоставляет oc get nodes, get namespaces, describe pods и т.д.). Этот сервер одновременно является MCP-сервером (для того, кто выполняет триаж) и MCP-клиентом (для OCP MCP) — потребляющая команда никогда не обращается к вышестоящему серверу напрямую.

 LLM / agent ──MCP──▶ ocp-triage-mcp ──MCP (Streamable HTTP)──▶ OCP MCP ──▶ cluster
                        │
                        └── runbooks/*.yaml   (one file per alert code)

Каждому коду алерта соответствует runbook: последовательность вызовов инструментов вышестоящего сервера, определённая в YAML. Триаж детерминирован — внутри этого сервера нет LLM — поэтому сбор доказательств повторяем, аудируем и дёшев. LLM, находящийся над ним, интерпретирует пакет доказательств.

Предоставляемые инструменты

Инструмент

Назначение

list_runbooks

Поддерживаемые коды алертов, обязательные/необязательные входы, шаги

triage_alert(alert_code, params)

Выполнить полный runbook, вернуть пакет доказательств

run_step(alert_code, step_id, params)

Повторно выполнить один шаг runbook

validate_runbooks

Проверить все runbook на соответствие актуальному списку инструментов вышестоящего сервера

Пакет доказательств сообщает статус каждого шага (ok / error / skipped / aborted), поэтому частичные сбои видны, а не скрыты.

Инструменты обнаружения с пробросом

Вызывающим обычно сначала нужно найти входные данные для runbook — какие кластеры, пространства имён и поды существуют. Установите TRIAGE_PASSTHROUGH_TOOLS в разделённый запятыми список разрешённых имён инструментов вышестоящего сервера (допускаются шаблоны fnmatch):

TRIAGE_PASSTHROUGH_TOOLS=get_clusters,get_namespaces,get_pods,list_*

Совпадающие инструменты вышестоящего сервера повторно предоставляются на этом сервере без изменений — то же имя, та же схема входных данных, то же описание — а вызовы пересылаются в OCP MCP. По умолчанию ничего не пробрасывается; поверхность остаётся курируемой. Список инструментов получается от вышестоящего сервера лениво и кэшируется; validate_runbooks обновляет его и сообщает, какие имена сейчас совпадают.

Related MCP server: OpenShift SRE Copilot

Настройка

Полное руководство — установка, проверка, размещение для другой команды, развёртывание в контейнере, устранение неполадок: docs/setup.md

Быстрый старт:

pip install -e .

Конфигурация задаётся через переменные окружения:

Переменная

Значение

По умолчанию

OCP_MCP_URL

Конечная точка Streamable HTTP вышестоящего OCP MCP, например https://host/mcp

(обязательно)

OCP_MCP_HEADERS

Дополнительные заголовки для вышестоящего сервера, разделённые ;;: Authorization: Bearer x;;X-Y: z

нет

TRIAGE_PASSTHROUGH_TOOLS

Инструменты вышестоящего сервера для повторного предоставления здесь (через запятую, шаблоны fnmatch)

нет

TRIAGE_RUNBOOKS_DIR

Каталог YAML-файлов runbook

./runbooks

TRIAGE_MCP_TRANSPORT

Транспорт этого сервера: stdio, streamable-http, sse

stdio

TRIAGE_HTTP_HOST / TRIAGE_HTTP_PORT

Адрес прослушивания для HTTP-транспортов

127.0.0.1 / 8000

Переменные также могут находиться в файле .env рядом с сервером (скопируйте .env.example); реальные переменные окружения имеют приоритет.

Запуск:

ocp-triage-mcp

Регистрация в Claude Code (stdio):

{
  "mcpServers": {
    "ocp-triage": {
      "command": "ocp-triage-mcp",
      "env": {
        "OCP_MCP_URL": "https://ocp-mcp.example.com/mcp",
        "OCP_MCP_HEADERS": "Authorization: Bearer <token>",
        "TRIAGE_RUNBOOKS_DIR": "C:/GIT/mcp-runbook/runbooks"
      }
    }
  }
}

Чтобы вместо этого предоставить сервер другой команде по HTTP, установите TRIAGE_MCP_TRANSPORT=streamable-http и разверните его как обычный веб-сервис.

Написание runbook

Один YAML-файл на код алерта в runbooks/:

alert: KubePodCrashLooping          # the alert code callers pass to triage_alert
description: What this runbook collects and why.

inputs:
  required: [namespace, pod]        # must be present in params
  optional: [cluster]

steps:
  - id: describe_pod                # unique id; defaults to the tool name
    tool: describe_pod              # tool name ON THE UPSTREAM OCP MCP
    args:
      namespace: "{{namespace}}"    # template from params...
      pod: "{{pod}}"

  - id: node_status
    tool: describe_node
    when: "{{describe_pod.spec.nodeName}}"   # skip unless resolvable & truthy
    continue_on_error: true                  # don't abort the runbook on failure
    args:
      node: "{{describe_pod.spec.nodeName}}" # ...or from earlier step results

Правила шаблонизации:

  • {{name}} разрешается сначала из params, затем из результатов предыдущих шагов по идентификатору шага.

  • Точечные пути ({{describe_pod.spec.nodeName}}) проходят внутрь результата шага — это требует, чтобы инструмент вышестоящего сервера возвращал JSON (структурированный контент или текстовый блок JSON). Обычный текстовый вывод сохраняется дословно и не может быть адресован через путь.

  • Строка, которая является ровно одним шаблоном, сохраняет тип ссылочного значения (числа, логические значения, объекты); смешанные строки подставляются как текст.

  • Шаги выполняются последовательно. Сбой шага прерывает остальную часть runbook, если только у сбойного шага не установлено continue_on_error: true.

В примерах runbook используются плейсхолдеры имён инструментов. После указания OCP_MCP_URL на ваш реальный сервер вызовите validate_runbooks — он выведет список фактических инструментов вышестоящего сервера и отметит каждый шаг runbook, который ссылается на инструмент, отсутствующий у вышестоящего сервера.

Замечания по дизайну

  • Новое соединение с вышестоящим сервером для каждого вызова. Каждый triage_alert открывает собственную сессию Streamable HTTP с вышестоящим сервером и закрывает её по завершении. Удалённые сессии отбрасываются из-за таймаутов простоя/прокси; переподключение при каждом запуске делает каждый триаж самодостаточным при незначительных затратах на рукопожатие.

  • Runbook перечитываются с диска при каждом вызове, поэтому изменение YAML вступает в силу без перезапуска сервера. Если стоимость загрузки когда-нибудь станет значимой, добавьте кэширование по mtime в server._load.

  • Внутри нет LLM. Если когда-нибудь runbook потребует рассуждений на лету, сначала попробуйте расширить условия when:; встраивание агента — последнее средство.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A comprehensive Model Context Protocol (MCP) server that exposes 216 tools, 7 resources, and 10 runbook prompts for every OpenShift 4 cluster operation an SRE, developer, or operator could need — all driven by an LLM.
    100
    Apache 2.0
  • A
    license
    B
    quality
    A
    maintenance
    Governed Prometheus + Grafana operations — firing-alert and scrape-target RCA, alert noise/flapping analysis, silences, and dashboards, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.
    39
    MIT

View all related MCP servers

Related MCP Connectors

  • Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Remote MCP for A2A failure replay MCP, structured receipts, audit logs, and reviewer-ready evidence.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aasthapit/mcp-runbook'

If you have feedback or need assistance with the MCP directory API, please join our Discord server