npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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 条白名单子集 二重控制。

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 包)。

😩 解决了什么问题

  1. 多 Redis 必须启多个 mcp server —— 原 @qdkj/redis-mcp-server v1.0.4 只支持单连接;想连 dev + test + prod 三个 Redis 就要在 mcp.json 配三个 server 实例,但工具名都是 list_keys / get_value / set_value 等,工具名冲突让 LLM 不知道调哪个。
  2. LLM 选错库的 silent 错误 —— 同名工具在多 server 并行时,LLM 可能"我说要查 dev 但实际拿到 prod 的缓存",这种 silent 错误是生产事故的温床。显式 conn 参数让 LLM 每次调用都必须指明目标连接,错误信息在工具层就暴露。
  3. 写命令控制被原包分散到 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-conn allowWrite / allowDDL 方案不同(user 在 2026-09-11 拍板:"allowWrite 这个都要去掉,没有什么用")。

🧭 什么场景下用

✅ 用本库的场景:

  1. 多项目 / 多环境 Redis(dev / test / staging / prod 四套缓存)用 1 个 mcp.json 配,工具调用时显式 conn: "dev" / conn: "prod" 选库
  2. 多业务 Redis(同公司不同业务线缓存 / 不同业务模块缓存)按业务拆分 conn,LLM 调 get_value({ conn: "user-cache", key: "u:1" }) / set_value({ conn: "order-cache", ... }) 自然路由
  3. 跨缓存数据迁移 / 对账(dev → staging 同步 / dev 与 prod 数据对账),1 个 mcp 客户端搞定双 conn,工具层 conn 显式选源库和目标库
  4. 只读账号 + 写账号分离(强需求场景)—— 如需 per-conn 写控制请用 MySQL multi;本库 1 个 conn 对应 1 个账号,账号侧控权限

❌ 不要用本库的场景:

  • 你只有 1 个 Redis 库 → 用更轻的 @qdkj/redis-mcp-server v1.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)
  • 安全约束(二重控制):
    1. 黑名单 9 条(unique 8 + 1 重复 FLUSHDB,任何 conn 永远拦截):FLUSHDB / FLUSHALL / CONFIG RESETSTAT / SHUTDOWN / BGSAVE / BGREWRITEAOF / DEBUG / CLUSTER
    2. 白名单子集 14 条(不在子集 → 拒绝):GET / SET / DEL / KEYS / TYPE / TTL / EXISTS / HGET / HGETALL / HSET / LRANGE / SMEMBERS / INCR / DECR
  • 不在白名单的写命令(如 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() 释放,避 Redis maxclients 上限
  • 回收周期: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 逐步迁移路径

  1. 第一步:老 mcp.json 完全不动,只改包名为 @qdkj/redis-mcp-server-multi(fallback 路径生效,1 个 conn id="default")
  2. 第二步:工具调用方加 conn: "default"(不改 mcp.json)
  3. 第三步:mcp.json 改成 CONNECTION 数组(多 conn),工具调用方把 conn: "default" 改成 conn: "xxx"(dev/test/prod 等)
  4. 完成:老 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 被拒
  • 无 per-conn allowWrite 字段(user 拍板"全去掉";如需 per-conn 写控制请用 MySQL multi)
  • 切换 CONNECTION 后必须重启 MCP 客户端才生效
  • 不支持跨 conn 事务(明确告知)
  • 日志通过 stderr 输出,便于排查,不影响 MCP 协议(stdout)通信
  • 本包需要 Node.js >= 18.0.0(engines 硬约束,与原 @qdkj/redis-mcp-server v1.0.4 一致)

6. 📄 License

本项目采用 MIT License(与 package.json license: "MIT" 一致)。


📘 进阶文档(开发者 / 本地调试 / 跑测试 / 贡献指南)请看 DEV.md


版本 1.0.0 · 最后更新 2026-09-11