PluginWorld
Ma

maptaste

MCP

Enables coding agents to run taste heuristics on MapLibre style JSON, catching rainbow fills, low-contrast labels, crowded text layers, and light-only palettes via a check tool, plus basic structure validation and locating a local showcase for preview.

@FelixFangX · v0.0.1 · MIT License · updated today

SECURITY

B

SCORE

68

STARS

▲ 0

PLUG IN

git clone https://github.com/FelixFangX/maptaste.git

See the README to configure this MCP server

README

maptaste

MapLibre style taste checks for coding agents. Four heuristics, two skill packs, an MCP server, and a local map showcase.

Problem

Agents ship ugly MapLibre styles: rainbow fills, faint labels, crowded names, and light-only palettes. Maptaste flags common mistakes before visual review. It is not a full MapLibre validator; expressions and real rendering still need inspection.

Demo

Before / After demo

Before / After: compare a stock Liberty basemap and categorical Set1 building colors with a cinematic basemap and sequential blues. Both use real OpenFreeMap San Francisco building footprints and heights, support Light / Dark themes, and preserve the camera when switching.

Before After Dark
Before After After dark

Install

Node 20+ and pnpm.

pnpm add -g maptaste
# or run without installing
npx maptaste check style.json

CLI

maptaste check style.json --pack global
maptaste check style.json --pack cn --format json

JSON output contains { findings, score, summary }. Exit codes: 0 without errors, 1 with errors, 2 for bad input. Warnings and informational findings do not fail the command.

Rule Default Heuristic
MT001 error Fill colors span at least four saturated hue sectors
MT002 warn Static label color has contrast below 4.5 against a halo or background
MT003 info No dark background or theme declaration in metadata
MT004 warn More than 8 text symbol layers (6 for cn), or 3 large text defaults

Score: max(0, 100 - 10*errors - 3*warnings - info). Static colors support hex, rgb(), and common names. Dynamic colors, zoom visibility, and feature counts are not evaluated. Metadata keys containing dark, theme, or styles declare theme consideration.

import { check } from 'maptaste';
const result = check({ version: 8, layers: [] }, { pack: 'global' });

MCP

Build with pnpm install && pnpm build. Add to Claude Desktop or Cursor's MCP configuration (replace the absolute path):

{
  "mcpServers": {
    "maptaste": {
      "command": "node",
      "args": ["/absolute/path/maptaste/dist/mcp/server.js"]
    }
  }
}

The installed binary is maptaste-mcp. It uses the MCP SDK over stdio. Tools: check_taste accepts { "style": {} } or { "styleJson": "..." }; validate_style accepts { "style": {} } and checks object/version/layers structure; preview_info locates the showcase. Validation is intentionally basic.

Skills

Load skills/maptaste-global/SKILL.md or skills/maptaste-cn/SKILL.md in your agent's skill directory. Both use paper #ebe7df, void #0b0b0b, navy #1a2a4a, and pale blue #9eb6d4. The cn pack emphasizes administrative label hierarchy and uses a lower label-layer threshold.

Showcase

A standalone Vite + MapLibre Before / After demo with real San Francisco buildings and a 57° pitched camera. Before pairs a stock Liberty base with categorical Set1 height steps. After opens by default with sequential blues, a paper or void base, restrained lighting, and soft sky haze. Light / Dark works in both modes. Every style switch preserves your camera.

A local snapshot of the public OpenFreeMap Liberty style is adapted in showcase/src/main.ts. OpenFreeMap supplies tiles, glyphs, and sprites without an API key; an internet connection and WebGL are required. Map attribution remains visible. Google Fonts supplies Instrument Serif, with a local serif fallback.

cd showcase
pnpm install
pnpm dev
# production check
pnpm build

Development

pnpm install
pnpm build
pnpm test

License

MIT © 2026 Felix Fang.

SIMILAR PLUGINS