mcpField
R
rnv-color-mcp

rnv-color-mcp

远程服务
github.com/RNVizion媒体与设计11 周前更新
代码仓库

关于 rnv-color-mcp

rnv-color-mcp 是面向 Claude 和其他 MCP 客户端的远程颜色处理服务,提供混色、转换、协调和调色板管理。颜色计算由工具精确执行;无法确认的颜色会被拒绝,而不是猜测。

主要功能

  1. 01多模式混合最多 12 种颜色
  2. 02转换多种颜色格式
  3. 03生成配色关系
  4. 04测量色差与对比度
  5. 05调整明度并检查色域
  6. 06保存和读取调色板

适用场景

  1. 01按颜料物理模型混合颜色
  2. 02为文本检查 WCAG 可访问性对比度
  3. 03创建并稍后调用项目调色板

MCP 相关

通过远程 Streamable HTTP MCP 端点向客户端提供颜色工具。可配置 OAuth 2.1 及按工具划分的 read、write 权限。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://rnvizion-rnv-color-mcp.hf.space/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

10
参数类型必填说明
modestring否
colorsarray是
weightsany否

详细介绍


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

rnv-color-mcp MCP server Mentioned in Awesome MCP Servers tests

一个远程 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。


由 Christian "RNVizion" Smith 构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。