@hegemonart/get-design-done 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +63 -0
- package/.claude-plugin/plugin.json +54 -0
- package/CHANGELOG.md +221 -0
- package/LICENSE +21 -0
- package/README.md +724 -0
- package/SKILL.md +232 -0
- package/agents/README.md +226 -0
- package/agents/a11y-mapper.md +118 -0
- package/agents/component-taxonomy-mapper.md +88 -0
- package/agents/design-advisor.md +139 -0
- package/agents/design-assumptions-analyzer.md +171 -0
- package/agents/design-auditor.md +383 -0
- package/agents/design-context-builder.md +544 -0
- package/agents/design-context-checker-gate.md +90 -0
- package/agents/design-context-checker.md +260 -0
- package/agents/design-discussant.md +98 -0
- package/agents/design-doc-writer.md +229 -0
- package/agents/design-executor.md +452 -0
- package/agents/design-figma-writer.md +302 -0
- package/agents/design-fixer.md +180 -0
- package/agents/design-integration-checker-gate.md +93 -0
- package/agents/design-integration-checker.md +326 -0
- package/agents/design-pattern-mapper.md +206 -0
- package/agents/design-phase-researcher.md +229 -0
- package/agents/design-plan-checker.md +164 -0
- package/agents/design-planner.md +352 -0
- package/agents/design-reflector.md +175 -0
- package/agents/design-research-synthesizer.md +127 -0
- package/agents/design-verifier-gate.md +97 -0
- package/agents/design-verifier.md +605 -0
- package/agents/gdd-graphify-sync.md +100 -0
- package/agents/gdd-intel-updater.md +88 -0
- package/agents/gdd-learnings-extractor.md +85 -0
- package/agents/motion-mapper.md +103 -0
- package/agents/token-mapper.md +103 -0
- package/agents/visual-hierarchy-mapper.md +95 -0
- package/connections/chromatic.md +247 -0
- package/connections/claude-design.md +190 -0
- package/connections/connections.md +218 -0
- package/connections/figma-writer.md +139 -0
- package/connections/figma.md +146 -0
- package/connections/graphify.md +197 -0
- package/connections/pinterest.md +153 -0
- package/connections/preview.md +173 -0
- package/connections/refero.md +189 -0
- package/connections/storybook.md +280 -0
- package/hooks/budget-enforcer.js +318 -0
- package/hooks/context-exhaustion.js +127 -0
- package/hooks/gdd-read-injection-scanner.js +44 -0
- package/hooks/hooks.json +44 -0
- package/package.json +60 -0
- package/reference/BRANCH-PROTECTION.md +65 -0
- package/reference/DEPRECATIONS.md +41 -0
- package/reference/STATE-TEMPLATE.md +200 -0
- package/reference/accessibility.md +190 -0
- package/reference/anti-patterns.md +336 -0
- package/reference/audit-scoring.md +205 -0
- package/reference/checklists.md +137 -0
- package/reference/config-schema.md +319 -0
- package/reference/debugger-philosophy.md +32 -0
- package/reference/heuristics.md +201 -0
- package/reference/intel-schema.md +266 -0
- package/reference/model-prices.md +37 -0
- package/reference/model-tiers.md +118 -0
- package/reference/motion.md +285 -0
- package/reference/parallelism-rules.md +108 -0
- package/reference/priority-matrix.md +31 -0
- package/reference/project-skills-guide.md +42 -0
- package/reference/review-format.md +107 -0
- package/reference/schemas/config.schema.json +41 -0
- package/reference/schemas/hooks.schema.json +55 -0
- package/reference/schemas/intel.schema.json +191 -0
- package/reference/schemas/marketplace.schema.json +72 -0
- package/reference/schemas/plugin.schema.json +59 -0
- package/reference/shared-preamble.md +82 -0
- package/reference/typography.md +229 -0
- package/scripts/aggregate-agent-metrics.js +144 -0
- package/scripts/apply-branch-protection.sh +75 -0
- package/scripts/bootstrap-manifest.txt +3 -0
- package/scripts/bootstrap.sh +80 -0
- package/scripts/build-intel.cjs +458 -0
- package/scripts/detect-stale-refs.cjs +101 -0
- package/scripts/extract-changelog-section.cjs +57 -0
- package/scripts/release-smoke-test.cjs +169 -0
- package/scripts/rollback-release.sh +42 -0
- package/scripts/run-injection-scanner-ci.cjs +92 -0
- package/scripts/validate-frontmatter.cjs +68 -0
- package/scripts/validate-schemas.cjs +225 -0
- package/scripts/verify-version-sync.cjs +30 -0
- package/skills/add-backlog/SKILL.md +47 -0
- package/skills/analyze-dependencies/SKILL.md +184 -0
- package/skills/apply-reflections/SKILL.md +112 -0
- package/skills/audit/SKILL.md +54 -0
- package/skills/brief/SKILL.md +75 -0
- package/skills/cache-manager/SKILL.md +120 -0
- package/skills/compare/SKILL.md +322 -0
- package/skills/complete-cycle/SKILL.md +33 -0
- package/skills/darkmode/SKILL.md +331 -0
- package/skills/debug/SKILL.md +38 -0
- package/skills/design/SKILL.md +281 -0
- package/skills/discover/SKILL.md +172 -0
- package/skills/discuss/SKILL.md +67 -0
- package/skills/do/SKILL.md +45 -0
- package/skills/explore/SKILL.md +109 -0
- package/skills/extract-learnings/SKILL.md +98 -0
- package/skills/fast/SKILL.md +44 -0
- package/skills/figma-write/SKILL.md +40 -0
- package/skills/graphify/SKILL.md +48 -0
- package/skills/health/SKILL.md +48 -0
- package/skills/help/SKILL.md +76 -0
- package/skills/list-assumptions/SKILL.md +60 -0
- package/skills/map/SKILL.md +112 -0
- package/skills/new-cycle/SKILL.md +35 -0
- package/skills/new-project/SKILL.md +53 -0
- package/skills/next/SKILL.md +42 -0
- package/skills/note/SKILL.md +47 -0
- package/skills/optimize/SKILL.md +120 -0
- package/skills/pause/SKILL.md +41 -0
- package/skills/plan/SKILL.md +251 -0
- package/skills/plant-seed/SKILL.md +47 -0
- package/skills/pr-branch/SKILL.md +31 -0
- package/skills/progress/SKILL.md +60 -0
- package/skills/quick/SKILL.md +43 -0
- package/skills/reapply-patches/SKILL.md +31 -0
- package/skills/reflect/SKILL.md +73 -0
- package/skills/resume/SKILL.md +37 -0
- package/skills/review-backlog/SKILL.md +45 -0
- package/skills/router/SKILL.md +67 -0
- package/skills/scan/SKILL.md +721 -0
- package/skills/settings/SKILL.md +78 -0
- package/skills/ship/SKILL.md +31 -0
- package/skills/sketch/SKILL.md +78 -0
- package/skills/sketch-wrap-up/SKILL.md +88 -0
- package/skills/skill-manifest/SKILL.md +79 -0
- package/skills/spike/SKILL.md +67 -0
- package/skills/spike-wrap-up/SKILL.md +81 -0
- package/skills/stats/SKILL.md +50 -0
- package/skills/style/SKILL.md +193 -0
- package/skills/synthesize/SKILL.md +93 -0
- package/skills/todo/SKILL.md +54 -0
- package/skills/undo/SKILL.md +30 -0
- package/skills/update/SKILL.md +36 -0
- package/skills/verify/SKILL.md +452 -0
- package/skills/warm-cache/SKILL.md +113 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Figma Writer — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for the figma-writer capability within the get-design-done pipeline. The figma-writer is a proposal→confirm write agent (`design-figma-writer`) that wraps the `mcp__figma__use_figma` remote MCP to write design decisions back to Figma. It is distinct from the Figma Desktop MCP read connection documented in `connections/figma.md`. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
**Prerequisites:**
|
|
10
|
+
|
|
11
|
+
- Figma desktop app installed and running (required for read operations via `mcp__figma-desktop__*`)
|
|
12
|
+
- Dev Mode enabled in the Figma desktop app
|
|
13
|
+
- Remote Figma MCP registered for write operations
|
|
14
|
+
|
|
15
|
+
**Register remote MCP (Claude Code):**
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
claude mcp add figma --transport http https://mcp.figma.com/v1/sse
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After running this command, restart the Claude Code session. The remote MCP server authenticates via OAuth at `mcp.figma.com`. On first use, Claude Code will prompt you to complete the OAuth flow.
|
|
22
|
+
|
|
23
|
+
**Verification:**
|
|
24
|
+
|
|
25
|
+
After session restart, run:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
ToolSearch({ query: "select:mcp__figma__use_figma", max_results: 1 })
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Expect a non-empty result listing `mcp__figma__use_figma`. If empty, the remote MCP is not registered — run the registration command above and restart.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Tools
|
|
36
|
+
|
|
37
|
+
All write operations use the `mcp__figma__` prefix (remote MCP). Read operations use the `mcp__figma-desktop__` prefix (desktop MCP).
|
|
38
|
+
|
|
39
|
+
| Tool | Full name | Returns | Pipeline use |
|
|
40
|
+
|------|-----------|---------|--------------|
|
|
41
|
+
| `use_figma` | `mcp__figma__use_figma` | operation result | all write operations (annotate, tokenize, mappings) |
|
|
42
|
+
|
|
43
|
+
**Important distinction:** `mcp__figma-desktop__*` tools are used for reads only (get_metadata, get_variable_defs). `mcp__figma__use_figma` is the remote MCP used exclusively for writes. The desktop MCP does NOT expose `use_figma` — it is remote-only. Do not attempt to call `mcp__figma-desktop__use_figma` — that tool does not exist.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Three Modes
|
|
48
|
+
|
|
49
|
+
The figma-writer operates in one of three modes per invocation:
|
|
50
|
+
|
|
51
|
+
| Mode | Description | Source data | Figma target |
|
|
52
|
+
|------|-------------|-------------|--------------|
|
|
53
|
+
| `annotate` | Write design decision annotations onto Figma layer comments | D-XX decisions from DESIGN-CONTEXT.md | Layer comments on affected frames/components |
|
|
54
|
+
| `tokenize` | Replace hard-coded color/spacing/type literals with Figma variable references | Color/spacing/typography values from DESIGN-CONTEXT.md; existing variables from `get_variable_defs` | Variable bindings on layer fill/stroke/spacing properties |
|
|
55
|
+
| `mappings` | Write Code Connect mappings linking component instances to code file paths | Component names and file paths from DESIGN-CONTEXT.md | Code Connect entries on Figma component nodes |
|
|
56
|
+
|
|
57
|
+
All three modes follow the proposal→confirm UX: the agent builds a numbered operation list and presents it to the user before executing any write. The user must confirm before `use_figma` is called.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Which Stages Use This Connection
|
|
62
|
+
|
|
63
|
+
| Stage | Agent/Skill | Tool used | Purpose |
|
|
64
|
+
|-------|-------------|-----------|---------|
|
|
65
|
+
| figma-write | `agents/design-figma-writer.md` | `mcp__figma__use_figma` | Write design decisions back to Figma in three modes (annotate/tokenize/mappings) |
|
|
66
|
+
| design | `skills/design/SKILL.md` | (dispatch only) | Offer to spawn design-figma-writer after design-executor completes, when figma_writer: available |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Availability Probe (ToolSearch-only)
|
|
71
|
+
|
|
72
|
+
The figma-writer probe is ToolSearch-only — no live call at probe time. This matches the Refero connection pattern (opt-in tool, no live call needed to confirm availability).
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
ToolSearch({ query: "select:mcp__figma__use_figma", max_results: 1 })
|
|
76
|
+
→ Empty result → figma_writer: not_configured (skip figma-write entirely; log to STATE.md)
|
|
77
|
+
→ Non-empty result → figma_writer: available
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Write `figma_writer:` status to `.design/STATE.md` `<connections>` immediately after probing.
|
|
81
|
+
|
|
82
|
+
Note: The status key is `figma_writer:` (with underscore). This is distinct from `figma:` (desktop MCP status) and `figma_write:` is not used — the canonical key is `figma_writer:`.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Fallback Behavior
|
|
87
|
+
|
|
88
|
+
When `figma_writer` is `not_configured`, the pipeline degrades gracefully — no error is raised.
|
|
89
|
+
|
|
90
|
+
**figma-write stage:**
|
|
91
|
+
- `figma_writer: not_configured` → skip with note: "Figma write skipped — remote MCP not installed. Register with: claude mcp add figma --transport http https://mcp.figma.com/v1/sse"
|
|
92
|
+
|
|
93
|
+
**design stage:**
|
|
94
|
+
- `figma_writer: not_configured` or absent → skip the figma-write dispatch offer entirely (no prompt, no output)
|
|
95
|
+
- `figma_writer: available` → offer opt-in prompt after design-executor completes
|
|
96
|
+
|
|
97
|
+
**Special case — desktop MCP present but remote absent:**
|
|
98
|
+
If `figma: available` (desktop MCP) but `figma_writer: not_configured` (remote MCP absent), the figma-write capability is still not available. Desktop MCP cannot perform writes. Do not offer figma-write dispatch in this state.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## STATE.md Integration
|
|
103
|
+
|
|
104
|
+
The scan stage writes the initial `figma_writer:` status. Subsequent stages read from STATE.md without re-probing.
|
|
105
|
+
|
|
106
|
+
Example `<connections>` block after probing:
|
|
107
|
+
|
|
108
|
+
```xml
|
|
109
|
+
<connections>
|
|
110
|
+
figma: available
|
|
111
|
+
figma_writer: available
|
|
112
|
+
refero: not_configured
|
|
113
|
+
</connections>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Status key:** `figma_writer:` (underscore separator)
|
|
117
|
+
|
|
118
|
+
**Status values:**
|
|
119
|
+
|
|
120
|
+
| Value | Meaning |
|
|
121
|
+
|-------|---------|
|
|
122
|
+
| `available` | ToolSearch returned non-empty for `mcp__figma__use_figma` |
|
|
123
|
+
| `not_configured` | ToolSearch returned empty — remote MCP not registered |
|
|
124
|
+
|
|
125
|
+
Note: There is no `unavailable` state for figma_writer — the ToolSearch-only probe cannot detect auth failures. Auth issues surface at execution time when `use_figma` is first called.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Caveats and Pitfalls
|
|
130
|
+
|
|
131
|
+
1. **`mcp__figma__use_figma` is the remote MCP only.** It is registered as server `figma` via `claude mcp add`. It is NOT the same as the desktop MCP (`mcp__figma-desktop__*`). Running ToolSearch for `figma-desktop` will NOT find `use_figma`. Always use `select:mcp__figma__use_figma` as the probe query.
|
|
132
|
+
|
|
133
|
+
2. **All writes require user confirmation.** The proposal→confirm UX in design-figma-writer ensures the user reviews all operations before any write is executed. There is no auto-approve mode.
|
|
134
|
+
|
|
135
|
+
3. **Use `--dry-run` to inspect the proposal without risk.** Pass `--dry-run` to emit the full operation list without calling `use_figma`. Safe to run on production Figma files.
|
|
136
|
+
|
|
137
|
+
4. **Use `--confirm-shared` for team library components.** Before any write, the agent detects shared team library components via `get_metadata`. If shared components are in the operation list and `--confirm-shared` was not passed, the agent halts and requires the flag. This prevents accidental modification of team-wide design tokens.
|
|
138
|
+
|
|
139
|
+
5. **Operations execute sequentially, not atomically.** If one operation fails mid-sequence, the agent logs the error and continues with remaining operations. The Figma file may be left in a partially-updated state. The summary lists all failures for manual follow-up.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Figma MCP — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for the official Figma Desktop MCP within the get-design-done pipeline. It provides the setup guide, tool inventory, per-stage usage, probe pattern, fallback behavior, and anti-patterns. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
**Prerequisites:**
|
|
10
|
+
|
|
11
|
+
- Figma desktop app installed and running
|
|
12
|
+
- Dev Mode enabled in the Figma desktop app (File menu → Enable Dev Mode, or toggle in the toolbar)
|
|
13
|
+
|
|
14
|
+
**Install command (Claude Code):**
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
claude mcp add --transport http figma-desktop http://127.0.0.1:3845/mcp
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
After running this command, restart the Claude Code session. The MCP server connects via HTTP to the Figma desktop app's local MCP endpoint.
|
|
21
|
+
|
|
22
|
+
**Verification:**
|
|
23
|
+
|
|
24
|
+
After session restart, run:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
ToolSearch({ query: "figma-desktop", max_results: 10 })
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Expect non-empty results listing `mcp__figma-desktop__*` tools. If results are empty, the desktop app is not running or Dev Mode is not enabled — fix both and restart.
|
|
31
|
+
|
|
32
|
+
**Warning — wrong MCP confusion:**
|
|
33
|
+
|
|
34
|
+
This spec targets the **official Figma Desktop MCP** (`mcp__figma-desktop__*` prefix, server name `figma-desktop`, HTTP transport).
|
|
35
|
+
|
|
36
|
+
Do NOT confuse with the southleft `figma-console-mcp` package (registered as `"figma-console"` in `~/.claude/mcp.json`, uses `figma_*` prefix). Both can be active simultaneously. The pipeline uses `mcp__figma-desktop__*` exclusively — it is stable, official, and requires no external package dependency beyond the Figma desktop app.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Tools
|
|
41
|
+
|
|
42
|
+
All tools use the `mcp__figma-desktop__` prefix.
|
|
43
|
+
|
|
44
|
+
| Tool | Full name | Returns | Phase 4 use |
|
|
45
|
+
|------|-----------|---------|-------------|
|
|
46
|
+
| `get_variable_defs` | `mcp__figma-desktop__get_variable_defs` | Variable collection tree: collection ID, mode names, variable names (hierarchical, e.g. `colors/primary/500`), resolved values (hex for COLOR, float for FLOAT), descriptions, scopes | **In scope** — scan: token augmentation (CONN-03); discover: decisions pre-population (CONN-04) |
|
|
47
|
+
| `get_design_context` | `mcp__figma-desktop__get_design_context` | Structured React+Tailwind component tree of the current Figma selection | **In scope (secondary)** — discover: existing design decisions for established Figma systems |
|
|
48
|
+
| `get_screenshot` | `mcp__figma-desktop__get_screenshot` | Screenshot image of the selected Figma layer or frame | Out of scope Phase 4 |
|
|
49
|
+
| `get_metadata` | `mcp__figma-desktop__get_metadata` | Lightweight XML outline: layer IDs, names, types, position/size. Works with no selection open. | **In scope** — used as the availability probe (no file must be open) |
|
|
50
|
+
| `get_code_connect_map` | `mcp__figma-desktop__get_code_connect_map` | Maps Figma component instances to code implementations (file paths, framework labels) | Out of scope Phase 4 |
|
|
51
|
+
| `create_design_system_rules` | `mcp__figma-desktop__create_design_system_rules` | Generates rule files for design system alignment during code generation | Out of scope Phase 4 |
|
|
52
|
+
|
|
53
|
+
`get_metadata` is preferred for probing because it works without a file or selection open, keeping the probe lightweight. `get_variable_defs` is the primary workhorse for token extraction and decisions pre-population.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Which Stages Use This Connection
|
|
58
|
+
|
|
59
|
+
| Stage | Skill/Agent | Tool used | Purpose |
|
|
60
|
+
|-------|------------|-----------|---------|
|
|
61
|
+
| scan | `skills/scan/SKILL.md` | `get_variable_defs` | Token augmentation — supplements grep-based CSS token extraction with Figma variable definitions (CONN-03) |
|
|
62
|
+
| discover | `agents/design-context-builder.md` | `get_variable_defs` | Decisions pre-population — pre-fills D-XX color/spacing/typography decisions from Figma variables before the interview (CONN-04) |
|
|
63
|
+
| plan | — | — | Not currently used |
|
|
64
|
+
| verify | — | — | Not currently used |
|
|
65
|
+
|
|
66
|
+
Both scan and discover call `get_variable_defs` with no explicit selection to retrieve all variables in the active Figma file. If no file is open, the call errors and the stage falls back to its non-Figma path.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Availability Probe
|
|
71
|
+
|
|
72
|
+
**Call ToolSearch first — always.** In Claude Code sessions with many MCP servers, `mcp__figma-desktop__*` tools may be in the deferred tool set (not loaded into context at session start). Calling a deferred tool directly fails silently or errors. ToolSearch loads the tools into context and confirms their presence in a single call.
|
|
73
|
+
|
|
74
|
+
**Figma probe sequence:**
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Step 1 — ToolSearch check:
|
|
78
|
+
ToolSearch({ query: "select:mcp__figma-desktop__get_metadata", max_results: 1 })
|
|
79
|
+
→ Empty result → figma: not_configured (MCP not registered or app not running)
|
|
80
|
+
→ Non-empty result → proceed to Step 2
|
|
81
|
+
|
|
82
|
+
Step 2 — Live tool call:
|
|
83
|
+
call mcp__figma-desktop__get_metadata
|
|
84
|
+
→ Success → figma: available
|
|
85
|
+
→ Error → figma: unavailable
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Write the result to `.design/STATE.md <connections>` immediately after probing.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Fallback Behavior
|
|
93
|
+
|
|
94
|
+
When figma is `not_configured` or `unavailable`, stages degrade gracefully — no error is raised.
|
|
95
|
+
|
|
96
|
+
**scan stage:**
|
|
97
|
+
|
|
98
|
+
- Skip Step 2A (Figma Token Augmentation)
|
|
99
|
+
- Rely on grep-based CSS custom property extraction alone
|
|
100
|
+
- DESIGN.md token section uses `source: CSS custom properties` (not `source: figma-variables`)
|
|
101
|
+
- `figma_variables_used: false` in DESIGN.md frontmatter
|
|
102
|
+
|
|
103
|
+
**discover stage (design-context-builder):**
|
|
104
|
+
|
|
105
|
+
- Skip Step 0 (Figma Pre-population)
|
|
106
|
+
- Populate D-XX decisions via interview only (manual elicitation from the user)
|
|
107
|
+
- DESIGN-CONTEXT.md omits the "Token decisions pre-populated from Figma variables" note
|
|
108
|
+
|
|
109
|
+
Neither stage appends a `<blocker>` for a missing Figma connection — Figma is an enhancement, not a requirement. If a `must_have` explicitly requires Figma data, THEN append a blocker.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## STATE.md Integration
|
|
114
|
+
|
|
115
|
+
Every stage writes its probe result to `.design/STATE.md` under the `<connections>` section:
|
|
116
|
+
|
|
117
|
+
```xml
|
|
118
|
+
<connections>
|
|
119
|
+
figma: available
|
|
120
|
+
refero: not_configured
|
|
121
|
+
</connections>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Status values:**
|
|
125
|
+
|
|
126
|
+
| Value | Meaning |
|
|
127
|
+
|-------|---------|
|
|
128
|
+
| `available` | `get_metadata` returned a successful response |
|
|
129
|
+
| `unavailable` | Tool is in the session but errored (app offline, no file open, rate-limited) |
|
|
130
|
+
| `not_configured` | ToolSearch returned empty for `figma-desktop` — MCP not registered |
|
|
131
|
+
|
|
132
|
+
The `<connections>` schema is minimal by design. Traceability of which outputs came from Figma is handled via source annotations in DESIGN.md (`source: figma-variables`) and DESIGN-CONTEXT.md ("pre-populated from Figma variables"), not via richer STATE.md fields.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Caveats and Pitfalls
|
|
137
|
+
|
|
138
|
+
- **`get_variable_defs` returns resolved values, not alias chains.** If a semantic token (`colors/semantic/brand`) aliases a primitive (`colors/blue/500`), only the resolved hex is returned. When recording variables in DESIGN.md, use the variable NAME alongside the hex: `colors/semantic/brand = #3B82F6`. Add a note: "resolved value — may alias a primitive; verify in Figma if the token layer matters."
|
|
139
|
+
|
|
140
|
+
- **`get_variable_defs` requires an open Figma file.** If no file is open in the desktop app, the call errors. The probe falls to `unavailable` in this case — the stage skips Figma steps and continues with non-Figma fallbacks.
|
|
141
|
+
|
|
142
|
+
- **Multi-mode variables (Light/Dark).** Variables may carry values for multiple modes. When present, extract both: `#3B82F6 (light) / #60A5FA (dark)`. DESIGN.md can note dark-mode token existence in the color section.
|
|
143
|
+
|
|
144
|
+
- **Deferred-tool loading.** Always call `ToolSearch` before any `mcp__figma-desktop__*` tool invocation. This applies at every stage entry, even if Figma was `available` in a previous run — tool availability can change between sessions.
|
|
145
|
+
|
|
146
|
+
- **Wrong-MCP confusion.** This spec covers `mcp__figma-desktop__*` (official Figma Desktop MCP). The southleft `figma-console-mcp` uses `figma_*` prefix and serves different use cases. Do not mix them. If ToolSearch returns results prefixed `figma_` but not `mcp__figma-desktop__`, the Figma Desktop MCP is still not configured.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Graphify — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for Graphify within the get-design-done pipeline. Graphify builds a queryable knowledge graph over the codebase — mapping component↔token↔decision relationships via Tree-sitter static analysis and LLM semantic extraction. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
**Prerequisites:**
|
|
10
|
+
- Python 3.9+ available on PATH
|
|
11
|
+
- GSD framework with `graphify.enabled = true` in `.planning/config.json`
|
|
12
|
+
|
|
13
|
+
**Install:**
|
|
14
|
+
```
|
|
15
|
+
pip install graphifyy
|
|
16
|
+
graphify install # installs skill files into ~/.claude/skills/graphify/
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Enable in GSD config:**
|
|
20
|
+
```
|
|
21
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set graphify.enabled true
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Build the graph (initial):**
|
|
25
|
+
```
|
|
26
|
+
graphify . # run in project root; produces graphify-out/graph.json
|
|
27
|
+
# or via GSD tools:
|
|
28
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify build
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Recommended: auto-rebuild after commits:**
|
|
32
|
+
```
|
|
33
|
+
graphify hook install
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Verification:**
|
|
37
|
+
After building, run:
|
|
38
|
+
```
|
|
39
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify status
|
|
40
|
+
```
|
|
41
|
+
Expect: `{ enabled: true, graph_path: "...", node_count: N, edge_count: N, stale: false }`
|
|
42
|
+
|
|
43
|
+
**Note:** Graphify is an optional external dependency. It requires Python and takes 1-5 minutes to build on a large codebase. Do NOT add to plugin bootstrap — users opt in manually.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Graph Schema
|
|
48
|
+
|
|
49
|
+
### Node Types
|
|
50
|
+
|
|
51
|
+
| Node type | Source | ID pattern |
|
|
52
|
+
|-----------|--------|-----------|
|
|
53
|
+
| component | `.stories.tsx` / `src/components/*.tsx` | `component:<name>` |
|
|
54
|
+
| token:color | CSS custom properties / Figma variables | `token:color/<name>` |
|
|
55
|
+
| token:spacing | CSS custom properties | `token:spacing/<name>` |
|
|
56
|
+
| token:typography | CSS custom properties | `token:typography/<name>` |
|
|
57
|
+
| token:motion | CSS animation variables | `token:motion/<name>` |
|
|
58
|
+
| page/route | `src/app/` or `src/pages/` | `page:<path>` |
|
|
59
|
+
| decision | DESIGN-CONTEXT.md D-XX entries | `decision:D-<nn>` |
|
|
60
|
+
| must-have | DESIGN-CONTEXT.md M-XX entries | `must-have:M-<nn>` |
|
|
61
|
+
| debt-item | DESIGN-DEBT.md entries | `debt:<id>` |
|
|
62
|
+
| anti-pattern | DESIGN-CONTEXT.md anti-patterns | `antipattern:<name>` |
|
|
63
|
+
| a11y-finding | DESIGN-VERIFICATION.md violations | `a11y:<rule-name>` |
|
|
64
|
+
| figma-variable | Figma `get_variable_defs` output | `figma-var:<name>` |
|
|
65
|
+
|
|
66
|
+
### Edge Types
|
|
67
|
+
|
|
68
|
+
| Edge | From | To | Meaning |
|
|
69
|
+
|------|------|-----|---------|
|
|
70
|
+
| `uses` | component | token | Component references this token |
|
|
71
|
+
| `renders` | page | component | Page renders this component |
|
|
72
|
+
| `violates` | debt-item | decision | Debt item contradicts this decision |
|
|
73
|
+
| `derives-from` | a11y-finding | component | A11y finding originates in this component |
|
|
74
|
+
| `maps-to` | figma-variable | token | Figma variable corresponds to CSS token |
|
|
75
|
+
| `detected-at` | anti-pattern | component | Anti-pattern found in this component |
|
|
76
|
+
|
|
77
|
+
### graph.json structure
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"nodes": [
|
|
82
|
+
{ "id": "component:Button", "label": "Button", "type": "component",
|
|
83
|
+
"description": "Primary interactive element", "source": "src/components/Button.tsx" }
|
|
84
|
+
],
|
|
85
|
+
"edges": [
|
|
86
|
+
{ "source": "component:Button", "target": "token:color/primary/500",
|
|
87
|
+
"label": "uses", "confidence": "EXTRACTED", "confidence_score": 0.95 }
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Edge confidence tiers: EXTRACTED (found in source), INFERRED (semantic inference), AMBIGUOUS (flagged for review).
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Which Stages Use This Connection
|
|
97
|
+
|
|
98
|
+
| Stage | Agent | Usage | Purpose |
|
|
99
|
+
|-------|-------|-------|---------|
|
|
100
|
+
| plan | `agents/design-planner.md` | Pre-scope token query | Count affected components before scoping a token change task |
|
|
101
|
+
| verify | `agents/design-integration-checker.md` | Pre-search D-XX query | Find components and tokens connected to each decision before grep |
|
|
102
|
+
|
|
103
|
+
Graphify is NOT called during scan, discover, or design. It is a read-only pre-search oracle for planner and verifier agents.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Availability Probe
|
|
108
|
+
|
|
109
|
+
Unlike MCP connections, Graphify has no ToolSearch check. The probe is file-existence + config-flag based.
|
|
110
|
+
|
|
111
|
+
**Graphify probe sequence (execute at agent entry, before using graph):**
|
|
112
|
+
|
|
113
|
+
Step G1 — Config check:
|
|
114
|
+
```
|
|
115
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify status
|
|
116
|
+
→ Error or { enabled: false } → graphify: not_configured (skip all graph steps)
|
|
117
|
+
→ { enabled: true } → proceed to Step G2
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Step G2 — Graph file check:
|
|
121
|
+
```
|
|
122
|
+
Check if graphify-out/graph.json exists in project root
|
|
123
|
+
→ Absent → graphify: unavailable (graph not built yet)
|
|
124
|
+
→ Present → graphify: available
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Write graphify status to `.design/STATE.md` `<connections>`.
|
|
128
|
+
|
|
129
|
+
**Note:** Agents check `.design/STATE.md` `<connections>` FIRST before running the probe. If a prior stage already wrote `graphify: available`, skip the probe and use the cached status.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Pre-Search Consultation Pattern
|
|
134
|
+
|
|
135
|
+
This is the canonical pre-search pattern for agents. Copy inline — SKILL.md and agent files have no include mechanism.
|
|
136
|
+
|
|
137
|
+
**For decision-based queries (design-integration-checker):**
|
|
138
|
+
|
|
139
|
+
Step 1: Query graph for decision node and its neighbors
|
|
140
|
+
```
|
|
141
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify query "decision:D-<nn>" --budget 1500
|
|
142
|
+
→ Returns: connected components + tokens as JSON
|
|
143
|
+
→ Use returned component IDs as grep seed list (reduces false-negative "not found")
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Step 2: Grep each returned component for the decision pattern
|
|
147
|
+
(then continue to standard grep behavior if graph returned nothing)
|
|
148
|
+
|
|
149
|
+
**For token-based queries (design-planner):**
|
|
150
|
+
|
|
151
|
+
Step 1: Query graph for token node and its neighbors
|
|
152
|
+
```
|
|
153
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify query "<token-name>" --budget 1500
|
|
154
|
+
→ Returns: all components that reference this token
|
|
155
|
+
→ Annotate planned task with "N components affected" before scoping
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Step 2: Include component list in the task description
|
|
159
|
+
(then continue standard planning behavior)
|
|
160
|
+
|
|
161
|
+
**Budget note:** Use `--budget 1500` for pre-search queries. High confidence_score edges (>= 0.8) are more reliable; AMBIGUOUS edges are hints only.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Fallback
|
|
166
|
+
|
|
167
|
+
| Status | Behavior |
|
|
168
|
+
|--------|----------|
|
|
169
|
+
| `graphify: available` | Agents query graph before grep; annotate results with graph context |
|
|
170
|
+
| `graphify: unavailable` | Agents skip graph steps; log "graphify query skipped — graph not built" in output; fall back to grep |
|
|
171
|
+
| `graphify: not_configured` | Same as unavailable; no user-visible error (opt-in feature) |
|
|
172
|
+
|
|
173
|
+
The graph is a performance optimization and accuracy enhancer. It is never a hard requirement. All agents MUST produce valid output via grep alone.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Anti-Patterns
|
|
178
|
+
|
|
179
|
+
- **Do NOT use graphify to replace grep.** The graph is a seed list, not a complete index. Always grep after querying the graph.
|
|
180
|
+
- **Do NOT embed graph.json contents in agent context.** Query specific nodes via gsd-tools; never read graph.json directly.
|
|
181
|
+
- **Do NOT query the graph during scan or design stages.** The graph is read-only and only useful when decisions already exist (plan, verify).
|
|
182
|
+
- **Do NOT block on graph build time.** If `graphify build` takes >30 seconds mid-session, log "graphify build deferred — run /gdd:graphify build manually" and continue without graph.
|
|
183
|
+
- **Do NOT assume graph covers .design/ artifacts.** Graphify analyzes source code (src/, components/). DESIGN-CONTEXT.md and DESIGN-PLAN.md are not graph nodes unless explicitly indexed.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## /gdd:graphify Commands
|
|
188
|
+
|
|
189
|
+
| Subcommand | GSD tools call | Purpose |
|
|
190
|
+
|------------|----------------|---------|
|
|
191
|
+
| `build` | `gsd-tools graphify build` | Build or rebuild the knowledge graph |
|
|
192
|
+
| `query <term>` | `gsd-tools graphify query "<term>" --budget 2000` | Query the graph for a node and its neighbors |
|
|
193
|
+
| `status` | `gsd-tools graphify status` | Check graph age, node count, enabled status |
|
|
194
|
+
| `diff` | `gsd-tools graphify diff` | Show topology changes since last build |
|
|
195
|
+
|
|
196
|
+
If `graphify.enabled = false` in `.planning/config.json`, the skill prompts:
|
|
197
|
+
"Graphify is not enabled. Enable with: gsd-tools config-set graphify.enabled true — then run /gdd:graphify build."
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Pinterest MCP — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for Pinterest MCP within the get-design-done pipeline. Its primary role is to provide visual reference collection in the discover stage — users search Pinterest for design patterns, color palettes, and UI inspiration that feed into the research-synthesizer as reference inputs. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
**Prerequisites:**
|
|
10
|
+
|
|
11
|
+
- Pinterest MCP installed and registered in Claude Code. The recommended package is `terryso/mcp-pinterest` (headless scraping, no API key required).
|
|
12
|
+
|
|
13
|
+
**Install command (Claude Code):**
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
npx -y @smithery/cli install mcp-pinterest --client claude
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This registers the server with the name `mcp-pinterest`. After running, restart the Claude Code session.
|
|
20
|
+
|
|
21
|
+
**Alternative package:**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
npx @iflow-mcp/pinterest-mcp-server
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If using the alternative, the server name may differ — run the verification step below to confirm.
|
|
28
|
+
|
|
29
|
+
**Verification:**
|
|
30
|
+
|
|
31
|
+
After session restart, run:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
ToolSearch({ query: "mcp-pinterest", max_results: 5 })
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Expect non-empty results listing `mcp__mcp-pinterest__*` tools. If results are empty, the Pinterest MCP is not registered — run the install command above and restart.
|
|
38
|
+
|
|
39
|
+
**Warning — prefix depends on registration name:**
|
|
40
|
+
|
|
41
|
+
Pinterest MCP tool names in Claude Code follow the pattern `mcp__<server-name>__<tool-name>`. The default Smithery install uses `mcp-pinterest` as the server name, giving the prefix `mcp__mcp-pinterest__`. However, if registered with a different name (e.g., `pinterest`), the prefix becomes `mcp__pinterest__`. **Always verify via ToolSearch at runtime — never hardcode the prefix.** The stage probe handles this automatically.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Tools
|
|
46
|
+
|
|
47
|
+
Tool names below assume the default `mcp-pinterest` server registration. Actual names may differ — confirm via ToolSearch.
|
|
48
|
+
|
|
49
|
+
| Tool shortname | Expected full name | Returns | Pipeline use |
|
|
50
|
+
|----------------|-------------------|---------|--------------|
|
|
51
|
+
| `pinterest_search` | `mcp__mcp-pinterest__pinterest_search` | Array of pin objects (url, title, image_url, description) | **Primary discover tool** — search by keyword for design inspiration |
|
|
52
|
+
| `pinterest_get_image_info` | `mcp__mcp-pinterest__pinterest_get_image_info` | Pin metadata (title, description, board, creator, tags) | Detail enrichment for a specific pin URL |
|
|
53
|
+
| `pinterest_search_and_download` | `mcp__mcp-pinterest__pinterest_search_and_download` | Search results + local image downloads | Heavy mode — only use if offline image analysis is required |
|
|
54
|
+
|
|
55
|
+
**Recommended for pipeline use:** `pinterest_search` only. It returns pin metadata without downloading images, keeping token cost and latency low. `pinterest_get_image_info` is used when a specific pin needs deeper attribution. `pinterest_search_and_download` should only be used when the user explicitly needs local image files.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Which Stages Use This Connection
|
|
60
|
+
|
|
61
|
+
| Stage | Skill/Agent | Tools used | Purpose |
|
|
62
|
+
|-------|------------|------------|---------|
|
|
63
|
+
| discover | `agents/design-research-synthesizer.md` | `pinterest_search` | Search for visual inspiration matching the project's design direction; results feed into `<connection_sources>` section of DESIGN-CONTEXT.md |
|
|
64
|
+
|
|
65
|
+
Pinterest is a reference source only — it feeds the synthesizer alongside Refero, awesome-design-md, and Figma variables. It does NOT modify STATE.md decisions directly.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Availability Probe
|
|
70
|
+
|
|
71
|
+
**Pinterest uses the ToolSearch-only probe pattern** — identical to Refero. No live tool call is needed to confirm availability.
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Step P1 — ToolSearch check (discover stage entry):
|
|
75
|
+
ToolSearch({ query: "mcp-pinterest", max_results: 5 })
|
|
76
|
+
→ Empty result → pinterest: not_configured (skip Pinterest; fall through to Refero)
|
|
77
|
+
→ Non-empty result → pinterest: available
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**No live call at probe time.** Unlike Preview (which calls `preview_list`), Pinterest requires no live probe call. ToolSearch presence is sufficient — the tool will be called only when a search query is needed.
|
|
81
|
+
|
|
82
|
+
Write the result to `.design/STATE.md <connections>` immediately after probing in scan stage.
|
|
83
|
+
|
|
84
|
+
**Fallback chain (discover stage):**
|
|
85
|
+
|
|
86
|
+
Pinterest falls into the reference-source fallback chain as the first tier:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Pinterest (if available)
|
|
90
|
+
→ Refero (if available)
|
|
91
|
+
→ awesome-design-md (always available — static curated list in reference/)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
When Pinterest is available, search it first. When Pinterest is `not_configured`, skip silently and proceed to Refero. The synthesizer uses whichever sources are available — there is no minimum required source count.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Fallback Behavior
|
|
99
|
+
|
|
100
|
+
When Pinterest is `not_configured`:
|
|
101
|
+
|
|
102
|
+
- Skip the Pinterest search step in the synthesizer entirely
|
|
103
|
+
- Do NOT emit a warning or blocker to the user — Pinterest is an enhancement, not a requirement
|
|
104
|
+
- Proceed to Refero in the fallback chain
|
|
105
|
+
- The `<connection_sources>` section of DESIGN-CONTEXT.md should note: `pinterest: not_configured — skipped`
|
|
106
|
+
|
|
107
|
+
When Pinterest is `available` but `pinterest_search` returns an error or empty results:
|
|
108
|
+
|
|
109
|
+
- Log the error in DESIGN-CONTEXT.md `<connection_sources>` section
|
|
110
|
+
- Set `pinterest: unavailable` in STATE.md `<connections>`
|
|
111
|
+
- Proceed to Refero
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## STATE.md Integration
|
|
116
|
+
|
|
117
|
+
Scan stage probes Pinterest at pipeline entry and writes the result to `<connections>`:
|
|
118
|
+
|
|
119
|
+
```xml
|
|
120
|
+
<connections>
|
|
121
|
+
figma: available
|
|
122
|
+
refero: not_configured
|
|
123
|
+
preview: available
|
|
124
|
+
storybook: not_configured
|
|
125
|
+
chromatic: not_configured
|
|
126
|
+
figma_writer: not_configured
|
|
127
|
+
graphify: not_configured
|
|
128
|
+
pinterest: available
|
|
129
|
+
claude_design: not_configured
|
|
130
|
+
</connections>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Status values:**
|
|
134
|
+
|
|
135
|
+
| Value | Meaning |
|
|
136
|
+
|-------|---------|
|
|
137
|
+
| `available` | ToolSearch returned non-empty results for `mcp-pinterest` |
|
|
138
|
+
| `not_configured` | ToolSearch returned empty — Pinterest MCP not registered in this session |
|
|
139
|
+
| `unavailable` | Tool is present but `pinterest_search` errored or returned empty on first call |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Caveats and Pitfalls
|
|
144
|
+
|
|
145
|
+
1. **Headless scraping may be rate-limited.** `terryso/mcp-pinterest` uses headless browser scraping, not the official Pinterest API. Rate limits or IP blocks are possible if too many searches are made in quick succession. Limit to 2-3 searches per discover session. The pipeline naturally constrains this by searching once per design concern (color, typography, layout) rather than repeatedly.
|
|
146
|
+
|
|
147
|
+
2. **No authentication required — but content is public only.** Pinterest MCP accesses only public pins. Private boards and pins are not accessible. This is by design for the pipeline use case — design inspiration should be sourced from publicly shareable references.
|
|
148
|
+
|
|
149
|
+
3. **Tool prefix uncertainty — always use ToolSearch.** Never call `mcp__mcp-pinterest__pinterest_search` directly without first confirming via ToolSearch that the tool exists under that name. If the user registered the server as `pinterest` (no `mcp-` prefix), the tool would be `mcp__pinterest__pinterest_search`. The probe pattern above handles this automatically.
|
|
150
|
+
|
|
151
|
+
4. **Image URLs may be ephemeral.** Pinterest image URLs (CDN links) can expire or change. Do not cache image URLs in STATE.md or DESIGN-CONTEXT.md for more than one session. Reference search results by pin title and query context, not by image URL.
|
|
152
|
+
|
|
153
|
+
5. **Results are inspiration, not specifications.** Pinterest references are inputs to the synthesizer, which extracts design signals (dominant colors, typography patterns, spacing density). Do not treat a Pinterest search result as a binding design decision — it informs the D-XX discussion in the discover stage.
|