TowerWatch Ops Agent MCP Server
TowerWatch Ops Agent
Una capa de agente sobre TowerWatch — el proyecto de monitorización de calidad de red — construida para demostrar las tres capacidades que necesita un bucle empresarial de ingeniería de agentes: suites de evaluación, elección de modelo consciente del coste/latencia y recuperación de herramientas. Un repo, una historia coherente:
«Tomé mi proyecto público de monitorización y construí a su alrededor la capa de agente que necesitaría una empresa: un servidor MCP instrumentado con SLI definidos, un harness de evaluación en CI que detecta regresiones sembradas, un enrutador de modelos consciente del coste y recuperación semántica de herramientas con precisión de selección medida.»
De un vistazo
Dominio: los datos de monitorización de red de TowerWatch, expuestos como herramientas de agente.
Transporte: stdio primero; HTTP en streaming sin estado como objetivo ambicioso.
Observabilidad: OpenTelemetry desde la primera llamada a herramienta, hacia una pila Prometheus/Grafana.
Superficie de herramientas: siete herramientas —
query_metrics,analyze_window,compare,query_log_events,get_monitor_status,get_runbook,run_speedtest. Contratos endocs/design/.Estado: 🟡 Fase 1 en curso — el servidor funciona y una de las siete herramientas está construida; todavía no se cumple ningún criterio de aceptación de la Fase 1. Ver Estado.
Por qué este proyecto
Llena el vacío entre «leí sobre evaluación y enrutamiento de agentes» y «lo construí y lo medí». Cada artefacto — tablas de evaluación, cifras de benchmarks, gráficas de precision@k — es un número recopilado personalmente, no una afirmación extraída de un estudio. El dominio son datos reales de un proyecto que el autor ya posee, así que la historia es «extendí mi propio sistema de estilo producción», no «hice un tutorial».
La construcción se rige por los Principios de Colaboración con Agentes del propio autor: la definición de terminado de cada fase es un conjunto de artefactos comprobables de forma independiente — un comando que se ejecuta, un archivo que existe, un panel que se renderiza. Nada de «confía en mí, funciona».
Related MCP server: production-grade-mcp-agentic-system
Las tres fases
El proyecto es una única construcción en tres fases estrictamente secuenciadas. Las especificaciones completas viven en docs/specs/; el plan de construcción es el índice. Los requisitos se definieron de antemano en un proceso de planificación y se construyeron para servir como contrato — las especificaciones llegaron primero, los contratos de herramientas se derivaron de ellas, y los ADR registran cada decisión que dio forma a la superficie.
Fase | Entrega | Especificación |
1 | Servidor MCP instrumentado sobre datos de TowerWatch + SLI definidos + benchmark de coste/latencia entre modelos | |
2 | Conjunto dorado + harness de evaluación con rúbrica en CI que detecta una regresión sembrada | |
3 | Enrutador de modelos consciente del coste + recuperación semántica de herramientas con precisión de selección medida | |
Transversal | Documentación orientada a agentes, skills en el repo, ADR y una evaluación de onboarding medida — incremental junto a las fases, nunca bloqueante |
La secuencia es estricta: las evaluaciones de la Fase 2 puntúan al enrutador de la Fase 3. No las reordenes. La capa transversal es la excepción — llega de forma incremental y no bloquea nada.
Estructura del repositorio
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 defectsInicio rápido
El servidor funciona y sirve
query_metrics. Las otras seis herramientas aún no están construidas.
# 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 stdioPara probar el servidor de forma interactiva (Fase 1), usa el MCP Inspector:
npx @modelcontextprotocol/inspector uv run python -m towerwatch_ops_agentEstado
🟡 Fase 1 en curso. El servidor MCP se ejecuta sobre stdio y sirve query_metrics de extremo a extremo contra un fixture. Todavía no se cumple ninguno de los cinco criterios de aceptación de la Fase 1 — consulta spec-phase1-mcp-server.md para ver la lista de compuertas.
Construido y en funcionamiento:
Esqueleto de directorios,
pyproject.toml,.gitignore, licencia MITREADME,
CLAUDE.md(con invariantes vinculantes), stub de arquitecturaEl plan de construcción y las cuatro especificaciones de requisitos en
docs/specs/Contratos de herramientas bloqueados —
docs/design/00–11: convenciones, siete documentos de herramientas, interfaces de skills, esquema de spans, manifiesto de fixtures, diseño de evaluaciónADRs —
docs/adr/, las decisiones detrás de la superficie de herramientasServidor MCP + raíz de composición —
server.py,config.py, transporte stdioquery_metrics— 1 de 7 herramientas, con el envoltoriodata_statusaplicadoFixtureClient+ cargador de manifiesto — la costura de doble modo de ADR-0002, solo en el lado de fixturesInstrumentación de spans — un span por llamada a herramienta, secretos excluidos estructuralmente
Workflow de CI — ruff, format, pyright, pytest en cada cabeza de rama de PR
RATIONALE.md— decisiones deliberadas que un revisor de otro modo reportaría como defectos
Diferido (aún no construido — consulta CLAUDE.md para las compuertas de fase):
Las seis herramientas restantes —
analyze_window,compare,query_log_events,get_monitor_status,get_runbook,run_speedtestGrafanaCloudClient— la mitad en vivo del ProtocoloDataClientCorpus de fixtures curado —
fixtures/stub/es un stub escrito a mano de dos ventanas que solo demuestra el formato, no el corpus determinista realExportador OTel + panel de SLI — los spans se emiten pero no van a ninguna parte; no hay
MeterProvider, así que no hay histogramas de duracióndef_tokens.md— la medición del presupuesto de tokens de las definiciones de herramientas (el script existe, nunca se ha ejecutado)bench.md— benchmark de coste/latencia entre modelosFase 2 — harness de evaluación + CI + pieza de demostración de regresión sembrada
Fase 3 — enrutador de modelos + recuperación semántica de herramientas
Skills en el repo bajo
.claude/skills/—diagnose-rca,evidence-pack, más las skills de camino dorado (add-tool,run-evals) creadas cuando se recorrieron por primera vez manualmenteEvaluación de onboarding medida (
docs/onboarding-eval.md) — primera ejecución después de la Fase 1
Para asistentes de IA
Si eres un agente trabajando en este repo, lee CLAUDE.md primero. Contiene la secuencia de fases, el estándar de trabajo de compuertas sin estado y un mapa explícito de lo que existe frente a lo que sigue siendo un stub, para que no razones sobre código que aún no está ahí. RATIONALE.md registra las decisiones deliberadas que a simple vista se leen como defectos — léelo antes de reportar uno.
Available Tools
1 tooltowerwatch_query_metricsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present only when data_status is 'error'. |
| series | No | Metric name to its downsampled points. Empty unless data_status is ok. |
| truncated | No | True when more points exist beyond this page. |
| data_status | Yes | ok=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_notes | No | Why data is missing or partial, in plain language. |
| next_page_token | No | Pass back as page_token to continue. Null when complete. |
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.0.0- First observed
towerwatch_query_metrics
TDQS
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.
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.
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.
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
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 server for building and testing AI agents with multi-model experimentation and insights.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Monitoring for the agent economy — liveness, latency, trust scoring for MCP endpoints
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP-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.91299MIT
- AlicenseNot gradedqualityDmaintenanceA production-grade MCP server designed for multi-tenant, authenticated, and observable AI agent systems, enabling secure tool execution across heterogeneous data sources.62MIT
- AlicenseAqualityBmaintenanceAn MCP server exposing 72 tools across 26 homelab services, enabling LLMs to monitor and manage infrastructure, media, storage, and networking with a single endpoint.16MIT
- AlicenseAqualityDmaintenanceAn MCP server that exposes live network monitoring data as Resources and diagnostic capabilities as Tools, letting AI assistants query network health conversationally.6MIT
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/kemosabe102/towerwatch-ops-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server