Skip to content

Commit ac16125

Browse files
authored
Merge pull request #2 from giladwpx/feature/cluster-mode-support
Add Redis Cluster mode support
2 parents c0ca22c + ad2e957 commit ac16125

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ To configure this Redis MCP Server, consider the following environment variables
7373
| `REDIS_SSL_CERTFILE` | Client's certificate file for client authentication | None |
7474
| `REDIS_CERT_REQS` | Whether the client should verify the server's certificate | `"required"` |
7575
| `REDIS_CA_CERTS` | Path to the trusted CA certificates file | None |
76+
| `REDIS_CLUSTER_MODE` | Enable Redis Cluster mode | `False` |
7677

7778
## Integration with OpenAI Agents SDK
7879

@@ -122,7 +123,8 @@ You can configure Claude Desktop to use this MCP Server.
122123
"REDIS_PORT": "<your_redis_database_port>",
123124
"REDIS_PSW": "<your_redis_database_password>",
124125
"REDIS_SSL": True|False,
125-
"REDIS_CA_PATH": "<your_redis_ca_path>"
126+
"REDIS_CA_PATH": "<your_redis_ca_path>",
127+
"REDIS_CLUSTER_MODE": True|False
126128
}
127129
}
128130
}

src/common/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"ssl_keyfile": os.getenv('REDIS_SSL_KEYFILE', None),
1616
"ssl_certfile": os.getenv('REDIS_SSL_CERTFILE', None),
1717
"ssl_cert_reqs": os.getenv('REDIS_SSL_CERT_REQS', 'required'),
18-
"ssl_ca_certs": os.getenv('REDIS_SSL_CA_CERTS', None)}
18+
"ssl_ca_certs": os.getenv('REDIS_SSL_CA_CERTS', None),
19+
"cluster_mode": os.getenv('REDIS_CLUSTER_MODE', False) in ('true', '1', 't')}
1920

2021

2122
def generate_redis_uri():

src/common/connection.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from version import __version__
33
import redis
44
from redis import Redis
5-
from typing import Optional
5+
from redis.cluster import RedisCluster
6+
from typing import Optional, Type, Union
67
from common.config import REDIS_CFG
78

89
from common.config import generate_redis_uri
@@ -15,7 +16,9 @@ class RedisConnectionManager:
1516
def get_connection(cls, decode_responses=True) -> Redis:
1617
if cls._instance is None:
1718
try:
18-
cls._instance = redis.Redis(
19+
redis_class: Type[Union[Redis, RedisCluster]] = redis.cluster.RedisCluster if REDIS_CFG["cluster_mode"] else redis.Redis
20+
21+
cls._instance = redis_class(
1922
host=REDIS_CFG["host"],
2023
port=REDIS_CFG["port"],
2124
username=REDIS_CFG["username"],
@@ -27,8 +30,8 @@ def get_connection(cls, decode_responses=True) -> Redis:
2730
ssl_cert_reqs=REDIS_CFG["ssl_cert_reqs"],
2831
ssl_ca_certs=REDIS_CFG["ssl_ca_certs"],
2932
decode_responses=decode_responses,
30-
max_connections=10,
31-
lib_name=f"redis-py(mcp-server_v{__version__})"
33+
lib_name=f"redis-py(mcp-server_v{__version__})",
34+
**({"max_connections_per_node": 10} if REDIS_CFG["cluster_mode"] else {"max_connections": 10})
3235
)
3336

3437
except redis.exceptions.ConnectionError:
@@ -46,6 +49,9 @@ def get_connection(cls, decode_responses=True) -> Redis:
4649
except redis.exceptions.RedisError as e:
4750
print(f"Redis error: {e}", file=sys.stderr)
4851
raise
52+
except redis.exceptions.ClusterError as e:
53+
print(f"Redis Cluster error: {e}", file=sys.stderr)
54+
raise
4955
except Exception as e:
5056
print(f"Unexpected error: {e}", file=sys.stderr)
5157
raise

0 commit comments

Comments
 (0)