@makitt.io/mds-mcp-server 0.1.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.
- package/README.md +149 -0
- package/dist/data/catalog.json +10567 -0
- package/dist/data/playbook/ai-fill.md +175 -0
- package/dist/data/playbook/anti-patterns.md +188 -0
- package/dist/data/playbook/array-input.md +249 -0
- package/dist/data/playbook/async-states.md +137 -0
- package/dist/data/playbook/data-grid.md +192 -0
- package/dist/data/playbook/feedback.md +238 -0
- package/dist/data/playbook/form.md +259 -0
- package/dist/data/playbook/overlay.md +222 -0
- package/dist/data/playbook/page-layout.md +222 -0
- package/dist/data/playbook/responsive-tokens.md +191 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +329 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @makitt/mds-mcp-server — MCP server for mds.
|
|
4
|
+
*
|
|
5
|
+
* AI (Claude Code / Cursor) 가 mds catalog + playbook 자동 query 가능.
|
|
6
|
+
* Fabrication 0 의 최종 layer — 사용자가 mds 의 props / 안티패턴 / 사용 약속 정확 lookup.
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* - mds_components_list — 모든 컴포넌트 list (layer 필터)
|
|
10
|
+
* - mds_components_get — 특정 컴포넌트 의 full spec (props/types/description)
|
|
11
|
+
* - mds_components_search — text search (name / description / prop)
|
|
12
|
+
* - mds_playbook_list — 모든 Playbook area list
|
|
13
|
+
* - mds_playbook_get — 특정 Playbook 의 content (form / feedback / data-grid 등)
|
|
14
|
+
* - mds_playbook_search — Playbook 의 decision matrix / 안티패턴 검색
|
|
15
|
+
*
|
|
16
|
+
* Transport: stdio (Claude Code / Cursor 호환)
|
|
17
|
+
*
|
|
18
|
+
* Setup:
|
|
19
|
+
* 1. Build: `pnpm build`
|
|
20
|
+
* 2. Claude Code MCP config: ~/.claude/claude_desktop_config.json
|
|
21
|
+
* {
|
|
22
|
+
* "mcpServers": {
|
|
23
|
+
* "mds": { "command": "node", "args": ["/path/to/mds-mcp-server/dist/index.js"] }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*/
|
|
27
|
+
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
28
|
+
import { dirname, resolve } from 'node:path';
|
|
29
|
+
import { fileURLToPath } from 'node:url';
|
|
30
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
31
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
32
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
33
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
34
|
+
const __dirname = dirname(__filename);
|
|
35
|
+
/**
|
|
36
|
+
* Path resolution — 우선순위:
|
|
37
|
+
* 1. env var (MDS_CATALOG_PATH / MDS_PLAYBOOK_DIR) — 외부 사용자가 본인 customize 한
|
|
38
|
+
* catalog/playbook 사용 가능 (자체 design system 위에 mds 패턴 적용)
|
|
39
|
+
* 2. Embedded data (dist/data/) — published package 의 self-contained
|
|
40
|
+
* 3. Monorepo relative (../../mds/) — dev 환경 fallback
|
|
41
|
+
*/
|
|
42
|
+
function resolveCatalogPath() {
|
|
43
|
+
if (process.env.MDS_CATALOG_PATH)
|
|
44
|
+
return process.env.MDS_CATALOG_PATH;
|
|
45
|
+
const embedded = resolve(__dirname, 'data', 'catalog.json');
|
|
46
|
+
if (existsSync(embedded))
|
|
47
|
+
return embedded;
|
|
48
|
+
return resolve(__dirname, '..', '..', 'mds', 'dist', 'catalog.json');
|
|
49
|
+
}
|
|
50
|
+
function resolvePlaybookDir() {
|
|
51
|
+
if (process.env.MDS_PLAYBOOK_DIR)
|
|
52
|
+
return process.env.MDS_PLAYBOOK_DIR;
|
|
53
|
+
const embedded = resolve(__dirname, 'data', 'playbook');
|
|
54
|
+
if (existsSync(embedded))
|
|
55
|
+
return embedded;
|
|
56
|
+
return resolve(__dirname, '..', '..', 'mds', 'docs', 'playbook');
|
|
57
|
+
}
|
|
58
|
+
const CATALOG_PATH = resolveCatalogPath();
|
|
59
|
+
const PLAYBOOK_DIR = resolvePlaybookDir();
|
|
60
|
+
// ─── Lazy loading — catalog 와 playbook 은 첫 query 시 load (server 시작은 빠르게)
|
|
61
|
+
let cachedCatalog = null;
|
|
62
|
+
let cachedPlaybooks = null;
|
|
63
|
+
function loadCatalog() {
|
|
64
|
+
if (cachedCatalog)
|
|
65
|
+
return cachedCatalog;
|
|
66
|
+
if (!existsSync(CATALOG_PATH)) {
|
|
67
|
+
throw new Error(`Catalog not found at ${CATALOG_PATH}. Run \`pnpm build:catalog\` in @makitt/mds first.`);
|
|
68
|
+
}
|
|
69
|
+
cachedCatalog = JSON.parse(readFileSync(CATALOG_PATH, 'utf-8'));
|
|
70
|
+
return cachedCatalog;
|
|
71
|
+
}
|
|
72
|
+
function loadPlaybooks() {
|
|
73
|
+
if (cachedPlaybooks)
|
|
74
|
+
return cachedPlaybooks;
|
|
75
|
+
cachedPlaybooks = {};
|
|
76
|
+
if (!existsSync(PLAYBOOK_DIR)) {
|
|
77
|
+
throw new Error(`Playbook dir not found at ${PLAYBOOK_DIR}. Expected packages/mds/docs/playbook/`);
|
|
78
|
+
}
|
|
79
|
+
for (const file of readdirSync(PLAYBOOK_DIR)) {
|
|
80
|
+
if (file.endsWith('.md')) {
|
|
81
|
+
const area = file.replace(/\.md$/, '');
|
|
82
|
+
cachedPlaybooks[area] = readFileSync(resolve(PLAYBOOK_DIR, file), 'utf-8');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return cachedPlaybooks;
|
|
86
|
+
}
|
|
87
|
+
// ─── Server setup ────────────────────────────────────────────────────
|
|
88
|
+
const server = new Server({
|
|
89
|
+
name: 'mds-mcp-server',
|
|
90
|
+
version: '0.1.0',
|
|
91
|
+
}, {
|
|
92
|
+
capabilities: {
|
|
93
|
+
tools: {},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// ─── Tool list ───────────────────────────────────────────────────────
|
|
97
|
+
server.setRequestHandler(ListToolsRequestSchema, () => ({
|
|
98
|
+
tools: [
|
|
99
|
+
{
|
|
100
|
+
name: 'mds_components_list',
|
|
101
|
+
description: 'List all mds components. Optionally filter by layer (primitives / compounds / overlays / data / patterns / shells / foundations).',
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
layer: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
description: 'Optional layer filter',
|
|
108
|
+
enum: ['primitives', 'compounds', 'overlays', 'data', 'patterns', 'shells', 'foundations'],
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'mds_components_get',
|
|
115
|
+
description: 'Get the full spec of a specific mds component (props, types, JSDoc, stories, hasTests). Use this BEFORE writing code with mds components to avoid fabrication.',
|
|
116
|
+
inputSchema: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
name: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
description: 'Component name (PascalCase). Sub-components use dot notation (e.g., "Field.Root", "Modal.Body", "Drawer.Footer").',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
required: ['name'],
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'mds_components_search',
|
|
129
|
+
description: 'Text search across all components — matches component name, description, and prop names.',
|
|
130
|
+
inputSchema: {
|
|
131
|
+
type: 'object',
|
|
132
|
+
properties: {
|
|
133
|
+
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
134
|
+
limit: { type: 'number', description: 'Max results (default 20)' },
|
|
135
|
+
},
|
|
136
|
+
required: ['query'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'mds_playbook_list',
|
|
141
|
+
description: 'List all available Playbook areas — form / feedback / data-grid / overlay / page-layout / array-input / async-states / ai-fill / anti-patterns.',
|
|
142
|
+
inputSchema: { type: 'object', properties: {} },
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'mds_playbook_get',
|
|
146
|
+
description: 'Get the full content of a Playbook area (decision matrix + anti-patterns + mobile variants + TBD). Use this BEFORE making design decisions (which Modal vs Drawer? Toast vs Banner? page-form vs modal-form?).',
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: {
|
|
150
|
+
area: {
|
|
151
|
+
type: 'string',
|
|
152
|
+
description: 'Playbook area name',
|
|
153
|
+
enum: [
|
|
154
|
+
'form',
|
|
155
|
+
'feedback',
|
|
156
|
+
'data-grid',
|
|
157
|
+
'overlay',
|
|
158
|
+
'page-layout',
|
|
159
|
+
'array-input',
|
|
160
|
+
'async-states',
|
|
161
|
+
'ai-fill',
|
|
162
|
+
'anti-patterns',
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
required: ['area'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'mds_playbook_search',
|
|
171
|
+
description: 'Search across all Playbooks — matches decision matrix entries, anti-patterns, and cross-cutting axes.',
|
|
172
|
+
inputSchema: {
|
|
173
|
+
type: 'object',
|
|
174
|
+
properties: {
|
|
175
|
+
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
176
|
+
limit: { type: 'number', description: 'Max matched lines (default 30)' },
|
|
177
|
+
},
|
|
178
|
+
required: ['query'],
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
}));
|
|
183
|
+
// ─── Tool handlers ──────────────────────────────────────────────────
|
|
184
|
+
server.setRequestHandler(CallToolRequestSchema, (request) => {
|
|
185
|
+
const { name, arguments: args } = request.params;
|
|
186
|
+
try {
|
|
187
|
+
if (name === 'mds_components_list') {
|
|
188
|
+
const catalog = loadCatalog();
|
|
189
|
+
const layer = args?.layer ?? undefined;
|
|
190
|
+
const components = Object.values(catalog.components)
|
|
191
|
+
.filter((c) => !layer || c.layer === layer)
|
|
192
|
+
.map((c) => ({ name: c.name, layer: c.layer, category: c.category, description: c.description }));
|
|
193
|
+
return {
|
|
194
|
+
content: [
|
|
195
|
+
{
|
|
196
|
+
type: 'text',
|
|
197
|
+
text: JSON.stringify({ total: components.length, layer: layer ?? 'all', components }, null, 2),
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
if (name === 'mds_components_get') {
|
|
203
|
+
const catalog = loadCatalog();
|
|
204
|
+
const componentName = args?.name;
|
|
205
|
+
const component = catalog.components[componentName];
|
|
206
|
+
if (!component) {
|
|
207
|
+
const suggestions = Object.keys(catalog.components)
|
|
208
|
+
.filter((n) => n.toLowerCase().includes(componentName.toLowerCase()))
|
|
209
|
+
.slice(0, 5);
|
|
210
|
+
return {
|
|
211
|
+
content: [
|
|
212
|
+
{
|
|
213
|
+
type: 'text',
|
|
214
|
+
text: `Component "${componentName}" not found in catalog. Did you mean:\n${suggestions.map((s) => ` - ${s}`).join('\n')}\n\nUse mds_components_list or mds_components_search.`,
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
isError: true,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
content: [{ type: 'text', text: JSON.stringify(component, null, 2) }],
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (name === 'mds_components_search') {
|
|
225
|
+
const catalog = loadCatalog();
|
|
226
|
+
const query = (args?.query ?? '').toLowerCase();
|
|
227
|
+
const limit = args?.limit ?? 20;
|
|
228
|
+
const matches = Object.values(catalog.components)
|
|
229
|
+
.filter((c) => {
|
|
230
|
+
if (c.name.toLowerCase().includes(query))
|
|
231
|
+
return true;
|
|
232
|
+
if (c.description?.toLowerCase().includes(query))
|
|
233
|
+
return true;
|
|
234
|
+
return c.props.some((p) => p.name.toLowerCase().includes(query) ||
|
|
235
|
+
p.description?.toLowerCase().includes(query));
|
|
236
|
+
})
|
|
237
|
+
.slice(0, limit)
|
|
238
|
+
.map((c) => ({
|
|
239
|
+
name: c.name,
|
|
240
|
+
layer: c.layer,
|
|
241
|
+
description: c.description?.slice(0, 200),
|
|
242
|
+
matchedProps: c.props
|
|
243
|
+
.filter((p) => p.name.toLowerCase().includes(query) ||
|
|
244
|
+
p.description?.toLowerCase().includes(query))
|
|
245
|
+
.slice(0, 3)
|
|
246
|
+
.map((p) => p.name),
|
|
247
|
+
}));
|
|
248
|
+
return {
|
|
249
|
+
content: [
|
|
250
|
+
{
|
|
251
|
+
type: 'text',
|
|
252
|
+
text: JSON.stringify({ total: matches.length, query, matches }, null, 2),
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (name === 'mds_playbook_list') {
|
|
258
|
+
const playbooks = loadPlaybooks();
|
|
259
|
+
return {
|
|
260
|
+
content: [
|
|
261
|
+
{
|
|
262
|
+
type: 'text',
|
|
263
|
+
text: JSON.stringify({ areas: Object.keys(playbooks).sort(), count: Object.keys(playbooks).length }, null, 2),
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
if (name === 'mds_playbook_get') {
|
|
269
|
+
const playbooks = loadPlaybooks();
|
|
270
|
+
const area = args?.area;
|
|
271
|
+
const content = playbooks[area];
|
|
272
|
+
if (!content) {
|
|
273
|
+
return {
|
|
274
|
+
content: [
|
|
275
|
+
{
|
|
276
|
+
type: 'text',
|
|
277
|
+
text: `Playbook area "${area}" not found. Available: ${Object.keys(playbooks).join(', ')}`,
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
isError: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return { content: [{ type: 'text', text: content }] };
|
|
284
|
+
}
|
|
285
|
+
if (name === 'mds_playbook_search') {
|
|
286
|
+
const playbooks = loadPlaybooks();
|
|
287
|
+
const query = (args?.query ?? '').toLowerCase();
|
|
288
|
+
const limit = args?.limit ?? 30;
|
|
289
|
+
const matches = [];
|
|
290
|
+
for (const [area, content] of Object.entries(playbooks)) {
|
|
291
|
+
const lines = content.split('\n');
|
|
292
|
+
for (let i = 0; i < lines.length; i++) {
|
|
293
|
+
const line = lines[i];
|
|
294
|
+
if (line.toLowerCase().includes(query)) {
|
|
295
|
+
matches.push({ area, line: i + 1, text: line.trim() });
|
|
296
|
+
if (matches.length >= limit)
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (matches.length >= limit)
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
return {
|
|
304
|
+
content: [
|
|
305
|
+
{
|
|
306
|
+
type: 'text',
|
|
307
|
+
text: JSON.stringify({ total: matches.length, query, matches }, null, 2),
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
314
|
+
isError: true,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
319
|
+
return {
|
|
320
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
321
|
+
isError: true,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
// ─── Start ───────────────────────────────────────────────────────────
|
|
326
|
+
const transport = new StdioServerTransport();
|
|
327
|
+
await server.connect(transport);
|
|
328
|
+
// MCP server 는 stdio 통해 통신 — 시작 후 process 살아있음 (transport 자동 lifecycle).
|
|
329
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@makitt.io/mds-mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for @makitt/mds — AI 가 catalog + playbook 자동 query (fabrication 0)",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/techtaka-makkit/makitt-client.git",
|
|
8
|
+
"directory": "packages/mds-mcp-server"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/techtaka-makkit/makitt-client/tree/dev/packages/mds-mcp-server#readme",
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"bin": {
|
|
17
|
+
"mds-mcp-server": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc && pnpm copy:data",
|
|
24
|
+
"copy:data": "node scripts/copy-data.mjs",
|
|
25
|
+
"start": "node dist/index.js",
|
|
26
|
+
"dev": "tsx src/index.ts",
|
|
27
|
+
"lint": "eslint .",
|
|
28
|
+
"check-types": "tsc --noEmit",
|
|
29
|
+
"clean": "rm -rf dist .turbo",
|
|
30
|
+
"prepublishOnly": "pnpm build"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"README.md"
|
|
35
|
+
],
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@makitt/eslint-config": "workspace:*",
|
|
41
|
+
"@makitt/typescript-config": "workspace:*",
|
|
42
|
+
"@types/node": "^22.10.6",
|
|
43
|
+
"tsx": "^4.21.0",
|
|
44
|
+
"typescript": "catalog:"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"mcp",
|
|
48
|
+
"model-context-protocol",
|
|
49
|
+
"mds",
|
|
50
|
+
"ai",
|
|
51
|
+
"design-system"
|
|
52
|
+
]
|
|
53
|
+
}
|