@lando-labs/lando-ds-mcp 4.0.0

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.
Files changed (132) hide show
  1. package/CHANGELOG.md +526 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +4 -0
  4. package/README.md +170 -0
  5. package/build/data/ds-meta.json +1 -0
  6. package/build/data/ds-meta.schema.json +282 -0
  7. package/build/data/ds-meta.verbose.json +1 -0
  8. package/build/data/icon-metadata.d.ts +64 -0
  9. package/build/data/icon-metadata.d.ts.map +1 -0
  10. package/build/data/icon-metadata.js +1128 -0
  11. package/build/data/icon-metadata.js.map +1 -0
  12. package/build/data/lucide-icon-names.d.ts +12 -0
  13. package/build/data/lucide-icon-names.d.ts.map +1 -0
  14. package/build/data/lucide-icon-names.js +1653 -0
  15. package/build/data/lucide-icon-names.js.map +1 -0
  16. package/build/data/lucide-icons.d.ts +41 -0
  17. package/build/data/lucide-icons.d.ts.map +1 -0
  18. package/build/data/lucide-icons.js +80 -0
  19. package/build/data/lucide-icons.js.map +1 -0
  20. package/build/data/rn-tokens-snapshot.d.ts +753 -0
  21. package/build/data/rn-tokens-snapshot.d.ts.map +1 -0
  22. package/build/data/rn-tokens-snapshot.js +286 -0
  23. package/build/data/rn-tokens-snapshot.js.map +1 -0
  24. package/build/index.d.ts +18 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +411 -0
  27. package/build/index.js.map +1 -0
  28. package/build/prompts/index.d.ts +16 -0
  29. package/build/prompts/index.d.ts.map +1 -0
  30. package/build/prompts/index.js +145 -0
  31. package/build/prompts/index.js.map +1 -0
  32. package/build/resources/code-examples.d.ts +6 -0
  33. package/build/resources/code-examples.d.ts.map +1 -0
  34. package/build/resources/code-examples.js +278 -0
  35. package/build/resources/code-examples.js.map +1 -0
  36. package/build/resources/design-tokens.d.ts +6 -0
  37. package/build/resources/design-tokens.d.ts.map +1 -0
  38. package/build/resources/design-tokens.js +128 -0
  39. package/build/resources/design-tokens.js.map +1 -0
  40. package/build/resources/index.d.ts +19 -0
  41. package/build/resources/index.d.ts.map +1 -0
  42. package/build/resources/index.js +80 -0
  43. package/build/resources/index.js.map +1 -0
  44. package/build/test.d.ts +12 -0
  45. package/build/test.d.ts.map +1 -0
  46. package/build/test.js +680 -0
  47. package/build/test.js.map +1 -0
  48. package/build/tools/compose-components.d.ts +40 -0
  49. package/build/tools/compose-components.d.ts.map +1 -0
  50. package/build/tools/compose-components.js +61 -0
  51. package/build/tools/compose-components.js.map +1 -0
  52. package/build/tools/get-animation-examples.d.ts +30 -0
  53. package/build/tools/get-animation-examples.d.ts.map +1 -0
  54. package/build/tools/get-animation-examples.js +484 -0
  55. package/build/tools/get-animation-examples.js.map +1 -0
  56. package/build/tools/get-component-capabilities.d.ts +43 -0
  57. package/build/tools/get-component-capabilities.d.ts.map +1 -0
  58. package/build/tools/get-component-capabilities.js +108 -0
  59. package/build/tools/get-component-capabilities.js.map +1 -0
  60. package/build/tools/get-component-props.d.ts +23 -0
  61. package/build/tools/get-component-props.d.ts.map +1 -0
  62. package/build/tools/get-component-props.js +46 -0
  63. package/build/tools/get-component-props.js.map +1 -0
  64. package/build/tools/get-component-reference.d.ts +25 -0
  65. package/build/tools/get-component-reference.d.ts.map +1 -0
  66. package/build/tools/get-component-reference.js +112 -0
  67. package/build/tools/get-component-reference.js.map +1 -0
  68. package/build/tools/get-component.d.ts +25 -0
  69. package/build/tools/get-component.d.ts.map +1 -0
  70. package/build/tools/get-component.js +60 -0
  71. package/build/tools/get-component.js.map +1 -0
  72. package/build/tools/get-composition-hints.d.ts +22 -0
  73. package/build/tools/get-composition-hints.d.ts.map +1 -0
  74. package/build/tools/get-composition-hints.js +39 -0
  75. package/build/tools/get-composition-hints.js.map +1 -0
  76. package/build/tools/get-design-tokens.d.ts +24 -0
  77. package/build/tools/get-design-tokens.d.ts.map +1 -0
  78. package/build/tools/get-design-tokens.js +96 -0
  79. package/build/tools/get-design-tokens.js.map +1 -0
  80. package/build/tools/get-ds-metadata.d.ts +16 -0
  81. package/build/tools/get-ds-metadata.d.ts.map +1 -0
  82. package/build/tools/get-ds-metadata.js +65 -0
  83. package/build/tools/get-ds-metadata.js.map +1 -0
  84. package/build/tools/get-hook.d.ts +19 -0
  85. package/build/tools/get-hook.d.ts.map +1 -0
  86. package/build/tools/get-hook.js +46 -0
  87. package/build/tools/get-hook.js.map +1 -0
  88. package/build/tools/get-theme-presets.d.ts +13 -0
  89. package/build/tools/get-theme-presets.d.ts.map +1 -0
  90. package/build/tools/get-theme-presets.js +41 -0
  91. package/build/tools/get-theme-presets.js.map +1 -0
  92. package/build/tools/list-components.d.ts +29 -0
  93. package/build/tools/list-components.d.ts.map +1 -0
  94. package/build/tools/list-components.js +88 -0
  95. package/build/tools/list-components.js.map +1 -0
  96. package/build/tools/list-hooks.d.ts +22 -0
  97. package/build/tools/list-hooks.d.ts.map +1 -0
  98. package/build/tools/list-hooks.js +80 -0
  99. package/build/tools/list-hooks.js.map +1 -0
  100. package/build/tools/list-icons.d.ts +28 -0
  101. package/build/tools/list-icons.d.ts.map +1 -0
  102. package/build/tools/list-icons.js +161 -0
  103. package/build/tools/list-icons.js.map +1 -0
  104. package/build/tools/platform-transform.d.ts +64 -0
  105. package/build/tools/platform-transform.d.ts.map +1 -0
  106. package/build/tools/platform-transform.js +117 -0
  107. package/build/tools/platform-transform.js.map +1 -0
  108. package/build/tools/platform.d.ts +76 -0
  109. package/build/tools/platform.d.ts.map +1 -0
  110. package/build/tools/platform.js +80 -0
  111. package/build/tools/platform.js.map +1 -0
  112. package/build/tools/search-icons.d.ts +28 -0
  113. package/build/tools/search-icons.d.ts.map +1 -0
  114. package/build/tools/search-icons.js +257 -0
  115. package/build/tools/search-icons.js.map +1 -0
  116. package/build/utils/error-envelope.d.ts +14 -0
  117. package/build/utils/error-envelope.d.ts.map +1 -0
  118. package/build/utils/error-envelope.js +35 -0
  119. package/build/utils/error-envelope.js.map +1 -0
  120. package/build/utils/icon-library.d.ts +17 -0
  121. package/build/utils/icon-library.d.ts.map +1 -0
  122. package/build/utils/icon-library.js +24 -0
  123. package/build/utils/icon-library.js.map +1 -0
  124. package/build/utils/jsx-safety.d.ts +47 -0
  125. package/build/utils/jsx-safety.d.ts.map +1 -0
  126. package/build/utils/jsx-safety.js +63 -0
  127. package/build/utils/jsx-safety.js.map +1 -0
  128. package/build/utils/meta-loader.d.ts +37 -0
  129. package/build/utils/meta-loader.d.ts.map +1 -0
  130. package/build/utils/meta-loader.js +114 -0
  131. package/build/utils/meta-loader.js.map +1 -0
  132. package/package.json +60 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,526 @@
1
+ # Changelog
2
+
3
+ All notable changes to the Lando Labs Design System MCP Server will be documented in this file.
4
+
5
+ ## [4.0.0] - 2026-07-16
6
+
7
+ **DS ecosystem consolidation.** MCP catches up to the DS's public launch on npm and consolidates. Four coordinated breaking changes:
8
+
9
+ 1. **npm package renamed** — `@lando-labs/design-system-mcp` → `@lando-labs/lando-ds-mcp`
10
+ 2. **CLI bin renamed** — `lando-design-system-mcp` → `lando-ds-mcp`
11
+ 3. **DS meta consumed at runtime** — `@lando-labs/lando-ds-meta` (v0.57.0) is now a `dependencies` entry; the build-time copy workflow (`scripts/copy-ds-meta.ts`) and drift check (`scripts/check-ds-drift.ts`) are gone. `npm update @lando-labs/lando-ds-meta` replaces `npm run copy:ds-meta`.
12
+ 4. **React Native support removed** — the DS won't ship RN. `platform` parameter dropped from every tool's schema; `platform-transform.ts`, `platform.ts`, and `rn-tokens-snapshot.ts` deleted.
13
+
14
+ ### Renamed
15
+
16
+ - **`@lando-labs/design-system-mcp` → `@lando-labs/lando-ds-mcp`** on npm. Verified 2026-07-16 that the old name was never published (`npm view` returned 404), so there is no deprecation notice on the old registry entry — nothing existed.
17
+ - **CLI bin `lando-design-system-mcp` → `lando-ds-mcp`.** Update your MCP client config: `"command": "lando-ds-mcp"`.
18
+ - **Server identity** in the MCP handshake: name changed from `lando-design-system` → `lando-ds`.
19
+
20
+ ### Added
21
+
22
+ - **Runtime dependency** on `@lando-labs/lando-ds-meta@^0.57.0`. Meta is loaded via `createRequire('@lando-labs/lando-ds-meta')` — CJS-in-ESM pattern that lets `Node16`-and-newer TypeScript project settings pick up the package's `exports` map default (`meta.json`) without a `default` re-export in the shipped types.d.ts.
23
+ - **Meta types imported from the subpackage** — `LightMeta`, `VerboseMeta`, `LightComponentMeta`, `VerboseComponentMeta`, `HookMeta`, `IconRegistryEntry`, `MetaSchemaVersion`, `ThemePresetsMeta` all sourced from `@lando-labs/lando-ds-meta/types` and re-exported through `src/utils/meta-loader.ts` so tool consumers keep their existing import path.
24
+ - **DS meta refreshed to v0.57.0** (was v0.56.0). Content-refresh side-effect of the subpackage adoption.
25
+
26
+ ### Removed
27
+
28
+ - `src/data/ds-meta.json`, `ds-meta.verbose.json`, `ds-meta.schema.json` (~420 KB of baked JSON gone from source and the published tarball)
29
+ - `scripts/copy-ds-meta.ts`, `scripts/check-ds-drift.ts` (~200 LOC)
30
+ - `src/tools/platform.ts`, `src/tools/platform-transform.ts`, `src/data/rn-tokens-snapshot.ts` (~500 LOC)
31
+ - `src/__tests__/*.test.ts` (legacy vitest tests superseded by `src/test.ts`)
32
+ - `platform` parameter from 8 tools' Zod schemas + JSON schemas + dispatch: `list_components`, `get_component`, `compose_components`, `get_design_tokens`, `get_animation_examples`, `list_icons`, `search_icons`, `get_component_capabilities`
33
+ - ~150 LOC of hand-mirrored meta interfaces in `meta-loader.ts` (replaced with imports from the subpackage's `types.d.ts`)
34
+ - `copy:ds-meta`, `check:ds-drift`, `build:full`, `update:all-components` npm scripts
35
+ - `platforms` field surfacing in `get_component_capabilities` and `get_component_reference` output (still in meta; MCP just doesn't render it now that RN isn't a target)
36
+
37
+ ### Changed
38
+
39
+ - **`build` script** simplified to `tsc && chmod +x build/index.js` — no more `cp src/data/*.json build/data/`.
40
+ - **`tsconfig.json`** — `module` and `moduleResolution` bumped from `Node16` to `NodeNext` for support of import attributes (`with { type: 'json' }`) and modern export-map resolution semantics.
41
+ - **Startup banner** now reports `Version: 4.0.0 (backed by @lando-labs/lando-ds-meta v0.57.0)`.
42
+ - **README** — install snippets updated to `npm install -g @lando-labs/lando-ds-mcp` and command `lando-ds-mcp`.
43
+
44
+ ### Not changed
45
+
46
+ - **Tool catalog** — still 15 tools with the same names. Their schemas lost the `platform` param but every other input stays identical for consumers targeting web (the vast majority).
47
+ - **Meta schema major line** — DS meta is still `1.x`. MCP compat check unchanged.
48
+ - **License** — Apache 2.0 (unchanged from v3.2.0).
49
+
50
+ ### Migration for local dogfooders
51
+
52
+ ```bash
53
+ # Uninstall the old name (had it globally? Only lab dogfooders would)
54
+ npm uninstall -g @lando-labs/design-system-mcp
55
+
56
+ # Install the new one from npm (first public publish will follow this release)
57
+ npm install -g @lando-labs/lando-ds-mcp
58
+ ```
59
+
60
+ Client config: change `"command": "lando-design-system-mcp"` → `"command": "lando-ds-mcp"`.
61
+
62
+ ### Verified
63
+
64
+ - typecheck ✓, build ✓, tests **78/78** ✓ (was 80 in v3.3.0; two RN-specific tests deleted with the platform param)
65
+
66
+ ## [3.3.0] - 2026-07-14
67
+
68
+ **Hooks tools.** DS v0.56.0 shipped the utility-hooks library ([DS#504](https://github.com/lando-labs/lando-labs-design-system/issues/504)) and made hooks first-class in `meta.json` (schema 1.3). This release exposes them to MCP-connected agents. Tool catalog: **13 → 15**.
69
+
70
+ ### Added
71
+
72
+ - **`list_hooks` tool** — enumerate DS utility hooks with optional filters (`category`, `serverSafe`). Groups by category (state / timing / dom / browser / lifecycle / a11y / keyboard / layout). Renders signature inline for scan-ability.
73
+ - **`get_hook` tool** — full detail for a single hook: signature, returns, category, RSC safety, subpath, description, and a ready-to-paste import snippet. Dynamic hook-name enum derived from meta at startup (mirrors the `get_component` pattern).
74
+ - **`HookMeta` interface** in `src/utils/meta-loader.ts` — types the schema 1.3 `hooks` field. Marked optional on `Meta<T>` so older meta snapshots still parse (compat kept intentionally lenient — DS bumped meta minor, MCP did not need to bump its major).
75
+ - **`getHookNames()` / `getHook()`** convenience accessors alongside the existing component accessors.
76
+ - **Hook totals section** in `get_ds_metadata` output — total count + category breakdown + pointer to the two new tools, so agents self-orienting via the one-call metadata tool discover the capability.
77
+
78
+ ### Changed
79
+
80
+ - **Startup banner** now reports `Components: N | Hooks: M` and the updated 15-tool list.
81
+ - **README** — tool table shows 15 tools with `list_hooks` / `get_hook` rows and updated `get_ds_metadata` blurb.
82
+
83
+ ### Not changed
84
+
85
+ - **DS meta version** — unchanged from v3.2.3 (v0.56.0, schema 1.3). This release ships the tool surface for the hooks data v3.2.3 already baked in.
86
+ - **Existing 13 tools** — same names, same schemas, same outputs.
87
+ - **Component count** — 127.
88
+
89
+ ### Verified
90
+
91
+ - typecheck ✓, build ✓, check:ds-drift ✓, tests **80/80** ✓ (was 67; 13 new for hook coverage)
92
+
93
+ ### Launch note
94
+
95
+ The originally planned v3.3.0 (DS-usage auditing) has shifted to v3.4.0. This slot went to hooks because DS#504 explicitly framed the hooks library as *discoverable* and shipping DS launch weekend with hooks invisible to MCP would undercut that.
96
+
97
+ ## [3.2.3] - 2026-07-14
98
+
99
+ **Content refresh: DS v0.54 → v0.56.** Two-minor DS delta — still PATCH per the "content-only" branch of the convention (no MCP tool changes; the meta schema major line is unchanged). Meta schema *minor* bumped 1.2 → 1.3 to add the `hooks` capability, but MCP's compat check is major-pinned (`1.x`), so this is a non-breaking pickup.
100
+
101
+ ### Changed
102
+
103
+ - **Baked DS meta refreshed to v0.56.0.** Schema 1.2 → 1.3. Component count unchanged at 127. Picks up the DS v0.55.0 + v0.56.0 releases — most notably the new **utility-hooks library** ([DS#504](https://github.com/lando-labs/lando-labs-design-system/issues/504)): 19 hooks across 8 categories (state / timing / dom / browser / lifecycle / a11y / keyboard / layout) now emitted into `meta.json` under a top-level `hooks` key.
104
+
105
+ ### Not exposed yet (upcoming)
106
+
107
+ The new `hooks` capability is present in the baked meta but there is **no dedicated MCP tool** for it yet — a follow-up sprint will decide whether to add `list_hooks` / `get_hook` (mirroring the component pattern) or fold hook exposure into an existing tool. Tracked as a scope question for the next planning session.
108
+
109
+ ### Launch note
110
+
111
+ v3.2.3 supersedes v3.2.2 as the launch target. Publish tag still held for the coordinated launch weekend; whichever bump lands on `main` most recently is what gets tagged.
112
+
113
+ ## [3.2.2] - 2026-07-14
114
+
115
+ **Content refresh: DS v0.53 → v0.54.** Single-minor DS delta; PATCH bump per the established convention.
116
+
117
+ ### Changed
118
+
119
+ - **Baked DS meta refreshed to v0.54.0.** Content-only. Schema unchanged at 1.2. Component count unchanged at 127. Picks up the DS v0.54.0 "uncontrolled-first state contract" release ([DS#508](https://github.com/lando-labs/lando-labs-design-system/issues/508)).
120
+
121
+ ### Launch note
122
+
123
+ v3.2.2 supersedes v3.2.1 as the launch target. Publish tag still held for the coordinated launch weekend; whichever bump lands on `main` most recently is what gets tagged.
124
+
125
+ ## [3.2.1] - 2026-07-13
126
+
127
+ **Content refresh: DS v0.50 → v0.53.** Small pre-launch content bundle; PATCH bump per the established convention (single-digit DS delta = PATCH). No MCP code changes.
128
+
129
+ ### Changed
130
+
131
+ - **Baked DS meta refreshed to v0.53.0.** Content-only. Schema unchanged at 1.2. Component count unchanged at 127. Picks up any DS content shipped between v0.50.0 and v0.53.0 (three minor DS releases).
132
+
133
+ ### Launch note
134
+
135
+ v3.2.0 merged to main on 2026-07-13 but has not been tagged/published yet — publish tag is held for the coordinated launch weekend. v3.2.1 supersedes v3.2.0 as the launch target: the tarball published to npm at launch will be v3.2.1 with the fresher DS content baked in.
136
+
137
+ ## [3.2.0] - 2026-07-10
138
+
139
+ **OSS launch: parallel with DS.** MCP adopts Apache 2.0 alongside the DS's simultaneous OSS launch. Public GitHub, public npm, standard OSS conventions. Also refreshes baked meta to DS v0.48.0.
140
+
141
+ ### Added
142
+
143
+ - **Apache 2.0 LICENSE + NOTICE files** at repo root. `package.json` `"license"` field switched from `"MIT"` (aspirational, no file existed) to `"Apache-2.0"` (matches the shipped LICENSE). See [#45](https://github.com/lando-labs/lando-ds-mcp/issues/45).
144
+ - **Publish workflow** (`.github/workflows/publish.yml`) — triggers on semver tag push. Verifies tag matches package.json, runs full CI, then `npm publish --provenance --access public` (SLSA build attestation on the npm package page) followed by `gh release create` for the GitHub Release. See [#3](https://github.com/lando-labs/lando-ds-mcp/issues/3), [#43](https://github.com/lando-labs/lando-ds-mcp/issues/43).
145
+ - **package.json metadata**: `publishConfig`, `repository`, `homepage`, `bugs` — all pointing at the public GitHub repo.
146
+ - **Version-sync CI tests** — five new assertions in `src/test.ts`: package.json version matches `src/index.ts` JSDoc comment, `Server({ version })` registration, startup banner, `CHANGELOG.md` top entry, and README component count. Any future drift fails CI. See [#11](https://github.com/lando-labs/lando-ds-mcp/issues/11).
147
+ - **Public OSS README** — full rewrite for external audience. Install snippets for Claude Code, Claude Desktop, Cursor, Windsurf, Zed, generic MCP client. 13-tool reference. Contributing section with dev setup. License + attribution links. See [#2](https://github.com/lando-labs/lando-ds-mcp/issues/2).
148
+
149
+ ### Changed
150
+
151
+ - **Baked DS meta refreshed to v0.50.0** (from v0.44.0). Content-only bundle rolled into this MINOR since it ships with the launch rather than as its own PATCH.
152
+ - **GitHub repo visibility** flipped Private → Public at launch time (not a code change; documented for provenance).
153
+ - **Fixed latent v3.1.1 drift** in `src/index.ts:11` and `:59` that the v3.1.2 patch left behind. The new version-sync tests would have caught this.
154
+
155
+ ### Not changed
156
+
157
+ - **13 tools + their contracts** — same names, same schemas, same outputs (modulo the DS content refresh)
158
+ - **Meta schema** — still consumes DS meta schema `^1.x`; DS is at 1.2
159
+ - **Component count** — 127
160
+ - **Tool catalog conventions** — unchanged from v3.1.x
161
+
162
+ ### Verified pre-launch
163
+
164
+ - typecheck ✓, build ✓, test **67/67** ✓, `npm pack --dry-run` (124 files, all under `build/` + README + LICENSE + NOTICE + CHANGELOG + package.json)
165
+
166
+ ### Companion release
167
+
168
+ The DS is launching under Apache 2.0 in parallel (originally MIT in DS v0.47.0; switched per [DS#500](https://github.com/lando-labs/lando-labs-design-system/issues/500) before public flip).
169
+
170
+ ## [3.1.2] - 2026-07-07
171
+
172
+ **Content refresh: DS v0.43 → v0.44.** Single-minor DS delta; PATCH bump.
173
+
174
+ ### Changed
175
+
176
+ - **Baked DS meta refreshed to v0.44.0.** Schema unchanged at 1.2. Component count unchanged at 127. Theme preset count: 6 → 7 (DS added a preset in v0.44).
177
+
178
+ ### Convention refinement
179
+
180
+ The v3.1.0 CHANGELOG stated "content-only refreshes bump the MCP minor." Refining that with two releases of experience:
181
+
182
+ - **MINOR** — generational content jumps (e.g. v3.1.0 covered 4 DS minors) or when consuming new meta schema versions with code changes.
183
+ - **PATCH** — small content refreshes (single DS minor delta) and workaround-replacement fixes.
184
+
185
+ This release is PATCH per that convention. Prevents version-collision with reserved sprint versions (v3.2.0 for Sprint 3 stays reserved).
186
+
187
+ ## [3.1.1] - 2026-07-07
188
+
189
+ **Consume DS meta schema 1.2** — authoritative `extends` chain and `themePresets` block. Baked meta refreshed to DS v0.43.0.
190
+
191
+ Replaces two v3.0.1 workarounds with authoritative data from the DS. No new tools; no schema changes to MCP tool contracts. Consumer-visible tool output changes.
192
+
193
+ ### Changed
194
+
195
+ - **`get_theme_presets` reads from meta.** The hardcoded KNOWN_PRESETS list is gone. The tool now surfaces every preset the DS ships (currently: brand-neutral, forest, lando, midnight, rose, slate) with the DS-declared default marked. When the DS adds a preset, `npm run copy:ds-meta && npm run build` picks it up — no MCP code edits.
196
+ - **HTML-attrs footer is authoritative.** Instead of the v3.0.1 heuristic ("this component *may* accept additional standard React/HTML attributes"), `get_component_props` and `get_component_reference` now render the exact TS extends chain from meta:
197
+
198
+ ```
199
+ > Also accepts everything in: HTMLAttributes<HTMLButtonElement>, RefAttributes<HTMLButtonElement>.
200
+ ```
201
+
202
+ Semantic change: the footer now fires for **any** component with a non-empty extends chain, not just sparse-own-props ones. Rich-props components like Button now surface their extends chain too. More informative; more verbose.
203
+
204
+ ### Added
205
+
206
+ - `LightComponentMeta.extends?: string[] | null` (from DS#438, schema 1.2)
207
+ - `Meta.themePresets?: ThemePresetsMeta` (from DS#437, schema 1.1)
208
+ - Backwards-compatible heuristic fallback in `renderHtmlAttrsFooter` when `extends` is absent — meta from older DS versions still gets the vaguer note
209
+
210
+ ### Upstream, resolved
211
+
212
+ - [DS#437](https://github.com/lando-labs/lando-labs-design-system/issues/437) — themePresets block. **Consumed here.**
213
+ - [DS#438](https://github.com/lando-labs/lando-labs-design-system/issues/438) — component extends chain. **Consumed here.**
214
+
215
+ ## [3.1.0] - 2026-07-06
216
+
217
+ **Content refresh: DS v0.38 → v0.42.** No code changes; MCP is version-bumped as a signal that consumer-visible tool output materially differs. Meta schema unchanged at 1.0. No new API surface.
218
+
219
+ ### Changed
220
+
221
+ - **Baked DS meta refreshed to v0.42.0** (from v0.38.0). Four intervening DS releases (v0.39.0 customizability-finish, v0.40.0 hardening, v0.40.1 rsc-boundary, v0.41.0 token-ssot, v0.42.0). Content changes only:
222
+ - Refreshed prop/type introspection across all 127 components
223
+ - Updated deprecation notices (any component deprecated in 0.39–0.42 now shows in `list_components` output)
224
+ - Updated icon registry
225
+ - Post-v0.41 token-ssot restructure: token values may render differently, but the meta shape is unchanged (colors/spacing/typography/radius/shadows/motion — same 6 categories)
226
+ - **Convention established:** content-only refreshes bump the MCP minor. Each MINOR going forward corresponds to a specific DS meta snapshot. Consumers pinning to `^3.0` still get security patches; `^3.1` explicitly opts into the newer DS content.
227
+
228
+ ### Not changed
229
+
230
+ - Tool catalog — still the 13 tools shipped in v3.0.0 with the v3.0.1 heuristic footer
231
+ - Meta schema version — still `1.0`
232
+ - Component count — still 127
233
+ - Top-level meta blocks — no `themePresets` (DS#437) or `extends` (DS#438) yet
234
+
235
+ ### Refresh workflow (for future content refreshes)
236
+
237
+ ```bash
238
+ npm run copy:ds-meta # pulls latest from ../lando-labs-design-system/dist
239
+ npm run check:ds-drift # confirms in-sync
240
+ npm run build && npm test
241
+ # Bump version, tag, release, repack, reinstall globally
242
+ ```
243
+
244
+ ## [3.0.1] - 2026-07-01
245
+
246
+ **Dogfood follow-ups.** Two small fixes surfaced during v3.0.0 dogfooding. No breaking changes.
247
+
248
+ ### Added
249
+
250
+ - **HTML-attrs pass-through footer** in `get_component_props` and `get_component_reference` (#49). Components with sparse own-props (fewer than 3) that are polymorphic or have a forwarded ref now get a footer note that they may accept standard React/HTML attributes (`className`, `id`, `aria-*`, event handlers) not enumerated in meta. Fixes the reported case of `get_component_props("ThemeBuilder")` showing `{}` and misleading consumers. Replaced by an authoritative `extends` field once [DS#438](https://github.com/lando-labs/lando-labs-design-system/issues/438) lands.
251
+ - **`check:ds-drift` npm script** (#50). Compares MCP's baked meta version to the local DS clone; prints ✓ when in sync or ⚠ + refresh instructions when the DS has moved on. Zero deps, informational only. Configurable via `DS_REPO=/absolute/path`.
252
+
253
+ ### Follow-ups filed (unblock future MCP cleanups)
254
+
255
+ - [DS#437](https://github.com/lando-labs/lando-labs-design-system/issues/437) — `themePresets` block in `meta.json` (schema 1.1). When it lands, MCP deletes its hardcoded preset list.
256
+ - [DS#438](https://github.com/lando-labs/lando-labs-design-system/issues/438) — component `extends` chain in `meta.components[X]` (schema 1.2). When it lands, MCP replaces the #49 heuristic footer with an authoritative extends line.
257
+
258
+ ## [3.0.0] - 2026-06-30
259
+
260
+ **Meta-adoption engine rewrite.** The MCP is now a thin protocol adapter over DS-emitted meta instead of a shadow snapshot of the DS. Auto-current with every DS release; component coverage jumps from 60 → 127.
261
+
262
+ ### Breaking changes
263
+
264
+ - **Tool retirements**
265
+ - `get_component_docs` — merged into `get_component_reference`. Migration: `get_component_reference(name)` with default include list returns description + examples + composes + props.
266
+ - `get_usage_example` — merged into `get_component_reference`. Migration: `get_component_reference(name, { include: ['examples'] })`.
267
+ - `get_component_location` — retired entirely. Subpath is available via `list_components`, `get_component_props`, and `get_component_reference` output. Filesystem paths were tied to a monorepo layout that no longer holds.
268
+ - **Component names are PascalCase.** Consumers who passed lowercase names (`'button'`, `'card'`) must pass PascalCase (`'Button'`, `'Card'`). Names match DS meta directly; no more manual enum.
269
+ - **`get_design_tokens` output shape** changes when `format` parameter is used. Default (`format: 'css'`) preserves the CSS-variable-reference behavior from v2.x.
270
+ - **`list_icons` / `search_icons` `source`** values renamed: `'custom' | 'lucide'` → `'ds-brand' | 'lucide-curated'`. `'all'` unchanged.
271
+ - **Ocean is no longer baked** as "primary brand." Ocean is now an opt-in theme preset (`lando`); the DS ships brand-neutral defaults. Purpose mappings, icon flags, and design-token framing no longer assume ocean.
272
+
273
+ ### Added
274
+
275
+ - **13 tools** (was 12).
276
+ - **New**: `get_component_reference`, `get_composition_hints`, `get_theme_presets`, `get_ds_metadata`.
277
+ - **Expanded filters**: `list_components` (category, platform, deprecated, serverSafe, polymorphic, kind); `get_component_capabilities` (rscSafe, clientOnly, polymorphic, withRef, deprecated); `list_icons` / `search_icons` (`source` filter).
278
+ - **New parameters**: `get_design_tokens` gets `format: 'css' | 'hex' | 'both'`.
279
+ - **DS coverage** — 127 components (was 60). Includes Field, DatePicker, DateRangePicker, Calendar, AlertDialog, AvatarGroup, BottomNav, Callout, Chip, Code, Collapsible, ColorSwatch, Combobox, CommandPalette, DataTable, Drawer, Banner, ArticleCard, AspectRatio, Center, and ~50 more.
280
+ - **Startup meta-version guard** — MCP supports DS meta schema `^1.0`; rejects incompatible meta with a clear error.
281
+
282
+ ### Changed
283
+
284
+ - **Meta-loader as source of truth** (`src/utils/meta-loader.ts`). Loads DS meta at startup; verbose meta is lazy-loaded on first access.
285
+ - **Build pipeline** — `scripts/copy-ds-meta.ts` copies `dist/meta.json`, `dist/meta.verbose.json`, and `src/meta/schema.json` from the local DS clone into `src/data/`. `npm run build:full` runs the copy first; `npm run copy:ds-meta` re-runs it standalone.
286
+ - **Icon strategy** — DS-brand icons come from `meta.icons.registry` (~70 authoritative names); MCP continues to curate a broader 120-Lucide subset alongside; the full ~1,500-icon Lucide library is reachable via `search_icons` spillover.
287
+
288
+ ### Removed
289
+
290
+ - **~1,500 LOC of hand-maintained shadows** — `src/components/*.ts` (60 metadata files), `src/data/cached-props.json` (89KB), `src/data/web-tokens-snapshot.json` (40KB), `src/data/component-capabilities.ts`, `src/utils/extract-types.ts`, `scripts/prebuild-props.ts`, `scripts/generate-web-tokens-snapshot.ts`.
291
+ - **`ts-morph` devDependency** — the runtime fallback was deleted in v2.7.1 #14; the build-time extractor is now unnecessary since DS meta is the source of truth.
292
+
293
+ ### Fixed / Auto-resolved
294
+
295
+ - **#10** — Single-source component enum. `componentName` is derived from `Object.keys(meta.components)` at startup, not maintained across 3+ tool files.
296
+ - **#32** — `compose_components` import-merging fragility. Already fixed in v2.7.1 #19 (rebuild from validated enum, not regex); reaffirmed here.
297
+ - **#39** — `get_design_tokens` queryable JSON taxonomy. Partially addressed via the new `format` parameter.
298
+ - **#40** — `get_component_props` returns JSON Schema. Setup cleanly since props come from meta directly (raw meta shape is queryable via `format` in a future rev).
299
+
300
+ ### Migration guide (v2.7.1 → v3.0.0)
301
+
302
+ ```diff
303
+ - get_component_docs({ componentName: 'button' })
304
+ + get_component_reference({ componentName: 'Button' })
305
+ + // default include returns description + examples + composes + props
306
+
307
+ - get_usage_example({ componentName: 'button', scenario: 'loading' })
308
+ + get_component_reference({ componentName: 'Button', include: ['examples'] })
309
+
310
+ - get_component_location({ componentName: 'button' })
311
+ + get_component_props({ componentName: 'Button' })
312
+ + // subpath is included in the header
313
+
314
+ - list_icons({ source: 'custom' })
315
+ + list_icons({ source: 'ds-brand' })
316
+
317
+ - get_design_tokens()
318
+ + get_design_tokens() // unchanged; default 'css' format preserves behavior
319
+ + get_design_tokens({ format: 'hex' }) // new: hex values from meta
320
+ + get_design_tokens({ format: 'both' }) // new: var refs + hex
321
+ ```
322
+
323
+ ## [2.6.0] - 2026-04-19
324
+
325
+ Major content refresh + DS v0.7.0 sync. 60 components now documented (up from 52). Pre-existing bug #45 fixed.
326
+
327
+ ### Fixed
328
+
329
+ - **#45 `get_component_props` null/undefined on compound components** — `get-component-props.ts` previously assumed every `subComponents` entry was a `{name, props}` object, but Tabs/Accordion/Breadcrumb/Dropdown declare them as string arrays with separate `subComponentProps` lookups. Rewrote the renderer with a shared `renderPropsBody()` that guards null/undefined and handles both patterns. Defensive fix covers all current and future compound components. Regression test added for Tabs/Accordion/Breadcrumb/Dropdown.
330
+ - **`prebuild-props.ts` stale paths** — 9 components (all layout/typography primitives and chart variants) pointed at non-existent source paths (`Layout/Stack`, `Typography/Text`, `Charts/AreaChart`, etc.). The prebuild silently swallowed these errors and emitted empty `{}` prop objects into the cache. Corrected to match current source layout.
331
+ - **ESM runtime fallback** — `extract-types.ts` used a bare `require('ts-morph')` in an ESM context. Never hit in practice because every component was cached, but Lane 2's 8 new uncached components would have crashed on first cold load. Shimmed via `createRequire(import.meta.url)`.
332
+
333
+ ### Added
334
+
335
+ #### 8 new component metadata files (DS v0.7.0 sync)
336
+
337
+ - **AppShell** — app shell grid container with header/sidebar/footer, sticky header, collapsible sidebar, Cmd/Ctrl+B shortcut, contentPadding/contentMaxWidth props (v0.7.0+)
338
+ - **PageHeader** — page-level header primitive with title/subtitle/breadcrumbs/actions; eliminates 6+ lines of hand-rolled flex per consumer (Sprint 9, v0.6.0)
339
+ - **CardTitle** — explicit card title sub-component; wraps Heading at base size / semibold weight; used directly or implicitly via `Card title="..."` prop (Sprint 9, v0.6.0)
340
+ - **SidebarNavItem** — sidebar nav item with icon/label/badge/active slots + `asChild` for next/link integration; 44px touch target, aria-current="page" on active (Sprint 9, v0.6.0)
341
+ - **Kbd** — platform-aware keyboard shortcut pills; Mac renders ⌘K, non-Mac renders Ctrl+K; SSR-safe (Sprint 9, v0.6.0)
342
+ - **StickyBar** — sticky top/bottom container with shadow-on-scroll via IntersectionObserver sentinel; blur/surface variants (Sprint 7, v0.5.0)
343
+ - **Slot** — Radix-style polymorphic primitive used internally by Button/SidebarNavItem `asChild` pattern (advanced consumer use)
344
+ - **Portal** — thin wrapper around `ReactDOM.createPortal`; used internally by Modal/Dropdown/Popover/Tooltip (advanced consumer use)
345
+
346
+ All 5 tool schemas (`get_component`, `get_component_props`, `get_component_docs`, `compose_components`, `get_usage_example`, `get_component_location`) extended with the 8 new names.
347
+
348
+ ### Content refresh (22 files updated across Sprints 3-10)
349
+
350
+ Existing component metadata refreshed to reflect DS evolution:
351
+
352
+ - **Icon children API migration** — 16 files updated from pre-v0.3.0 `<Icon name="..." />` syntax to lucide-react children (`<Icon><Check /></Icon>`)
353
+ - **Sprint 10 brand defaults** — Card shadow-xs default + `variant="flat"` opt-out, Header gradient default + opt-out, Avatar auto-gradient when initials set, Footer gradient ribbon + `accent={false}` opt-out, Modal top-accent line + opt-out. Badge dark-mode success/danger/info contrast fix.
354
+ - **Sprint 4-6 API additions** — Radio children support (v0.4.0), Select `name` prop for FormData (v0.4.2), Table `onRowClick` (v0.4.0), Chart SSR hydration fallback
355
+ - **Light pass** — Popover, Textarea, Pagination, plus CardTitle cross-reference added to Card metadata
356
+
357
+ ### Known Limitations
358
+
359
+ - **Text/Container/List use `type` not `interface`** — `prebuild-props.ts` uses `getInterface()` which returns undefined for type aliases. Cached props are empty for these three components. MCP tools fall through gracefully, but consumers see empty prop tables. Worth widening the extractor to handle `TypeAliasDeclaration` in a future pass.
360
+ - **Tabs `subComponentProps` still empty** — Accordion/Breadcrumb/Dropdown populate their sub-interface props; Tabs does not. `get_component_props('Tabs')` returns valid empty stubs for TabList/Tab/TabPanel. Content-only gap; no functional impact.
361
+ - **`get_component_location` location map** — hardcoded for the original 52 components; new 8 fall back to generic behavior.
362
+
363
+ ## [2.2.0] - 2025-10-23
364
+
365
+ ### Added
366
+
367
+ #### New Framework Components (5 components added)
368
+ - **`SegmentedControl`** - Mutually-exclusive button group for mode switching
369
+ - Smooth sliding indicator animation
370
+ - Full keyboard navigation (Arrow keys, Home/End)
371
+ - Size variants (sm, md, lg)
372
+ - Optional icon support
373
+ - ARIA tablist/tab roles
374
+ - Common use case: View mode toggles, filter controls, assistant mode switching
375
+
376
+ - **`Icon`** - Centralized icon system with 34+ common icons
377
+ - Name-based rendering prevents SVG duplication
378
+ - Icon categories: Actions, Navigation, Status, Communication, Content, UI
379
+ - Size presets (sm/md/lg/xl) and custom sizing
380
+ - Inherits currentColor by default
381
+ - Complete accessibility with aria-label support
382
+ - Icons: check, close, plus, minus, edit, trash, download, upload, copy, search, chevron-*, arrow-*, menu, info, warning, error, success, settings, message, send, user, users, file, folder, image, link, heart, star, calendar, clock
383
+
384
+ - **`ApprovalCard`** - Rich card for approval workflows
385
+ - Extracted from ChatDemo TaskCard implementation
386
+ - Status indicators (pending/approved/rejected)
387
+ - Priority badges (low/medium/high)
388
+ - Metadata grid with icon support
389
+ - Approval/rejection action buttons
390
+ - Perfect for AI-generated tasks, pull requests, purchase approvals
391
+
392
+ - **`Container`** - Responsive container with max-width constraints
393
+ - Max widths: sm/md/lg/xl/full (640/768/1024/1280px or 100%)
394
+ - Responsive padding presets
395
+ - Auto-centering
396
+ - Polymorphic (renders as any HTML element via `as` prop)
397
+ - Semantic HTML support (div, section, article, main, aside, header, footer)
398
+
399
+ - **`Grid`** - Declarative CSS Grid wrapper
400
+ - Auto-responsive with auto-fit/auto-fill
401
+ - Configurable columns (fixed or responsive)
402
+ - Gap controls (sm/md/lg/xl or custom)
403
+ - Separate row/column gap support
404
+ - Alignment controls (alignItems, justifyItems)
405
+ - Eliminates repetitive CSS Grid code
406
+
407
+ ### Improved
408
+ - Updated component count from 36 to **41 components**
409
+ - All tool enums updated to include new components
410
+ - Enhanced framework completeness for rapid app development
411
+ - Improved component discovery with new utility components
412
+
413
+ ### Documentation
414
+ - All new components include comprehensive metadata
415
+ - Complete prop documentation with TypeScript interfaces
416
+ - Multiple usage examples for each component
417
+ - Use cases and accessibility features documented
418
+ - Component location information available via get_component_location tool
419
+
420
+ ### Developer Experience Impact
421
+ These additions directly address findings from the Framework Audit (FRAMEWORK-AUDIT.md):
422
+ - ✅ **SegmentedControl** - Replaced custom button groups in showcase apps
423
+ - ✅ **Icon System** - Eliminated duplicated inline SVG across files
424
+ - ✅ **ApprovalCard** - Extracted from ChatDemo as reusable framework component
425
+ - ✅ **Container & Grid** - Added missing layout utilities for consistent spacing
426
+
427
+ **Framework Completeness**: From 36 → 41 components, the design system now provides all essential building blocks for rapid application development without showcase-level code leaking into apps.
428
+
429
+ ## [2.1.0] - 2025-10-23
430
+
431
+ ### Added
432
+
433
+ #### New Tools
434
+ - **`get_component_location`** - Returns file location and import paths for components
435
+ - Essential for developers building NEW components that use existing design system components
436
+ - Provides verified import paths to eliminate guesswork
437
+ - Shows both package imports (`@lando-labs/design-system`) and relative imports (`../ComponentName`)
438
+ - Lists sub-components for composite components (Card, Tabs, Modal, etc.)
439
+ - Includes usage examples for both import methods
440
+ - **Addresses Chat MCP Gap #2**: Component import path verification
441
+
442
+ - **`get_animation_examples`** - Provides ocean-themed animation code snippets
443
+ - 12 animation types: wave-dots, ripple, fade-in/out, slide-up/down/left/right, pulse, shimmer, bounce, spin
444
+ - Complete CSS keyframes for each animation
445
+ - Design token integration (`var(--duration-*)`, `var(--easing-wave)`)
446
+ - Timing recommendations and easing functions
447
+ - Use case documentation
448
+ - Accessibility guidance (prefers-reduced-motion)
449
+ - **Addresses Chat MCP Gap #4**: Animation code examples
450
+
451
+ #### New Component
452
+ - **Chat Component** (36th component added to MCP)
453
+ - Main `Chat` container component
454
+ - Sub-components: `ChatMessage`, `ChatInput`, `ChatThinkingIndicator`
455
+ - Complete metadata with props, examples, and documentation
456
+ - Full TypeScript type definitions
457
+ - Message type interface exported
458
+ - Accessibility features documented
459
+
460
+ ### Improved
461
+ - Updated component count from 35 to **36 components**
462
+ - Updated tool count from 7 to **9 tools**
463
+ - Enhanced MCP developer experience rating from 8/10 to **9/10**
464
+
465
+ ### Documentation
466
+ - Chat component fully documented in MCP metadata
467
+ - Component location tool provides import path guidance
468
+ - Animation examples include best practices and performance tips
469
+ - All new tools include comprehensive TypeScript interfaces
470
+
471
+ ### Developer Experience Impact
472
+ These additions directly address feedback from the Chat Component MCP Experience Report:
473
+ - ⭐⭐⭐ **High Priority Gap #1** (Component Location): RESOLVED
474
+ - ⭐⭐ **High Priority Gap #2** (Animation Examples): RESOLVED
475
+
476
+ ---
477
+
478
+ ## [2.0.0] - 2025-10-23
479
+
480
+ ### Added
481
+ - **`list_components`** - List all 35 available components with descriptions and categories
482
+ - **`get_design_tokens`** - Access to complete design token system
483
+ - Colors (ocean blues, teals, contextual)
484
+ - Spacing scale
485
+ - Typography system
486
+ - Border radius values
487
+ - Shadows
488
+ - Animation timings and easing functions
489
+ - Breakpoints
490
+
491
+ ### Improved
492
+ - MCP developer experience rating improved from initial baseline to **8/10**
493
+ - Component discovery made effortless
494
+ - Design system integration streamlined
495
+
496
+ ---
497
+
498
+ ## [1.0.0] - Initial Release
499
+
500
+ ### Features
501
+ - 35 production-ready components
502
+ - 7 comprehensive tools:
503
+ - `get_component` - Generate component code
504
+ - `get_component_props` - View component props
505
+ - `get_component_docs` - Complete API reference
506
+ - `compose_components` - Compose multiple components
507
+ - `get_usage_example` - Real-world examples
508
+ - `list_components` - Component discovery
509
+ - `get_design_tokens` - Design token access
510
+
511
+ ### Components
512
+ - Core Inputs (7): Button, Input, Textarea, Select, Checkbox, Radio, Switch
513
+ - Feedback (6): Alert, Toast, Modal, Spinner, Skeleton, Progress
514
+ - Data Display (7): Badge, Avatar, Card, Table, List, StatCard, TaskCard
515
+ - Navigation (4): Breadcrumb, Pagination, Tabs, Dropdown
516
+ - Layout (4): Header, Sidebar, Footer, Divider
517
+ - Overlays (2): Popover, Tooltip
518
+ - Interactive (2): Accordion, EmptyState
519
+ - Documentation (3): CodeBlock, Markdown, ThemeBuilder
520
+
521
+ ### Architecture
522
+ - TypeScript implementation with strict typing
523
+ - Zod schemas for validation
524
+ - Model Context Protocol (MCP) SDK integration
525
+ - Stdio transport for Claude Desktop
526
+ - Resource and prompt support