关于 rnv-color-mcp
rnv-color-mcp 是面向 Claude 和其他 MCP 客户端的远程颜色处理服务,提供混色、转换、协调和调色板管理。颜色计算由工具精确执行;无法确认的颜色会被拒绝,而不是猜测。
主要功能
- 01多模式混合最多 12 种颜色
- 02转换多种颜色格式
- 03生成配色关系
- 04测量色差与对比度
- 05调整明度并检查色域
- 06保存和读取调色板
适用场景
- 01按颜料物理模型混合颜色
- 02为文本检查 WCAG 可访问性对比度
- 03创建并稍后调用项目调色板
MCP 相关
通过远程 Streamable HTTP MCP 端点向客户端提供颜色工具。可配置 OAuth 2.1 及按工具划分的 read、write 权限。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://rnvizion-rnv-color-mcp.hf.space/mcpclaude mcp add --transport http rnvizion-rnv-color https://rnvizion-rnv-color-mcp.hf.space/mcp{"mcpServers":{"rnvizion-rnv-color":{"type":"http","url":"https://rnvizion-rnv-color-mcp.hf.space/mcp"}}}在 Cursor 中打开{"servers":{"rnvizion-rnv-color":{"type":"http","url":"https://rnvizion-rnv-color-mcp.hf.space/mcp"}}}在 VS Code 中打开{"mcpServers":{"rnvizion-rnv-color":{"type":"http","url":"https://rnvizion-rnv-color-mcp.hf.space/mcp"}}}{"mcpServers":{"rnvizion-rnv-color":{"serverUrl":"https://rnvizion-rnv-color-mcp.hf.space/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
10| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mode | string | 否 | |
| colors | array | 是 | |
| weights | any | 否 |
详细介绍
title: RNV Color MCP emoji: 🎨 colorFrom: gray colorTo: yellow sdk: docker app_port: 7860 pinned: false short_description: Color workflow MCP server
RNV Color MCP
一个远程 MCP 服务,提供完整的色彩工作流: 混合、转换、协调并记忆调色板,可由 Claude(或任何 MCP 客户端)通过自然语言调用,也可由任何支持 MCP 的程序调用。
为什么要做这个
色彩处理逻辑原本就在我的桌面套件中:一个混色器、一个调色板管理器和一个取色器。与其为每个新项目重复构建,不如一次性提取引擎,并将其作为一个服务开放出来。Claude 对话现在可以调用它;时尚设计应用明天也能调用同一个后端。引擎只需构建一次,就能让两者使用。
底层体现了我对使用大模型的一点思考:模型擅长判断你想要什么,却不擅长精确计算。因此,模型选择工具并确定意图,工具负责提供精确值。服务会解析,否则就拒绝;绝不会猜测颜色。
功能
| 工具 | 功能 |
|---|---|
mix_colors | 混合最多 12 种颜色。模式:rgb、hsv、lab(数字色彩)、paint(Kubelka-Munk 颜料物理模型)、ryb(艺术家色轮)、cmy(减色法)。 |
convert_color | 在 hex、rgb、hsv、hsl、lab 之间转换。 |
place_lightness | 保持颜色的色相和色度,设置其明度。相同色相的两个 L* 值可组成一组浅色/深色。若超出色域则拒绝,而不是钳制,并报告 8 位量化误差。 |
generate_harmony | 生成互补色、类似色、三角色、分裂互补色、四色/方形配色、单色配色、复合配色。 |
color_difference | 计算两种颜色之间的感知差异(Delta-E,CIEDE2000 或 CIE76)。 |
contrast_check | 计算 WCAG 对比度,并检查文本是否通过 AA/AAA 无障碍标准。 |
transform_text | 提供 11 种精确的大小写转换(UPPERCASE、camelCase、snake_case,等等)。 |
save_palette / list_palettes / get_palette | 为调色板命名,以便稍后调用。重启后仍会保留。 |
每个颜色输入都支持 hex(#d2bc93)、CSS 名称(red)、RNV 品牌名称
(brand gold、near-black)或已保存的调色板引用(Spring line,或用 Spring line:2
表示其中的第二个色块)。名称冲突时优先使用品牌名称而非 CSS 名称(gold、blue、teal);css:blue 则强制使用通用 CSS 名称。
30 秒内完成连接
这是一个托管服务,无需安装。在 Claude 中选择:Settings → Connectors → Add custom connector,然后粘贴:
https://rnvizion-rnv-color-mcp.hf.space/mcp
将身份验证留空,添加连接器,然后在聊天中通过 + 菜单将其启用。
试试看
连接后,直接发送消息:
“保存一个名为 Spring line 的调色板:near-black 和 brand gold。” “调出我的 Spring line 调色板,并为外套搭配三种互补强调色。” “像真正的颜料一样混合 crimson 和 royalblue。”
第一次调用会保存调色板;第二次会组合调用 get_palette → generate_harmony;第三次会运行 Kubelka-Munk 颜料模型,因此混合结果会像真实颜料混合那样变暗,而不是像光线平均混合那样变化。
身份验证
该服务实现了 OAuth 2.1 资源服务器身份验证,并强制执行逐工具范围;公共端点会禁用身份验证,因此无需任何设置即可通过 URL 连接。
启用身份验证后(RNV_AUTH=1 且已配置密钥来源),服务会根据签发者、受众、过期时间和签名验证承载令牌;在 /.well-known/oauth-protected-resource/mcp 提供符合 RFC 9728 的受保护资源元数据;在返回 401 时提供符合规范的 WWW-Authenticate 挑战;并强制执行两个范围:read 涵盖所有只读工具,write 涵盖唯一会修改数据的工具 save_palette。不具备 write 范围的令牌完全不会在工具列表中看到 save_palette;超出范围的工具会被隐藏,而非拒绝访问,因此不会泄露你无权访问的范围内有哪些内容。
测试套件会验证这些强制执行逻辑,并在每次推送时于 CI 中运行(本文件顶部有状态徽章)。测试涵盖令牌验证矩阵(缺失、格式错误、签发者错误、受众错误、已过期、有效),以及通过真实 HTTP 进行的端到端范围强制执行。测试套件会自行生成密钥,无需凭据。除身份验证外,它还会锁定引擎的部分行为:品牌词汇映射、对比度、差异和放置约定、选择器和输入拒绝规则、颜色名称解析、混合模式的计算内容、hsv 和 hsl 转换、调色板写入路径,以及存储持久性。Harmony 和文本输出由冒烟测试脚本覆盖,目前尚未纳入回归测试。
从自签发开发密钥迁移到真实身份提供方只需修改配置,无需改动代码:将 RNV_AUTH_JWKS_URI 指向提供方的 JWKS 端点,并设置匹配的签发者和受众。
| 变量 | 用途 |
|---|---|
RNV_AUTH | 开关。1 / true / yes / on 表示启用身份验证;未设置时表示关闭。 |
RNV_AUTH_JWKS_URI | 提供方的 JWKS 端点。使用此项或 RNV_AUTH_PUBLIC_KEY。 |
RNV_AUTH_PUBLIC_KEY | 静态 PEM 公钥,用于针对自签发密钥对进行开发。 |
RNV_AUTH_ISSUER | 预期的令牌签发者;也会作为授权服务器对外公布。 |
RNV_AUTH_AUDIENCE | 预期的令牌受众。绑定到 /mcp 路径。 |
RNV_AUTH_BASE_URL | 服务基础 URL,不含 /mcp。 |
启用 RNV_AUTH 但未设置密钥来源时,服务会拒绝启动,而不会在未受保护的状态下运行。
自行运行
pip install -r requirements.txt
python server.py # Streamable HTTP on $PORT (default 7860)
pip install -r tests/requirements-dev.txt
python -m pytest # the suite; needs no credentials
python tests/server_test.py # smoke: exercises every tool in-process
将 HF_TOKEN 设置为通过 Hugging Face 私有 Dataset 写入调色板,以实现持久化存储。测试套件和两个冒烟测试脚本都会忽略 HF_TOKEN 并使用临时存储,因此绝不会写入真实 Dataset。
运行一个副本?
代码采用 MIT 许可证;你可以自由地重新构建、托管和修改它,我更希望你这么做,而不是不这么做。但许可证无法涵盖运行环境。
某些功能取决于部署配置,而不只是代码本身:
- 调色板持久化需要
HF_TOKEN和可写入的数据集。否则,保存内容会写入容器的本地工作副本,并随容器一同消失;save_palette会返回durable: false,并通过durable_reason指明受阻的步骤。 - 范围授权需要
RNV_AUTH和已配置的签发方。若未设置,服务将以开放模式运行——这适用于公开演示,但不适用于其他用途。 - 任何需要获取内容的功能都需要出站网络访问权限。
缺少上述配置项之一的副本通常不会明确报错;它会返回成功,却丢弃结果。 这比服务中断更糟,因为服务中断至少会告诉你出了问题。
因此:如果你运行的是一个副本,遇到行为异常时,请先检查环境,再检查代码;提交问题前,请先与规范部署进行核对。
规范端点: https://rnvizion-rnv-color-mcp.hf.space/mcp
规范源代码: https://github.com/RNVizion/rnv-color-mcp
通过其他 URL 提供的副本可能版本较旧、经过修改或配置不同。这没问题,也不受限制;它只是不等同于这个部署。
这些工具会解析或拒绝,不会猜测。只有事先检查过运行环境,副本才能兑现这一承诺。
说明
- 品牌颜色是镜像的,不是本地所有的。 词汇表位于
engine/brand_vocab.py,镜像自 RNVizion/rnv-brand 中的engine/brand.py,并会在检测到偏差时进行修正。此处有意保留本地副本:resolve_color是高频路径,若在此获取数据,就必须决定获取失败时该怎么办——失败时拒绝所有颜色会导致服务无法提供任何颜色;回退则意味着无论如何都需要本地副本;猜测则已经违背了上述承诺。自 2026-08-17 起,上游注册表不再使用本地名称,因此标识符与上游一致;检查时会比较值。计划任务每天将镜像与上游进行比较,但不会因此拦截任何操作。注册表及其相关说明位于rnv-brand中的BRAND_COLORS.md。 - 引擎不依赖外部依赖。 颜色计算、配色和文本逻辑均只使用纯标准库,是从桌面应用中移除 Qt 后提取的。只有服务层需要
fastmcp。 - 设计上坚持诚实。 遇到未知颜色名称时会拒绝,而不是猜测。令牌无法验证时也会拒绝,并说明原因。两层遵循同一原则。
技术栈
Python · FastMCP(Streamable HTTP)· Hugging Face Spaces(Docker)· 用于持久化调色板存储的 huggingface_hub。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。