@maltjoy/mcp-server 0.1.1 → 0.1.2
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 +110 -11
- package/dist/doc/index.json +2 -2
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts +3 -3
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +47 -236
- package/dist/parser.js.map +1 -1
- package/dist/tools/list-css-classes.js +1 -1
- package/dist/tools/list-css-classes.js.map +1 -1
- package/dist/tools/list-design-tokens.js +1 -1
- package/dist/tools/list-design-tokens.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,18 +4,23 @@ MCP (Model Context Protocol) server for the Joy Design System. This server expos
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- 🔍 List all available Joy Vue3 components
|
|
8
|
-
- 📚 Access component documentation (props, events, slots)
|
|
7
|
+
- 🔍 List all 74 available Joy Vue3 components
|
|
8
|
+
- 📚 Access component documentation (props, events, slots, exposed members)
|
|
9
|
+
- 🎨 List 132 design tokens (colors, spacing, typography, etc.)
|
|
10
|
+
- 💅 List 272 CSS utility classes
|
|
9
11
|
- 🤖 AI-friendly interface through MCP protocol
|
|
12
|
+
- ✅ Automatic documentation generation on build
|
|
10
13
|
|
|
11
14
|
## Installation
|
|
12
15
|
|
|
13
16
|
```bash
|
|
14
17
|
cd packages/joy-mcp-server
|
|
15
18
|
pnpm install
|
|
16
|
-
pnpm build
|
|
19
|
+
pnpm build # This also generates component documentation JSON files
|
|
17
20
|
```
|
|
18
21
|
|
|
22
|
+
> **Note:** The build process automatically generates JSON documentation for all 74 components. This is required for the server to work.
|
|
23
|
+
|
|
19
24
|
## Usage
|
|
20
25
|
|
|
21
26
|
### Running the Server
|
|
@@ -35,7 +40,7 @@ pnpm dev
|
|
|
35
40
|
|
|
36
41
|
## Available Tools
|
|
37
42
|
|
|
38
|
-
### `joy_list_components`
|
|
43
|
+
### 1. `joy_list_components`
|
|
39
44
|
|
|
40
45
|
Lists all available Joy Vue3 components from the @maltjoy/core-vue library.
|
|
41
46
|
|
|
@@ -54,7 +59,7 @@ Lists all available Joy Vue3 components from the @maltjoy/core-vue library.
|
|
|
54
59
|
}
|
|
55
60
|
```
|
|
56
61
|
|
|
57
|
-
### `joy_get_component_info`
|
|
62
|
+
### 2. `joy_get_component_info`
|
|
58
63
|
|
|
59
64
|
Retrieves detailed information about a specific Joy Vue3 component including props, events, slots, and exposed members.
|
|
60
65
|
|
|
@@ -104,6 +109,44 @@ Retrieves detailed information about a specific Joy Vue3 component including pro
|
|
|
104
109
|
}
|
|
105
110
|
```
|
|
106
111
|
|
|
112
|
+
### 3. `joy_list_design_tokens`
|
|
113
|
+
|
|
114
|
+
Lists all available Joy design tokens (CSS custom properties) organized by domain.
|
|
115
|
+
|
|
116
|
+
**Parameters:** None
|
|
117
|
+
|
|
118
|
+
**Returns:**
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"colors": ["--joy-color-primary-100", "..."],
|
|
122
|
+
"spacing": ["--joy-core-spacing-1", "..."],
|
|
123
|
+
"typography": ["--joy-font-size-primary-1", "..."],
|
|
124
|
+
"radius": ["--joy-core-radius-1", "..."],
|
|
125
|
+
"elevation": ["--joy-core-elevation-1", "..."],
|
|
126
|
+
"zIndex": ["--joy-core-z-index-modal", "..."],
|
|
127
|
+
"transitions": ["--joy-transition-fast", "..."],
|
|
128
|
+
"forms": ["--joy-form-height-medium", "..."]
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 4. `joy_list_css_classes`
|
|
133
|
+
|
|
134
|
+
Lists all available Joy CSS utility classes organized by domain.
|
|
135
|
+
|
|
136
|
+
**Parameters:** None
|
|
137
|
+
|
|
138
|
+
**Returns:**
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"colors": [".joy-color-primary-100", ".joy-bgcolor-primary-100", "..."],
|
|
142
|
+
"spacing": [".joy-m-1", ".joy-p-2", "..."],
|
|
143
|
+
"typography": [".joy-font-primary-1", "..."],
|
|
144
|
+
"elevation": [".joy-core-elevation-1", "..."],
|
|
145
|
+
"radius": [".joy-core-radius-1", "..."],
|
|
146
|
+
"misc": [".joy-link", ".joy-link_white"]
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
107
150
|
## Configuration for Claude Desktop
|
|
108
151
|
|
|
109
152
|
Add this to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
@@ -143,17 +186,28 @@ Add this to your Cursor MCP settings:
|
|
|
143
186
|
```
|
|
144
187
|
joy-mcp-server/
|
|
145
188
|
├── src/
|
|
146
|
-
│ ├── index.ts
|
|
147
|
-
│ ├── parser.ts
|
|
189
|
+
│ ├── index.ts # Main server entry point
|
|
190
|
+
│ ├── parser.ts # JSON documentation parser
|
|
191
|
+
│ ├── json-metadata-generator.mjs # Generates component metadata
|
|
148
192
|
│ └── tools/
|
|
149
|
-
│ ├── list-components.ts
|
|
150
|
-
│
|
|
193
|
+
│ ├── list-components.ts # Component listing tool
|
|
194
|
+
│ ├── get-component-info.ts # Component info retrieval tool
|
|
195
|
+
│ ├── list-design-tokens.ts # Design tokens tool
|
|
196
|
+
│ └── list-css-classes.ts # CSS classes tool
|
|
197
|
+
├── dist/
|
|
198
|
+
│ └── doc/
|
|
199
|
+
│ ├── index.json # Index of all components
|
|
200
|
+
│ ├── design-tokens.json # All design tokens
|
|
201
|
+
│ ├── css-classes.json # All CSS classes
|
|
202
|
+
│ └── VJoy*/ # Component directories
|
|
203
|
+
│ └── metadata.json # Component metadata
|
|
151
204
|
├── package.json
|
|
152
205
|
├── tsconfig.json
|
|
153
|
-
|
|
206
|
+
├── README.md
|
|
207
|
+
└── TROUBLESHOOTING.md # Troubleshooting guide
|
|
154
208
|
```
|
|
155
209
|
|
|
156
|
-
The server reads the generated documentation from `
|
|
210
|
+
The server reads the generated JSON documentation from `dist/doc/` which is automatically created during the build process by extracting metadata from Vue component files in `@maltjoy/core-vue`.
|
|
157
211
|
|
|
158
212
|
## Development
|
|
159
213
|
|
|
@@ -163,6 +217,51 @@ To add new tools:
|
|
|
163
217
|
2. Define the tool schema and handler
|
|
164
218
|
3. Register the tool in `src/index.ts`
|
|
165
219
|
|
|
220
|
+
### Available Scripts
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Build and generate documentation
|
|
224
|
+
pnpm run build
|
|
225
|
+
|
|
226
|
+
# Watch mode for development
|
|
227
|
+
pnpm run dev
|
|
228
|
+
|
|
229
|
+
# Generate only documentation (no compilation)
|
|
230
|
+
pnpm run generate:components-docs:json
|
|
231
|
+
|
|
232
|
+
# Test the server locally
|
|
233
|
+
pnpm run test
|
|
234
|
+
|
|
235
|
+
# Reload the server (kill MCP process)
|
|
236
|
+
pnpm run reload
|
|
237
|
+
|
|
238
|
+
# Start the server
|
|
239
|
+
pnpm start
|
|
240
|
+
|
|
241
|
+
# Run with MCP inspector for debugging
|
|
242
|
+
pnpm run inspector
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Troubleshooting
|
|
246
|
+
|
|
247
|
+
### MCP server returns 0 components in Cursor
|
|
248
|
+
|
|
249
|
+
If you're getting an empty list of components in Cursor but the server works fine locally:
|
|
250
|
+
|
|
251
|
+
1. **Quick fix:** Use Cursor Command Palette → `Developer: Reload Window`
|
|
252
|
+
|
|
253
|
+
2. **Or run:** `pnpm run reload` to kill the old server process
|
|
254
|
+
|
|
255
|
+
3. **Verify locally:** `pnpm run test` should show 74 components
|
|
256
|
+
|
|
257
|
+
For detailed troubleshooting steps, see [TROUBLESHOOTING.md](./TROUBLESHOOTING.md)
|
|
258
|
+
|
|
259
|
+
### Common Issues
|
|
260
|
+
|
|
261
|
+
- **Documentation not generated:** Run `pnpm run build` to compile and generate docs
|
|
262
|
+
- **Changes not taking effect:** Reload Cursor window to restart MCP server
|
|
263
|
+
- **Server fails to start:** Check that `dist/doc/index.json` exists
|
|
264
|
+
|
|
166
265
|
## License
|
|
167
266
|
|
|
168
267
|
MIT
|
package/dist/doc/index.json
CHANGED
package/dist/index.js
CHANGED
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { existsSync } from 'fs';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
5
8
|
import { listComponentsTool, handleListComponents } from './tools/list-components.js';
|
|
6
9
|
import { getComponentInfoTool, handleGetComponentInfo } from './tools/get-component-info.js';
|
|
7
10
|
import { listDesignTokensTool, handleListDesignTokens } from './tools/list-design-tokens.js';
|
|
8
11
|
import { listCssClassesTool, handleListCssClasses } from './tools/list-css-classes.js';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
9
14
|
/**
|
|
10
15
|
* Joy Design System MCP Server
|
|
11
16
|
* Provides access to Vue3 component information from @maltjoy/core-vue
|
|
@@ -15,7 +20,7 @@ class JoyMcpServer {
|
|
|
15
20
|
constructor() {
|
|
16
21
|
this.server = new Server({
|
|
17
22
|
name: 'joy-design-system',
|
|
18
|
-
version: '1.
|
|
23
|
+
version: '0.1.2',
|
|
19
24
|
}, {
|
|
20
25
|
capabilities: {
|
|
21
26
|
tools: {},
|
|
@@ -114,6 +119,31 @@ class JoyMcpServer {
|
|
|
114
119
|
console.error('Joy MCP Server running on stdio');
|
|
115
120
|
}
|
|
116
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Verify that required JSON documentation files exist
|
|
124
|
+
*/
|
|
125
|
+
function verifyDocumentation() {
|
|
126
|
+
const indexPath = join(__dirname, 'doc', 'index.json');
|
|
127
|
+
const tokensPath = join(__dirname, 'doc', 'design-tokens.json');
|
|
128
|
+
const classesPath = join(__dirname, 'doc', 'css-classes.json');
|
|
129
|
+
if (!existsSync(indexPath)) {
|
|
130
|
+
console.error('❌ Error: Documentation files not found!');
|
|
131
|
+
console.error(' Missing: dist/doc/index.json');
|
|
132
|
+
console.error(' Please run: npm run generate:components-docs:json');
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (!existsSync(tokensPath) || !existsSync(classesPath)) {
|
|
136
|
+
console.error('⚠️ Warning: Some design system files are missing');
|
|
137
|
+
}
|
|
138
|
+
console.error('✅ Documentation files verified');
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// Verify documentation before starting
|
|
142
|
+
if (!verifyDocumentation()) {
|
|
143
|
+
console.error('\n💡 To generate the documentation, run:');
|
|
144
|
+
console.error(' cd packages/joy-mcp-server && npm run generate:components-docs:json\n');
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
117
147
|
// Start the server
|
|
118
148
|
const server = new JoyMcpServer();
|
|
119
149
|
server.run().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Parse the Joy components documentation
|
|
3
|
-
* and extract component names from the
|
|
2
|
+
* Parse the Joy components documentation JSON file
|
|
3
|
+
* and extract component names from the index
|
|
4
4
|
*/
|
|
5
5
|
export declare function parseComponentNames(): string[];
|
|
6
6
|
/**
|
|
@@ -39,7 +39,7 @@ export interface ExposedMemberInfo {
|
|
|
39
39
|
kind: string;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
* Parse and extract all information for a specific component
|
|
42
|
+
* Parse and extract all information for a specific component from JSON
|
|
43
43
|
*/
|
|
44
44
|
export declare function parseComponentInfo(componentName: string): ComponentInfo | null;
|
|
45
45
|
//# sourceMappingURL=parser.d.ts.map
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAmB9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAoC9E"}
|
package/dist/parser.js
CHANGED
|
@@ -4,41 +4,24 @@ import { dirname, join } from 'path';
|
|
|
4
4
|
const __filename = fileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = dirname(__filename);
|
|
6
6
|
/**
|
|
7
|
-
* Parse the Joy components documentation
|
|
8
|
-
* and extract component names from the
|
|
7
|
+
* Parse the Joy components documentation JSON file
|
|
8
|
+
* and extract component names from the index
|
|
9
9
|
*/
|
|
10
10
|
export function parseComponentNames() {
|
|
11
11
|
try {
|
|
12
|
-
// Path to the
|
|
13
|
-
const
|
|
14
|
-
const content = readFileSync(
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Start of Table of Contents
|
|
21
|
-
if (line.trim() === '## Table of Contents') {
|
|
22
|
-
inTableOfContents = true;
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
// End of Table of Contents (next section starts)
|
|
26
|
-
if (inTableOfContents && line.startsWith('---')) {
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
// Extract component names from TOC links
|
|
30
|
-
// Format: - [VJoyAdminBanner](#vjoyadminbanner)
|
|
31
|
-
if (inTableOfContents && line.startsWith('- [')) {
|
|
32
|
-
const match = line.match(/- \[([^\]]+)\]/);
|
|
33
|
-
if (match && match[1]) {
|
|
34
|
-
components.push(match[1]);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
12
|
+
// Path to the JSON index file (relative to dist folder where compiled code runs)
|
|
13
|
+
const indexPath = join(__dirname, 'doc/index.json');
|
|
14
|
+
const content = readFileSync(indexPath, 'utf-8');
|
|
15
|
+
const data = JSON.parse(content);
|
|
16
|
+
// Extract component names from the components array
|
|
17
|
+
if (data.components && Array.isArray(data.components)) {
|
|
18
|
+
const names = data.components.map((comp) => comp.name);
|
|
19
|
+
return names;
|
|
37
20
|
}
|
|
38
|
-
return
|
|
21
|
+
return [];
|
|
39
22
|
}
|
|
40
23
|
catch (error) {
|
|
41
|
-
console.error('Error parsing component names:', error);
|
|
24
|
+
console.error('Error parsing component names:', error instanceof Error ? error.message : String(error));
|
|
42
25
|
return [];
|
|
43
26
|
}
|
|
44
27
|
}
|
|
@@ -49,40 +32,38 @@ export function getComponentCount() {
|
|
|
49
32
|
return parseComponentNames().length;
|
|
50
33
|
}
|
|
51
34
|
/**
|
|
52
|
-
* Parse and extract all information for a specific component
|
|
35
|
+
* Parse and extract all information for a specific component from JSON
|
|
53
36
|
*/
|
|
54
37
|
export function parseComponentInfo(componentName) {
|
|
55
38
|
try {
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let startIndex = -1;
|
|
62
|
-
for (let i = 0; i < lines.length; i++) {
|
|
63
|
-
if (componentHeaderPattern.test(lines[i])) {
|
|
64
|
-
startIndex = i;
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (startIndex === -1) {
|
|
69
|
-
return null; // Component not found
|
|
70
|
-
}
|
|
71
|
-
// Find the end of the component section (next --- or next ## heading)
|
|
72
|
-
let endIndex = lines.length;
|
|
73
|
-
for (let i = startIndex + 1; i < lines.length; i++) {
|
|
74
|
-
if (lines[i].startsWith('## ') || lines[i].trim() === '---') {
|
|
75
|
-
endIndex = i;
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
const componentSection = lines.slice(startIndex, endIndex);
|
|
39
|
+
// Path to the component metadata JSON file (relative to dist folder where compiled code runs)
|
|
40
|
+
const componentPath = join(__dirname, 'doc', componentName, 'metadata.json');
|
|
41
|
+
const content = readFileSync(componentPath, 'utf-8');
|
|
42
|
+
const data = JSON.parse(content);
|
|
43
|
+
// Map JSON structure to ComponentInfo interface
|
|
80
44
|
return {
|
|
81
|
-
name: componentName,
|
|
82
|
-
props:
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
45
|
+
name: data.displayName || componentName,
|
|
46
|
+
props: data.props.map((prop) => ({
|
|
47
|
+
name: prop.name,
|
|
48
|
+
type: prop.type,
|
|
49
|
+
required: prop.required,
|
|
50
|
+
default: prop.default || '-',
|
|
51
|
+
description: prop.description,
|
|
52
|
+
possibleValues: prop.possibleValues ? formatPossibleValues(prop.possibleValues) : undefined
|
|
53
|
+
})),
|
|
54
|
+
events: data.events.map((event) => ({
|
|
55
|
+
name: event.name,
|
|
56
|
+
description: event.description
|
|
57
|
+
})),
|
|
58
|
+
slots: data.slots.map((slot) => ({
|
|
59
|
+
name: slot.name,
|
|
60
|
+
description: slot.description
|
|
61
|
+
})),
|
|
62
|
+
exposedMembers: data.exposed ? data.exposed.map((exp) => ({
|
|
63
|
+
name: exp.name,
|
|
64
|
+
type: exp.type,
|
|
65
|
+
kind: exp.isMethod ? 'method' : 'property'
|
|
66
|
+
})) : []
|
|
86
67
|
};
|
|
87
68
|
}
|
|
88
69
|
catch (error) {
|
|
@@ -91,185 +72,15 @@ export function parseComponentInfo(componentName) {
|
|
|
91
72
|
}
|
|
92
73
|
}
|
|
93
74
|
/**
|
|
94
|
-
*
|
|
95
|
-
*/
|
|
96
|
-
function parseProps(lines) {
|
|
97
|
-
const props = [];
|
|
98
|
-
let inPropsSection = false;
|
|
99
|
-
let inTableBody = false;
|
|
100
|
-
let currentProp = null;
|
|
101
|
-
for (let i = 0; i < lines.length; i++) {
|
|
102
|
-
const line = lines[i];
|
|
103
|
-
if (line.trim() === '### Props') {
|
|
104
|
-
inPropsSection = true;
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (inPropsSection && line.startsWith('###')) {
|
|
108
|
-
break; // Next section
|
|
109
|
-
}
|
|
110
|
-
if (inPropsSection) {
|
|
111
|
-
// Skip the header row and separator
|
|
112
|
-
if (line.includes('| Name | Type | Required')) {
|
|
113
|
-
inTableBody = true;
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
if (line.includes('|------|------|')) {
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
if (inTableBody && line.startsWith('| `')) {
|
|
120
|
-
// Main property row
|
|
121
|
-
const match = line.match(/\| `([^`]+)` \| `([^`]+)` \| ([^|]+) \| ([^|]+) \| ([^|]+) \|/);
|
|
122
|
-
if (match) {
|
|
123
|
-
if (currentProp && currentProp.name) {
|
|
124
|
-
props.push(currentProp);
|
|
125
|
-
}
|
|
126
|
-
currentProp = {
|
|
127
|
-
name: match[1].trim(),
|
|
128
|
-
type: match[2].trim(),
|
|
129
|
-
required: match[3].trim().includes('✅'),
|
|
130
|
-
default: match[4].trim(),
|
|
131
|
-
description: match[5].trim()
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else if (inTableBody && line.includes('*Possible values:*') && currentProp) {
|
|
136
|
-
// Possible values row
|
|
137
|
-
const match = line.match(/\*Possible values:\* `([^`]+)`/);
|
|
138
|
-
if (match) {
|
|
139
|
-
currentProp.possibleValues = match[1].trim();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (inTableBody && line.trim() === '') {
|
|
143
|
-
// Empty line might signal end of table
|
|
144
|
-
if (currentProp && currentProp.name) {
|
|
145
|
-
props.push(currentProp);
|
|
146
|
-
currentProp = null;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Add last prop if exists
|
|
152
|
-
if (currentProp && currentProp.name) {
|
|
153
|
-
props.push(currentProp);
|
|
154
|
-
}
|
|
155
|
-
return props;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Parse events from component section
|
|
159
|
-
*/
|
|
160
|
-
function parseEvents(lines) {
|
|
161
|
-
const events = [];
|
|
162
|
-
let inEventsSection = false;
|
|
163
|
-
let inTableBody = false;
|
|
164
|
-
for (const line of lines) {
|
|
165
|
-
if (line.trim() === '### Events') {
|
|
166
|
-
inEventsSection = true;
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
if (inEventsSection && line.startsWith('###')) {
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
if (inEventsSection) {
|
|
173
|
-
if (line.includes('*No events*')) {
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
if (line.includes('| Event | Description |')) {
|
|
177
|
-
inTableBody = true;
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
if (line.includes('|------|-------------|')) {
|
|
181
|
-
continue;
|
|
182
|
-
}
|
|
183
|
-
if (inTableBody && line.startsWith('| `')) {
|
|
184
|
-
const match = line.match(/\| `([^`]+)` \| ([^|]+) \|/);
|
|
185
|
-
if (match) {
|
|
186
|
-
events.push({
|
|
187
|
-
name: match[1].trim(),
|
|
188
|
-
description: match[2].trim()
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return events;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Parse slots from component section
|
|
75
|
+
* Format possible values for display
|
|
198
76
|
*/
|
|
199
|
-
function
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
let inTableBody = false;
|
|
203
|
-
for (const line of lines) {
|
|
204
|
-
if (line.trim() === '### Slots') {
|
|
205
|
-
inSlotsSection = true;
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
if (inSlotsSection && line.startsWith('###')) {
|
|
209
|
-
break;
|
|
210
|
-
}
|
|
211
|
-
if (inSlotsSection) {
|
|
212
|
-
if (line.includes('*No slots*')) {
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
if (line.includes('| Slot | Description |')) {
|
|
216
|
-
inTableBody = true;
|
|
217
|
-
continue;
|
|
218
|
-
}
|
|
219
|
-
if (line.includes('|------|-------------|')) {
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
|
-
if (inTableBody && line.startsWith('| `')) {
|
|
223
|
-
const match = line.match(/\| `([^`]+)` \| ([^|]+) \|/);
|
|
224
|
-
if (match) {
|
|
225
|
-
slots.push({
|
|
226
|
-
name: match[1].trim(),
|
|
227
|
-
description: match[2].trim()
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
77
|
+
function formatPossibleValues(values) {
|
|
78
|
+
if (typeof values === 'string') {
|
|
79
|
+
return values;
|
|
232
80
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Parse exposed members from component section
|
|
237
|
-
*/
|
|
238
|
-
function parseExposedMembers(lines) {
|
|
239
|
-
const members = [];
|
|
240
|
-
let inExposedSection = false;
|
|
241
|
-
let inTableBody = false;
|
|
242
|
-
for (const line of lines) {
|
|
243
|
-
if (line.includes('### Exposed Methods & Properties')) {
|
|
244
|
-
inExposedSection = true;
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
247
|
-
if (inExposedSection && line.startsWith('###')) {
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
if (inExposedSection) {
|
|
251
|
-
if (line.includes('*No exposed')) {
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
if (line.includes('| Name | Type | Kind |')) {
|
|
255
|
-
inTableBody = true;
|
|
256
|
-
continue;
|
|
257
|
-
}
|
|
258
|
-
if (line.includes('|------|------|------|')) {
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
if (inTableBody && line.startsWith('| `')) {
|
|
262
|
-
const match = line.match(/\| `([^`]+)` \| `([^`]+)` \| ([^|]+) \|/);
|
|
263
|
-
if (match) {
|
|
264
|
-
members.push({
|
|
265
|
-
name: match[1].trim(),
|
|
266
|
-
type: match[2].trim(),
|
|
267
|
-
kind: match[3].trim()
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
81
|
+
if (Array.isArray(values)) {
|
|
82
|
+
return values.join(', ');
|
|
272
83
|
}
|
|
273
|
-
return
|
|
84
|
+
return String(values);
|
|
274
85
|
}
|
|
275
86
|
//# sourceMappingURL=parser.js.map
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export const listCssClassesTool = {
|
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
14
|
export function handleListCssClasses() {
|
|
15
|
-
const cssClassesFilePath = resolve(__dirname, '
|
|
15
|
+
const cssClassesFilePath = resolve(__dirname, '../../dist/doc/css-classes.json');
|
|
16
16
|
const fileContent = readFileSync(cssClassesFilePath, 'utf-8');
|
|
17
17
|
return JSON.parse(fileContent);
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-css-classes.js","sourceRoot":"","sources":["../../src/tools/list-css-classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,yHAAyH;IACtI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAWF,MAAM,UAAU,oBAAoB;IAClC,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"list-css-classes.js","sourceRoot":"","sources":["../../src/tools/list-css-classes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,yHAAyH;IACtI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAWF,MAAM,UAAU,oBAAoB;IAClC,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAuB,CAAC;AACvD,CAAC"}
|
|
@@ -12,7 +12,7 @@ export const listDesignTokensTool = {
|
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
14
|
export function handleListDesignTokens() {
|
|
15
|
-
const tokensFilePath = resolve(__dirname, '
|
|
15
|
+
const tokensFilePath = resolve(__dirname, '../../dist/doc/design-tokens.json');
|
|
16
16
|
const fileContent = readFileSync(tokensFilePath, 'utf-8');
|
|
17
17
|
return JSON.parse(fileContent);
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-design-tokens.js","sourceRoot":"","sources":["../../src/tools/list-design-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,iKAAiK;IAC9K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAaF,MAAM,UAAU,sBAAsB;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"list-design-tokens.js","sourceRoot":"","sources":["../../src/tools/list-design-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,iKAAiK;IAC9K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAaF,MAAM,UAAU,sBAAsB;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAyB,CAAC;AACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maltjoy/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "MCP server for Joy Design System - exposes Vue3 components information",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc",
|
|
14
|
+
"build": "tsc && npm run generate:components-docs:json",
|
|
15
15
|
"dev": "tsc --watch",
|
|
16
16
|
"start": "node dist/index.js",
|
|
17
17
|
"generate:components-docs:json": "node src/json-metadata-generator.mjs",
|