mcp-elasticache-ops
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AWS_REGION | No | AWS region used by the aws_* tools (AWS_DEFAULT_REGION also accepted) | |
| AWS_PROFILE | No | AWS profile for the standard boto3 credential chain | |
| ELASTICACHE_DB | No | Database index (default 0) | |
| MEMCACHED_HOST | No | Memcached host used by memcached_stats | |
| MEMCACHED_PORT | No | Memcached port (default 11211) | |
| ELASTICACHE_TLS | No | Set true for in-transit encryption (default false) | |
| MEMCACHED_NODES | No | Comma-separated host:port list (max 64, IPv6 as [::1]:11211) for memcached_cluster_stats; invalid entries stop startup | |
| AWS_MAX_ATTEMPTS | No | Attempts per AWS call (default 3, 1 to 10) | |
| ELASTICACHE_HOST | No | Primary/reader/configuration endpoint (default 127.0.0.1) | |
| ELASTICACHE_PORT | No | Port (default 6379) | |
| ELASTICACHE_REGIONS | No | Comma-separated regions (max 8) that aws_replication_groups and aws_triage fan out over | |
| ELASTICACHE_TIMEOUT | No | Socket timeout in seconds, must be greater than 0 (default 5) | |
| ELASTICACHE_PASSWORD | No | AUTH token | |
| ELASTICACHE_USERNAME | No | RBAC user | |
| MCP_MAX_OUTPUT_CHARS | No | Cap on any tool result in JSON characters (default 60000, 1000 to 5000000) | |
| ELASTICACHE_TLS_VERIFY | No | false disables certificate and hostname checks (default true) | |
| ELASTICACHE_READER_HOST | No | Reader endpoint (reserved for read-side checks) | |
| ELASTICACHE_TLS_CA_FILE | No | CA bundle used to verify the endpoint (must exist) | |
| AWS_CALL_TIMEOUT_SECONDS | No | Connect and read timeout for every AWS API call (default 10, greater than 0, at most 120) | |
| ELASTICACHE_USE_IAM_AUTH | No | IAM authentication; needs TLS, ELASTICACHE_USERNAME and ELASTICACHE_IAM_CACHE_NAME, no password (default false) | |
| ELASTICACHE_CONTROL_PLANE | No | false disables all aws_* calls (default true) | |
| ELASTICACHE_PASSWORD_FILE | No | AUTH token read from a file | |
| ELASTICACHE_IAM_CACHE_NAME | No | Replication group id or serverless cache name used to sign the IAM token | |
| ELASTICACHE_TLS_CHECK_HOSTNAME | No | Keep certificate validation but skip hostname matching (default true) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Read-only operations and monitoring for Amazon ElastiCache (Redis OSS, Valkey,
Memcached) and self-hosted Redis/Valkey. Data-plane tools (prefix node_) talk
to one endpoint over RESP; control-plane tools (prefix aws_) use the
ElastiCache/CloudWatch APIs and are optional. Start with node_health and
aws_replication_groups, then drill down. No tool writes, flushes or reads values.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| aws_replication_groupsA | DescribeReplicationGroups: status, engine, cluster mode, node type, Multi-AZ,
failover, encryption, shards with primary/reader endpoints and member roles. Queries every region in
ELASTICACHE_REGIONS unless |
| aws_cache_clustersB | DescribeCacheClusters: per-node-cluster engine version, node type, parameter group and apply status, maintenance window, pending changes and node endpoints. |
| aws_serverless_cachesC | DescribeServerlessCaches for ElastiCache Serverless (Valkey/Redis OSS/Memcached). |
| aws_eventsB | DescribeEvents, findings first: failover/failure critical, replacement/reboot/maintenance warning, worst then
newest; counts per source and the 100 newest events ( |
| aws_parametersA | DescribeCacheParameters for a parameter group; by default only values changed (Source=user). Findings flag risky settings (noeviction, tiny output buffers, timeout 0, low maxmemory-samples). |
| aws_snapshotsB | DescribeSnapshots: age, size, status, automatic vs manual, with findings for retention gaps, failed snapshots and groups without automatic backups. |
| aws_serverless_snapshotsA | DescribeServerlessCacheSnapshots plus DescribeServerlessCaches: findings for caches without a recent snapshot, failed snapshots, snapshots about to expire, missing KMS key and unset retention. |
| aws_usersA | DescribeUsers (RBAC): authentication type and access strings, never passwords. Flags users with '~* +@all' access and users without a password. |
| aws_user_groupsB | DescribeUserGroups: members, attached replication groups/serverless caches, pending changes. |
| aws_user_access_mapA | RBAC map from Describe* calls: users x groups x caches. Findings first: ~* +@all users, unattached groups, enabled default user, no-password users in live groups, Memcached groups, caches without a group. |
| aws_global_replication_groupsC | DescribeGlobalReplicationGroups: global datastore members, regions, roles and status. |
| aws_global_datastore_failover_readinessA | Global datastore failover readiness from DescribeGlobalReplicationGroups and GlobalDatastoreReplicationLag. Findings first, then per datastore: readiness (blocked, attention, ready), reasons, primary region, and each secondary's status, node type, engine version and max replication lag. |
| aws_reserved_nodesA | DescribeReservedCacheNodes plus running nodes, findings first: reservations expiring in 30/90 days,
reservations matching no node, nodes no reservation covers (node-hours billed on demand). All ELASTICACHE_REGIONS
unless |
| aws_reserved_offeringsA | DescribeReservedCacheNodesOfferings: 1y/3y offerings for a node type and engine (capped), the number of running nodes no reservation covers and the cheapest offering per term. Never purchases anything. |
| aws_engine_versionsA | DescribeCacheEngineVersions: available versions with parameter group family, plus upgrade targets (latest minor of each major; latest Valkey when asking about Redis OSS). |
| aws_parameter_groupsA | DescribeCacheParameterGroups joined with running clusters: unused custom groups, family mismatch, and risky Source=user settings (noeviction, timeout, keepalive, reserved-memory, lazyfree, slowlog). |
| aws_service_updatesB | DescribeServiceUpdates: pending updates by severity with apply-by and auto-update dates. |
| aws_subnet_groupsB | DescribeCacheSubnetGroups: VPC, subnets and AZ spread (flags groups in fewer than 2 AZs). |
| aws_metricsB | CloudWatch AWS/ElastiCache metrics (Redis/Valkey: EngineCPUUtilization, memory %, Evictions, CacheHitRate, ReplicationLag; Memcached: CPU, swap, evictions, connections). Findings first, then min/avg/max/latest; raw series only with include_series=true. |
| aws_parameter_driftA | DescribeCacheParameters on two groups: only parameters whose values differ and that someone modified (default-only differences are counted, not listed), plus family mismatch warnings. |
| aws_triageA | One-call incident summary for a replication group: status, Multi-AZ/failover, 6h events, CloudWatch peaks per member, pending updates, snapshot age. Findings worst-first (max 30); a failing section is reported unavailable. |
| aws_serverless_triageA | One-call incident summary for a serverless cache: status, usage limits, snapshot health, 6h ThrottledCmds/ECPU/storage vs limits. Findings worst-first (max 30); a failing section is reported unavailable. |
| aws_shard_balanceA | Per-shard skew from CloudWatch only (no data-plane connection). Findings first: hot shard (over 2x the median and above 50% CPU), memory skew, one primary pinned near 100% CPU (hot-key signature). |
| aws_backup_auditB | Fleet backup hygiene (DescribeSnapshots plus groups/clusters). Findings first: retention 0, no recent automatic snapshot, latest failed, old manual snapshots, snapshots of deleted groups. |
| aws_replication_group_auditA | HA and config posture per replication group in one call. Findings first, each with a |
| aws_snapshot_restore_readinessA | Can this group or serverless cache be restored? Pass exactly one id. Findings first: backups off, stale, expired or failed snapshot, none before an engine upgrade, KMS mismatch, snapshot too big for the target node. |
| aws_failover_readinessB | Would a primary failure be survived? Findings first: failover or Multi-AZ off, shards without replicas, replicas in the primary's AZ, uneven or unavailable replicas, single-node group, recovery-risk level. |
| aws_reader_endpoint_auditA | Are replicas usable for reads? Findings first: clients likely on the primary endpoint, no reader endpoint, single-replica shards, replicas in the primary's AZ, high ReplicationLag. |
| aws_scale_readinessA | Headroom for resharding or a node-type change, from 7 days of CloudWatch. Findings first: is scale-in safe (projected memory per surviving shard), is scale-out advised, why a node-type change is risky (burstable credits, replica lag, pending modification, Multi-AZ off). Describe and GetMetricData only. |
| aws_upgrade_planA | Engine upgrade pre-flight, verdict first: go or no-go plus blockers (version path, Redis to Valkey, parameter group family, status, failover, snapshot freshness), then caveats (ACL/TLS, quirks, service updates, window). An unreadable gate blocks. Describe calls only. |
| aws_alarmsA | CloudWatch alarm coverage. Findings first: alarms in ALARM, INSUFFICIENT_DATA or with actions disabled, members with no alarm on core metrics (CPU, memory, evictions, lag, connections, swap). partial=true if denied. No group id covers ELASTICACHE_REGIONS. |
| aws_maintenanceB | Maintenance urgency. Findings first: required updates past apply-by, maintenance windows overlapping the snapshot window, end-of-life engines. partial=true if a call is denied. No group id covers ELASTICACHE_REGIONS. |
| aws_cluster_overviewA | One findings-first call per replication group: shards, replicas, AZ spread, failover, engine version plus per-node CloudWatch signals; flags outlier nodes, reader gaps, right-sizing. No group id: fleet mode. |
| aws_security_auditA | Fleet hardening roll-up from existing Describe data (no new IAM), Redis and Memcached. Findings first: counts
by severity, findings by category (transit, at rest, auth, ACL, network, snapshots, patching) naming the
resource, then a pass/fail matrix capped to |
| aws_cost_overviewA | Fleet cost and right-sizing, findings first: node type and count, reserved coverage, peak memory/CPU per group
and serverless cache. Flags idle groups, oversized nodes (names the smaller node type), idle replicas,
on-demand and non-Graviton nodes, old snapshots, uncapped serverless. All ELASTICACHE_REGIONS unless |
| aws_capacity_forecastA | Days until memory is full across the fleet, findings first, from 14 days of DatabaseMemoryUsagePercentage
(Serverless: BytesUsedForCache vs the storage maximum), soonest first. Under 7 days critical, under 30
warning. All ELASTICACHE_REGIONS unless |
| node_healthA | One-shot health summary of the configured Redis/Valkey endpoint: engine and version, role, clients, hit ratio, memory vs maxmemory, fragmentation, evictions and a list of findings. |
| node_connectivityA | Why can't I connect: staged diagnosis of the endpoint, stopping at the first failure. DNS, TCP, TLS (and plaintext fallback), PING, AUTH, each timed with a verdict and one hint per failure class. Socket probes and PING only; credentials never echoed. |
| node_triageA | On-call snapshot of the connected endpoint: health, memory, replication, clients, failed commandstats, top-5 slowlog, latency, DOCTOR. Findings worst-first (max 30); a failing section is reported unavailable. Start here. |
| node_doctorA | MEMORY DOCTOR and LATENCY DOCTOR of the connected node: the engine's advice plus findings for non-healthy lines. Engines that reject the command get a note, not an error. node_triage includes this. |
| node_infoA | Raw INFO output, optionally for a single section. Password-like keys are masked. |
| node_memoryA | Memory breakdown: used/RSS/peak/dataset/overhead, maxmemory and policy, fragmentation ratio with a verdict, evictions, MEMORY STATS and MEMORY DOCTOR when the engine allows them. |
| node_configA | Allowlisted CONFIG GET view (maxmemory policy, timeout, appendonly, output buffer limits, keyspace notifications, slowlog/latency thresholds, io-threads) with findings. Points at aws_parameters when CONFIG is refused, as ElastiCache usually does. |
| node_slowlogA | SLOWLOG entries plus per-command totals. Arguments beyond the key are hidden unless include_args is true. |
| node_clientsC | CLIENT LIST aggregated by source IP, client name, ACL user and last command, idle-time stats and the clients holding the most buffer memory. |
| node_clients_summaryA | Who holds the connections: CLIENT LIST grouped by source IP, name or library, user and flags, top IPs, idle over 1h, big buffers, maxclients use. Capped rows per group; never commands, arguments or keys. |
| node_latencyA | Client PING RTT percentiles, LATENCY LATEST events (needs latency-monitor-threshold > 0) and per-command p50/p99/p99.9 from LATENCY HISTOGRAM (Redis 7+/Valkey) with findings for heavy tails. |
| node_commandlogA | Valkey 8 COMMANDLOG (slow, large-request, large-reply): oversized payloads SLOWLOG misses. Findings first, top commands by size and client addresses; no arguments or values. Other engines get a note. |
| node_latency_eventsC | LATENCY LATEST, then HISTORY for the 3 worst events, findings first: fork or aof-fsync over 100 ms, expire-cycle spikes, trimmed LATENCY/MEMORY DOCTOR. With latency-monitor-threshold 0 the finding names it. |
| node_commandstatsA | Commands ranked by CPU time (INFO commandstats): calls, usec per call, rejected and failed, error prefixes, p50/p99/p99.9 when available. Findings for OOM/READONLY/NOPERM errors and p99 over 10 ms. |
| node_keyspace_sampleA | Big keys, hot (LFU) or cold keys, type mix, TTL coverage, per-prefix bytes from a bounded SCAN. Metadata only, never values. partial=true at max_seconds. Cluster mode: this node only (see node_cluster_keyspace_sample). include_access adds the idle-key share; include_sizes flags large collections. |
| node_replicationA | Replication role, replicas with byte lag, link status, backlog, plus findings: links down, lagging replicas (also vs the primary offset on a replica), replica-read-only, min-replicas-to-write, cluster-allow-reads- when-down. Engine quirks are notes, not errors. |
| node_acl_logA | ACL WHOAMI and recent ACL LOG entries (auth failures, denied commands, key/channel denials) with reason, user, client address, count; key and channel names hidden. Findings flag repeated auth failures and denial spikes. ACL LIST/GETUSER never used. |
| node_clusterA | Cluster-mode view: CLUSTER INFO, slots per primary and CLUSTER SHARDS when available. Reports cluster mode disabled otherwise. |
| node_cluster_nodesA | CLUSTER NODES parsed into per-shard primary/replica endpoints, slot counts and failing nodes, plus how to target each shard with ELASTICACHE_HOST. |
| node_cluster_healthA | Cluster-mode fan-out: INFO on every node (bounded concurrency, per-node timeout) flagging memory/ops skew across shards, failed nodes, uncovered slots and replica lag. |
| node_cluster_keyspace_sampleA | node_keyspace_sample on every shard primary: keys merged with a |
| node_cluster_slowlogA | node_slowlog on every shard primary: the slowest entries overall labelled by shard, per-command totals and per-shard status. Arguments beyond the key are hidden unless include_args is true. |
| node_cluster_memoryA | node_memory headline for every shard primary: used/RSS/maxmemory, fragmentation, evictions, with findings for memory skew between shards, shards above 90% of maxmemory and unreachable shards. |
| node_hot_slotsA | Cluster-mode shard skew and hot slots: per-shard keys, memory, ops/sec plus CLUSTER COUNTKEYSINSLOT on a
capped slot sample. Findings name hot shards and slots; |
| node_pubsubA | Pub/Sub pressure: channel and pattern counts, top channels by subscribers, subscribers with large output buffers. Counts only, never messages. Cluster mode aggregates shard primaries. |
| node_cluster_triageA | node_triage plus pub/sub pressure on every shard primary under one deadline: one ranked, deduplicated findings list naming node and shard (max 40). A dead shard is a critical finding, never fatal. Use first on a cluster-mode group. |
| memcached_statsA | Memcached summary (hit ratio, memory, evictions, connections) or a raw
|
| memcached_cluster_statsA | Memcached fleet view over MEMCACHED_NODES: every node queried with bounded concurrency, only |
| memcached_discoveryA | Memcached auto-discovery check: |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| oncall_high_cpu | Runbook: EngineCPUUtilization alarm on a replication group. |
| oncall_evictions_memory | Runbook: evictions or memory pressure on a replication group. |
| oncall_replication_lag | Runbook: replica lag or global datastore lag. |
| oncall_connection_storm | Runbook: connection spike or maxclients exhaustion. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 65 tools
The aws_*/node_*/node_cluster_*/memcached_* prefixes give a useful first cut, but several tools have genuinely overlapping scope: node_clients vs node_clients_summary both aggregate CLIENT LIST, node_latency_events vs node_latency both read LATENCY, and the findings-first roll-ups (aws_triage, aws_cluster_overview, aws_shard_balance, aws_scale_readiness, aws_capacity_forecast, aws_metrics) all draw on CloudWatch and would tempt misselection. Descriptions do disambiguate most of these if read carefully, but an agent scanning names alone would hesitate in several places.
Consistent snake_case throughout with a clear scope-prefix convention (aws_ for control plane, node_ for data plane, node_cluster_ for cluster fan-out, memcached_ for Memcached). The only real deviation is the noun/verb style drift where a plain tool and a _summary variant coexist (node_clients vs node_clients_summary), which is a minor blemish rather than a pattern break.
65 tools is well past the point of a well-scoped surface, and the breadth of the domain (control plane, data plane, cluster mode, serverless, Memcached, RBAC, cost, security) does not fully justify it. Multiple aggregate/diagnostic roll-ups restate each other's findings, so a meaningful fraction of the tools do not independently earn their place.
Coverage is unusually deep: control-plane inventory, node diagnostics, cluster-mode fan-out, serverless, Memcached, RBAC mapping, snapshots/restore readiness, upgrade and failover pre-flight, cost and security audits are all present with few dead ends. The only consistent gap is that the surface is entirely read-only — no config changes, failover, resharding, or scaling actions — which is a defensible design choice for a diagnostics server but leaves remediation workflows to other tooling.