@makitt.io/mds-mcp-server 0.1.3 → 0.2.1

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 (55) hide show
  1. package/README.md +151 -34
  2. package/dist/catalog.d.ts +16 -0
  3. package/dist/catalog.d.ts.map +1 -0
  4. package/dist/catalog.js +383 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/data/catalog.json +41955 -4439
  7. package/dist/data/playbook/ai-fill.md +61 -48
  8. package/dist/data/playbook/anti-patterns.md +112 -110
  9. package/dist/data/playbook/array-input.md +94 -49
  10. package/dist/data/playbook/async-states.md +71 -61
  11. package/dist/data/playbook/data-grid.md +118 -101
  12. package/dist/data/playbook/feedback.md +103 -84
  13. package/dist/data/playbook/form.md +164 -134
  14. package/dist/data/playbook/overlay.md +97 -88
  15. package/dist/data/playbook/page-layout.md +95 -76
  16. package/dist/data/playbook/responsive-tokens.md +77 -58
  17. package/dist/data/recipes/admin-list-page.md +86 -0
  18. package/dist/data/recipes/async-state-section.md +60 -0
  19. package/dist/data/recipes/dashboard-overview.md +65 -0
  20. package/dist/data/recipes/detail-drawer.md +69 -0
  21. package/dist/data/recipes/modal-form.md +67 -0
  22. package/dist/data/recipes/settings-form-page.md +79 -0
  23. package/dist/index.d.ts +4 -23
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +31 -338
  26. package/dist/index.js.map +1 -1
  27. package/dist/loaders.d.ts +8 -0
  28. package/dist/loaders.d.ts.map +1 -0
  29. package/dist/loaders.js +120 -0
  30. package/dist/loaders.js.map +1 -0
  31. package/dist/recipes.d.ts +13 -0
  32. package/dist/recipes.d.ts.map +1 -0
  33. package/dist/recipes.js +82 -0
  34. package/dist/recipes.js.map +1 -0
  35. package/dist/responses.d.ts +8 -0
  36. package/dist/responses.d.ts.map +1 -0
  37. package/dist/responses.js +25 -0
  38. package/dist/responses.js.map +1 -0
  39. package/dist/text.d.ts +4 -0
  40. package/dist/text.d.ts.map +1 -0
  41. package/dist/text.js +20 -0
  42. package/dist/text.js.map +1 -0
  43. package/dist/tool-definitions.d.ts +3 -0
  44. package/dist/tool-definitions.d.ts.map +1 -0
  45. package/dist/tool-definitions.js +199 -0
  46. package/dist/tool-definitions.js.map +1 -0
  47. package/dist/tools.d.ts +4 -0
  48. package/dist/tools.d.ts.map +1 -0
  49. package/dist/tools.js +233 -0
  50. package/dist/tools.js.map +1 -0
  51. package/dist/types.d.ts +107 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +10 -0
  54. package/dist/types.js.map +1 -0
  55. package/package.json +21 -16
@@ -0,0 +1,383 @@
1
+ import { loadPlaybooks, loadRecipes } from './loaders.js';
2
+ import { normalizeText, uniqueStrings } from './text.js';
3
+ export function isDefaultListable(component) {
4
+ const kind = component.kind ?? 'component';
5
+ const status = component.status ?? 'implemented';
6
+ return (component.public !== false &&
7
+ status !== 'internal' &&
8
+ (kind === 'component' || kind === 'compoundPart'));
9
+ }
10
+ function buildComponentLookup(catalog) {
11
+ const lookup = new Map();
12
+ for (const component of Object.values(catalog.components)) {
13
+ const names = [component.name, component.displayName, ...(component.aliases ?? [])].filter((item) => Boolean(item));
14
+ for (const candidate of names) {
15
+ lookup.set(candidate.toLowerCase(), component);
16
+ lookup.set(normalizeText(candidate), component);
17
+ }
18
+ }
19
+ return lookup;
20
+ }
21
+ export function findComponent(catalog, name) {
22
+ const lookup = buildComponentLookup(catalog);
23
+ return (catalog.components[name] ?? lookup.get(name.toLowerCase()) ?? lookup.get(normalizeText(name)));
24
+ }
25
+ export function findExactComponent(catalog, name) {
26
+ const normalizedName = normalizeText(name);
27
+ return (catalog.components[name] ??
28
+ Object.values(catalog.components).find((component) => component.name.toLowerCase() === name.toLowerCase() ||
29
+ normalizeText(component.name) === normalizedName));
30
+ }
31
+ function componentSearchHaystack(component) {
32
+ const parts = [
33
+ component.name,
34
+ component.displayName,
35
+ ...(component.aliases ?? []),
36
+ component.layer,
37
+ component.category,
38
+ component.description,
39
+ component.import?.statement,
40
+ ...component.props.flatMap((prop) => [
41
+ prop.name,
42
+ prop.description,
43
+ prop.type,
44
+ prop.rawType,
45
+ prop.typeRef,
46
+ ...(prop.values ?? []).map(String),
47
+ ]),
48
+ ...(component.stories ?? []),
49
+ ...(component.storybook ?? []).flatMap((story) => [story.name, story.title, story.id]),
50
+ ...Object.keys(component.types ?? {}),
51
+ ];
52
+ return normalizeText(parts.filter((item) => Boolean(item)).join(' '));
53
+ }
54
+ export function componentMatchesQuery(component, queryTokens) {
55
+ if (queryTokens.length === 0)
56
+ return true;
57
+ const haystack = componentSearchHaystack(component);
58
+ return queryTokens.every((token) => haystack.includes(token));
59
+ }
60
+ export function scoreComponent(component, query) {
61
+ const normalizedQuery = normalizeText(query);
62
+ const normalizedName = normalizeText(component.name);
63
+ if (normalizedName === normalizedQuery)
64
+ return 1000;
65
+ if (normalizedName.includes(normalizedQuery))
66
+ return 800;
67
+ if (normalizedQuery.startsWith(normalizedName))
68
+ return 700;
69
+ if ((component.aliases ?? []).some((alias) => normalizeText(alias) === normalizedQuery)) {
70
+ return 750;
71
+ }
72
+ if ((component.aliases ?? []).some((alias) => normalizeText(alias).includes(normalizedQuery))) {
73
+ return 650;
74
+ }
75
+ if (component.props.some((prop) => normalizeText(prop.name) === normalizedQuery))
76
+ return 550;
77
+ return 100;
78
+ }
79
+ export function summarizeComponent(component, includeDescription) {
80
+ return {
81
+ name: component.name,
82
+ kind: component.kind ?? 'component',
83
+ status: component.status ?? 'implemented',
84
+ layer: component.layer,
85
+ category: component.category,
86
+ import: component.import?.statement,
87
+ hasStories: component.hasStories,
88
+ storyCount: component.storybook?.length ?? component.stories?.length ?? 0,
89
+ ...(includeDescription ? { description: component.description } : {}),
90
+ };
91
+ }
92
+ export function componentNamespace(componentName) {
93
+ return componentName.split('.')[0] ?? componentName;
94
+ }
95
+ export function compoundNamespaces(catalog) {
96
+ return uniqueStrings(Object.values(catalog.components)
97
+ .filter((component) => component.name.includes('.'))
98
+ .map((component) => componentNamespace(component.name)));
99
+ }
100
+ export function collectCompoundParts(catalog, namespace) {
101
+ const prefix = `${namespace}.`;
102
+ return Object.values(catalog.components)
103
+ .filter((component) => component.name.startsWith(prefix))
104
+ .filter(isDefaultListable)
105
+ .sort((a, b) => {
106
+ const order = [
107
+ 'Root',
108
+ 'Trigger',
109
+ 'Content',
110
+ 'Header',
111
+ 'Title',
112
+ 'Description',
113
+ 'Body',
114
+ 'Footer',
115
+ 'Close',
116
+ 'RawClose',
117
+ ];
118
+ const aPart = a.name.slice(prefix.length);
119
+ const bPart = b.name.slice(prefix.length);
120
+ const aIndex = order.indexOf(aPart);
121
+ const bIndex = order.indexOf(bPart);
122
+ if (aIndex !== -1 || bIndex !== -1) {
123
+ return ((aIndex === -1 ? Number.MAX_SAFE_INTEGER : aIndex) -
124
+ (bIndex === -1 ? Number.MAX_SAFE_INTEGER : bIndex));
125
+ }
126
+ return a.name.localeCompare(b.name);
127
+ });
128
+ }
129
+ export function findCompoundNamespace(catalog, name) {
130
+ const normalizedName = normalizeText(name);
131
+ return compoundNamespaces(catalog).find((namespace) => namespace.toLowerCase() === name.toLowerCase() || normalizeText(namespace) === normalizedName);
132
+ }
133
+ function inferRelatedPlaybooks(name, layer) {
134
+ const normalizedName = normalizeText(name);
135
+ const playbooks = new Set();
136
+ if (layer === 'data' ||
137
+ normalizedName.includes('data grid') ||
138
+ normalizedName.includes('table')) {
139
+ playbooks.add('data-grid');
140
+ playbooks.add('async-states');
141
+ }
142
+ if (layer === 'overlays' ||
143
+ /(modal|drawer|sheet|dialog|popover|tooltip|hover card)/.test(normalizedName)) {
144
+ playbooks.add('overlay');
145
+ }
146
+ if (/(field|text field|textarea|select|checkbox|switch|radio|date picker|time picker|file upload|number input)/.test(normalizedName)) {
147
+ playbooks.add('form');
148
+ }
149
+ if (/(toast|notification|banner|empty state|error state|loading state|skeleton)/.test(normalizedName)) {
150
+ playbooks.add('feedback');
151
+ playbooks.add('async-states');
152
+ }
153
+ if (/(page|page header|section|anchor nav|app shell|sidebar|topbar)/.test(normalizedName)) {
154
+ playbooks.add('page-layout');
155
+ }
156
+ if (/(responsive|grid|stack|container)/.test(normalizedName)) {
157
+ playbooks.add('responsive-tokens');
158
+ }
159
+ return Array.from(playbooks).sort();
160
+ }
161
+ function inferRelatedRecipes(name) {
162
+ const normalizedName = normalizeText(name);
163
+ const recipes = new Set();
164
+ if (/(data grid|table|pagination|menu|pill)/.test(normalizedName))
165
+ recipes.add('admin-list-page');
166
+ if (/(modal|field|text field|select|banner)/.test(normalizedName))
167
+ recipes.add('modal-form');
168
+ if (/(drawer|description list|timeline)/.test(normalizedName))
169
+ recipes.add('detail-drawer');
170
+ if (/(page|page header|section|toolbar|textarea|switch|checkbox)/.test(normalizedName)) {
171
+ recipes.add('settings-form-page');
172
+ }
173
+ if (/(stat card|delta|chart|data list)/.test(normalizedName))
174
+ recipes.add('dashboard-overview');
175
+ if (/(loading state|skeleton|empty state|error state|banner)/.test(normalizedName)) {
176
+ recipes.add('async-state-section');
177
+ }
178
+ return Array.from(recipes).sort();
179
+ }
180
+ function availablePlaybooks(ids) {
181
+ try {
182
+ const available = new Set(Object.keys(loadPlaybooks()));
183
+ return ids.filter((id) => available.has(id));
184
+ }
185
+ catch {
186
+ return [];
187
+ }
188
+ }
189
+ function availableRecipes(ids) {
190
+ try {
191
+ const available = new Set(Object.keys(loadRecipes()));
192
+ return ids.filter((id) => available.has(id));
193
+ }
194
+ catch {
195
+ return [];
196
+ }
197
+ }
198
+ function buildFollowUpTools(name, relatedPlaybooks, relatedRecipes) {
199
+ return [
200
+ ...relatedRecipes.slice(0, 2).map((id) => ({
201
+ tool: 'mds_recipes_get',
202
+ args: { id },
203
+ reason: `Confirm the MDS-only composition pattern related to ${name}.`,
204
+ })),
205
+ ...relatedPlaybooks.slice(0, 3).map((area) => ({
206
+ tool: 'mds_playbook_get',
207
+ args: { area },
208
+ reason: `Confirm the decision rules and anti-patterns for ${name}.`,
209
+ })),
210
+ {
211
+ tool: 'mds_component_examples_get',
212
+ args: { name },
213
+ reason: 'Open Storybook stories/source as the visual and usage oracle before codegen.',
214
+ },
215
+ ];
216
+ }
217
+ function buildComponentAgentGuide(component) {
218
+ const relatedPlaybooks = availablePlaybooks(inferRelatedPlaybooks(component.name, component.layer));
219
+ const relatedRecipes = availableRecipes(inferRelatedRecipes(component.name));
220
+ return {
221
+ intent: `Use ${component.name} from MDS; do not recreate its UI locally.`,
222
+ importStatement: component.import?.statement,
223
+ requiredProps: component.props
224
+ .filter((prop) => prop.required)
225
+ .map((prop) => ({
226
+ name: prop.name,
227
+ type: prop.rawType ?? prop.type,
228
+ description: prop.description,
229
+ })),
230
+ relatedPlaybooks,
231
+ relatedRecipes,
232
+ followUpTools: buildFollowUpTools(component.name, relatedPlaybooks, relatedRecipes),
233
+ checklist: [
234
+ 'Use the returned import statement; prefer the public @makitt/mds entrypoint unless a subpath is explicitly better.',
235
+ 'Use only documented props and literal values from props[].values.',
236
+ 'Check Storybook iframe/source before final UI code when the component affects layout or interaction.',
237
+ 'Keep app routing, data fetching, permissions, persistence, and platform rules outside this MDS contract.',
238
+ 'Verify generated UI in desktop and mobile viewports.',
239
+ ],
240
+ pitfalls: [
241
+ 'Do not invent local cards, fields, tables, dialogs, sidebars, or visual CSS when an MDS component exists.',
242
+ 'Do not use playbook TBD/planned notes as implemented API unless mds_components_get confirms the prop/component.',
243
+ 'Do not hardcode visual values; add or use MDS tokens/components.',
244
+ ],
245
+ };
246
+ }
247
+ function requiredCompoundParts(namespace, parts) {
248
+ return [`${namespace}.Root`, `${namespace}.Content`].filter((partName) => parts.some((part) => part.name === partName));
249
+ }
250
+ function commonCompoundComposition(namespace, parts) {
251
+ const commonPartNames = [
252
+ 'Root',
253
+ 'Trigger',
254
+ 'Content',
255
+ 'Header',
256
+ 'Title',
257
+ 'Description',
258
+ 'Body',
259
+ 'Footer',
260
+ 'Close',
261
+ ].map((part) => `${namespace}.${part}`);
262
+ return parts.map((part) => part.name).filter((partName) => commonPartNames.includes(partName));
263
+ }
264
+ function buildCompoundAgentGuide({ namespace, representative, requiredParts, relatedPlaybooks, relatedRecipes, }) {
265
+ return {
266
+ intent: `Use the ${namespace} compound parts together; do not use a one-off local overlay/composition.`,
267
+ importStatement: representative.import?.statement,
268
+ requiredProps: [],
269
+ relatedPlaybooks,
270
+ relatedRecipes,
271
+ followUpTools: [
272
+ ...buildFollowUpTools(namespace, relatedPlaybooks, relatedRecipes),
273
+ ...requiredParts.map((partName) => ({
274
+ tool: 'mds_components_get',
275
+ args: { name: partName },
276
+ reason: `Confirm exact props for ${partName}.`,
277
+ })),
278
+ ],
279
+ checklist: [
280
+ `Import the compound namespace with: ${representative.import?.statement ?? `import { ${namespace} } from '@makitt/mds';`}`,
281
+ 'Query each part you render when it accepts props.',
282
+ 'Use the related playbook before choosing modal/drawer/sheet/page placement.',
283
+ 'Keep platform behavior outside this MDS-only composition contract.',
284
+ ],
285
+ pitfalls: [
286
+ `Do not query only "${namespace}" and then fabricate part props; call mds_components_get for concrete parts.`,
287
+ 'Do not nest overlays by default; check overlay/form playbooks first.',
288
+ ],
289
+ };
290
+ }
291
+ export function buildCompoundOverview(catalog, namespace) {
292
+ const parts = collectCompoundParts(catalog, namespace);
293
+ const representative = parts.find((part) => part.name === `${namespace}.Root`) ??
294
+ parts.find((part) => part.name === `${namespace}.Content`) ??
295
+ parts[0];
296
+ if (!representative)
297
+ throw new Error(`Compound namespace "${namespace}" has no public parts.`);
298
+ const relatedPlaybooks = availablePlaybooks(inferRelatedPlaybooks(namespace, representative.layer));
299
+ const relatedRecipes = availableRecipes(inferRelatedRecipes(namespace));
300
+ const requiredParts = requiredCompoundParts(namespace, parts);
301
+ return {
302
+ name: namespace,
303
+ kind: 'compound',
304
+ status: 'implemented',
305
+ layer: representative.layer,
306
+ import: representative.import,
307
+ description: `${namespace} is an MDS compound namespace. Query individual parts for exact props before writing code.`,
308
+ parts: parts.map((part) => summarizeComponent(part, true)),
309
+ requiredParts,
310
+ commonComposition: commonCompoundComposition(namespace, parts),
311
+ agentGuide: buildCompoundAgentGuide({
312
+ namespace,
313
+ representative,
314
+ requiredParts,
315
+ relatedPlaybooks,
316
+ relatedRecipes,
317
+ }),
318
+ };
319
+ }
320
+ export function buildComponentContract(catalog, component) {
321
+ return {
322
+ ...component,
323
+ agentGuide: buildComponentAgentGuide(component),
324
+ catalogMeta: {
325
+ package: catalog.package,
326
+ version: catalog.version,
327
+ generated: catalog.generated,
328
+ },
329
+ };
330
+ }
331
+ export function componentSuggestions(catalog, name) {
332
+ const queryTokens = normalizeText(name).split(' ').filter(Boolean);
333
+ const componentSuggestions = Object.values(catalog.components)
334
+ .filter((component) => componentMatchesQuery(component, queryTokens))
335
+ .sort((a, b) => scoreComponent(b, name) - scoreComponent(a, name))
336
+ .slice(0, 5)
337
+ .map((component) => component.name);
338
+ const namespaceSuggestions = compoundNamespaces(catalog).filter((namespace) => normalizeText(namespace).includes(normalizeText(name)));
339
+ return uniqueStrings([...namespaceSuggestions, ...componentSuggestions]).slice(0, 5);
340
+ }
341
+ function propMatchesQuery(component, prop, queryTokens) {
342
+ const aliases = [
343
+ prop.type,
344
+ prop.rawType,
345
+ prop.typeRef,
346
+ ...(prop.values ?? []).map(String),
347
+ ].filter((item) => Boolean(item));
348
+ return componentMatchesQuery({
349
+ ...component,
350
+ name: prop.name,
351
+ displayName: prop.name,
352
+ aliases,
353
+ description: prop.description,
354
+ props: [],
355
+ stories: [],
356
+ hasTests: false,
357
+ hasStories: false,
358
+ }, queryTokens);
359
+ }
360
+ export function summarizeSearchMatch(component, queryTokens) {
361
+ return {
362
+ name: component.name,
363
+ kind: component.kind ?? 'component',
364
+ status: component.status ?? 'implemented',
365
+ layer: component.layer,
366
+ import: component.import?.statement,
367
+ description: component.description?.slice(0, 200),
368
+ matchedProps: component.props
369
+ .filter((prop) => propMatchesQuery(component, prop, queryTokens))
370
+ .slice(0, 3)
371
+ .map((prop) => ({
372
+ name: prop.name,
373
+ type: prop.rawType ?? prop.type,
374
+ values: prop.values,
375
+ })),
376
+ stories: component.storybook?.slice(0, 3).map((story) => ({
377
+ name: story.name,
378
+ id: story.id,
379
+ url: story.storyUrl,
380
+ })),
381
+ };
382
+ }
383
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}