Skip to main content
Glama
kemosabe102

TowerWatch Ops Agent MCP Server

by kemosabe102

TowerWatch Ops Agent

Eine Agent-Schicht über TowerWatch — das Netzwerkqualitäts-Monitoring-Projekt — gebaut, um die drei Fähigkeiten zu demonstrieren, die eine Enterprise-Agent-Engineering-Schleife benötigt: Evaluations-Suites, kosten-/latenzbewusste Modellwahl und Tool-Retrieval. Ein Repository, eine kohärente Geschichte:

„Ich habe mein öffentliches Monitoring-Projekt genommen und die Agent-Schicht gebaut, die ein Unternehmen darum herum benötigen würde: einen instrumentierten MCP-Server mit definierten SLIs, einen Evaluations-Harness in CI, der gesäte Regressionen erkennt, einen kostenbewussten Modell-Router und semantisches Tool-Retrieval mit gemessener Auswahlpräzision.“

Auf einen Blick

  • Runtime: Python 3 + FastMCP, verwaltet mit uv.

  • Domäne: TowerWatchs Netzwerk-Monitoring-Daten, bereitgestellt als Agent-Tools.

  • Transport: stdio zuerst; zustandsloses streambares HTTP als Dehnungsziel.

  • Observability: OpenTelemetry ab dem ersten Tool-Aufruf, in einen Prometheus/Grafana-Stack.

  • Tool-Oberfläche: sieben Tools — query_metrics, analyze_window, compare, query_log_events, get_monitor_status, get_runbook, run_speedtest. Verträge in docs/design/.

  • Status: 🟡 Phase 1 läuft — der Server läuft und eines von sieben Tools ist gebaut; noch kein Phase-1-Abnahmekriterium erfüllt. Siehe Status.


Warum dieses Projekt

Es füllt die Lücke zwischen „Ich habe über Agent-Evaluierung und Routing gelesen“ und „Ich habe es gebaut und gemessen.“ Jedes Artefakt — Evaluierungstabellen, Benchmark-Zahlen, Präzision@k-Diagramme — ist eine persönlich gesammelte Zahl, keine Behauptung aus einer Studie. Die Domäne sind echte Daten aus einem Projekt, das der Autor bereits besitzt, also ist die Geschichte „Ich habe mein eigenes produktionsnahes System erweitert“, nicht „Ich habe ein Tutorial gemacht“.

Der Build läuft unter den eigenen Agent Collaboration Principles des Autors: Die Definition-of-Done jeder Phase ist eine Reihe unabhängig prüfbarer Artefakte — ein Befehl, der läuft, eine Datei, die existiert, ein Dashboard, das rendert. Kein „Vertrau mir, es funktioniert“.


Related MCP server: production-grade-mcp-agentic-system

Die drei Phasen

Das Projekt ist ein Build in drei streng aufeinanderfolgenden Phasen. Vollständige Spezifikationen finden sich in docs/specs/; der Build-Plan ist der Index. Die Anforderungen wurden im Voraus in einem Planungsprozess definiert und als Vertrag gebaut — die Spezifikationen kamen zuerst, die Tool-Verträge wurden daraus abgeleitet, und die ADRs dokumentieren jede Entscheidung, die die Oberfläche geprägt hat.

Phase

Liefert

Spezifikation

1

Instrumentierter MCP-Server über TowerWatch-Daten + definierte SLIs + Cross-Model-Kosten/Latenz-Bench

spec-phase1-mcp-server.md

2

Golden-Set + Rubrik-Evaluations-Harness in CI, der eine gesäte Regression erkennt

spec-phase2-eval-harness.md

3

Kostenbewusster Modell-Router + semantisches Tool-Retrieval mit gemessener Auswahlpräzision

spec-phase3-router-and-retrieval.md

Querschnitt

Agentenorientierte Doku, In-Repo-Skills, ADRs und eine gemessene Onboarding-Evaluierung — inkrementell neben den Phasen, nie blockierend

spec-ai-native-repo-layer.md

Die Reihenfolge ist streng: Die Evaluierungen von Phase 2 bewerten den Router von Phase 3. Nicht umsortieren. Die Querschnittsschicht ist die Ausnahme — sie wird inkrementell eingeführt und blockiert nichts.


Repository-Struktur

towerwatch-ops-agent/
├── README.md                       # this file — human-facing
├── CLAUDE.md                       # agent-facing anchor (read first if you're an agent)
├── pyproject.toml                  # PEP 621 single source of truth — deps, tooling config
├── docs/
│   ├── architecture.md             # intended shape (stub — not built yet)
│   ├── specs/                      # the governing build plan + 4 requirement specs
│   ├── design/                     # locked tool contracts (00–11) — authoritative
│   ├── adr/                        # architecture decision records
│   └── production-path.md          # personal-scale choices vs. enterprise needs
├── src/towerwatch_ops_agent/       # server, config, domain/, tools/, telemetry/
├── tests/                          # pytest suite — 95 tests
├── fixtures/stub/                  # hand-authored stub corpus (not the real one)
└── RATIONALE.md                    # deliberate choices that read as defects

Schnellstart

Der Server läuft und bedient query_metrics. Die anderen sechs Tools sind noch nicht gebaut.

# From repo root. uv manages the environment and lockfile.
uv sync                            # create .venv, install deps from pyproject.toml
uv run python -m towerwatch_ops_agent   # (Phase 1) launch the MCP server over stdio

Das interaktive Testen des Servers (Phase 1) verwendet den MCP Inspector:

npx @modelcontextprotocol/inspector uv run python -m towerwatch_ops_agent

Status

🟡 Phase 1 läuft. Der MCP-Server läuft über stdio und bedient query_metrics Ende-zu-Ende gegen eine Fixture. Noch keines der fünf Abnahmekriterien von Phase 1 ist erfüllt — siehe spec-phase1-mcp-server.md für die Torliste.

Gebaut und laufend:

  • Verzeichnis-Skelett, pyproject.toml, .gitignore, MIT-Lizenz

  • README, CLAUDE.md (mit bindenden Invarianten), Architektur-Stub

  • Der Build-Plan und alle vier Anforderungsspezifikationen in docs/specs/

  • Gesperrte Tool-Verträgedocs/design/ 00–11: Konventionen, sieben Tool-Dokumente, Skills-Schnittstellen, Span-Schema, Fixture-Manifest, Evaluierungsdesign

  • ADRsdocs/adr/, die Entscheidungen hinter der Tool-Oberfläche

  • MCP-Server + Kompositionswurzelserver.py, config.py, stdio-Transport

  • query_metrics — 1 von 7 Tools, mit dem data_status-Envelope erzwungen

  • FixtureClient + Manifest-Loader — ADR-0002s Dual-Mode-Naht, nur Fixture-Seite

  • Span-Instrumentierung — ein Span pro Tool-Aufruf, Geheimnisse strukturell ausgeschlossen

  • CI-Workflow — ruff, format, pyright, pytest auf jedem PR-Branch-Head

  • RATIONALE.md — bewusste Entscheidungen, die ein Reviewer sonst als Fehler melden würde

Verschoben (noch nicht gebaut — siehe CLAUDE.md für die Phasentore):

  • Sechs verbleibende Toolsanalyze_window, compare, query_log_events, get_monitor_status, get_runbook, run_speedtest

  • GrafanaCloudClient — die Live-Hälfte des DataClient-Protokolls

  • Kuratierter Fixture-Korpusfixtures/stub/ ist ein von Hand erstellter Zwei-Fenster-Stub, der nur das Format beweist, nicht den echten deterministischen Korpus

  • OTel-Exporter + SLI-Dashboard — Spans werden emittiert, gehen aber nirgendwohin; kein MeterProvider, also keine Dauer-Histogramme

  • def_tokens.md — die Tool-Def-Token-Budget-Messung (Skript existiert, nie ausgeführt)

  • bench.md — Cross-Model-Kosten/Latenz-Bench

  • Phase 2 — Evaluierungs-Harness + CI + Seeded-Regressions-Showpiece

  • Phase 3 — Modell-Router + semantisches Tool-Retrieval

  • In-Repo-Skills unter .claude/skills/diagnose-rca, evidence-pack, plus die Golden-Path-Skills (add-tool, run-evals), die beim ersten manuellen Durchlauf erstellt wurden

  • Gemessene Onboarding-Evaluierung (docs/onboarding-eval.md) — erster Lauf nach Phase 1


Für KI-Assistenten

Wenn Sie ein Agent sind, der in diesem Repository arbeitet, lesen Sie zuerst CLAUDE.md. Es enthält die Phasenreihenfolge, den Arbeitsstandard der zustandslosen Tore und eine explizite Karte dessen, was existiert und was noch ein Stub ist, damit Sie nicht über Code nachdenken, der noch nicht da ist. RATIONALE.md dokumentiert die bewussten Entscheidungen, die auf den ersten Blick wie Fehler wirken — lesen Sie es, bevor Sie einen melden.

Available Tools

1 tool
towerwatch_query_metricsA
Read-only

Raw time-series data points from TowerWatch network monitoring.

Pick this when you need the actual numbers — specific values, series, timestamps — and you will do your own reasoning over them. If you want a judgment about a window (is it degraded, and against what reference), use analyze_window instead.

Returns downsampled [timestamp, value] pairs per metric, plus data_status. Read data_status before the numbers: 'empty_window' means collected here with nothing in range (a true negative), while 'not_collected' means this site never collects it — no evidence, so do not infer that anything is healthy.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when data_status is 'error'.
seriesNoMetric name to its downsampled points. Empty unless data_status is ok.
truncatedNoTrue when more points exist beyond this page.
data_statusYesok=data present; empty_window=collected here, none in range (true negative); not_collected=site never collects this (NO evidence — do not infer health); partial=some groups missing; error=see message.
coverage_notesNoWhy data is missing or partial, in plain language.
next_page_tokenNoPass back as page_token to continue. Null when complete.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and destructiveHint. The description adds meaningful behavioral context by explaining data_status semantics: 'empty_window' as a true negative versus 'not_collected' as no evidence, which is critical for interpreting results. It also discloses downsampling behavior and per-series output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, usage selection, return format, and an important caveat about data_status. The structure is front-loaded and the caveat is placed where it will be read before acting on numbers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool, the description covers when to use it, what it returns, and the crucial data_status interpretation. Pagination and request shape are documented in the schema, and there is an output schema, so the description is complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the primary request parameters such as site, start, end, metric_group, or pagination. It only implies per-metric and downsampled behavior. The nested schema helps, but the description itself does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it returns raw time-series data points as downsampled [timestamp, value] pairs per metric, and explicitly distinguishes itself from analyze_window by saying this tool is for actual numbers while the sibling is for judgments. This gives an agent a clear, specific understanding of the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to pick this tool when actual numbers are needed and the agent will do its own reasoning, and directs users to analyze_window when they want a judgment about a window. This is clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.0.0
    • First observedtowerwatch_query_metrics

TDQS

A4.3/5.0
Disambiguation5/5

With only one tool defined, there is no possibility of confusion between overlapping tools. The tool's purpose is clearly described, though it references a missing 'analyze_window' tool that does not exist in the server.

Naming Consistency5/5

A single tool name following a clear prefix+verb_noun pattern (towerwatch_query_metrics) provides no inconsistency issues. There is no mix of conventions to evaluate.

Tool Count2/5

A server with only one tool is very thin for a monitoring domain, especially since the description explicitly references a second tool ('analyze_window') that is absent. The scope is too narrow for an agent to perform useful monitoring workflows.

Completeness2/5

The tool only returns raw time series data and explicitly defers judgment to 'analyze_window', which is not implemented. This is a significant gap: agents cannot obtain window-level health assessments, and the missing referenced tool creates a dead end.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP-native agent evaluation and observability server. Log traces, evaluate output quality with 12 built-in rules (PII detection, prompt injection, cost thresholds), and track agent costs. Real-time dashboard, OTel-compatible spans. Self-hosted, MIT licensed.
    9
    129
    9
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that exposes live network monitoring data as Resources and diagnostic capabilities as Tools, letting AI assistants query network health conversationally.
    6
    MIT

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/kemosabe102/towerwatch-ops-agent'

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