safeops
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@safeopscheck worker health and recent failed jobs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Riverwash SafeOps MAS — фінальний проєкт
Riverwash SafeOps MAS — production-oriented мультиагентна система для реальної
операційної задачі Riverwash: виявляти проблеми у воркерах і асинхронних jobs,
розслідувати інциденти бонусних проєкцій, знаходити релевантні runbooks і безпечно
готувати точкове відновлення через human-in-the-loop.
Це відтворюваний standalone-реліз бойового рішення, а не вигаданий навчальний
кейс. У здачі синтетичні лише fixtures, JOB-SIM-*, sanitized runbooks і transport
adapters. Реальні production data, topology, credentials, customer payloads,
інциденти та скріншоти не публікуються через комерційну таємницю. Контракти й
control flow навмисно еквівалентні майбутньому production-підключенню.
Результат
LangGraph supervisor маршрутизує запити до 4 спеціалізованих агентів.
Investigator виконує окремий підграф plan → execute → replan.
Researcher робить Agentic RAG над 10 runbooks у persistent ChromaDB.
Увесь MAS має SQLite persistence, JSON trajectory з
agent_name, step/loop limits.FastMCP надає 5 tools, 2 resources, 1 prompt; LangGraph викликає tools через
MultiServerMCPClient, а AutoGen — черезMcpWorkbench.Input, output, tool і rolling-window rate-limit guardrails інтегровані у граф.
Ризиковий retry проходить persisted
interrupt()і підтримує approve/reject/edit після повного restart runtime з тим самимthread_id.Зафіксовано 6/6 scenario evals, 7/7 red-team tests, 23/23 pytest tests.
LangSmith EU прийняв traces усіх агентних маршрутів; додано чотири публічні sanitized evidence links без production data або secrets.
Бонус: та сама система реалізована в Microsoft AutoGen AgentChat і перевірена трьома live-запитами до GPT-5.4 mini + MCP.
Related MCP server: Nibble
Бізнес-мета й функції
SafeOps зменшує час від сигналу до перевіреного рішення оператора та ризик помилкової ручної дії. Система не замінює існуючі Riverwash workers і business services; вона створює контрольований diagnostic/remediation layer над ними.
Функція | Агент | Доказ / дія |
Поточний health і черги |
| readiness, heartbeat, done/retry/dead jobs |
Розслідування інциденту |
| bounded Plan-and-Execute, кілька джерел evidence |
Recovery/security policy |
| ChromaDB RAG з id runbook |
Точкове відновлення |
| один idempotent retry, optimistic status, HITL |
Маршрутизація |
| structured |
Стан воркерів може бути healthy одночасно з dead job або stuck projection. Саме тому система розділяє readiness, операційні черги, integrity та recovered history замість одного декоративного green/red індикатора.
Архітектура
flowchart TD
U[Operator / future Manager Panel] --> IG[Input + rate-limit guardrails]
IG --> S{Supervisor / router}
S --> M[MonitorAgent / ReAct]
S --> P[IncidentInvestigatorAgent]
S --> R[RunbookResearcherAgent / RAG]
S --> X[RemediationAgent]
P --> PL[Planner]
PL --> EX[One tool per step]
EX --> RP{Replanner}
RP -->|continue| EX
RP -->|finish| OG[Output PII guardrail]
M --> OG
R --> OG
X --> H{Persisted HITL interrupt}
H -->|reject| OG
H -->|approve / validated edit| T[retry_failed_job]
T --> OG
M & EX & R & T --> MCP[FastMCP stdio]
MCP --> F[(Sanitized fixtures / SQLite)]
MCP --> C[(ChromaDB runbooks)]
S & M & P & R & X --> CP[(SqliteSaver + trajectory.json)]Supervisor має власний system prompt і нуль tools. Кожен executor перевіряє deterministic allowlist перед викликом. Tool output вважається недовіреними даними, а не інструкціями. LLM формулює route/plan/summary; validation, permission, idempotency, approval і financial invariants залишаються у звичайному коді.
MCP server
MCP primitive | Назва | Призначення |
tool |
| Readiness і heartbeat freshness |
tool |
| Sanitized jobs і error classes |
tool |
| Детерміновані ledger/projection invariants |
tool |
| Semantic/lexical RAG у ChromaDB |
risky tool |
| Один |
resource |
| Read-only каталог runbooks |
resource |
| Read-only health + operations snapshot |
prompt |
| Evidence-based incident brief з HITL policy |
Усі tools мають Pydantic v2 schema, докладний docstring і стандартний envelope
{"status":"ok","data":...} або {"status":"error","error":...}. FastMCP
boundary перехоплює backend exceptions; прямий MCP client усе одно не отримує
production-доступу.
Використано mcp==1.30.0: це новітня 1.x-версія, сумісна з
langchain-mcp-adapters==0.3.2, який наразі вимагає mcp>=1.24,<2. MCP 2.x не
закріплено навмисно — резолвер підтвердив несумісність.
Встановлення (WSL Ubuntu-24.04)
Python 3.11–3.12. Для цього Windows workspace venv рекомендовано тримати у WSL-native
/tmp, а не на NTFS.
cd /mnt/c/dev/Hometasks/ht04_fp
uv venv /tmp/ht04-fp-venv --python 3.12
UV_PROJECT_ENVIRONMENT=/tmp/ht04-fp-venv uv sync --extra dev
source /tmp/ht04-fp-venv/bin/activate
cp .env.example .env.localЗаповніть OPENAI_API_KEY тільки у .env.local або process environment. Реальний
ключ з іншого homework не копіюється у цей репозиторій, не друкується і не входить
у zip. uv.lock фіксує повне transitive dependency tree; усі direct dependencies
також мають exact pins у requirements.txt.
Запуск
MAS і MCP
# три відтворювані запити без API-витрат; tools однаково йдуть через MCP
python mas_langgraph.py
# live GPT-5.4 mini + OpenAI Responses API + MCP
python mas_langgraph.py --live
# прямий запуск stdio server
python mcp_server.py--legacy-tools обходить MCP тільки для локальної діагностики та швидких unit tests;
основний demo за замовчуванням використовує MultiServerMCPClient.
Persistence і HITL
python hitl.py approve
python hitl.py reject
python hitl.py editКожен запуск: створює approval interrupt → закриває graph, SQLite connection і tools
→ створює новий SafeOpsMAS → виконує Command(resume=...) з тим самим
thread_id. edit повторно проходить повну Pydantic-валідацію. Approve/edit
викликають exactly-once remediation; reject не робить side effect.
Tests, evals, red-team, observability
ruff check .
pytest -q
python evals.py
python red_team.py
python observability.pyOffline tests не потребують API key. evals.py за замовчуванням перевіряє реальний
MCP transport. Артефакти: eval_results.json, red_team_results.json,
trajectory.json, agent_state.db, chroma_db/.
LangSmith observability перевірено live у EU-регіоні, project
riverwash-safeops-mas. LANGSMITH_API_KEY зберігається лише у ignored
.env.local; для EU account використано
LANGSMITH_ENDPOINT=https://eu.api.smith.langchain.com. Значення ключа не потрапляє
у trace, Git або submission archive. Опубліковано тільки standalone sanitized runs:
Усі чотири public URLs перевірені без authentication і повертають HTTP 200.
Production traces не публікуються через комерційну таємницю. observability.py
додатково дає локальні privacy-safe метрики з trajectory.json.
Scenario evals
Зафіксований deterministic + MCP прогін: 6/6 passed.
ID | Сценарій | Очікувана поведінка | Результат |
EVAL-001 | health | Monitor → health tool | pass |
EVAL-002 | queue/dead jobs | Monitor → operations tool | pass |
EVAL-003 | incident + integrity | Investigator → 3+ P&E tools | pass |
EVAL-004 | retry/HITL policy | Researcher → ChromaDB | pass |
EVAL-005 | scope/help | General, без tools | pass |
EVAL-006 | prompt injection | block до supervisor/tools | pass |
Повний фактичний output, latency, agents_used і tools_called збережено у
eval_results.json.
Red-team
Зафіксовано 7/7 passed: English/Ukrainian/Russian injection, jailbreak, PII leak, supervisor tool misuse та scope confusion. Це контрольований regression suite, а не доказ абсолютної безпеки.
OWASP Top 10 for Agentic Applications 2026 — mitigation matrix
Назви ризиків звірено з офіційним OWASP Agentic Top 10 2026.
Ризик | Реалізована мітигація | Що залишилось немітигованим |
ASI01 Agent Goal Hijack | regex/heuristics EN+UA+RU, delimiter/length checks, tool output позначено untrusted, red-team | Obfuscated/semantic indirect injection потребує classifier і content provenance |
ASI02 Tool Misuse & Exploitation | per-agent allowlist, supervisor без tools, Pydantic schemas, single-job scope, HITL | Production adapters потребують network policy, quotas і compensation workflows |
ASI03 Identity & Privilege Abuse | standalone не містить identities/secrets; approval bound до action | Production потребує Manager RBAC identity propagation, short-lived service auth, audit subject |
ASI06 Memory & Context Poisoning | checkpoint із thread isolation, sanitized state, no arbitrary long-term write, output redaction | Потрібні signed runbook releases, retention policy та checkpoint encryption/cleanup |
ASI08 Cascading Failures | max steps, repeat detector, timeout на provider, rate limit, idempotency, optimistic status, заборона bulk retry | Distributed circuit breakers, Redis global rate limit і rollback rehearsal — production phase |
ASI09 Human-Agent Trust Exploitation | evidence в answer, uncertainty, approve/reject/edit, risky action не доступна supervisor/AutoGen bonus | Потрібні UI severity cues, dual control для high impact і operator training |
Обрано шість найрелевантніших ризиків, щоб окремо показати людський trust boundary; мінімум завдання — п'ять. Повний список ASI01–ASI10 і приклади інцидентів описує офіційний огляд OWASP.
Бонус: чому AutoGen замість CrewAI
Умова дозволяє CrewAI або AutoGen. Спочатку CrewAI був природним кандидатом через короткі role/task abstractions і швидкий hierarchical prototype. Після перевірки реального кейсу його замінено AutoGen з таких причин:
SafeOps є event/message-driven incident workflow. AutoGen робить messages, agent events, group chat selector і team state явними, що ближче до реальної операторської сесії, ніж CrewAI
Crew/Task/Process.McpWorkbenchнапряму підключає той самий FastMCP server. У проєкті доданоFilteredMcpWorkbench, який фактично приховує tools поза allowlist, а не лише просить агента не викликати їх.AutoGen має
save_state/load_stateі OpenTelemetry-oriented tracing surface, тому його зручніше досліджувати як потенційний distributed conversation runtime.Порівняння з LangGraph стає змістовнішим: explicit state-machine проти explicit agent conversation. CrewAI дав би більш high-level, але менш контрольований контраст.
Що змінилося б, якби AutoGen був не бонусом, а основною реалізацією: прототип став би коротшим, а паралельні tool calls — простішими; натомість persisted approval boundary, точні conditional edges і inspectable state довелося б відтворювати додатковим кодом. Тому production orchestration лишається на LangGraph, AutoGen — перевірена альтернативна гілка.
Виміряне порівняння на однакових трьох live-запитах
Метрики отримані 2026-09-07 на GPT-5.4 mini та тому самому MCP server. LOC — physical lines; development time — локальний час від першого збереження framework-файлу до успішного live demo, без спільних domain/MCP компонентів.
Метрика | LangGraph | AutoGen |
Physical LOC | 684 | 267 |
Nonblank/noncomment LOC | 629 | 232 |
Framework integration time | 16 min | 5 min |
Input/prompt tokens, 3 queries | 2,518 | 5,947 |
Output/completion tokens | 1,387 | 1,292 |
Total wall time | 25,257 ms | 17,736 ms |
Control over handoff/HITL (1–5) | 5 | 3 |
Debugging/state visibility (1–5) | 5 | 3 |
Prototype speed (1–5) | 3 | 5 |
AutoGen виявився швидшим у прототипуванні та паралельно виконав кілька MCP tools, але витратив у 2.36 раза більше input tokens. LangGraph-код більший, бо містить явні guardrails, plan/replan, persistence і HITL, зате кожен перехід можна відтворити.
Практичний compatibility finding: AutoGen 0.7.5 використовує Chat Completions; для
GPT-5.4 mini function tools там потрібен reasoning_effort="none". LangGraph branch
використовує Responses API та reasoning_effort="low". AutoGen також потребував
явний model_info для нового model id. Результати без cherry-pick збережено у
autogen_demo_results.json і langgraph_live_results.json.
Вибір: LangGraph для production SafeOps; AutoGen для швидкого conversational prototype або дослідження distributed agent messaging; CrewAI був би найпростішим для короткого business workflow, але давав би найменше нового порівняно з уже обраним supervisor pattern.
Офіційні API: AutoGen teams, AutoGen MCP Workbench, CrewAI hierarchical process.
Наступний крок: production Riverwash + Manager Panel
Standalone не заважає бойовому впровадженню: orchestration вже відділена від domain adapters. Рекомендований rollout без зміни існуючої бізнес-логіки:
Додати у Riverwash Manager API read-only adapters до існуючого system health, bonus journal/report та worker status; повертати aggregates/sanitized DTO, не ORM entities або raw payloads.
Запустити MAS окремим private service. Manager API залишається authenticated gateway і передає operator identity/role, session id та correlation id.
Додати до існуючої
/api/v1/managerпанелі вкладку SafeOps: active incidents, evidence timeline, agent/tool trajectory і approve/reject/edit dialog.Етапи rollout: production read-only → shadow recommendations → approved single-job actions → обмежена automation policy.
Замінити SQLite checkpointer на Postgres, in-memory limiter на Redis, додати signed runbook releases, service-to-service auth, RBAC, audit retention, circuit breakers, compensation/rollback і dual control для high-impact actions.
Пропонований API boundary: POST /api/v1/manager/api/safeops/query,
GET /api/v1/manager/api/safeops/runs/{thread_id} і
POST /api/v1/manager/api/safeops/runs/{thread_id}/decision. UI може отримувати
events через SSE/WebSocket. LLM ніколи не пише напряму у PostgreSQL; risk tool
викликає вузький idempotent application service після server-side RBAC і HITL.
Production integration та її демонстрація не входять у відкриту здачу, бо розкрили б внутрішню архітектуру й операційні дані. Це boundary конфіденційності, а не технічне обмеження прототипу.
Структура здачі
mas_langgraph.py # supervisor + 4 agents + P&E/RAG/persistence
mcp_server.py # 5 tools + 2 resources + prompt
test_mcp_server.py # 8 async MCP tests
tools_legacy.py # reused Pydantic tools і ChromaDB RAG
trajectory_logger.py # MAS log з agent_name
guardrails.py # input/output/tool/rate limit
hitl.py # crash/restart + approve/reject/edit
observability.py # LangSmith EU tracing + local metrics
evals.py / eval_results.json
red_team.py / red_team_results.json
mas_autogen.py # bonus alternative MAS
autogen_demo_results.json # measured live comparison
langgraph_live_results.json # measured live comparison
langsmith_evidence.json # public sanitized traces for all agent routes
agent_state.db / safeops.db / chroma_db/
requirements.txt / uv.lock / .env.exampleМежі standalone-релізу
Немає production credentials, tenant data, реальних job ids або network access до Riverwash backend.
Regex injection filter не замінює semantic classifier і provenance controls.
SQLite та local rolling window достатні для reproducible submission, але не для horizontally scaled deployment.
Deterministic local embeddings оптимізовані для відтворюваності; production RAG потребує embedding model, versioning та retrieval evals.
LangSmith live tracing доведено чотирма public sanitized traces; production traces та dashboard workspace залишаються приватними через комерційну таємницю.
Джерела технічних рішень
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP-native AI SRE: ask what's broken in production, get a reviewed GitHub fix PR.
Hosted MCP memory and agent control plane for durable conversations, jobs, and operations.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables AI agents to securely call MCP tools with risk scoring, checkpoints, rollback, and approval workflows.17MIT- FlicenseNot gradedqualityCmaintenanceEnables AI agents to investigate production incidents by exposing service health, logs, and deployment data through MCP tools.10-
- AlicenseNot gradedqualityBmaintenanceMCP server that provides guarded, audited, read-only access to ops tooling (alerts, metrics, logs, deploys, runbooks) and a triage agent that diagnoses incidents end-to-end with CI-verified root cause analysis.MIT
- FlicenseNot gradedqualityCmaintenanceEnables agents to inspect machine status and sensor anomalies, search maintenance guidance, and create maintenance tickets through controlled MCP tools.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Yadro13/goit-autoagentdesign-fp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server