Module 15

Observability, Reliability & Scale

Building Systems Model Context Protocol (MCP)

Module 15 — Observability, Reliability & Scale

Phase 4 · Enterprise Architecture & Mastery. You can design a secure, governed MCP platform; this module is about running it — seeing what it’s doing, keeping it up, and scaling it. Observability is also a security function (it’s how you detect the abuse from Module 8) and an entitlement function (audit). This is the operational maturity that separates a design that demos from one that survives production.

By the end you can:

  1. Instrument an MCP platform with logs, metrics, and traces.
  2. Trace a single tool call across host → gateway → server → upstream.
  3. Define SLOs, rate limits, and the reliability posture for the gateway and servers.
  4. Operate long-running Tasks and degrade gracefully when servers fail.

1. The three pillars, applied to MCP

Logs (incl. audit). Structured, per-event records. Your audit log (Module 12) is the security-critical subset: every tool/resource/prompt call with subject, tenant, action (args redacted), decision + rule, outcome, trace id. Beyond audit, log lifecycle events, errors (distinguish protocol errors from isError tool results — Module 2), and policy denials. Make logs tenant-tagged and queryable.

Metrics. Time series for health and capacity:

  • latency per tool / server / gateway (p50/p95/p99),
  • error rate — split protocol errors vs tool-execution errors vs policy denials,
  • denial rate — a spike is a security signal (probing, misconfig, or attack),
  • throughput and rate-limit/quota hits per virtual key,
  • cost — token/sampling spend per consumer (denial-of-wallet watch, Module 8 T8),
  • Task counts by state (working/failed/…), queue depth, completion time.

Traces. A single user action fans out across hops; distributed tracing stitches it into one timeline.


2. Tracing a call across hops

Propagate a trace/correlation id from the host through the gateway, into the server, and onto upstream calls, so one request is one trace:

 trace_id=abc ──▶ Host ──▶ Gateway ──▶ Server ──▶ Upstream API
                  span      span        span       span
                  (LLM      (validate   (execute   (token-exchanged
                   decided)  + PEP/PDP)  tool)       call)

Now “why was this slow / why did this fail / why was this denied?” is answerable end to end: you can see the model decided to call the tool, the gateway’s authZ decision and its latency, the server’s execution, and the upstream’s response — each as a span with timing. This is the operational payoff of the gateway being a single choke point (Module 13): it’s also a single, rich observation point. Tie trace ids to audit log entries so security and performance views share one key.


3. Reliability: the gateway is critical infrastructure

Because the gateway is the choke point (Module 13), its availability is the platform’s availability. Reliability posture:

  • High availability — redundant, horizontally scaled gateway instances behind a load balancer; no single instance is a SPOF. (Streamable HTTP’s stateless-friendliness and session ids, Module 3, make this feasible — another reason it replaced sticky HTTP+SSE.)
  • Latency budget — the gateway adds token validation + PDP evaluation to every call; keep it tight (cache PDP decisions/attributes where safe, keep policy evaluation fast). A slow gateway taxes every request.
  • Graceful degradation — if one MCP server is down, fail that capability cleanly (clear error to the model/user) without taking down the gateway or unrelated servers. Use timeouts, circuit breakers, and bulkheads so one bad upstream can’t exhaust shared resources.
  • Backpressure & quotas — rate limits per virtual key (Module 13) protect both cost and stability; shed load predictably rather than collapsing.

4. Scale: stateless where you can, durable where you must

  • Stateless request path. Keep per-request handling stateless so you can scale gateway/server instances horizontally; push session state into the session id mechanism and shared stores rather than instance memory. This is exactly what Streamable HTTP enables (Module 3).
  • Long-running Tasks at scale (Module 7). Tasks decouple “request received” from “work running,” which is what makes them scalable: a worker pool executes Tasks; status/result lookups can be served by any instance from a shared store; clients poll/reconnect by handle. Plan for: durable task state, worker scaling, timeouts/TTLs, and cleanup of completed tasks. input_required tasks must persist until the user responds (composes with elicitation).
  • Caching — cache tool/resource lists, PDP attributes (PIP data), and discovery/registry data with sensible TTLs and listChanged-driven invalidation (Module 3). Never cache authorization decisions longer than their inputs are valid.

5. Operating securely (observability ↔ security loop)

Observability closes the loop on Phase 3’s threats:

  • Denial-rate / anomaly alerts surface probing and misconfig (T4).
  • Egress/volume metrics on read tools and includeContext usage surface exfiltration (T7).
  • Cost metrics surface denial-of-wallet (T8).
  • Audit trails provide forensics and compliance evidence (SOC 2 etc.) (T7, governance).
  • Tool-definition-change events (from pinning/registry, Module 14) alert on potential rug pulls (T3).

Define alerts, not just dashboards: a metric no one is paged on won’t catch an incident.


6. Milestone exercise

For an MCP platform (your Module 13 architecture):

  1. Define SLOs — e.g. gateway availability, p95 authorized-call latency, max authZ-decision overhead. State the numbers and why.
  2. Dashboards & alerts — list the metrics you’d chart and the 3–5 alerts you’d page on (at least one security alert, one cost alert, one reliability alert).
  3. Trace walk — describe how you’d debug a slow tool call end to end: which spans you’d inspect at host, gateway, server, upstream, and how the trace id ties to the audit log.
  4. Degradation drill — Server C’s upstream is down and slow. Show how timeouts/circuit breakers/bulkheads keep the gateway and Servers A/B healthy, and what the user sees.
  5. Tasks at scale — describe durable state, worker scaling, and reconnect-by-handle for a high-volume generate_report Task; include TTL/cleanup.

Self-check:

  • Your metrics separate protocol errors, tool-execution errors, and policy denials.
  • A single tool call is one trace across all hops, keyed to the audit log.
  • The gateway is HA with a stated latency budget and graceful degradation (timeouts/circuit breakers/bulkheads).
  • Tasks use durable, shared state so any instance serves status/result and clients reconnect by handle.
  • At least one alert is a security signal (denial spike / exfiltration / cost), not just uptime.

Now you can run it, not just draw it. Final stop: Module 16 — Capstone, where you produce and defend a full secure multi-tenant MCP platform design.


Quick reference — Module 15 glossary

  • Three pillars — logs (incl. audit), metrics, traces; logs/metrics split protocol vs tool-execution vs denial errors.
  • Distributed tracing — one trace id host→gateway→server→upstream; ties performance to the audit record at the gateway observation point.
  • Reliability — gateway is critical infra → HA, tight latency budget, graceful degradation (timeouts, circuit breakers, bulkheads), per-key quotas/backpressure.
  • Scale — stateless request path (Streamable HTTP + session id); Tasks decouple work for horizontal scale (durable state, worker pool, reconnect-by-handle, TTL/cleanup); cache with TTL + listChanged invalidation.
  • Security loop — denial/egress/cost/audit/tool-change signals detect Module-8 threats; alert, don’t just chart.