关于 mmj-palette
mmj-palette 是命令行工具,可根据四种基准色生成 MapLibre 配色或完整样式 JSON,面向希望自定义地图颜色的使用者。它支持按角色覆盖颜色,并为生成的样式添加标记。
主要功能
- 01生成 24 种地图角色配色
- 02构建完整样式 JSON
- 03覆盖单个角色的颜色
- 04使用 Oklab 混合颜色
- 05保留生成样式标记
适用场景
- 01根据四种基准色创建自定义配色
- 02基于预设导出命名样式
- 03手动调整指定道路颜色
MCP 相关
它提供 stdio MCP 工具,用于列出颜色角色和基础样式、生成配色以及构建样式 JSON。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
@mmj-map/palette
让使用者完全打造自己的配色的工具。从指定色(4~5 种)生成包含 24 个角色的配色,或可直接分发的样式 JSON。
请勿将此处生成的内容放入
styles/。 MMJ 发布的 6 款样式仍是手工创作(D-002)。 此工具是专为使用者准备的独立工具(D-021)。 输出中会包含mmj:generated: true,以便与手工作品区分。
使用
# 24 役割の配色(<mmj-map palette-url> にそのまま渡せる)
pnpm palette -- --land=#f7f9fb --water=#bfd7e8 --ink=#16202b --accent=#0a5fff
# そのまま配れるスタイル
pnpm palette -- --land=#f7f9fb --water=#bfd7e8 --ink=#16202b --accent=#0a5fff \
--style --base=modern-light --name="Acme Maps" --out=acme.json
# 出したあとに確かめる
pnpm style:check -- acme.json
| 参数 | 含义 |
|---|---|
--land | 陆地、背景的颜色(必填) |
--water | 水域颜色(必填)。与陆地色系相互独立 |
--ink | 文字颜色(必填)。标签最深的一端 |
--accent | 主题色(必填)。用于高速公路和车站的边框 |
--green | 公园、森林的颜色。不指定时从陆地色导出 |
--set=角色=颜色 | 手动覆盖角色。以最后一个为准。可以重复指定 |
--style | 生成完整样式,而非仅生成配色 |
--base | 基础样式名称。默认值为 modern-light(使用 --style 时) |
--name | 要创建的样式名称。默认值为 Custom |
--out | 输出路径。不指定则输出到标准输出 |
如何推导
指定色会原样输出(不会改动)。
| 角色 | 结果 |
|---|---|
background earth station-fill halo | 与 --land 完全相同 |
water | 与 --water 完全相同 |
label-city | 与 --ink 完全相同 |
highway station | 与 --accent 完全相同 |
landcover built paved buildings path road-* rail boundary label-station label-neighbourhood | 颜色从地色逐渐加深至文字色。越细的元素越接近地色 |
waterway label-water | 颜色从水域色逐渐加深至文字色 |
highway-casing | 将 accent 向文字色一侧偏移得到的颜色 |
green | 使用 --green;未指定时从陆地色推导 |
混色使用 Oklab(直接在 sRGB 中混色会压缩色阶并使颜色变暗)。没有添加依赖(仅使用公式)。
不将因偏好而异的部分写成公式
在浅色底图上,有时希望道路呈白色镂空效果(比地色更亮), 但此处的颜色会从地色逐渐加深至文字色。若想要白色镂空效果,请手动覆盖。
pnpm palette -- ... --set=road-minor=#ffffff --set=road-medium=#ffffff --set=road-major=#ffffff
MCP 接口
可以直接通过 Agent 创建。
pnpm palette:mcp
注册到 Claude Code(.mcp.json / claude mcp add):
{
"mcpServers": {
"mmj-palette": {
"command": "pnpm",
"args": ["palette:mcp"],
"cwd": "<このリポジトリのパス>"
}
}
}
| 工具 | 用途 |
|---|---|
mmj_list_roles | 返回 24 个角色,以及各自会改变地图的哪些部分 |
mmj_list_bases | 返回可用作基础的样式名称 |
mmj_derive_palette | 从指定色生成包含 24 个角色的配色 |
mmj_build_style | 从指定色生成样式 JSON |
未安装 SDK。MCP 的 stdio 只是以换行符分隔传输 JSON-RPC 2.0,
此处只需要 initialize / tools/list / tools/call 这 3 项。
官方 SDK(@modelcontextprotocol/sdk 1.30.0・MIT)还会引入 express / hono / cors / jose /
express-rate-limit 等,实测会增加 99 个包(实测日期:2026-09-21)。
这些依赖是用于 HTTP 和 SSE 传输的,与仅使用 stdio 不相称(baseline §1 / §12)。
作为替代,提供了启动真实进程并传输真实 JSON-RPC 的测试(test/mcp.test.ts)。
如果规范发生变化,测试就会失败。
使用方式
<mmj-map tiles="..." style-url="/styles/modern-light.json" palette-url="./acme-palette.json"></mmj-map>
<mmj-map tiles="..." style-url="./acme.json"></mmj-map>
若生成完整样式,组件会读取 metadata["mmj:anchors"].accent,
因此即使不写 accent 属性,标记、聚合区域和自定义 POI 的颜色也会保持一致。
如何处理生成的内容
- 内容归你所有。可以手动修改(本工具就是为此设计的)
- 会保留
__TILES_URL__。若将其写死,就无法更改分发地址 - 会保留
© OpenStreetMap contributors署名。请勿删除后再分发(ODbL) - 会包含
mmj:generated: true。请勿移除(否则会与手工作品混在一起)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。