About mmj-palette
mmj-palette is a command-line tool for creating MapLibre palettes or complete style JSON from four anchor colors. It is intended for map adopters who want to define their own colors, with explicit role overrides and generated-style metadata.
Key features
- 01Derive colors for 24 map roles
- 02Build a complete style JSON
- 03Override individual role colors
- 04Mix colors in Oklab
- 05Preserve generated-style metadata
Use cases
- 01Create a custom palette from four anchor colors
- 02Export a named style based on a preset
- 03Adjust selected road colors manually
MCP support
It provides stdio MCP tools to list color roles and base styles, derive a palette, and build a style JSON.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
4Saved tool list · updated 2w ago
This tool takes no parameters.
Details
From the project README@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 の口
エージェントから直接作れます。
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 1 本には釣り合いません(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が入ります。外さないでください(手書きの作品と混ざります)
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.