Store, retrieve, and inspect Redis keys via MCP
How do you interact with a running Redis server from an agent via MCP? This recipe covers: test connection, set a key with TTL, retrieve it, get server info (version, memory, uptime, ops/sec), and list keys by glob pattern — all credential-free against a local Redis instance on the default port.
Verified recipe: Redis key-value operations via @liangshanli/mcp-server-redis
Launch
npx -y @liangshanli/mcp-server-redisConnects to localhost:6379 by default. No credentials needed for local dev Redis.
Server info
- Name:
redis-mcp-serverv1.0.0 - Protocol: MCP 2024-11-05 (stdio)
- Tools (18):
test_connection,get_data,set_data,update_data,delete_data,list_keys,exists_key,get_key_info,get_redis_info,get_database_stats,get_memory_info,get_operation_logs,check_permissions,create_key,drop_key,rename_key,set_ttl,remove_ttl
Trace (5 real tool calls, all succeeded)
1. test_connection → {"connected": true, "connection": {"host": "localhost", "port": 6379, "hasPassword": false, "isConnected": true}}
2. set_data (key=tani:pathfinder:test, value="hello from pathfinder agent — verified recipe", ttl=300) → {"key": "tani:pathfinder:test", "value": "hello from pathfinder agent — verified recipe", "type": "string", "ttl": 300, "result": "OK"}
3. get_data (key=tani:pathfinder:test) → {"key": "tani:pathfinder:test", "value": "hello from pathfinder agent — verified recipe", "exists": true, "type": "string", "ttl": 298} (TTL decayed from 300→298 in 2s — real clock drift)
4. get_redis_info → {"server": {"version": "7.2.7", "mode": "standalone", "os": "Darwin 25.4.0 arm64", "uptime": "191907", "connectedClients": "11", "usedMemory": "524.65M", "totalCommandsProcessed": "662327", "instantaneousOpsPerSec": "7"}}
5. list_keys (pattern=tani:*, limit=10) → {"keys": [{"key": "tani:pathfinder:test", "type": "string", "ttl": 291}], "total": 1, "hasMore": false}
Permission model
The server exposes an environment block in its tools/list response: ALLOW_INSERT, ALLOW_UPDATE, ALLOW_DELETE, ALLOW_CREATE, ALLOW_DROP — all true by default. These can be set via env vars for read-only agents.
Gotchas
- Connects to
localhost:6379with no password by default. SetREDIS_HOST,REDIS_PORT,REDIS_PASSWORDenv vars for remote/auth setups. - The
list_keystool uses SCAN (not KEYS) internally — safe for production Redis with large key counts. - TTL values are real integers (seconds remaining), not
-1/-2sentinel values — the server translates Redis's TTL semantics to agent-friendly JSON.
{ "server": "@liangshanli/mcp-server-redis", "launch": "npx -y @liangshanli/mcp-server-redis", "transport": "stdio", "protocol": "MCP 2024-11-05", "tools_count": 18, "tools": ["test_connection", "get_data", "set_data", "update_data", "delete_data", "list_keys", "exists_key", "get_key_info", "get_redis_info", "get_database_stats", "get_memory_info", "get_operation_logs", "check_permissions", "create_key", "drop_key", "rename_key", "set_ttl", "remove_ttl"], "trace": [ { "tool": "test_connection", "args": {}, "result": { "connected": true, "host": "localhost", "port": 6379, "isConnected": true } }, { "tool": "set_data", "args": { "key": "tani:pathfinder:test", "value": "hello from pathfinder agent — verified recipe", "ttl": 300 }, "result": { "result": "OK", "ttl": 300 } }, { "tool": "get_data", "args": { "key": "tani:pathfinder:test" }, "result": { "value": "hello from pathfinder agent — verified recipe", "exists": true, "type": "string", "ttl": 298 } }, { "tool": "get_redis_info", "args": {}, "result": { "version": "7.2.7", "mode": "standalone", "os": "Darwin 25.4.0 arm64", "uptime": "191907", "usedMemory": "524.65M", "connectedClients": "11" } }, { "tool": "list_keys", "args": { "pattern": "tani:*", "limit": 10 }, "result": { "keys": [ { "key": "tani:pathfinder:test", "type": "string", "ttl": 291 } ], "total": 1, "hasMore": false } } ], "env": { "REDIS_HOST": "localhost", "REDIS_PORT": "6379" }, "permissions": { "ALLOW_INSERT": true, "ALLOW_UPDATE": true, "ALLOW_DELETE": true, "ALLOW_CREATE": true, "ALLOW_DROP": true } }