Skip to main content
Glama

Server Details

Simulate cloud infrastructure and estimate cost before deploying or changing infrastructure.

Ownership verified
Status
Healthy
Uptime
100.0% over 59 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.5/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: scenario.list and scenario.get separate catalog browsing from full graph hydration, while simulation.create/delete/step/metrics cover lifecycle and simulation.inject_traffic/inject_failure/recover_resource handle targeted interventions. Despite the verbose descriptions, an agent can unambiguously select the right tool.

Naming Consistency5/5

All tool names follow a consistent namespace.action pattern in lowercase snake_case (scenario.get, simulation.create, simulation.inject_traffic, etc.). The verbs are predictable and the naming scheme is uniform across all nine tools.

Tool Count5/5

Nine tools is well-scoped for the demo cloud simulation purpose. Each tool earns its place in the lifecycle without redundancy or excessive fragmentation.

Completeness4/5

The surface covers the core simulation lifecycle: scenario discovery, create, step, inject traffic/failure, recover, inspect metrics, and delete. Minor gaps exist—no explicit tool to update an existing simulation's architecture after creation or to list active simulations—and many authenticated operations (typed failures, chaos, persistence) are unavailable in this demo set.

Available Tools

9 tools
scenario.getGet Scenario
Read-onlyIdempotent
Inspect

Hydrate one built-in scenario from the live Cloud World Model scenario library. Prerequisite: a scenario id returned by scenario.list. Returns the complete selected scenario graph, including resources and connections plus optional seed, resilienceConfig, protectedResilienceConfig, traffic/failure presets, named traffic-phase summaries, activeFailurePhases and optionalFailurePhases (type, resource/zone target, severity, step range), retry-workload disclosure, and real-world incident metadata. The response includes both title and name for compatibility; pass resources and connections, and optionally seed/resilienceConfig, to simulation.create when you need to edit or inspect the graph. For the shorter handoff, pass the id as scenarioId instead. For SQS Queue Backlog Saturation, the optional 5,000 RPS event burst is inactive by default and starts at step 6 after the five-step creation warm-up when enabled. simulation.create accepts scenarioOverrides.sqsQueueBacklogSaturation.includeEventBurst and an optional absolute eventBurstStartStep (integer 6–100000); omit the step to retain default step 6, and choose it before simulation.step finalizes replay identity. The likely next tool is simulation.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenarioIdYesScenario identifier returned by scenario.list

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoStable scenario identifier
nameNoScenario display name; equivalent to title
seedNo
tagsNo
titleNoScenario title
statusNoResult status; not_found when the requested scenario does not exist
messageNoError or guidance message
categoryNo
durationNo
resourcesNoFull resource graph; pass to simulation.create
difficultyNo
connectionsNoFull connection graph; pass to simulation.create
descriptionNo
primaryPurposeNoPrimary purpose of the scenario; absent means legacy purpose not specified
resilienceConfigNo
autoscalingConfigNoScenario-level autoscaling thresholds and cooldown; pass this with resources and connections when copying the graph.
realWorldIncidentNo
activeFailurePhasesNo
activeTrafficPhasesNo
optionalFailurePhasesNo
optionalTrafficPhasesNo
defaultTrafficPatternsNo
retryTrafficDisclosureNo
defaultFailureInjectionsNo
protectedResilienceConfigNo
scenario.listList ScenariosA
Read-onlyIdempotent
Inspect

List the built-in demo scenarios as compact catalog cards — stable IDs, title/name, description, difficulty, tags, category, duration, provider summary, resource/connection counts, named active/optional traffic phases, and retry-workload disclosure. Use it as the first call when you want a ready-made architecture instead of designing one; the cards intentionally omit resource, connection, traffic-pattern, and failure-injection graphs. Anonymous discovery includes only scenarios with at most 10 resources so every listed card is demo-creatable. No prerequisites. Optionally narrow discovery with provider, category, and/or difficulty filters; omit them to receive the complete demo-creatable catalog. Pass a returned id as scenarioId to simulation.create for server-side expansion, or pass it to scenario.get when you need to inspect the full graph. Larger scenarios require an authenticated session. Returns named activeFailurePhases and optionalFailurePhases with type, resource/zone target, severity, and step range. No API key required. The likely next tool is scenario.get.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOnly scenarios in this category, such as scaling, failure, reliability, networking, or cost
providerNoOnly scenarios that include resources from this cloud provider
difficultyNoOnly scenarios at this difficulty level

Output Schema

ParametersJSON Schema
NameRequiredDescription
scenariosYesAvailable demo scenarios

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, which covers safety. The description adds valuable context: the 10-resource limit for anonymous discovery (affects what is returned), no API key required, larger scenarios require authenticated session, and the return includes specific failure-phase details. This goes beyond annotations, describing what the result includes and access constraints. However, it doesn't detail what happens if filters are invalid or response size limits, which is minor.

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

Conciseness4/5

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

The description is a single block of 5 sentences, each packed with information. It's fairly long but every sentence contributes: purpose, omission of graphs, anonymous limit, filtering, usage of returned IDs, auth, return fields, next tool. Could be slightly more compact by splitting into bullets, but it's well-organized and front-loaded with the primary purpose.

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?

Given the tool's moderate complexity (3 optional parameters, output schema present), the description covers when to use, what it returns (including details like failure phase names), prerequisites, auth requirements, and next-step routing. The presence of an output schema means return structure is already documented; the description complements with behavioral specifics like the 10-resource limit and anonymous discovery.

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

Parameters3/5

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

Schema coverage is 100% — all three parameters have descriptions in the schema. The description adds a bit of context: 'omit them to receive the complete demo-creatable catalog' and filter examples. But it doesn't add much beyond the schema. Since coverage is high, baseline 3 is appropriate.

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 clearly states the tool's purpose: 'List the built-in demo scenarios as compact catalog cards' with specific fields (stable IDs, title, description, difficulty, tags, etc.). It distinguishes itself from siblings by noting that it omits resource/connection/traffic/failure graphs, which are available via scenario.get. The verb 'list' and resource 'scenarios' are precise.

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?

Explicitly states when to use: 'Use it as the first call when you want a ready-made architecture instead of designing one.' It also tells when not to use (if you need the full graph, use scenario.get) and mentions prerequisites (none for anonymous, authentication for larger scenarios). Provides routing to 'simulation.create' and 'scenario.get' with returned IDs.

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

simulation.createCreate SimulationInspect

Create a temporary anonymous demo cloud simulation from a list of resources and connections (max 2 active simulations per client, up to 10 resources; the returned simulationId is a short-lived unguessable capability that survives MCP transport teardown, but it is cleaned up when the demo lifetime expires or the simulation is deleted). No API key required for this temporary anonymous demo operation. Built-in scenario workflow: call scenario.list and pass a returned card's id as scenarioId to simulation.create for server-side graph expansion. For full control, call scenario.get and pass its hydrated resources and connections arrays instead. These are two alternatives — do not send scenarioId with resources or connections. When copying a scenario graph that returns autoscalingConfig, pass that config to simulation.create too so its thresholds and cooldown are preserved. For SQS Queue Backlog Saturation, set scenarioOverrides: { sqsQueueBacklogSaturation: { includeEventBurst: true, eventBurstStartStep: 10 } } to enable the optional 5,000 RPS burst and choose its absolute start step (integer 6–100000, after the five-step creation warm-up). Within this override, includeEventBurst defaults to true, so eventBurstStartStep alone enables the burst; without the override the burst stays inactive. Omit eventBurstStartStep to use catalog default step 6; select this scenario-only override before the first simulation.step so replay identity is unchanged. For the catalog EKS Spot Interruption Migration scenario, you may set scenarioOverrides: { eksSpotInterruption: { startupSeconds } } with an integer startupSeconds from 0 through 3600 to test a different readiness deadline without copying the graph; this override requires scenarioId and is mutually exclusive with resources and connections. For the Web App Autoscaling scenario, create with scenarioId: "web-autoscaling" and scenarioOverrides: { webAutoscaling: { includeTrafficRecovery: true } } to activate the optional Traffic Recovery ramp and observe scale-in. includeTrafficRecovery is optional and defaults to false, leaving the phase inactive. Opt in before the first simulation.step because replay identity is finalized when stepping starts. This override also requires scenarioId and is mutually exclusive with resources and connections. For the Redis Cache Crash & Recovery scenario, create with scenarioId: "redis-cache-crash-recovery" and scenarioOverrides: { redisCacheCrashRecovery: { cacheableRequestShare: 0.8, cacheHitRate: 0.8 } } to set the request share sent to Redis and the configured hit rate among those requests (both fractions from 0 to 1; defaults are 0.8). The selected values are per-simulation and appear in normalizedConfig and per-step requestFlow metrics; they do not change the catalog scenario. Redis Cache Crash & Recovery starts at 5,000 RPS by default; an explicit simulation.create traffic value becomes the starting load, and the scenario has no active traffic pattern. Use simulation.inject_traffic to change load after stepping; this remains valid after replay identity finalizes. scenario.list returns graph-free cards with bounded active/optional traffic-phase and retry-workload summaries; it is not a source of resource, connection, traffic-pattern, or failure-injection graphs. Scenario traffic and failure presets are not applied automatically. Custom cache path: use a resource with type 'cache', characteristics.serviceFamily 'elasticache', cacheHitRate as a fraction (0.8, not 80) and optional cacheableRequestShare; connect the load balancer to each app server, each app server to the cache and to the database, and the cache to the database; use responseMode 'full' to see metrics.requestFlow. Use resilienceConfig.externalMetrics for deterministic sampled recommendations: no_ready_endpoints is successful zero only when its trigger sets noReadyEndpointsAsZero:true; discovery_error and fetch_error always remain errors. This is not a KEDA/provider actuator and does not change resource counts. Use it to start any simulation workflow — either with hydrated resources and connections from scenario.get or your own architecture. Do not use it to modify an existing simulation (use simulation.inject_traffic to change load). For the exact owned typical fit, set appWeight:'typical', location.regionKey:'us-east-2' on all four AWS nodes, one ALB with serviceFamily:'alb' and loadBalancerScheme:'internal', two m5.large compute apps with workload:'crud-typical', appRuntime:'node', appWorkerCount:2, appDbPoolSize:250, one db.r5.large MySQL with workloadDatabaseEngine:'mysql', workloadDatabaseVersion:'8.0', maxConnections:500, ALB→each app→DB connections, minInstances=maxInstances=2, autoscaling:false, traffic 20–300 RPS. Only typical-fit-20, typical-fit-100 and typical-fit-200 tuned the typical-v1-20260927c/6aa574d7ff9d3080b88b221bcd59f7d218ae37f0 fit; 300 is an independent holdout and 500 is diagnostic only. Other typical workloads are modeled, not owned. P99 has distinct per-percentile provenance: latencyP99Basis identifies the owned in-VPC internal-ALB fit, a scaled-from-fit estimate (not directly measured), or an uncalibrated generic model. On the exact healthy lean owned graph at 10–1,000 offered target RPS, P99=max(final P95, 7.021919127633514 + 0.00027013891327780484T) ms; only 10/100/500 RPS were fit, 1,000 RPS was held out. Lean M5 scaling is not a new measurement; typical/heavy and active failures retain uncalibrated P99. predictionEvidence.latencyP99 has measured 0.65–1.35×, scaled 0.50–1.50× (beyond 1,000: 0.25–2×), or uncalibrated 0.50–2× (beyond: 0.25–3×) assumption bounds centered on final P99. These are not confidence intervals or provider measurements. Historical evidence may omit P99. latencyBasis describes the general modeled latency path; use latencyP99Basis specifically for P99. P99 is diagnostic, not scored. For compute, set characteristics.capacityRps for an explicit per-node RPS ceiling at which CPU reaches ~95%; do not use maxThroughput for that compute contract. Kubernetes rejects capacityRps: set maxThroughput for the total cluster RPS ceiling, or nodePools[].maxThroughput for per-node pool capacity. Omitted compute capacityRps uses the selected catalog tier and can intentionally produce a stressed baseline (for example, the AWS m5.large catalog denominator is 2,000 RPS); for a healthy, capacity-bounded compute experiment, declare an explicit per-node capacity such as 500 RPS. That value is an experiment control, not a universal hardware fact. For OCI flexible compute shapes, pass the documented positive integer characteristics.ocpus explicitly; VM.Standard.E4.Flex accepts 1–64 OCPUs and each OCPU maps to 2 vCPUs. OCPU count establishes capacity dimensions only, not provider-specific performance, throughput, or price. An uncounted flexible shape remains an unverified generic estimate. Check GET /api/prediction/generic-shapes for the catalog-derived generic fallback inventory. New prediction-only GCP standard capacity entries include e2-standard-2/4/8/16/32, n1-standard-1/2/4/8/16/32/64/96, and n2-standard-16/32/48/64/80/96/128; provider specifications establish vCPU/memory dimensions, not CWM performance or pricing. Version 1 predictionEvidence explicitly reports legacyGeneric at the top level and on every appCpuByResource item; its note identifies each generic resource's shape and fallback reason. For generic fixed compute, characteristics.instanceCount accepts integer 1–100 represented VMs; capacity aggregates and CPU is per VM. Do not combine it with autoscaling:true, minInstances, or maxInstances. Aurora Serverless v2 remains limited to 1 with multiAz:false or 2 with multiAz:true. For Aurora Serverless ACU limits, use characteristics.config.minCapacity/maxCapacity or flat characteristics.minCapacity/maxCapacity. The exact AWS database shape with serviceFamily: 'aurora-serverless' and size: 'db.serverless' also accepts flat characteristics.minAcu/maxAcu; those aliases are rejected elsewhere, including at the resource root or inside config. For that shape, multiAz:true with instanceCount:2 creates a separately billable reader (-reader) in another AZ. Inspect returned resources and metrics before using simulation.step to observe modeled failover; no AWS timing guarantee is implied. For database connection budgets, set characteristics.connectionDemand on a database: {mode:'declared',declaredConnections:240} uses that plan-time demand without RPS; {mode:'max',declaredConnections:240,idlePoolFloor:200} takes the maximum of load-derived demand and the declared/floor values; omitted configuration preserves load-derived behavior. declaredConnections and idlePoolFloor are ASSUMPTIONS / plan-time budgets (for example, replicas × per-pod pool size), not observed live DB connections. Set maxConnections to the usable limit you intend to test. Per-database metrics report connectionDemandMode, loadDerivedConnections, declaredConnections/idlePoolFloor, and modeledConnections; cost and DB CPU/latency remain based on existing load-driven behavior. Demand above the usable limit adds a bounded, rule-based pool-saturation error signal; it is not a provider-calibrated rate. Capacity, node-bound, SKU, and autoscaling values supplied through this MCP tool are recorded as agent-supplied in the immutable normalizationReceipt; request responseMode: 'full' to inspect it. Generic GKE telemetry and recovery apply only to worker nodes; the control-plane management fee is cost-only, with no modeled control-plane CPU, API throttling, or cooldown. To bound the autoscaled fleet size, set the top-level maxInstances / minInstances parameters. If you do not set maxInstances, the engine uses the provider default — AWS 50, GCP 15, Azure/OCI/DigitalOcean 10 — which may be much larger than your intended fleet size. The response includes effectiveMaxInstances / effectiveMinInstances so you can confirm the bounds that will be enforced. For a targeted CPU HPA scale-out threshold, send the canonical autoscalingTargetCpu field in this create call (for example, autoscalingTargetCpu: 70 for GKE). The compatible aliases scaleOutCpuThreshold, scaleOutCpuPercent, and autoscaleTargetCpuPercent are also accepted; if more than one is sent, their values must agree. Every create response includes hpaAudit with the supplied field, persisted thresholds, and any provider default. For ECS Fargate CPU-only target tracking, set ecsCpuTargetTracking: true, autoscalingTargetCpu, minInstances/maxInstances, and optional scaleOutCooldownSeconds/scaleInCooldownSeconds with simulationSecondsPerStep (default 1). Inspect autoscalingConfig in the compact response or applicationAutoscalingPolicy in the full response. Latency and throughput do not trigger ECS scaling in this mode. These four TOP-LEVEL fields are simulation-wide — the engine applies one CPU threshold identically to every resource's scale decision by default. To make ONE resource scale at a different CPU target than the rest of the simulation (e.g. a GKE cluster scaling out at 60% while an EC2 fleet in the same simulation scales out at 80%), set characteristics.scaleOutCpuThreshold and/or characteristics.scaleInCpuThreshold on that specific resource instead — the per-resource value wins over the simulation-wide default for that resource only. A misnamed near-miss field nested under characteristics (e.g. targetCPUUtilizationPercentage) is rejected with a 400 explaining the correct field name — it is never silently dropped and defaulted. Responses are compact by default: id, name, status, traffic, and a per-resource summary (id, name, status, cpuPercent, routedRps, availabilityState, isRoutable, and recoveryBlockedReason when provided). Pass responseMode: 'full' to get the complete simulation object instead. During a failure workflow, lower traffic to serviceable levels before calling simulation.recover_resource, then use simulation.step until the recovered resource is healthy. Recovery progress is included when applicable: recoveryProgress.state is parked, cooling_down, or healthy, and its parkWindow/cooldown objects report totalSteps, completedSteps, remainingSteps, target, and requiredSteps. Poll simulation.step until state is healthy, then use simulation.metrics to inspect the resulting state and metrics. No prerequisites. Returns the created simulation's id, which every other simulation. tool consumes; the new simulation also becomes this session's current simulation, so subsequent per-simulation tools may omit simulationId. The likely next tool is simulation.step to advance time. Do not call api.spec to learn the simulation workflow — the tool descriptions in this session contain everything needed. Authenticate with an API key for unlimited persistent simulations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the simulation
seedNoDeterministic RNG seed for reproducible replays
trafficNoInitial traffic in requests per second (RPS)
appWeightNoImmutable root-level workload weight; defaults to typical with appWeightDefaulted=true. Lean is measured only for the eligible owned graph; heavy is an unsupported assumption. predictionEvidence reports per-quantity provenance and assumption ranges, not confidence intervals.
resourcesNoList of cloud resources composing this simulation. For a built-in scenario, pass the hydrated resources from scenario.get; scenario.list cards are graph-free. (max 10 in demo mode; mutually exclusive with scenarioId)
scenarioIdNoLive scenario identifier from scenario.list; mutually exclusive with resources and connections
connectionsNoDirected connections between resources. For a built-in scenario, pass the hydrated connections from scenario.get; scenario.list cards are graph-free. Directed edges should describe traffic flow between resources; omit when using scenarioId.
descriptionNoOptional description of the simulation's purpose
maxInstancesNoHard ceiling on the autoscaled compute fleet size, stored as autoscalingConfig.maxInstances. If omitted, the provider default applies (AWS 50, GCP 15, Azure/OCI/DigitalOcean 10) — which may be much larger than your intended fleet size.
minInstancesNoFloor on the autoscaled compute fleet size, stored as autoscalingConfig.minInstances.
responseModeNoResponse detail level. 'compact' (default) returns id, name, status, traffic, and a per-resource summary (id, name, status, cpuPercent) — keeps the response small for agent loops. 'full' returns the complete simulation object including all resource characteristics and connections.compact
resilienceConfigNoOptional retry/cascade resilience model returned by scenario.get. externalMetrics accepts deterministic sampled triggers; no_ready_endpoints is successful zero only when noReadyEndpointsAsZero:true, while discovery_error and fetch_error remain errors. This recommendation model does not actuate KEDA, providers, or simulated resource counts.
autoscalingConfigNoSimulation autoscaling thresholds and cooldown. Pass the value from scenario.get when creating from a copied scenario graph.
scenarioOverridesNoScenario-only customization; requires scenarioId and exactly one supported override. SQS event-burst start is an absolute post-warm-up step and must be selected before the first simulation.step. Redis cache assumptions affect only this simulation.
scaleOutCpuPercentNoGrok-compatible alias for the CPU HPA scale-out target; if multiple target names are sent they must match.
autoscalingTargetCpuNoCanonical CPU HPA scale-out target percent. CWM synthesizes unrelated autoscaling defaults.
ecsCpuTargetTrackingNoOpt into CPU-only ECS Fargate target tracking.
scaleOutCpuThresholdNoEquivalent alias for autoscalingTargetCpu; if both are sent they must match.
scaleInCooldownSecondsNoECS CPU target-tracking scale-in cooldown in simulated seconds.
scaleOutCooldownSecondsNoECS CPU target-tracking scale-out cooldown in simulated seconds.
simulationSecondsPerStepNoSimulated seconds per step for ECS cooldowns (default 1).
autoscaleTargetCpuPercentNoGrok-compatible alias for the CPU HPA scale-out target; if multiple target names are sent they must match.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoUnique simulation ID — use with simulation.step, simulation.metrics, etc.
nameNoSimulation name
statusNoCurrent simulation status
trafficNoCurrent traffic in RPS
hpaAuditNoCPU HPA create-time audit: whether a target arrived, its accepted field, the persisted thresholds, and the provider-default explanation when omitted.
appWeightNo
resourcesNoPer-resource summary (compact mode) or full resource states (full mode)
scenarioHashNoCanonical SHA-256 of the persisted scenario graph and attached traffic-pattern order
engineVersionNoSimulation engine version used for this prediction.
replayIdentityNo
normalizedConfigNoEngine-resolved billing parameters for every resource: cost multipliers, hourly rates, autoscale thresholds (scaleOut/scaleIn CPU %), GPU SKU, per-node token throughput, billing floor, connection limits. Use this immediately after create to verify the simulation was set up as intended — e.g. confirm which GPU SKU was resolved, the effective billing floor, or the autoscale CPU threshold that will drive scale-out.
resilienceConfigNoEffective resilience model returned after create; per-edge retryPolicy values include defaults for omitted fields.
autoscalingConfigNoEffective simulation scaling config; full response also contains the ECS resource's linked CPU-only target-tracking policy.
appWeightDefaultedNo
predictionEvidenceNo
calibrationEvidenceNoOwned-versus-modeled evidence and latency boundary.
effectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity; see replayIdentity.effectiveConfigHash for the original replay-only hash.
scenarioAttributionNoTrusted server-side attribution copied from the live scenario catalog; absent for explicit resource-graph creates
effectiveMaxInstancesNoThe fleet-size ceiling the engine will enforce (autoscalingConfig.maxInstances, or the provider default when unset)
effectiveMinInstancesNoThe fleet-size floor the engine will enforce (autoscalingConfig.minInstances, or the provider default when unset)
predictionEffectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity.
simulation.deleteDelete SimulationA
DestructiveIdempotent
Inspect

Permanently delete an owned temporary anonymous demo simulation and its metrics, events, failures, and capability. This is the explicit way to free a simulation slot; deletion is irreversible, while the existing demo TTL remains the safety net for abandoned simulations. Prerequisite: a simulationId from simulation.create, or an active simulation in the preserved MCP session. The likely next tool is simulation.create to use the freed slot. A successful response is { deleted: true, id }; failed ownership checks do not delete or revoke anything. Authenticate with an API key to unlock all 63 tools and persistent simulation management.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoID of the deleted simulation
deletedNoTrue when the simulation was deleted
simulationIdNoID used for the deletion
simulationIdSourceNo

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial context beyond destructiveHint/idempotentHint: deletion is irreversible, it cascades to metrics/events/failures/capability, the TTL remains the fallback for abandoned demos, and failed ownership checks neither delete nor revoke anything. It also discloses the authentication requirement, which annotations do not cover.

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

Conciseness4/5

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

Dense but front-loaded: the irreversible delete and cascade come first, then prerequisites, then the next step. The closing API-key upsell ('unlock all 63 tools') is promotional rather than operational and slightly dilutes the signal.

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 destructive single-parameter tool with an output schema, the description covers everything an agent needs: cascade effects, irreversibility, session vs explicit-ID usage, failure semantics, and the routing to simulation.create. Return values are already covered by the output schema.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents session behavior, fresh-session pitfalls, and NO_ACTIVE_SIMULATION. The description restates the prerequisite and session fallback but adds no new syntax or format detail, so baseline 3 applies.

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?

States a specific verb and resource ('Permanently delete an owned temporary anonymous demo simulation') with an explicit scope of what is also removed (metrics, events, failures, capability). It is easily distinguished from read-side siblings like simulation.metrics and from simulation.create, which it names.

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

Usage Guidelines4/5

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

Explains when to reach for it ('the explicit way to free a simulation slot') versus the alternative of letting the TTL expire, and names the likely next tool (simulation.create). It gives prerequisites (simulationId from simulation.create or an active session) but no explicit exclusions for the other seven siblings.

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

simulation.inject_failureInject Failure
Destructive
Inspect

Fail one compute/Kubernetes node, database, or cache in a temporary anonymous demo simulation (marked critical, not removed). Targeted database quick failures are bounded and reversible; with no serving database at positive load, simulation.step reports 100% errors, zero goodput and errorBreakdown.dbFailure: 100. simulation.recover_resource can restore a database or cache early. An AWS Aurora writer with characteristics.auroraStandbyResourceId pointing to a healthy related replicaOf database has an opt-in modeled failover: the first step is unavailable, the second shows the standby serving without a residual writer-outage penalty. MultiAz or an unrelated second database alone does not establish a standby. Read metrics.databases[].auroraFailover and the promotion event for the failed and standby IDs and success, plus errorRate and throughput. Each quick step is one modeled simulation second, so second-step promotion is one second after injection. Chaos database_crash samples every 10 seconds and defaults to a 30-second promotion and a 1800-second sole-writer restart after its injection duration; compare matching phases, not equal step indices or wall-clock times. These are deterministic assumptions, not observed AWS behavior. No API key required for this temporary anonymous demo operation. Exact targeting: pass resourceName (human-readable name, e.g. 'app-server-01'; exact match preferred, an unambiguous prefix is accepted) or resourceId to fail a specific resource — including an individual named instance, not only a group. If resourceName matches multiple resources the call fails with a 400 listing every matching candidate by name — retry with one exact name (or its resourceId) from that list. The database or cache must be healthy; an already failed database or cache returns a 400 describing its current status. When neither parameter is supplied, a RANDOM healthy compute/Kubernetes node is selected (not a database) — this path is non-deterministic and NOT suitable for controlled scenarios or replay; always target by name/id when reproducing a precise fault sequence. The response always echoes the applied outcome via resolvedResourceId, resolvedResourceName, and previousHealth (populated from the selected resource on the random path too). Network, storage, queue, and security resource types are not supported by quick injection. Cache failures are supported and recoverable with simulation.recover_resource. For typed database_overload use authenticated failure.create (unavailable anonymously); instance_kill PERMANENTLY removes the instance — failure.delete does not restore it; use instance_down instead for a reversible single-node outage. Returns the updated resource list and the failure event that was logged. The likely next tool is simulation.step to observe how the architecture degrades under failure, then simulation.metrics to review the health impact. Do not use it to advance simulation time — that is simulation.step. Pass simulationId from simulation.create when this call is made from a fresh MCP session; otherwise you may omit it to target the current simulation in the preserved MCP session. Authenticate with an API key to unlock all 63 tools including typed durational failures and chaos engineering.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdNoOptional: ID of the resource to fail. Takes precedence over resourceName.
resourceNameNoOptional: name of the resource to fail (exact match preferred; unambiguous prefix accepted). Ambiguous names return a 400 with a candidate list.
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventNoFailure event that was logged
resourcesNoUpdated resource list after failure injection
previousHealthNoThe resource's health status immediately before the failure was applied
resolvedResourceIdNoID of the resource that was failed (targeted or randomly selected)
resolvedResourceNameNoName of the resource that was failed
simulation.inject_trafficInject TrafficInspect

Change traffic on a demo simulation using targetRps, deltaPercent, or explicit random: true. targetRps takes precedence over deltaPercent; random cannot be combined with either. Missing or unknown selectors are rejected, and no random spike is selected implicitly. Absolute targets are capped at 10000 RPS in demo mode. The change affects metrics after the next simulation.step. For Redis Cache Crash & Recovery, the default 5,000 RPS load has no active pattern, so this controlled traffic update also works after replay identity finalizes. Do not use it to read metrics (simulation.metrics) or advance time (simulation.step). Pass the simulationId returned by simulation.create when your connector opens a fresh MCP session; preserve Mcp-Session-Id to use the omitted-ID current-simulation default. Returns the updated simulation with its new traffic level; the likely next tool is simulation.step.

ParametersJSON Schema
NameRequiredDescriptionDefault
randomNoExplicitly select a random stress spike; never selected implicitly.
targetRpsNoAbsolute traffic level in RPS to set. Server-capped at 10000 RPS in demo mode.
deltaPercentNoRelative traffic change; must be greater than -100.
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoSimulation ID
statusNoUpdated simulation status
trafficNoNew traffic level in RPS after injection
simulation.metricsGet Simulation Metrics
Read-onlyIdempotent
Inspect

Read the latest metrics and resource states for a temporary anonymous demo simulation: latency, CPU, throughput, error rate, cost per hour, and per-resource health. Use it to inspect current state and metrics history without advancing time; do not use it to move the simulation forward — that is simulation.step. Responses are compact by default: principal current metrics plus explicit modeled goodputRps (a post-step point rate sourced from throughput, with provenance), goodputWindow (recorded only from persisted simulation-clock bounds, otherwise unavailable with provenance; never derive it from retrieval time or currentStep), errorBreakdown when available, per-resource status (id, name, status, cpuPercent, routedRps, availabilityState, isRoutable, and recoveryBlockedReason when provided), seeded EKS Spot checkpoint history and migrationEvaluationComplete/provenance when present, and the last 10 metrics-history entries. Pass responseMode: 'full' to get the complete simulation state, normalizedConfig, and full metrics history instead. During recovery, each resource may include recoveryProgress.state (parked, cooling_down, or healthy) with parkWindow and cooldown counters; poll simulation.step until healthy, then use simulation.metrics to inspect the resulting state and metrics. GPU / inference workflow: when the simulation includes a kubernetes resource with characteristics.inferenceMode: true, the response also includes top-level gpuUtilization (%), tokensPerSecond, costPerMillionTokens (USD/M tokens), idleGpuCostPerHour (USD/hr of standby GPU spend), and idleGpuFraction (0-1 idle HA overhead share) from the latest step, and each history entry carries the same inference fields. Pass the simulationId returned by simulation.create when your connector opens a fresh MCP session; preserve Mcp-Session-Id to use the omitted-ID current-simulation default. A fresh session has no current-simulation pointer. At least one simulation.step is needed for meaningful metrics. Read-only; repeated calls may be subject to demo usage limits. The likely next tool is simulation.step or simulation.inject_traffic.

ParametersJSON Schema
NameRequiredDescriptionDefault
responseModeNoResponse detail level. 'compact' (default) returns principal current metrics, errorBreakdown when available, per-resource status (id, name, status, cpuPercent, routedRps, availabilityState, isRoutable, recoveryBlockedReason, and failureLifecycle/routingState when provided), and only the last 10 metrics-history entries — keeps polling cheap for agent loops. 'full' returns the complete simulation object (all resource characteristics and connections) plus the entire metrics history.compact
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metricsNoMetrics history — bounded to the last 10 entries in compact mode, full history in full mode
trafficNoCurrent traffic level in RPS
metricIdNoStorage-assigned ID of the latest persisted metric
appWeightNo
errorRateNoLatest client-level error rate (%) against original offered RPS. Resilience dependency targets in autoscaled compute fleets use aggregate routable-fleet capacity and health; non-autoscaled targets use their resolved resource capacity, including any declared fixed-instance count.
resourcesNoPer-resource status summary (compact mode)
goodputRpsNoModeled client-level successful requests per second; a post-step point rate sourced from metrics.throughput. Resilience dependency targets in autoscaled compute fleets use aggregate routable-fleet capacity and health; non-autoscaled targets use their resolved resource capacity, including any declared fixed-instance count.
latencyP50NoLatest 50th-percentile latency in ms; null when workload-specific latency evidence is unavailable.
latencyP95NoLatest 95th-percentile latency in ms; null when workload-specific latency evidence is unavailable.
latencyP99NoLatest modeled 99th-percentile latency in ms; null when workload-specific latency evidence is unavailable. Interpret with latencyP99Basis and predictionEvidence.latencyP99.
offeredRpsNoLatest aggregate offered requests per second
simulationNoComplete simulation state (full mode only; absent in compact mode and when status is not_found/access_denied)
throughputNoLatest effective requests per second
costPerHourNoLatest estimated cost in USD/hr
currentStepNoCurrent simulation time step
latencyBasisNoLatest general modeled latency path/boundary; see latencyP99Basis for P99-specific provenance.
scenarioHashNoCanonical replay scenario graph hash.
simulationIdNoID of the queried simulation
engineVersionNoSimulation engine version used for this prediction.
goodputWindowNoInterval goodput aggregate when every point has persisted simulation-clock bounds; otherwise status=unavailable. Never derive this from retrieval time or currentStep.
errorBreakdownNoValidated additive error contributors from the latest metrics entry, in percentage-point units; distinguishes database connection pressure below the usable limit from pool saturation after exhaustion
gpuUtilizationNoLatest GPU utilization (%) — present only on GPU inference simulations
modeledShedRpsNoLatest aggregate modeled shed requests per second
replayIdentityNo
auroraFailoversNoLatest compact per-writer Aurora failover state, with failed and standby IDs and phase.
externalMetricsNoLatest deterministic external-metric recommendation telemetry, including each trigger's sample status/outcome/value/desired capacity and the combined capacity decision. It never actuates simulated or provider resources.
idleGpuFractionNoLatest share (0-1) of the GPU bill that is idle/standby capacity — present only on GPU inference simulations
latencyP99BasisNoLatest percentile-specific P99 basis: owned fit, scaled-from-fit (not directly measured), or uncalibrated generic model.
tokensPerSecondNoLatest inference throughput in tokens/second — present only on GPU inference simulations
goodputSemanticsNoGoodput is a point rate, not an interval total
kubernetesCpuHpaNoLatest per-workload bounded CPU HPA telemetry, including input provenance and missing-request errors; no Kubernetes controller parity is claimed.
goodputProvenanceNoProvenance for the modeled goodput field
appWeightDefaultedNo
idleGpuCostPerHourNoLatest USD/hr of GPU spend funding idle/standby capacity (HA overhead) — present only on GPU inference simulations
predictionEvidenceNo
calibrationEvidenceNoOwned-versus-modeled evidence and latency boundary.
effectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity.
latencyAvailabilityNo
residualCostPerHourNoSubtotal of unavailable, parked, or stopped resource costs; healthy/degraded idle resources, including ALBs, are excluded.
costPerMillionTokensNoLatest self-hosted inference cost in USD per million tokens (null when no tokens are being processed) — present only on GPU inference simulations
eksSpotInterruptionsNoLatest seeded EKS interruption telemetry, including additive migrationEvaluation/provenance when recorded.
metricsHistoryLengthNoTotal number of metrics-history entries (compact mode returns only the last 10)
resilienceDiagnosticsNoBounded resilience diagnostics from the latest step (compact mode). Absent when the resilience model did not run.
residualCostDefinitionNoDefinition of residual cost; total cost remains the complete billed total.
retryAmplificationFactorNoLatest (original offered RPS + generated retry RPS) / original offered RPS; an amplification measure, not capacity or goodput. Values > 1.0 = amplification risk. null = model ran but no traffic. Absent = resilience model disabled.
predictionEffectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity.
simulation.recover_resourceRecover Failed ResourceAInspect

Recover one reversible failed resource in a temporary anonymous demo simulation. No API key required for this temporary anonymous demo operation. Lower traffic to a serviceable level first, then provide resourceId or resourceName from simulation.create, simulation.step, or simulation.metrics. This deactivates applicable instance_down/database_overload failures for only the selected resource and returns recoveryProgress with parked, cooling_down, or healthy state plus cooldown counters. It cannot restore an instance_kill because that failure permanently removes the resource. The likely next tool is simulation.step; keep stepping and inspect the targeted resource until recoveryProgress.state is healthy. Pass simulationId from simulation.create when using a fresh MCP session; a preserved session may omit it. Authenticate with an API key to unlock all 63 tools and unlimited simulations.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdNoID of the failed resource to recover
resourceNameNoExact case-insensitive name of the failed resource to recover
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
simulationIdNo
recoveryStateNo
previousHealthNo
stepsToHealthyNo
recoveryProgressNo
resolvedResourceIdNo
simulationIdSourceNo
resolvedResourceNameNo
deactivatedFailureIdsNo
stepsToHealthyIsLowerBoundNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say non-read-only, non-destructive, non-idempotent; the description goes well beyond by disclosing that only the selected resource's instance_down/database_overload failures are deactivated, that recoveryProgress returns parked/cooling_down/healthy plus cooldown counters, and that instance_kill failures are unrecoverable.

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

Conciseness4/5

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

Front-loaded with the core action and its constraints, and most sentences earn their place. Some repetition around the anonymous-demo/no-API-key framing and the closing upsell sentence slightly dilute density.

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 recovery mutation with an output schema, the description covers preconditions, scope of effect, unrecoverable cases, return-state semantics, and session handling. An agent has everything needed to call it and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds genuine value on top: it tells the agent where each identifier originates (simulation.create/step/metrics) and gives session guidance for simulationId, though it doesn't clarify precedence between resourceId and resourceName.

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?

States a specific verb (recover) plus resource (one reversible failed resource) and scopes it to a temporary anonymous demo simulation. It also distinguishes itself from siblings by naming simulation.create/step/metrics as ID sources and simulation.step as the follow-up tool.

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?

Explicit preconditions (lower traffic to a serviceable level first), explicit inputs to source (resourceId or resourceName from create/step/metrics), explicit exclusion (cannot restore an instance_kill), and an explicit next step (simulation.step until healthy). Nothing is left to inference.

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

simulation.stepSimulate StepInspect

Advance a temporary anonymous demo simulation by one time step and return updated metrics — CPU, latency, throughput, error rate, cost (max 20 persisted steps per demo). Concurrent simulation.step calls on one simulation either serialize as distinct consecutive steps (in the browser Workspace queue) or receive HTTP 409 simulation_step_in_progress without advancing or consuming a demo credit. Wait for the running call to finish, then retry only rejected calls; distinct simulations can run concurrently. After a timeout, inspect simulation.metrics before retrying an uncertain result. Use it to observe how the architecture behaves over time, typically right after simulation.create or simulation.inject_traffic. Do not use it to read current state without advancing time — that is simulation.metrics. Pass the simulationId returned by simulation.create when your connector opens a fresh MCP session; preserve Mcp-Session-Id to use the omitted-ID current-simulation default. An optional traffic override is applied when no traffic pattern is active; with an active pattern it is rejected with STEP_TRAFFIC_PATTERN_ACTIVE. Use simulation.inject_traffic to change load; it deactivates patterns before replay finalization and uses a runtime-only override for finalized SQS backlog runs, or omit traffic to follow the schedule. The likely next tool is simulation.step again (to keep observing) or simulation.inject_traffic (to change load first). Responses are compact by default: principal metrics plus per-resource status (id, name, status, cpuPercent, routedRps, availabilityState, isRoutable, and recoveryBlockedReason when provided) and this step's events. Seeded characteristics.eksSpotInterruption telemetry retains its additive migrationEvaluation beside the interruption lifecycle: use its recorded/derived/unavailable field provenance, frozen deadline verdict/counts/reasons, and simulation-clock milestones rather than final service health. The distinct eksSpotMigration contract remains separately reported when configured. Compact responses also include errorBreakdown when the engine provides it. A critical resource with isRoutable: true is degraded but still serving; unavailable identifies a failed or parked node, while scaled_to_zero and cold_start identify Fargate no-task states. Pass responseMode: 'full' to get the complete simulation state instead. During recovery, each resource may include recoveryProgress with state parked, cooling_down, or healthy, plus parkWindow and cooldown counters. Poll simulation.step until the targeted resource's recoveryProgress.state is healthy, then use simulation.metrics to inspect the resulting state and metrics. GPU / inference workflow: when the simulation includes a kubernetes resource with characteristics.inferenceMode: true, each step response also includes gpuUtilization (%), tokensPerSecond, costPerMillionTokens (USD/M tokens), idleGpuCostPerHour (USD/hr of standby GPU spend), and idleGpuFraction (0-1 idle HA overhead share) so you can track inference economics step by step. Authenticate with an API key for unlimited steps and GPU right-sizing hints.

ParametersJSON Schema
NameRequiredDescriptionDefault
trafficNoOptional RPS override for this step. Applied when no traffic pattern is active; otherwise rejected with STEP_TRAFFIC_PATTERN_ACTIVE. Use simulation.inject_traffic to change load; finalized SQS backlog runs keep the pattern snapshot and apply an explicit target at runtime.
responseModeNoResponse detail level. 'compact' (default) returns only principal metrics, errorBreakdown when available, per-resource status (id, name, status, cpuPercent, routedRps, availabilityState, isRoutable, recoveryBlockedReason, and failureLifecycle/routingState when provided), and this step's events — keeps observations small for agent loops. 'full' returns the complete backend step response including the entire simulation object with all resource characteristics and connections.compact
simulationIdNoSimulation ID returned by simulation.create. Preserve Mcp-Session-Id to omit this field and use the session's current simulation; if your connector starts a fresh MCP session for each call (for example Grok Bot or Cursor), pass this explicit ID after every fresh initialization. A fresh session has no current-simulation pointer and returns NO_ACTIVE_SIMULATION when the ID is omitted. Anonymous capabilities are short-lived (30 minutes by default), unguessable, and revoked when the demo expires or is deleted; proxy IP changes do not invalidate them. Do not treat the ID as a durable share link.

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventsNoEvents generated during this step; every event has a non-empty canonical type
metricsNoFull-mode backend metric record; migrationEvaluation is exact-typed when a seeded interruption is present.
trafficNoCurrent traffic level in RPS
metricIdNoStorage-assigned persisted metric ID when available
appWeightNo
errorRateNoClient-level error rate (%) against original offered RPS. Resilience dependency targets in autoscaled compute fleets use aggregate routable-fleet capacity and health; non-autoscaled targets use their resolved resource capacity, including any declared fixed-instance count.
resourcesNoPer-resource status summary (compact mode)
goodputRpsNoModeled client-level successful requests per second; a post-step point rate sourced from metrics.throughput. Resilience dependency targets in autoscaled compute fleets use aggregate routable-fleet capacity and health; non-autoscaled targets use their resolved resource capacity, including any declared fixed-instance count.
latencyP50No50th-percentile latency in ms; null when workload-specific latency evidence is unavailable.
latencyP95No95th-percentile latency in ms; null when workload-specific latency evidence is unavailable.
latencyP99NoModeled 99th-percentile latency in ms; null when workload-specific latency evidence is unavailable. Interpret with latencyP99Basis and predictionEvidence.latencyP99.
offeredRpsNoAggregate offered requests per second represented by metrics.offeredRps provenance
throughputNoEffective requests per second
costPerHourNoEstimated cost in USD/hr
currentStepNoNew simulation time step index
latencyBasisNoGeneral modeled latency path/boundary; see latencyP99Basis for P99-specific provenance.
scenarioHashNoCanonical SHA-256 of the persisted scenario graph and attached traffic-pattern order
simulationIdNoID of the stepped simulation
engineVersionNoSimulation engine version used for this prediction.
goodputWindowNoInterval goodput aggregate when every point has persisted simulation-clock bounds; otherwise status=unavailable. Never derive this from retrieval time or currentStep.
loadBalancersNoPer-load-balancer routed traffic, including CDN-origin-matched ALB RPS for comparison with cdnFlow.originRps
errorBreakdownNoValidated additive error contributors in percentage-point units; separates database connection pressure below the usable pool limit from pool saturation after exhaustion, plus DB, compute, capacity, CPU, storage, runtime-memory, and queue absorption effects
gpuUtilizationNoGPU utilization (%) — present only on simulations with a GPU inference kubernetes resource
modeledShedRpsNoAggregate modeled requests per second shed by bounded capacity
replayIdentityNo
requestServingNo
auroraFailoversNoCompact per-writer Aurora failover state; promoting has no serving writer, serving means the explicitly related standby took over.
externalMetricsNoLatest deterministic external-metric recommendation telemetry, including each trigger's sample status/outcome/value/desired capacity and the combined capacity decision. It never actuates simulated or provider resources.
idleGpuFractionNoShare (0-1) of the GPU bill that is idle/standby capacity — present only on GPU inference simulations; values above 0.5 mean over half the GPU spend is HA overhead
latencyP99BasisNoPercentile-specific P99 basis: owned fit, scaled-from-fit (not directly measured), or uncalibrated generic model.
tokensPerSecondNoInference throughput in tokens/second — present only on GPU inference simulations
goodputSemanticsNoGoodput is a point rate, not an interval total
kubernetesCpuHpaNoPer-workload CPU request, observed millicores per pod, target calculations, bounded replica recommendation, scale-down stabilization, and provenance/errors. Utilization without a CPU request has no recommendation; this is not Kubernetes controller parity.
goodputProvenanceNoProvenance for the modeled goodput field
appWeightDefaultedNo
idleGpuCostPerHourNoUSD/hr of GPU spend funding idle/standby capacity (HA overhead) — present only on GPU inference simulations
predictionEvidenceNo
calibrationEvidenceNoOwned-versus-modeled evidence and latency boundary.
effectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity; see replayIdentity.effectiveConfigHash for the original replay-only hash.
latencyAvailabilityNo
residualCostPerHourNoSubtotal of unavailable, parked, or stopped resource costs; healthy/degraded idle resources, including ALBs, are excluded.
costPerMillionTokensNoSelf-hosted inference cost in USD per million tokens (null when no tokens are being processed) — present only on GPU inference simulations
eksSpotInterruptionsNoSeeded EKS interruption telemetry, including the authoritative additive migrationEvaluation when recorded.
resilienceDiagnosticsNoBounded resilience diagnostics summary (compact mode). Absent when the resilience model did not run. Use simulation.compare_resilience for full per-path detail.
residualCostDefinitionNoDefinition of residual cost; total cost remains the complete billed total.
retryAmplificationFactorNo(Original offered RPS + generated retry RPS) / original offered RPS; an amplification measure, not capacity or goodput. Values > 1.0 = amplification risk. null = model ran but no traffic. Absent = resilience model disabled.
predictionEffectiveConfigHashNoVersioned prediction hash over replay startup inputs, engine version, and calibration identity.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsimulation.inject_traffic4 fields changed
      • addedInput schema / properties / deltaPercent
        Added value: +{
        +  "description": "Relative traffic change; must be greater than -100.",
        +  "exclusiveMinimum": -100,
        +  "type": "number"
        +}
      • addedInput schema / properties / random
        Added value: +{
        +  "const": true,
        +  "description": "Explicitly select a random stress spike; never selected implicitly.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / targetRps
        Added value: +{
        +  "description": "Absolute traffic level in RPS to set. Server-capped at 10000 RPS in demo mode.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / traffic
        Removed value: -{
        -  "description": "Absolute traffic level in RPS to set. Omit to trigger a random spike instead. Server-capped at 10000 RPS in demo mode.",
        -  "type": "number"
        -}
  2. 1 tool update
    • Changedsimulation.create1 field changed
      • changedInput schema / properties / scenarioOverrides / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "sqsQueueBacklogSaturation": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "eventBurstStartStep": {
        -            "maximum": 100000,
        -            "minimum": 6,
        -            "type": "integer"
        -          },
        -          "includeEventBurst": {
        -            "type": "boolean"
        -          }
        -        },
        -        "required": [
        -          "includeEventBurst"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "sqsQueueBacklogSaturation"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eksSpotInterruption": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "startupSeconds": {
        -            "maximum": 3600,
        -            "minimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "startupSeconds"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "eksSpotInterruption"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "webAutoscaling": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "includeTrafficRecovery": {
        -            "default": false,
        -            "type": "boolean"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "webAutoscaling"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "redisCacheCrashRecovery": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "cacheHitRate": {
        -            "description": "Configured hit rate among requests sent to Redis (0–1; the scenario default is 0.8).",
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "cacheableRequestShare": {
        -            "description": "Fraction of offered requests sent to Redis (0–1; the scenario default is 0.8).",
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "cacheableRequestShare",
        -          "cacheHitRate"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "redisCacheCrashRecovery"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "sqsQueueBacklogSaturation": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "eventBurstStartStep": {
        +            "maximum": 100000,
        +            "minimum": 6,
        +            "type": "integer"
        +          },
        +          "includeEventBurst": {
        +            "default": true,
        +            "type": "boolean"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "sqsQueueBacklogSaturation"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eksSpotInterruption": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "startupSeconds": {
        +            "maximum": 3600,
        +            "minimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "startupSeconds"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "eksSpotInterruption"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "webAutoscaling": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "includeTrafficRecovery": {
        +            "default": false,
        +            "type": "boolean"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "webAutoscaling"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "redisCacheCrashRecovery": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "cacheHitRate": {
        +            "description": "Configured hit rate among requests sent to Redis (0–1; the scenario default is 0.8).",
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "cacheableRequestShare": {
        +            "description": "Fraction of offered requests sent to Redis (0–1; the scenario default is 0.8).",
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "cacheableRequestShare",
        +          "cacheHitRate"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "redisCacheCrashRecovery"
        +    ],
        +    "type": "object"
        +  }
        +]
  3. 1 tool update
    • Changedsimulation.create2 fields changed
      • changedInput schema / properties / scenarioOverrides / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "eksSpotInterruption": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "startupSeconds": {
        -            "maximum": 3600,
        -            "minimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "startupSeconds"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "eksSpotInterruption"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "webAutoscaling": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "includeTrafficRecovery": {
        -            "default": false,
        -            "type": "boolean"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "webAutoscaling"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "redisCacheCrashRecovery": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "cacheHitRate": {
        -            "description": "Configured hit rate among requests sent to Redis (0–1; the scenario default is 0.8).",
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "cacheableRequestShare": {
        -            "description": "Fraction of offered requests sent to Redis (0–1; the scenario default is 0.8).",
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "cacheableRequestShare",
        -          "cacheHitRate"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "redisCacheCrashRecovery"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "sqsQueueBacklogSaturation": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "eventBurstStartStep": {
        +            "maximum": 100000,
        +            "minimum": 6,
        +            "type": "integer"
        +          },
        +          "includeEventBurst": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "includeEventBurst"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "sqsQueueBacklogSaturation"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "eksSpotInterruption": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "startupSeconds": {
        +            "maximum": 3600,
        +            "minimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "startupSeconds"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "eksSpotInterruption"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "webAutoscaling": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "includeTrafficRecovery": {
        +            "default": false,
        +            "type": "boolean"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "webAutoscaling"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "redisCacheCrashRecovery": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "cacheHitRate": {
        +            "description": "Configured hit rate among requests sent to Redis (0–1; the scenario default is 0.8).",
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "cacheableRequestShare": {
        +            "description": "Fraction of offered requests sent to Redis (0–1; the scenario default is 0.8).",
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "cacheableRequestShare",
        +          "cacheHitRate"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "redisCacheCrashRecovery"
        +    ],
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / scenarioOverrides / description
        Previous value: -"Scenario-only customization; requires scenarioId and exactly one supported override. Redis cache assumptions affect only this simulation."New value: +"Scenario-only customization; requires scenarioId and exactly one supported override. SQS event-burst start is an absolute post-warm-up step and must be selected before the first simulation.step. Redis cache assumptions affect only this simulation."
  4. 1 tool update
    • Changedsimulation.step1 field changed
      • changedInput schema / properties / traffic / description
        Previous value: -"Optional RPS override for this step. Applied when no traffic pattern is active; otherwise rejected with STEP_TRAFFIC_PATTERN_ACTIVE. Use simulation.inject_traffic to change load and disable active patterns."New value: +"Optional RPS override for this step. Applied when no traffic pattern is active; otherwise rejected with STEP_TRAFFIC_PATTERN_ACTIVE. Use simulation.inject_traffic to change load; finalized SQS backlog runs keep the pattern snapshot and apply an explicit target at runtime."
  5. 1 tool update
    • Changedsimulation.create2 fields changed
      • addedInput schema / properties / resources / items / properties / characteristics / properties / cacheHitRate / description
        Added value: +"Cache only: fraction (0–1) of requests routed through this cache that are served from cache; 0.8 means an 80% hit rate."
      • addedInput schema / properties / resources / items / properties / characteristics / properties / cacheableRequestShare
        Added value: +{
        +  "description": "Cache only: fraction (0–1) of offered requests routed through this cache; when omitted on a connected cache path, all synchronous non-queued traffic is assumed cacheable.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
  6. 1 tool update
    • Changedsimulation.step1 field changed
      • addedInput schema / properties / traffic
        Added value: +{
        +  "description": "Optional RPS override for this step. Applied when no traffic pattern is active; otherwise rejected with STEP_TRAFFIC_PATTERN_ACTIVE. Use simulation.inject_traffic to change load and disable active patterns.",
        +  "minimum": 0,
        +  "type": "number"
        +}
  7. 1 tool update
    • Changedsimulation.create1 field changed
      • addedInput schema / properties / scenarioOverrides
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "eksSpotInterruption": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "startupSeconds": {
        +              "maximum": 3600,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "startupSeconds"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "eksSpotInterruption"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "webAutoscaling": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "includeTrafficRecovery": {
        +              "default": false,
        +              "type": "boolean"
        +            }
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "webAutoscaling"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "redisCacheCrashRecovery": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "cacheHitRate": {
        +              "description": "Configured hit rate among requests sent to Redis (0–1; the scenario default is 0.8).",
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "cacheableRequestShare": {
        +              "description": "Fraction of offered requests sent to Redis (0–1; the scenario default is 0.8).",
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "cacheableRequestShare",
        +            "cacheHitRate"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "redisCacheCrashRecovery"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "description": "Scenario-only customization; requires scenarioId and exactly one supported override. Redis cache assumptions affect only this simulation."
        +}
  8. 2 tool updates
    • Changedscenario.get1 field changed
      • addedOutput schema / properties / autoscalingConfig
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Scenario-level autoscaling thresholds and cooldown; pass this with resources and connections when copying the graph.",
        +  "type": "object"
        +}
    • Changedsimulation.create1 field changed
      • addedInput schema / properties / autoscalingConfig
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Simulation autoscaling thresholds and cooldown. Pass the value from scenario.get when creating from a copied scenario graph.",
        +  "properties": {
        +    "cooldownSeconds": {
        +      "type": "number"
        +    },
        +    "ecsCpuTargetTracking": {
        +      "type": "boolean"
        +    },
        +    "maxInstances": {
        +      "type": "number"
        +    },
        +    "minInstances": {
        +      "type": "number"
        +    },
        +    "scaleInCooldownSeconds": {
        +      "maximum": 86400,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "scaleInCpuThreshold": {
        +      "type": "number"
        +    },
        +    "scaleInThroughputThreshold": {
        +      "type": "number"
        +    },
        +    "scaleOutCooldownSeconds": {
        +      "maximum": 86400,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "scaleOutCpuThreshold": {
        +      "type": "number"
        +    },
        +    "scaleOutLatencyThreshold": {
        +      "type": "number"
        +    },
        +    "scaleOutThroughputThreshold": {
        +      "type": "number"
        +    },
        +    "simulationSecondsPerStep": {
        +      "exclusiveMinimum": 0,
        +      "maximum": 60,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "scaleOutCpuThreshold",
        +    "scaleInCpuThreshold",
        +    "scaleOutThroughputThreshold",
        +    "scaleInThroughputThreshold",
        +    "scaleOutLatencyThreshold",
        +    "cooldownSeconds",
        +    "minInstances",
        +    "maxInstances"
        +  ],
        +  "type": "object"
        +}

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources