@qdkj/redis-mcp-server-multi
v1.0.0
Published
多连接版 Redis MCP 服务端;基于 @qdkj/redis-mcp-server v1.0.4,单 server 实例承载 N 个 Redis 连接,工具层显式 conn 参数路由 + 9 条黑名单(unique 8 + 1 重复 FLUSHDB)+ 14 条白名单子集 二重控制。
Maintainers
Readme
@qdkj/redis-mcp-server-multi
多连接版 Redis MCP 服务端 · 单 server 实例承载 N 个 Redis 连接,工具层显式
conn参数路由
📘 进阶文档(开发者 / 本地调试 / 跑测试 / 贡献指南)请看 DEV.md
🎯 这个库是做什么的
@qdkj/redis-mcp-server-multi 是 @qdkj/redis-mcp-server v1.0.4 的多连接升级版。单 server 实例承载 N 个 Redis 连接,工具层显式 conn 参数路由到指定连接 —— LLM 视角下工具"全名 = list_keys(dev) / execute_command(prod)"语义自描述,从根源消除同名工具冲突。仅支持 Redis(本项目不涉及 MySQL / PostgreSQL / SQL Server / MongoDB;如需 MySQL 多连接请用对应 MySQL MCP 包)。
😩 解决了什么问题
- 多 Redis 必须启多个 mcp server —— 原
@qdkj/redis-mcp-serverv1.0.4 只支持单连接;想连 dev + test + prod 三个 Redis 就要在 mcp.json 配三个 server 实例,但工具名都是list_keys/get_value/set_value等,工具名冲突让 LLM 不知道调哪个。 - LLM 选错库的 silent 错误 —— 同名工具在多 server 并行时,LLM 可能"我说要查 dev 但实际拿到 prod 的缓存",这种 silent 错误是生产事故的温床。显式
conn参数让 LLM 每次调用都必须指明目标连接,错误信息在工具层就暴露。 - 写命令控制被原包分散到 4 写工具各自管 —— 原包用
assertAllowWrite在每个写工具(set_value/set_hash/delete_key/execute_command)入口加 per-conn 拦截,要"dev 可写 + prod 只读"必须配 2 个 server。新包 user 拍板"全去掉"allowWrite 字段(无 per-conn 写控制),写命令统一由程序内 forbidden 黑名单 9 条(unique 8 + 1 重复 FLUSHDB)+ allowed 白名单 14 条控制:黑名单 9 条任何 conn 永远拦截(FLUSHDB/FLUSHALL/CONFIG RESETSTAT/SHUTDOWN/BGSAVE/BGREWRITEAOF/DEBUG/CLUSTER),白名单 14 条子集外任何 conn 拒绝(如LPUSH/RPUSH/SADD等需用 Redis 原生客户端)。这与 MySQL multi 的 per-connallowWrite/allowDDL方案不同(user 在 2026-09-11 拍板:"allowWrite 这个都要去掉,没有什么用")。
🧭 什么场景下用
✅ 用本库的场景:
- 多项目 / 多环境 Redis(dev / test / staging / prod 四套缓存)用 1 个 mcp.json 配,工具调用时显式
conn: "dev"/conn: "prod"选库 - 多业务 Redis(同公司不同业务线缓存 / 不同业务模块缓存)按业务拆分 conn,LLM 调
get_value({ conn: "user-cache", key: "u:1" })/set_value({ conn: "order-cache", ... })自然路由 - 跨缓存数据迁移 / 对账(dev → staging 同步 / dev 与 prod 数据对账),1 个 mcp 客户端搞定双 conn,工具层
conn显式选源库和目标库 - 只读账号 + 写账号分离(强需求场景)—— 如需 per-conn 写控制请用 MySQL multi;本库 1 个 conn 对应 1 个账号,账号侧控权限
❌ 不要用本库的场景:
- 你只有 1 个 Redis 库 → 用更轻的
@qdkj/redis-mcp-serverv1.0.4 就够了,本包 0 多连接收益 - 你不用 MCP stdio 协议(直接在 Node.js 里 import 用)→ 本包是 MCP server 形态,不是 ioredis 包装
- 你需要 per-conn 写控制(某个 conn 可写、另一个 conn 强只读)→ 本项目无 allowWrite 字段,统一由黑名单+白名单控制;请用 MySQL multi 的
allowWrite+allowDDL方案 - 你需要 MySQL / PostgreSQL / SQL Server / MongoDB → 本项目不涉及,请用对应数据库的 MCP 包
1. 🚀 MCP 使用方法 + JSON 配置
把这个 JSON 整段粘到你 MCP 客户端(Cursor / Claude Desktop / CodeBuddy 等)的配置里即可使用。npx -y @qdkj/redis-mcp-server-multi@latest 会在首次启动时自动拉取最新版本。
1.1 多连接版(CONNECTION 单行 JSON,推荐)— 独立编辑 JSON 工作流
Step 1:先把 conn 列表保存为独立可编辑的 JSON 文件(conns/dev.json):
[
{
"id": "<your-redis-hostname>",
"note": "<Your project Redis dev>",
"conf": {
"host": "127.0.0.1",
"port": 6379,
"password": "<PASSWORD>",
"db": 0
}
},
{
"id": "<your-redis-hostname-prod>",
"note": "<Your project Redis prod>",
"conf": {
"host": "<PROD_HOST>",
"port": 6379,
"password": "<PROD_PASSWORD>",
"db": 0
}
}
]占位符(需替换为真实值):
<your-redis-hostname>/<PASSWORD>/<PROD_HOST>/<PROD_PASSWORD>等字段说明:
db(默认 0)— Redis 数据库编号(0-15)- 无
allowWrite字段(user 拍板"全去掉";写命令由黑名单+白名单统一控制)- 无
allowDDL字段(Redis 无 DDL 概念)- 无
user字段(Redis 无账号概念,仅密码)
Step 2:mcp.json 只保留 server 入口 + 引用 conn.json 路径(推荐)或贴 CONNECTION 单行 JSON:
{
"mcpServers": {
"redis-multi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server-multi@latest"],
"env": {
"CONNECTION_PATH": "/abs/path/to/conns/dev.json"
}
}
}
}CONNECTION_PATH 工作流优势:conn 列表在独立
.json文件,可读可 diff 可纳入 git;避免在 mcp.json 内嵌单行 JSON 字符串(不易编辑 + 容易转义错)
Step 3(备选):如果必须用单行 JSON 字符串模式(无独立文件),把上面 JSON 用 JSON.stringify() 转成单行后嵌到 mcp.json:
{
"mcpServers": {
"redis-multi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server-multi@latest"],
"env": {
"CONNECTION": "[{\"id\":\"<your-redis-hostname>\",\"note\":\"<Your project Redis dev>\",\"conf\":{\"host\":\"127.0.0.1\",\"port\":6379,\"password\":\"<PASSWORD>\",\"db\":0}}]"
}
}
}
}1.2 老 env 单连接版(向后兼容,无 CONNECTION/CONNECTION_PATH 时自动 fallback)
{
"mcpServers": {
"redis-multi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server-multi@latest"],
"env": {
"REDIS_HOST": "你的Redis地址",
"REDIS_PORT": "6379",
"REDIS_PASSWORD": "你的密码",
"REDIS_DATABASE": "0"
}
}
}
}老 env 走 fallback 路径,自动包装成 {id: "default", ...} 一个 conn,工具调用时 conn: "default"。
1.3 配置优先级
| 优先级 | 触发条件 | 数据来源 | 备注 |
|--------|----------|----------|------|
| 1. CONNECTION env | CONNECTION 任何非空字符串 | 单行 JSON 字符串 | 最高优先级;完全忽略其他配置 |
| 2. CONNECTION_PATH env | 无 CONNECTION + CONNECTION_PATH 任何非空字符串 | 独立 .json 文件(绝对/相对 cwd 路径)| 优先级 2 |
| 3. 老 REDIS_ env* | CONNECTION/CONNECTION_PATH 都没有 | 老 env 4 变量(HOST/PORT/PASSWORD/DATABASE)| 最低优先级(fallback)|
1.4 CONNECTION_PATH 路径说明
| 类型 | 示例 | 解析规则 |
|------|------|----------|
| 绝对路径(Windows)| C:/Users/<USER>/conns/dev.json | 原样使用 |
| 绝对路径(Linux/macOS)| /home/<USER>/conns/dev.json | 原样使用 |
| 相对路径 | ./conns/dev.json 或 conns/dev.json | 相对 cwd(进程当前工作目录;通常 = MCP 客户端启动目录)|
CONNECTION_PATH 错误信息示例(文件不存在):
[2026-09-11T...] [ERROR] 错误:CONNECTION_PATH 指向的文件不存在 (path="/non/existent/conn.json", resolved="D:\work\...\conn.json", cwd="D:\work\...", code=ENOENT)1.5 工具与客户端通信
服务通过 stdio 与 MCP 客户端通信,所有日志写到 stderr,不污染 stdout。客户端工具调用 → JSON-RPC over stdin → 服务执行 → JSON-RPC over stdout 返回结果。
2. 🛠️ 工具列表
服务对外暴露 11 个 MCP 工具(10 老工具加 conn + 1 新工具),AI 客户端会看到这些工具并可在对话中调用。
2.1 list_connections(新增第 11 工具)
- 功能:列出所有已注册 conn 的元数据
- 参数:无(不需
conn参数) - 返回:JSON 数组,每个元素含
id/note - 安全:不返回 host/port/password/db 等敏感字段
- 示例返回:
[ { "id": "<your-redis-hostname>", "note": "开发库" }, { "id": "<your-redis-hostname-prod>", "note": "生产库" } ]
2.2 list_keys(+conn 必填)
- 功能:列出 Redis 中符合 pattern 的键(最多 count 个,使用 SCAN 防止阻塞)
- 参数:
conn(必填):conn 标识,先用list_connections工具查看可用列表pattern(可选):键匹配模式(默认*,支持通配符如user:*/*/cache:*)count(可选):返回最大键数量(默认 100)
- 返回:JSON 字符串数组(键名列表)
- 示例返回:
["user:1", "user:2", "session:abc123"]
2.3 get_value(+conn 必填)
- 功能:获取键的值(按类型自动选择 GET / LRANGE / SMEMBERS / HGETALL / ZRANGE WITHSCORES)
- 参数:
conn(必填):conn 标识key(必填):键名
- 返回:JSON 对象,含
key/type/ttl/value - 示例返回:
{ "key": "user:1", "type": "string", "ttl": 3600, "value": "alice" }
2.4 set_value(+conn 必填)
- 功能:设置键值对
- 参数:
conn(必填):conn 标识key(必填):键名value(必填):要设置的值ttl(可选):过期时间(秒),不设置则永久有效
- 返回:JSON 对象,含
success/message - 安全约束:写操作受黑名单 9 条(unique 8 + 1 重复 FLUSHDB,任何 conn 永远拦截)+ 白名单 14 条控制;本工具无 per-conn 写控制(user 拍板"全去掉")
2.5 delete_key(+conn 必填)
- 功能:删除一个或多个键
- 参数:
conn(必填):conn 标识keys(必填):键名,多个用逗号分隔
- 返回:JSON 对象,含
deleted_count/keys - 示例返回:
{ "deleted_count": 2, "keys": ["user:1", "user:2"] }
2.6 get_hash(+conn 必填)
- 功能:获取 Redis Hash 类型的所有字段和值(HGETALL)
- 参数:
conn(必填):conn 标识key(必填):Hash 键名
- 返回:JSON 对象,
{ field1: value1, field2: value2, ... } - 示例返回:
{ "name": "alice", "age": "30", "city": "Beijing" }
2.7 set_hash(+conn 必填)
- 功能:设置 Hash 类型字段值(HSET)
- 参数:
conn(必填):conn 标识key(必填):Hash 键名field(必填):Hash 字段名value(必填):字段值
- 返回:JSON 对象,含
success/message
2.8 get_list(+conn 必填)
- 功能:获取 List 类型的所有元素(LRANGE 0 -1)
- 参数:
conn(必填):conn 标识key(必填):List 键名
- 返回:JSON 字符串数组(List 所有元素)
2.9 get_set(+conn 必填)
- 功能:获取 Set 类型的所有成员(SMEMBERS)
- 参数:
conn(必填):conn 标识key(必填):Set 键名
- 返回:JSON 字符串数组(Set 所有成员)
2.10 get_key_info(+conn 必填)
- 功能:获取键的类型(TYPE)和剩余过期时间(TTL)
- 参数:
conn(必填):conn 标识key(必填):键名
- 返回:JSON 对象,含
key/type/ttl - 示例返回:
{ "key": "user:1", "type": "string", "ttl": 3600 }
2.11 execute_command(+conn 必填 + 8 黑名单 + 14 白名单子集)
- 功能:执行原始 Redis 命令
- 参数:
conn(必填):conn 标识command(必填,例:GET mykey/SET mykey value)
- 安全约束(二重控制):
- 黑名单 9 条(unique 8 + 1 重复 FLUSHDB,任何 conn 永远拦截):
FLUSHDB/FLUSHALL/CONFIG RESETSTAT/SHUTDOWN/BGSAVE/BGREWRITEAOF/DEBUG/CLUSTER - 白名单子集 14 条(不在子集 → 拒绝):
GET/SET/DEL/KEYS/TYPE/TTL/EXISTS/HGET/HGETALL/HSET/LRANGE/SMEMBERS/INCR/DECR
- 黑名单 9 条(unique 8 + 1 重复 FLUSHDB,任何 conn 永远拦截):
- 不在白名单的写命令(如
LPUSH/RPUSH/SADD/ZADD等)→ 拒绝,请用 Redis 原生客户端
2.12 工具签名变更表(vs @qdkj/redis-mcp-server v1.0.4)
| 工具 | 旧签名 | 新签名 | 变更 |
|------|--------|--------|------|
| list_keys | ({ pattern?, count? }) | ({ conn, pattern?, count? }) | 加 conn 必填(破坏兼容)|
| get_value | ({ key }) | ({ conn, key }) | 加 conn 必填(破坏兼容)|
| set_value | ({ key, value, ttl? }) | ({ conn, key, value, ttl? }) | 加 conn 必填(破坏兼容)|
| delete_key | ({ keys }) | ({ conn, keys }) | 加 conn 必填(破坏兼容)|
| get_hash | ({ key }) | ({ conn, key }) | 加 conn 必填(破坏兼容)|
| set_hash | ({ key, field, value }) | ({ conn, key, field, value }) | 加 conn 必填(破坏兼容)|
| get_list | ({ key }) | ({ conn, key }) | 加 conn 必填(破坏兼容)|
| get_set | ({ key }) | ({ conn, key }) | 加 conn 必填(破坏兼容)|
| get_key_info | ({ key }) | ({ conn, key }) | 加 conn 必填(破坏兼容)|
| execute_command | ({ command }) | ({ conn, command }) | 加 conn 必填(破坏兼容)|
| list_connections | — | ({}) | 新增(不需 conn)|
3. ⚙️ CONNECTION 配置完整说明
3.1 conn 字段
| 字段 | 必填 | 默认 | 说明 |
|------|------|------|------|
| id | ✅ | — | conn 唯一标识,字符集 [a-z0-9_-],长度 1-64,区分大小写,重复 id 启动报错 |
| note | | "" | 描述(仅供人类阅读,list_connections 工具返回)|
| conf.host | ✅ | — | Redis 主机 |
| conf.port | | 6379 | Redis 端口 |
| conf.password | | "" | Redis 密码(允许空字符串:无密码 Redis 合法)|
| conf.db | | 0 | Redis 数据库编号(0-15)|
Redis 特有(与 MySQL multi 差异):
- 无
allowWrite字段(user 拍板"全去掉";写控制由黑名单+白名单统一保障)- 无
allowDDL字段(Redis 无 DDL 概念)- 无
user字段(Redis 无账号概念,仅密码)
3.2 启动期预 ping(Q01 拍板 — 硬退出)
服务启动时遍历所有 conn 调 1 次 ping()(PING 命令返回 PONG,无副作用):
- ✅ 全部通过 → 启动服务 + 启动 1 min 周期的回收定时器
- ❌ 任一 conn 预 ping 失败 →
process.exit(1)+ stderr 错误(不软警告)
理由:拍板"配置错误在启动期就暴露"。用户感知 = mcp 服务启动不了,需修 mcp.json 重启。
3.3 懒加载 + 长期回收
- 懒加载:conn 首次被工具调用时才
new Redis() + ping(),未调用的 conn 不占 Redis 连接 - 长期回收:闲置 > 10min 的 conn client 被
client.quit() + disconnect()释放,避 Redismaxclients上限 - 回收周期:1 min 扫一次 Map(30s 浪费 CPU,5min 延迟到 15min 不可接受)
3.4 ⚠️ forbidden 黑名单 9 条(unique 8 + 1 重复 FLUSHDB)+ allowed 白名单 14 条
forbidden 黑名单 9 条(任何 conn 永远拦截,execute_command 入口检查;100% 沿用原 redis_exec_node/src/redis.ts:7-17):
| # | 命令 | 风险 |
|---|------|------|
| 1 | FLUSHDB | 清空当前 DB |
| 2 | FLUSHALL | 清空所有 DB |
| 3 | FLUSHDB | 重复项(unique 8 + 1 重复,不修复;owner 拍板 = 选 A 不修复 line 8+10 重复)|
| 4 | CONFIG RESETSTAT | 重置统计 |
| 5 | SHUTDOWN | 关闭 Redis |
| 6 | BGSAVE | 后台 RDB 持久化 |
| 7 | BGREWRITEAOF | 后台 AOF 重写 |
| 8 | DEBUG | 调试命令(含 DEBUG SEGFAULT 等危险子命令)|
| 9 | CLUSTER | 集群管理命令(涉及拓扑变更)|
allowed 白名单 14 条(execute_command 子集,不在子集 → 拒绝):
| # | 命令 | 用途 |
|---|------|------|
| 1 | GET | 读取 string |
| 2 | SET | 写 string |
| 3 | DEL | 删 key |
| 4 | KEYS | 列出 key(生产慎用,建议 SCAN)|
| 5 | TYPE | 查 key 类型 |
| 6 | TTL | 查剩余过期时间 |
| 7 | EXISTS | 查 key 是否存在 |
| 8 | HGET | 读 hash 单字段 |
| 9 | HGETALL | 读 hash 全字段 |
| 10 | HSET | 写 hash 字段 |
| 11 | LRANGE | 读 list 范围 |
| 12 | SMEMBERS | 读 set 全成员 |
| 13 | INCR | 自增 |
| 14 | DECR | 自减 |
不在白名单的写命令(如 LPUSH / RPUSH / SADD / ZADD / EXPIRE / EXPIREAT 等)→ execute_command 拒绝,请用 Redis 原生客户端(redis-cli / ioredis 程序)。
3.5 ❌ 不支持
- ❌ 跨 conn 事务(明确告知用户):没有 MULTI/EXEC/DISCARD 跨 conn
- ❌ Lua 脚本(
EVAL/EVALSHA,不在白名单) - ❌ Pub/Sub(
SUBSCRIBE/PUBLISH,不在白名单) - ❌ Streams(
XADD/XREAD,不在白名单) - ❌ Sentinel / Cluster 客户端模式(
SENTINEL/CLUSTER在黑名单;本包仅支持单实例 Redis 客户端连接) - ❌ ACL 用户名(
user字段 — Redis 无账号概念,仅密码) - ❌ SSL/TLS 证书配置(v1.0.0 暂不支持,与原包一致)
- ❌ SSH 隧道 / SOCKS 代理(与原包一致)
4. 🔧 从 @qdkj/redis-mcp-server 升级到 @qdkj/redis-mcp-server-multi(迁移步骤)
⚠️ BREAKING CHANGE:10 老工具全部加必填
conn参数,mcp.json 客户端工具调用代码需更新。
4.1 场景 A:只用一个 Redis(老 env 单连接用户)
之前(用 @qdkj/redis-mcp-server v1.0.4):
{
"mcpServers": {
"redis-exec-qdkj": {
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server@latest"],
"env": {
"REDIS_HOST": "127.0.0.1",
"REDIS_PORT": "6379",
"REDIS_PASSWORD": "<PASSWORD>",
"REDIS_DATABASE": "0"
}
}
}
}之后(切到新包)— mcp.json 完全不动,只改包名 + 加 conn: "default" 到工具调用:
{
"mcpServers": {
"redis-multi": {
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server-multi@latest"],
"env": {
"REDIS_HOST": "127.0.0.1",
"REDIS_PORT": "6379",
"REDIS_PASSWORD": "<PASSWORD>",
"REDIS_DATABASE": "0"
}
}
}
}工具调用方需在每次调用时加 conn: "default":
list_keys()→list_keys({ conn: "default" })get_value({ key: "x" })→get_value({ conn: "default", key: "x" })set_value({ key: "x", value: "1" })→set_value({ conn: "default", key: "x", value: "1" })execute_command({ command: "GET x" })→execute_command({ conn: "default", command: "GET x" })
⚠️ 重要:所有写操作(
set_value/delete_key/set_hash/execute_command写命令)由黑名单 9 条(unique 8 + 1 重复 FLUSHDB)+ 白名单 14 条控制:黑名单 9 条任何 conn 永远拦截;白名单 14 条外的写命令(如LPUSH/RPUSH/SADD等)走execute_command时会被拒绝(白名单外)。如需这些白名单外的写命令,需用 Redis 原生客户端。
4.2 场景 B:多 Redis(迁移到 CONNECTION 数组)
之前:mcp.json 配 N 个 server 实例(同工具名冲突),LLM 视角下 list_keys 不知指 dev 还是 prod。
之后:1 个 server 实例 + N 个 conn:
{
"mcpServers": {
"redis-multi": {
"command": "npx",
"args": ["-y", "@qdkj/redis-mcp-server-multi@latest"],
"env": {
"CONNECTION": "[{\"id\":\"dev\",\"note\":\"开发缓存\",\"conf\":{\"host\":\"127.0.0.1\",\"port\":6379,\"password\":\"<P>\",\"db\":0}},{\"id\":\"prod\",\"note\":\"生产缓存\",\"conf\":{\"host\":\"<PROD_HOST>\",\"port\":6379,\"password\":\"<P_P>\",\"db\":0}}]"
}
}
}
}工具调用方显式带 conn: "dev" 或 conn: "prod",LLM 视角工具"全名 = list_keys(dev) / set_value(prod)"语义自描述。
4.3 逐步迁移路径
- 第一步:老 mcp.json 完全不动,只改包名为
@qdkj/redis-mcp-server-multi(fallback 路径生效,1 个 conn id="default") - 第二步:工具调用方加
conn: "default"(不改 mcp.json) - 第三步:mcp.json 改成 CONNECTION 数组(多 conn),工具调用方把
conn: "default"改成conn: "xxx"(dev/test/prod 等) - 完成:老 env 从 mcp.json 移除(CONNECTION 优先,老 env 完全忽略)
5. ⚠️ 注意事项
- 确保 Redis 服务可连且账号有密码(如设置)
- CONNECTION 是单行 JSON 字符串(OS 层强制 process.env 必须是 string)
- conn id 字符集严格
[a-z0-9_-]{1,64},区分大小写("Dev" 和 "dev" 算不同 conn) - 重复 conn id 启动报错(不后定义覆盖前定义)
CONNECTION与老REDIS_*env 同时存在时,CONNECTION 优先,老 env 完全忽略- 写控制由黑名单 9 条(unique 8 + 1 重复 FLUSHDB)+ 白名单 14 条统一保障(任何 conn 永远一致):
- 黑名单 9 条:
FLUSHDB/FLUSHALL/CONFIG RESETSTAT/SHUTDOWN/BGSAVE/BGREWRITEAOF/DEBUG/CLUSTER(unique 8 + 1 重复 FLUSHDB) - 白名单 14 条:
GET/SET/DEL/KEYS/TYPE/TTL/EXISTS/HGET/HGETALL/HSET/LRANGE/SMEMBERS/INCR/DECR - 不在白名单的写命令(
LPUSH/RPUSH/SADD/ZADD/EXPIRE等)→ 走execute_command被拒
- 黑名单 9 条:
- 无 per-conn
allowWrite字段(user 拍板"全去掉";如需 per-conn 写控制请用 MySQL multi) - 切换
CONNECTION后必须重启 MCP 客户端才生效 - 不支持跨 conn 事务(明确告知)
- 日志通过 stderr 输出,便于排查,不影响 MCP 协议(stdout)通信
- 本包需要 Node.js >= 18.0.0(engines 硬约束,与原
@qdkj/redis-mcp-serverv1.0.4 一致)
6. 📄 License
本项目采用 MIT License(与 package.json license: "MIT" 一致)。
📘 进阶文档(开发者 / 本地调试 / 跑测试 / 贡献指南)请看 DEV.md
版本 1.0.0 · 最后更新 2026-09-11
