astrondesign
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@astrondesignaudit my landing page at 1280 and 390 widths"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐งญ ํ๋ฆ๊ณผ ์ฐ์ ์์ | ๐ ๊ฒฐ์ ์ ์ ์ ๊ฒ์ฌ | ๐ฅ๏ธ ์ค์ ๋ธ๋ผ์ฐ์ ๋ ๋ | ๐ฏ ์์ ๋จ์ ํผ๋๋ฐฑ |
์์
ํ๋ฆ S1 | impeccable ์์ง๊ณผ taste lint ๋ก ์์ค๋ฅผ ๊ฒ์ฌํ๊ณ ์ฐ์ ์์๋ฅผ ์ ์ฉํด FAILยทWARNยทINFO ๋ก ๋ ๋๋ค | ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ก ์ฌ๋ฌ ํญ์ ๋ ๋ํด ์ฒซ ํ๋ฉด ์คํฌ๋ฆฐ์ทยท์ธก์ ๊ท์นยท์ ๊ทผ์ฑ ์ค๋ ์ท์ ๋จ๊น๋๋ค | ์ ํ์ยท์ขํ๋ก ์์ ๋ฌถ์(HTMLยท๊ณ์ฐ ์คํ์ผ 16๊ฐยท์์น)์ ๋ชจ์ Design Feedback ์ ์๋๋ค |
๋ชฉ์ฐจ
Related MCP server: ui-assert
๊ตฌ์กฐ
flowchart LR
C["MCP ํด๋ผ์ด์ธํธ<br/>(Claude Code ยท Codex ๋ฑ)"] <-->|stdio| S["astrondesign<br/>๋๊ตฌ 6๊ฐ"]
subgraph E["์์ง"]
I["impeccable<br/>์ฐธ๊ณ ๋ฌธ์ + ํ์ง ์์ง"]
T["taste-skill<br/>draw ยท lint ยท ์ธก์ "]
U["UI UX Pro Max<br/>๊ฒ์๊ธฐ(python)"]
A["awesome-design-md<br/>๋ธ๋๋ DESIGN.md 84"]
B["playwright-core<br/>ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ "]
end
S --> I & T & U & A & B
S -->|์ฐ์ถ๋ฌผ๋ง ๊ธฐ๋ก| O[("์์
ํด๋(cwd)/.astron-logs/astrondesign/")]
B -.->|์ธ๋ถ ์์ฒญ ๊ธฐ๋ณธ ์ฐจ๋จ| N(("๐ ์ธ๋ถ ๋คํธ์ํฌ"))ํ๋ค์ค๋ ํ๋ก์ ํธ ํ์ผ์ ์ฐ์ง ์์ต๋๋ค. ๊ณ ์น๋ ์ผ์ ์์ด์ ํธ๊ฐ ์ง์ ํ๊ณ , ํ๋ค์ค๋ ์ฝ๊ธฐยท๊ฒ์ฌยท๋ ๋ ๊ฒฐ๊ณผ๋ง ๋ ๋๋ค.
์๋ณธ 4์ข ์
vendor/์ ์์ ์์ด ๋ค์ด ์์ต๋๋ค. ๋ฌธ์ ์์ ์คํ ์ง์(node draw.mjs,python search.py๋ฑ)๋ ์ด ๋๊ตฌ๋ค๋ก ๋์ฒดํฉ๋๋ค(guides/precedence.md๋์ฒดํ).
์์ ํ๋ฆ
design_guide ๋ฅผ topic ์์ด ๋ถ๋ฅด๋ฉด ์์ ์๋ด๊ฐ ๋์ค๊ณ , ํ๋ฆ ์ ๋ฌธ์ guides/workflow.md ์ ์์ต๋๋ค.
flowchart LR
S1["S1 ์๊ตฌ ์ ๋ฆฌ<br/>surface ๊ฒฐ์ "] --> S2{"S2 ๋ฐฉํฅ"}
S2 -->|persuade| D["design_direction"]
S2 -->|operate ยท read ยท experience| Q["design_search"]
D --> S3["S3 ๊ตฌํ<br/>(์ฐ๊ธฐ ์์ด์ ํธ)"]
Q --> S3
S3 --> S4["S4 ๊ฒ์ฌ<br/>design_lint โ design_render"]
S4 --> S5["S5 ๋นํ<br/>critique ยท design_inspect"]
S5 --> G{"FAIL ๋จ์?"}
G -->|"์ (์ต๋ 3ํ)"| S6["S6 ์์ <br/>FAIL ์์ 3๊ฐ"]
S6 --> S4
G -->|์๋์ค| S7["S7 ๋ณด๊ณ <br/>FAILยทWARNยทINFO ํ"]surface | ๋์ | ์ ์ฉ ๊ท์น |
persuade | ๊ณต๊ฐ ๋๋ฉยท๋ง์ผํ ํ์ด์ง | impeccable + taste + UI UX Pro Max |
operate | ๋์๋ณด๋ยท์ฑ ํ๋ฉด | impeccable + UI UX Pro Max |
read | ๋ฌธ์ยท๊ธ ์ฝ๊ธฐ ํ๋ฉด | impeccable + UI UX Pro Max |
experience | ๋ชฐ์ ํยท์ธํฐ๋ํฐ๋ธ ํ๋ฉด | impeccable + UI UX Pro Max |
์ฝ๊ธฐ ์ ์ฉ ์์ด์ ํธ(์ง๋จยท๊ฒํ ยทQA)๋ S1ยทS2ยทS4ยทS5ยทS7 ๋ง, ์ฐ๊ธฐ ์์ด์ ํธ๋ ์ ๋จ๊ณ๋ฅผ ํฉ๋๋ค.
์ถฉ๋ ์ฐ์ ์์
์๋ณธ 4์ข
์ ๊ท์น์ด ๋ถ๋ชํ๋ฉด ์ ์์๊ฐ ์ด๊น๋๋ค. src/precedence.ts(์ฝ๋)์ guides/precedence.md(๋ฌธ์)๋ ๊ฐ์ ๊ท์น์
๋๋ค. ์ธ๋ถ ํด์ํ C1~C12 ๋ ๋ฌธ์์ ์์ต๋๋ค.
์์ | ์์ฒ |
P0 | ๋ ธ๋ยท๊ทธ๋ํ ์ง์(์ถ๋ ฅ ํ์, ๋ ธ๋ ์ ์ฑ ) |
P1 | ์ฌ์ฉ์ยท๋ธ๋ฆฌํ์ ๋ช
์ ์๊ตฌ(๋๊ตฌ ์ธ์ |
P2 | ํ๋ก์ ํธ ๊ธฐ์กด ๋์์ธ ์์คํ : DESIGN.md ํ ํฐ, ๊ทธ๋ค์ ๊ธฐ์กด ์ฝ๋ ํ ํฐ |
P3 | ์ ๊ทผ์ฑยทํ์ง ํํ: ๋๋น 4.5:1, ๊ฐ๋ฆผยท์๋ฆผยท๊นจ์ง ์ด๋ฏธ์งยท์คํฌ๋ฆฝํธ ์ค๋ฅยท์ ๋ชฉ ์์ยท์์ ๊ธ์ |
P4 | impeccable craft-floorยท๋ชจ๋ ๊ท์น(๋ชจ๋ surface, "defaults, not bans") |
P5 | taste ํ์ฐ์ค ๊ท์น(persuade ์์๋ง, ๊ทธ ๋ฒ์ ์์์๋ ๊ธ์ง) |
P6 | UI UX Pro Max ๊ฒ์ ๊ฒฐ๊ณผ(๊ถ๊ณ ) |
P7 | ๋ธ๋๋ ์ฐธ๊ณ DESIGN.md(awesome-design-md) |
P3 ํํ์ P1ยทP2 ์allow ๋ก๋ ๋ฎ์ถ์ง ์์ต๋๋ค. ๋์ conflict: true ์ "์ฌ๋ ๊ฒฐ์ ํ์"๋ฅผ ๋ถ์
๋๋ค. ํ๋ค์ค๋ ์ ๊ทผ์ฑ ๊ฒฐ์ ์ ๋์ ํ์ง ์์ต๋๋ค.
๋ ๋ ์์
์ํ์ฉ ํ์ด์ง test/fixtures/persuade/index.html ์ design_render(surface persuade, ํญ 1280ยท390)๋ก ๋ ๋ํ ๊ฒฐ๊ณผ์
๋๋ค. ์ผ๋ถ๋ฌ ํํ ๊ฒฐํจ์ ๋ฃ์ ํ์ด์ง์
๋๋ค.
FAIL design_render: FAIL 10 ยท WARN 6 ยท INFO 3 (allowed 0, surface-skipped 0)
์ธ๋ถ ์์ 1๊ฑด ์ฐจ๋จ: ์ค์ ํ๋ฉด๊ณผ ๋ค๋ฅผ ์ ์์
[FAIL] contrast (taste-gate, impeccable) โ Unreadable text: "Read the release notes" 2.1:1 (#0000ee on #0b0b14)
[FAIL] gradient-text (taste-gate, impeccable) โ 1 gradient-filled text element(s).
[FAIL] skipped-heading (impeccable) โ Skipped heading level: <h1> "Build faster with AI" followed by <h3> "Fast" (missing h2)
[WARN] flat-type-hierarchy (impeccable) โ Role sizes: body 16px, h1 16px, h3 16px (largest adjacent step 1.00:1; target 1.25:1)
[INFO] broken-image (taste-gate) โ Broken image(s): https://example.invalid/a.png [blocked-by-harness]๊ฒฐ๊ณผ | ๊ฑด์ | ๋ํ ๋ฐ๊ฒฌ |
๐ด FAIL | 10 | ๋๋น 2.1:1, ๊ทธ๋ผ๋์ธํธ ๊ธ์, ์ ๋ชฉ ๋จ๊ณ ๊ฑด๋๋, ๋ณด๋ผ ํ๋ ํธ, ์ฅ์ ๋ฒํธ, ์ ์ง ํ๋ฉด |
๐ก WARN | 6 | ๊ธฐ๋ณธ ์์ฒด Inter, ํํํ ๊ธ์ ์๊ณ, ์ฒซ ํ๋ฉด ๋ฒํผ ์์, ๊ธ๋์ค ๋ฉด |
๐ต INFO | 3 | ์ธ๋ถ ์ด๋ฏธ์ง ์ฐจ๋จ์ผ๋ก ์๊ธด ๋ฐ๊ฒฌ( |
๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ ์์ง์ด ์ก์ผ๋ฉด ํ๋๋ก ํฉ์น๊ณ ์ถ์ฒ๋ฅผ ๋ชจ๋ ์ ์ต๋๋ค(
contrast (taste-gate, impeccable)).์ ์ฒด ๊ฒฐ๊ณผ๋ ํธ์ถ ํด๋์
report.json์, ์คํฌ๋ฆฐ์ท์ ๊ฐ์ ํด๋์fold-<ํญ>.jpg์ ๋จ์ต๋๋ค.
๋ฌถ์ ์๋ณธ
์๋ณธ | ๋ผ์ด์ ์ค | ์ฐ์ | ํ์ผ |
Apache-2.0 | ์ฐธ๊ณ ๋ฌธ์(craft-floorยท๋ชจ๋ ๋ฑ) + ๊ฒฐ์ ์ ํ์ง ์์ง 0.1.15 | 48 | |
MIT | ์ํธ ๋๋ ์ draw, lint, ๋ ๋ ์ธก์ ํจ์ | 28 | |
MIT | ์คํ์ผยท์ยท์์ฒด CSV ์ ๊ฒ์๊ธฐยท๋์์ธ ์์คํ ์ ์ | 47 | |
MIT | ๋ธ๋๋ DESIGN.md 84๊ฐ(์ฐธ๊ณ ์ ์ฉ) | 86 |
์๋ณธ ์ปค๋ฐ๊ณผ ํ์ผ๋ณ SHA-256 ์ vendor/SOURCES.json ์ ์์ต๋๋ค.
๋น ๋ฅธ ์์
์๊ตฌ ์ฌํญ
ํญ๋ชฉ | ๋ฒ์ | ์ฐ์ |
Windows | x64 | impeccable ์์ง ๋ฐ์ด๋๋ฆฌ( |
Node.js | 22.18 ์ด์(24 ๊ถ์ฅ) |
|
Python | 3.9 ์ด์ | design_search(UI UX Pro Max ๊ฒ์๊ธฐ) |
๋ธ๋ผ์ฐ์ | chromium headless shell ๋๋ Edge | design_renderยทdesign_inspect |
์ค์น์ ํ์ธ
git clone <์ ์ฅ์ ์ฃผ์> <์ค์น ๊ฒฝ๋ก>
cd <์ค์น ๊ฒฝ๋ก>
npm ci # ์ ์ฅ์ ์์๋ง ์ค์น(.npmrc: save-exact, ignore-scripts)
npm run smoke # initialize โ tools/list โ design_guide, ๋ง์ง๋ง ์ค OKํด๋ผ์ด์ธํธ ๋ฑ๋ก
# Claude Code
claude mcp add astrondesign --scope user -e ASTRONDESIGN_NETWORK=off -- node "<์ค์น ๊ฒฝ๋ก>/src/server.ts"# Codex: ~/.codex/config.toml
[mcp_servers.astrondesign]
command = "node"
args = ["<์ค์น ๊ฒฝ๋ก>/src/server.ts"]
tool_timeout_sec = 180.mcp.json ์์, ์ ํ ์๊ฐ ๊ทผ๊ฑฐ, ๋ฌธ์ ํด๊ฒฐ์ docs/integration.md ์ ์์ต๋๋ค.
์ ๊ณต ๋๊ตฌ
๋๊ตฌ | ํ๋ ์ผ | ์ฃผ์ ์ ๋ ฅ |
| ์์ ํ๋ฆยท์ฐ์ ์์ยท๋นํ ๊ท์ฝ๊ณผ ์๋ณธ ์ฐธ๊ณ ๋ฌธ์๋ฅผ 3,500์ ์ชฝ ๋จ์๋ก ์ ๊ณต. ๋จผ์ topic ์์ด ๋ถ๋ฆ |
|
| UI UX Pro Max ๊ฒ์ยท๋์์ธ ์์คํ ์ ์(๊ถ๊ณ , P6) |
|
| ๊ณต๊ฐ ๋๋ฉยท๋ง์ผํ ํ์ด์ง์ ์ํธ ๋๋ ์ ๋ฝ๊ธฐ(taste draw, ์คํ๋ผ์ธ) |
|
| ์์ค ์ ์ ๊ฒ์ฌ(impeccable + taste lint) ํ P0 |
|
| ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ก ์ฌ๋ฌ ํญ ๋ ๋: ์ฒซ ํ๋ฉด ์คํฌ๋ฆฐ์ท, taste ์ธก์ , impeccable DOM ๊ฒ์ฌ, ์ ๊ทผ์ฑ ์ค๋ ์ท |
|
| ์ ํ์ยท์ขํ๋ก ์์ ๋ฌถ์(HTMLยท๊ณ์ฐ ์คํ์ผ 16๊ฐยท์์นยท์๋ฆฐ ์ด๋ฏธ์ง)์ ๋ชจ์ผ๊ณ |
|
๊ฒฐ๊ณผ ์ฒซ ์ค์ OK|FAIL|ERROR <์์ฝ> ์ด๊ณ , ๋ฐ๊ฒฌ ์ค์ [LEVEL] id (sources) ์์น โ message [overridden_by] ํ์์
๋๋ค.
์ค์
ํ๊ฒฝ ๋ณ์ | ๊ธฐ๋ณธ | ๋ป |
|
| ์ฐ์ถ ๋ฃจํธ(์ ๋ ๊ฒฝ๋ก) |
|
|
|
|
| UI UX Pro Max ๊ฒ์์ ์ธ python |
| โ | ๋ธ๋ผ์ฐ์ ์คํ ํ์ผ(1์์) |
|
| ๋ง์ง๋ง ํธ์ถ ๋ค ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ธฐ๊น์ง์ ์๊ฐ(ms) |
์ด์ ์๋ด
๋ชจ๋ ์ฐ์ถ(์คํฌ๋ฆฐ์ทยท
report.jsonยทDesign Feedback)์<cwd>/.astron-logs/astrondesign/<์๊ฐ>-<๋๊ตฌ>-<id>/์ ๋จ์ต๋๋ค.ํ๋ก์ ํธ ํ์ผ์ ์ฐ์ง ์์ต๋๋ค. ๋ธ๋๋ DESIGN.md ๋ฅผ ํ๋ก์ ํธ์ ๋ณต์ฌํ๋ ์ผ๋ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์์ฒญํ ๋๋ง ์์ด์ ํธ๊ฐ ์ง์ ํฉ๋๋ค.
๋ ๋ยท๊ฒ์ฌ ๋์์ ์๋ฒ cwd ์์ ๊ฒฝ๋ก์ฌ์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ผ๋ก ์ธ๋ถ ์์ฒญ์ ๋ง์ต๋๋ค. ๋ก์ปฌ ํ์ผ์ ๋ฃจํ๋ฐฑ ์ ์ ์๋ฒ๋ก ๋์ ๋ ๋ํฉ๋๋ค.
ํ์ ํ๋ก์ธ์ค์๋ ํ ๋ ๋ฉํธ๋ฆฌ ๋๊ธฐ์ ํ๋ก์ ์ฐจ๋จ์ ์ ์ฉํฉ๋๋ค.
์ธ๋ถ URL ์ ๋ ๋ํ๋ ค๋ฉด env
ASTRONDESIGN_NETWORK=allow์ ์ธ์allow_network:true๊ฐ ๋ชจ๋ ํ์ํฉ๋๋ค.์ฐจ๋จ ๋๋ฌธ์ ์๊ธด ๋ฐ๊ฒฌ์
blocked-by-harness๋ก ํ์๋๊ณ ๊ฒฐํจ์ผ๋ก ์ธ์ง ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ฒซ ๋ ๋ ๋ ๋์ฐ๊ณ (env ๊ฒฝ๋ก โ playwright ๊ธฐ๋ณธ โ Edge), ๋ง์ง๋ง ํธ์ถ ๋ค
ASTRONDESIGN_IDLE_MS๊ฐ ์ง๋๋ฉด ๋ซ์ต๋๋ค.์๋ฒ ํ๋๊ฐ ๋ธ๋ผ์ฐ์ ํ๋๋ฅผ ์๋๋ค. ๋์์ ๋๋ ๋์์ธ ์์ด์ ํธ๋ 2๊ฐ ์ดํ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
npm run typecheck # tsc ์ค๋ฅ 0
npm test # ๋จ์ + MCP ํ๋กํ ์ฝ + ์์ง ์ํ
npm run smoke # ์๋ฒ ๊ธฐ๋ ํ์ธ
npm run test:browser # ์ค์ ๋ธ๋ผ์ฐ์ ์ํ(๋ฌด๊ฑฐ์)
npm run vendor # ์๋ณธ ์ฌ๋ณธ์์ vendor/ ์ฌ์์ฑ(์ปค๋ฐ ํด์ ํ์ธ)์ถ์ฒยท๋ผ์ด์ ์ค
์๋ณธ 4์ข ์ ์ ์ฅ์ยท์ปค๋ฐยทํฌํจ/์ ์ธ ๋ฒ์ยทํ์ ํ์ผ์ NOTICE.md, ํ์ผ๋ณ ํด์๋ vendor/SOURCES.json ์ ์์ต๋๋ค.
impeccable ์ LICENSEยทNOTICE.md ๋
vendor/impeccable์ ๊ทธ๋๋ก ๋ณด์กดํฉ๋๋ค.design_inspect์ ์์ ๋ฌถ์ ํ์์ stablyai/orca Design Mode(MIT)์ ๋์์ ์ฐธ๊ณ ํด ์๋ก ๊ตฌํํ์ต๋๋ค(์ฝ๋ ๋ฏธํฌํจ).๋ธ๋๋ DESIGN.md ๋ ์ฐธ๊ณ ์๋ฃ์ ๋๋ค. ๊ฐ ์ํยท์ธํ์ ๊ถ๋ฆฌ๋ ํด๋น ์์ ์์๊ฒ ์์ต๋๋ค.
์ด ์ ์ฅ์ ์์ฒด๋ MIT ๋ผ์ด์ ์ค์ ๋๋ค.
vendor/์ ์๋ณธ์ ์ ํ์ ๊ฐ ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Available Tools
6 toolsdesign_directionC
Deal an art direction for a public landing or marketing page (taste-skill draw). Not for dashboards or app screens.
| Name | Required | Description | Default |
|---|---|---|---|
| have | No | ||
| keep | No | ||
| list | No | ||
| seed | No | ||
| tone | No | ||
| brief | No | ||
| redraw | No | ||
| sector | No | ||
| options | No | ||
| sections | No | ||
| direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not explain whether the tool generates/draws output, how the seed or redraw parameters affect results, whether it is read-only, or what the response looks like; it only states scope and exclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the main scope before the exclusion. The wording is slightly awkward ('Deal an art direction') but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no annotations, no output schema, and no parameter descriptions, the definition is far too sparse. An agent would not know how to use the input fields or what behavior to expect from a creative-generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 11 parameters with 0% schema description coverage, and the description explains none of them. Terms like 'have', 'keep', 'list', 'seed', 'tone', 'brief', 'redraw', 'sector', 'options', 'sections', and 'direction' are left entirely for the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific creative output: an art direction for a public landing or marketing page. It also excludes dashboards and app screens, which clarifies scope. However, the verb 'Deal' is nonstandard and it does not differentiate itself from sibling tools such as design_guide or design_render.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: public landing or marketing pages, explicitly excluding dashboards and app screens. It does not name sibling alternatives or explain when to choose design_direction over design_search, design_guide, or design_render.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_guideA
UI/UX design harness guide: workflow, conflict precedence, critique protocol and references (impeccable, taste, UI UX Pro Max, brand DESIGN.md). Call first without topic.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a guide/reference resource and hints at structured content (conflict precedence, critique protocol), which implies a read-only retrieval, but it never states the return shape, whether the guide is paged, or how large the payload is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the tool's identity front-loaded and the usage instruction trailing. The parenthetical reference list (impeccable, taste, UI UX Pro Max, brand DESIGN.md) is slightly noisy but does signal the scope of content covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter guide tool with no annotations and no output schema, the description covers the entry-point case but leaves offset paging and topic-scoped retrieval behavior unexplained. Adequate to start, not enough to invoke correctly on subsequent calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. 'Call first without topic' usefully tells the agent that topic is optional and should be omitted on the initial call, but the offset parameter (paging) is never mentioned, leaving half the parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource (a UI/UX design harness guide) and enumerates its content: workflow, conflict precedence, critique protocol, and references. An agent can tell this is the documentation/entry-point tool rather than a search or render tool, though the wording is noun-phrase heavy and lacks an explicit verb like 'returns' or 'loads'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call first without topic' gives an explicit, actionable usage instruction that routes the agent to this tool before the siblings. It does not name the alternatives (design_search, design_direction) or state when a topic-scoped call is warranted, so guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_inspectC
Inspect page elements by selector or point (HTML, 16 computed styles, bounds, crop) and write a Design Feedback note.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| point | No | ||
| width | No | ||
| height | No | ||
| target | Yes | ||
| selector | No | ||
| inline_image | No | ||
| allow_network | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses returned artifacts (HTML, 16 computed styles, bounds, crop) and that it writes a Design Feedback note, but omits permission/auth requirements, whether the note write is persistent or destructive, and the behavior of allow_network and inline_image.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence; the parenthetical lists outputs efficiently with no filler. Density compresses several behaviors into one line, but the sentence remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with nested objects, no annotations, and no output schema, the description is too thin. It does not explain the notes structure or network/image options, leaving important call-shaping details missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 8 parameters. The description names selector, point, and implies notes/crop, but leaves target, notes[].intent, allow_network, inline_image, and width/height unexplained, so it only minimally compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Inspect') and resource ('page elements'), and names the two targeting modes (selector or point) plus what it returns. It does not explicitly differentiate from siblings like design_render or design_lint, so it is clear but not fully sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by selector or point' hints at invocation modes but gives no when-to-use conditions, prerequisites, or comparison with sibling tools such as design_lint or design_search. There are no exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_lintC
Static UI design lint of source files with impeccable and taste rules, resolved by AstronDesign precedence. Writes nothing to the project.
| Name | Required | Description | Default |
|---|---|---|---|
| allow | No | ||
| paths | Yes | ||
| engines | No | ||
| surface | Yes | ||
| design_md | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely useful trait: 'Writes nothing to the project' tells the agent this is a non-mutating read. Beyond that it is silent on what a run produces (findings? pass/fail?), whether it needs configuration, and how the two engines combine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and with no filler. The only inefficiency is the opaque 'AstronDesign precedence' clause, which occupies space without conveying meaning to an outside agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, two of them required, a required enum, no annotations, no output schema, and zero schema descriptions, the definition is far too thin. An agent cannot determine what surface values mean or what a lint run returns, so it is not complete enough to call confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for five parameters, so the description must compensate and largely does not. 'Source files' loosely maps to paths and 'impeccable and taste rules' to engines, but the required surface enum (persuade/operate/read/experience), allow, and design_md are never explained in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: static UI design lint of source files, with the two rule engines (impeccable, taste) named. That distinguishes it from siblings like design_render or design_inspect, though the phrase 'resolved by AstronDesign precedence' is unexplained jargon that adds no clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what it is but never when to pick it over design_inspect or design_guide, nor what preconditions exist (e.g., a design spec must already exist). No exclusions or alternative routing are given, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_renderC
Render a page in a real headless browser at several widths: screenshots, measured design rules, accessibility snapshot. External network blocked by default.
| Name | Required | Description | Default |
|---|---|---|---|
| allow | No | ||
| checks | No | ||
| target | Yes | ||
| widths | No | ||
| surface | Yes | ||
| wait_ms | No | ||
| design_md | No | ||
| inline_image | No | ||
| allow_network | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses two behavioral traits โ headless real-browser rendering and that external network is blocked by default โ but omits cost/latency, permission needs, and what allow_network changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the core capability and outputs front-loaded. No filler, though it could have spent a few more words on the high-value undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 9-parameter render tool with no annotations and no output schema needs more explanation than this. The description names outputs but leaves most parameters and the composite result shape unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 9 parameters and 0% schema description coverage, the description explains almost nothing. 'Several widths' and 'external network blocked by default' gesture at widths and allow_network, but target, surface, checks, wait_ms, design_md, allow, and inline_image remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Render') and resource ('a page in a real headless browser') plus the concrete artifacts produced (screenshots, measured design rules, accessibility snapshot). An agent can tell this is a visual render/eval tool, though it doesn't explicitly distinguish itself from sibling design_inspect or design_lint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus design_inspect, design_lint, or design_search, and no prerequisites beyond the network note. The outputs imply the use case but there is no explicit guidance or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_searchC
Search UI UX Pro Max design data (styles, palettes, fonts, UX rules) or build a design-system suggestion. Results are recommendations, not rules.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| stack | No | ||
| domain | No | ||
| max_results | No | ||
| project_name | No | ||
| design_system | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It correctly warns that output is advisory rather than prescriptive, which is useful, but it never states whether the tool is read-only, whether the "build a design-system" path writes or persists anything, or how broad results are. "Build" in a no-annotation context is an unresolved mutation ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and the resource categories, with no filler. The size is right; the problem is missing content rather than verbal bloat, so it earns credit for structure while still being under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A six-parameter tool with one enum, zero annotation coverage, and no output schema needs a description that explains modes, parameters, and result shape. This one covers none of that, leaving the agent to infer the mode switch and the meaning of most inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description must compensate and largely does not. It loosely gestures at the domain enum (styles, palettes, fonts, UX rules) and at the design_system flag, but stack, project_name, max_results, and the other enum values (chart, landing, product, icons, gsap, react, web) are entirely undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb ("Search") and concrete resource types (styles, palettes, fonts, UX rules), which is more than a tautology. But it presents a second, different operation ("or build a design-system suggestion") without explaining what selects that mode, and it never distinguishes itself from siblings like design_guide or design_direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the five sibling tools with which it overlaps (design_guide, design_direction, design_inspect). Is this for lookup or for full design-system generation? The agent has to guess. The only guidance-like line ("Results are recommendations, not rules") is about trust, not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
design_direction - First observed
design_guide - First observed
design_inspect - First observed
design_lint - First observed
design_render - First observed
design_search
TDQS
Scored across 6 tools
Each tool has a distinct role: guidance (design_guide), static analysis (design_lint), data lookup (design_search), ideation (design_direction), browser rendering (design_render), and element-level inspection (design_inspect). The only real friction is between design_render and design_inspect, both of which measure live pages, though their descriptions (whole-page screenshots/rules vs. single-element computed styles) differentiate them adequately for a careful agent.
All tools share the design_ prefix with a single word suffix, forming a predictable namespace. The second token mixes nouns (guide, direction) and verbs (lint, render, inspect, search), so the verb_noun pattern is not strictly followed, but the prefix uniformity keeps the set readable and scannable.
Six tools is well within the ideal range and each one covers a separate phase of a design workflow (guide, search, direction, lint, render, inspect). No tool appears redundant or tacked on.
The surface covers the full read/analyze/advisory loop: onboarding guidance, reference lookup, direction dealing, static linting, rendering, and element inspection with feedback notes. The notable gap is any apply/fix or note-retrieval operation โ design_lint explicitly writes nothing and there is no tool to read back or resolve accumulated Design Feedback notes, which could dead-end a remediation workflow.
Maintenance
Related MCP Connectors
Serves your design system and coding standards to coding agents, so they stop guessing.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Website checker for AI coding agents. Measures your site in a real browser, with evidence.
Read-only web QA agent: scans a site in a real browser and returns evidence-backed findings
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides coding agents with local tools to inspect project UI inventories, propose and compare visual direction boards, compile versioned design contracts and DTCG tokens, retrieve section-specific blueprints, and audit running interfaces with browser evidence including screenshots, accessibility findings, and overflow measurements.MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents and CI to verify rendered web UIs against design token usage, layout constraints, and accessibility rules, returning concise pass/fail verdicts with actionable findings.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to audit rendered web pages for design and UI defects by measuring geometry, styles, contrast and motion in a local browser and judging them against evidence-tiered rules. Findings come back as short, fixable items expressed in the project's own design tokens, while only sanitized numeric measurements leave the machine.Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to act like a senior UI/UX team by reading an existing site's design DNA and tokens, proposing distinct art directions and motion mechanics that fit the brief, and validating changes in a live headless Chromium browser. Provides per-element accessibility and performance auditing (WCAG 2.2 contrast, focus, clipping, phone-menu behavior, LCP/CLS) at multiple viewport widths, plus baseline capture, before/after comparison, and one-command rollback for safe redesigns.561 npm2MIT