@frontic/ui 0.3.1 → 0.5.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.
@@ -0,0 +1,46 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+
3
+ //#region src/mcp/index.d.ts
4
+ declare const server: Server<{
5
+ method: string;
6
+ params?: {
7
+ [x: string]: unknown;
8
+ task?: {
9
+ [x: string]: unknown;
10
+ ttl?: number;
11
+ pollInterval?: number;
12
+ };
13
+ _meta?: {
14
+ [x: string]: unknown;
15
+ progressToken?: string | number;
16
+ "io.modelcontextprotocol/related-task"?: {
17
+ [x: string]: unknown;
18
+ taskId: string;
19
+ };
20
+ };
21
+ };
22
+ }, {
23
+ method: string;
24
+ params?: {
25
+ [x: string]: unknown;
26
+ _meta?: {
27
+ [x: string]: unknown;
28
+ "io.modelcontextprotocol/related-task"?: {
29
+ [x: string]: unknown;
30
+ taskId: string;
31
+ };
32
+ };
33
+ };
34
+ }, {
35
+ [x: string]: unknown;
36
+ _meta?: {
37
+ [x: string]: unknown;
38
+ "io.modelcontextprotocol/related-task"?: {
39
+ [x: string]: unknown;
40
+ taskId: string;
41
+ };
42
+ };
43
+ }>;
44
+ //#endregion
45
+ export { server };
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mcp/index.ts"],"sourcesContent":[],"mappings":";;;cAmBa,QAAM;;EAAN,MAAA,CAAA,EAWZ"}
@@ -0,0 +1,5 @@
1
+ import "../registry-CSfiKyuv.js";
2
+ import "../schema-DgHN-d0T.js";
3
+ import { t as server } from "../mcp-thK0j_gy.js";
4
+
5
+ export { server };
@@ -0,0 +1,304 @@
1
+ import { Y as RegistryError, i as getRegistriesConfig, t as searchRegistries, u as getRegistryItems } from "./registry-CSfiKyuv.js";
2
+ import { z } from "zod";
3
+ import { detectPackageManager } from "nypm";
4
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
5
+ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
6
+ import dedent from "dedent";
7
+ import { zodToJsonSchema } from "zod-to-json-schema";
8
+
9
+ //#region src/mcp/utils.ts
10
+ const SHADCN_CLI_COMMAND = "@frontic/ui";
11
+ async function npxShadcnVue(command) {
12
+ return `${(await detectPackageManager(process.cwd()))?.name} ${SHADCN_CLI_COMMAND} ${command}`;
13
+ }
14
+ async function getMcpConfig(cwd = process.cwd()) {
15
+ return { registries: (await getRegistriesConfig(cwd)).registries };
16
+ }
17
+ function formatSearchResultsWithPagination(results, options) {
18
+ const { query, registries } = options || {};
19
+ const formattedItems = results.items.map((item) => {
20
+ const parts = [`- ${item.name}`];
21
+ if (item.type) parts.push(`(${item.type})`);
22
+ if (item.description) parts.push(`- ${item.description}`);
23
+ if (item.registry) parts.push(`[${item.registry}]`);
24
+ parts.push(`\n Add command: \`${npxShadcnVue(`add ${item.addCommandArgument}`)}\``);
25
+ return parts.join(" ");
26
+ });
27
+ let header = `Found ${results.pagination.total} items`;
28
+ if (query) header += ` matching "${query}"`;
29
+ if (registries && registries.length > 0) header += ` in registries ${registries.join(", ")}`;
30
+ header += ":";
31
+ const showingRange = `Showing items ${results.pagination.offset + 1}-${Math.min(results.pagination.offset + results.pagination.limit, results.pagination.total)} of ${results.pagination.total}:`;
32
+ let output = `${header}\n\n${showingRange}\n\n${formattedItems.join("\n\n")}`;
33
+ if (results.pagination.hasMore) output += `\n\nMore items available. Use offset: ${results.pagination.offset + results.pagination.limit} to see the next page.`;
34
+ return output;
35
+ }
36
+ function formatRegistryItems(items) {
37
+ return items.map((item) => {
38
+ return [
39
+ `## ${item.name}`,
40
+ item.description ? `\n${item.description}\n` : "",
41
+ item.type ? `**Type:** ${item.type}` : "",
42
+ item.files && item.files.length > 0 ? `**Files:** ${item.files.length} file(s)` : "",
43
+ item.dependencies && item.dependencies.length > 0 ? `**Dependencies:** ${item.dependencies.join(", ")}` : "",
44
+ item.devDependencies && item.devDependencies.length > 0 ? `**Dev Dependencies:** ${item.devDependencies.join(", ")}` : ""
45
+ ].filter(Boolean).join("\n");
46
+ });
47
+ }
48
+ function formatItemExamples(items, query) {
49
+ const sections = items.map((item) => {
50
+ const parts = [`## Example: ${item.name}`, item.description ? `\n${item.description}\n` : ""];
51
+ if (item.files?.length) item.files.forEach((file) => {
52
+ if (file.content) {
53
+ parts.push(`### Code (${file.path}):\n`);
54
+ parts.push("```tsx");
55
+ parts.push(file.content);
56
+ parts.push("```");
57
+ }
58
+ });
59
+ return parts.filter(Boolean).join("\n");
60
+ });
61
+ return `# Usage Examples\n\nFound ${items.length} example${items.length > 1 ? "s" : ""} matching "${query}":\n` + sections.join("\n\n---\n\n");
62
+ }
63
+
64
+ //#endregion
65
+ //#region src/mcp/index.ts
66
+ const server = new Server({
67
+ name: "frontic-ui",
68
+ version: "1.0.0"
69
+ }, { capabilities: {
70
+ resources: {},
71
+ tools: {}
72
+ } });
73
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
74
+ return { tools: [
75
+ {
76
+ name: "get_project_registries",
77
+ description: "Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)",
78
+ inputSchema: zodToJsonSchema(z.object({}))
79
+ },
80
+ {
81
+ name: "list_items_in_registries",
82
+ description: "List items from registries (requires components.json - use init_project if missing)",
83
+ inputSchema: zodToJsonSchema(z.object({
84
+ registries: z.array(z.string()).describe("Array of registry names to search (e.g., ['@shadcn', '@acme'])"),
85
+ limit: z.number().optional().describe("Maximum number of items to return"),
86
+ offset: z.number().optional().describe("Number of items to skip for pagination")
87
+ }))
88
+ },
89
+ {
90
+ name: "search_items_in_registries",
91
+ description: "Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.",
92
+ inputSchema: zodToJsonSchema(z.object({
93
+ registries: z.array(z.string()).describe("Array of registry names to search (e.g., ['@shadcn', '@acme'])"),
94
+ query: z.string().describe("Search query string for fuzzy matching against item names and descriptions"),
95
+ limit: z.number().optional().describe("Maximum number of items to return"),
96
+ offset: z.number().optional().describe("Number of items to skip for pagination")
97
+ }))
98
+ },
99
+ {
100
+ name: "view_items_in_registries",
101
+ description: "View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.",
102
+ inputSchema: zodToJsonSchema(z.object({ items: z.array(z.string()).describe("Array of item names with registry prefix (e.g., ['@shadcn/button', '@shadcn/card'])") }))
103
+ },
104
+ {
105
+ name: "get_item_examples_from_registries",
106
+ description: "Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.",
107
+ inputSchema: zodToJsonSchema(z.object({
108
+ registries: z.array(z.string()).describe("Array of registry names to search (e.g., ['@shadcn', '@acme'])"),
109
+ query: z.string().describe("Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'")
110
+ }))
111
+ },
112
+ {
113
+ name: "get_add_command_for_items",
114
+ description: "Get the @frontic/ui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.",
115
+ inputSchema: zodToJsonSchema(z.object({ items: z.array(z.string()).describe("Array of items to get the add command for prefixed with the registry name (e.g., ['@shadcn/button', '@shadcn/card'])") }))
116
+ },
117
+ {
118
+ name: "get_audit_checklist",
119
+ description: "After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.",
120
+ inputSchema: zodToJsonSchema(z.object({}))
121
+ }
122
+ ] };
123
+ });
124
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
125
+ try {
126
+ if (!request.params.arguments) throw new Error("No tool arguments provided.");
127
+ switch (request.params.name) {
128
+ case "get_project_registries": {
129
+ const config = await getMcpConfig(process.cwd());
130
+ if (!config?.registries) return { content: [{
131
+ type: "text",
132
+ text: dedent`No components.json found or no registries configured.
133
+
134
+ To fix this:
135
+ 1. Use the \`init\` command to create a components.json file
136
+ 2. Or manually create components.json with a registries section`
137
+ }] };
138
+ return { content: [{
139
+ type: "text",
140
+ text: dedent`The following registries are configured in the current project:
141
+
142
+ ${Object.keys(config.registries).map((registry) => `- ${registry}`).join("\n")}
143
+
144
+ You can view the items in a registry by running:
145
+ \`${await npxShadcnVue("view @name-of-registry")}\`
146
+
147
+ For example: \`${await npxShadcnVue("view @shadcn")}\` or \`${await npxShadcnVue("view @shadcn @acme")}\` to view multiple registries.
148
+ `
149
+ }] };
150
+ }
151
+ case "search_items_in_registries": {
152
+ const args = z.object({
153
+ registries: z.array(z.string()),
154
+ query: z.string(),
155
+ limit: z.number().optional(),
156
+ offset: z.number().optional()
157
+ }).parse(request.params.arguments);
158
+ const results = await searchRegistries(args.registries, {
159
+ query: args.query,
160
+ limit: args.limit,
161
+ offset: args.offset,
162
+ config: await getMcpConfig(process.cwd()),
163
+ useCache: false
164
+ });
165
+ if (results.items.length === 0) return { content: [{
166
+ type: "text",
167
+ text: dedent`No items found matching "${args.query}" in registries ${args.registries.join(", ")}, Try searching with a different query or registry.`
168
+ }] };
169
+ return { content: [{
170
+ type: "text",
171
+ text: formatSearchResultsWithPagination(results, {
172
+ query: args.query,
173
+ registries: args.registries
174
+ })
175
+ }] };
176
+ }
177
+ case "list_items_in_registries": {
178
+ const args = z.object({
179
+ registries: z.array(z.string()),
180
+ limit: z.number().optional(),
181
+ offset: z.number().optional(),
182
+ cwd: z.string().optional()
183
+ }).parse(request.params.arguments);
184
+ const results = await searchRegistries(args.registries, {
185
+ limit: args.limit,
186
+ offset: args.offset,
187
+ config: await getMcpConfig(process.cwd()),
188
+ useCache: false
189
+ });
190
+ if (results.items.length === 0) return { content: [{
191
+ type: "text",
192
+ text: dedent`No items found in registries ${args.registries.join(", ")}.`
193
+ }] };
194
+ return { content: [{
195
+ type: "text",
196
+ text: formatSearchResultsWithPagination(results, { registries: args.registries })
197
+ }] };
198
+ }
199
+ case "view_items_in_registries": {
200
+ const args = z.object({ items: z.array(z.string()) }).parse(request.params.arguments);
201
+ const registryItems = await getRegistryItems(args.items, {
202
+ config: await getMcpConfig(process.cwd()),
203
+ useCache: false
204
+ });
205
+ if (registryItems?.length === 0) return { content: [{
206
+ type: "text",
207
+ text: dedent`No items found for: ${args.items.join(", ")}
208
+
209
+ Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`
210
+ }] };
211
+ return { content: [{
212
+ type: "text",
213
+ text: dedent`Item Details:
214
+
215
+ ${formatRegistryItems(registryItems).join("\n\n---\n\n")}`
216
+ }] };
217
+ }
218
+ case "get_item_examples_from_registries": {
219
+ const args = z.object({
220
+ query: z.string(),
221
+ registries: z.array(z.string())
222
+ }).parse(request.params.arguments);
223
+ const config = await getMcpConfig();
224
+ const results = await searchRegistries(args.registries, {
225
+ query: args.query,
226
+ config,
227
+ useCache: false
228
+ });
229
+ if (results.items.length === 0) return { content: [{
230
+ type: "text",
231
+ text: dedent`No examples found for query "${args.query}".
232
+
233
+ Try searching with patterns like:
234
+ - "accordion-demo" for accordion examples
235
+ - "button demo" or "button example"
236
+ - Component name followed by "-demo" or "example"
237
+
238
+ You can also:
239
+ 1. Use search_items_in_registries to find all items matching your query
240
+ 2. View the main component with view_items_in_registries for inline usage documentation`
241
+ }] };
242
+ return { content: [{
243
+ type: "text",
244
+ text: formatItemExamples(await getRegistryItems(results.items.map((item) => item.addCommandArgument), {
245
+ config,
246
+ useCache: false
247
+ }), args.query)
248
+ }] };
249
+ }
250
+ case "get_add_command_for_items": return { content: [{
251
+ type: "text",
252
+ text: await npxShadcnVue(`add ${z.object({ items: z.array(z.string()) }).parse(request.params.arguments).items.join(" ")}`)
253
+ }] };
254
+ case "get_audit_checklist": return { content: [{
255
+ type: "text",
256
+ text: dedent`## Component Audit Checklist
257
+
258
+ After adding or generating components, check the following common issues:
259
+
260
+ - [ ] Ensure imports are correct i.e named vs default imports
261
+ - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.
262
+ - [ ] Ensure all dependencies are installed.
263
+ - [ ] Check for linting errors or warnings
264
+ - [ ] Check for TypeScript errors
265
+ - [ ] Use the Playwright MCP if available.
266
+ `
267
+ }] };
268
+ default: throw new Error(`Tool ${request.params.name} not found`);
269
+ }
270
+ } catch (error) {
271
+ if (error instanceof z.ZodError) return {
272
+ content: [{
273
+ type: "text",
274
+ text: dedent`Invalid input parameters:
275
+ ${error.errors.map((e) => `- ${e.path.join(".")}: ${e.message}`).join("\n")}
276
+ `
277
+ }],
278
+ isError: true
279
+ };
280
+ if (error instanceof RegistryError) {
281
+ let errorMessage = error.message;
282
+ if (error.suggestion) errorMessage += `\n\nšŸ’” ${error.suggestion}`;
283
+ if (error.context) errorMessage += `\n\nContext: ${JSON.stringify(error.context, null, 2)}`;
284
+ return {
285
+ content: [{
286
+ type: "text",
287
+ text: dedent`Error (${error.code}): ${errorMessage}`
288
+ }],
289
+ isError: true
290
+ };
291
+ }
292
+ return {
293
+ content: [{
294
+ type: "text",
295
+ text: dedent`Error: ${error instanceof Error ? error.message : String(error)}`
296
+ }],
297
+ isError: true
298
+ };
299
+ }
300
+ });
301
+
302
+ //#endregion
303
+ export { server as t };
304
+ //# sourceMappingURL=mcp-thK0j_gy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-thK0j_gy.js","names":["parts: string[]"],"sources":["../src/mcp/utils.ts","../src/mcp/index.ts"],"sourcesContent":["import type { z } from 'zod'\nimport type { registryItemSchema, searchResultsSchema } from '@/src/schema'\nimport { detectPackageManager } from 'nypm'\nimport { getRegistriesConfig } from '@/src/registry/api'\n\nconst SHADCN_CLI_COMMAND = '@frontic/ui'\n\nexport async function npxShadcnVue(command: string) {\n const packageRunner = await detectPackageManager(process.cwd())\n\n return `${packageRunner?.name} ${SHADCN_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd)\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n },\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxShadcnVue(`add ${item.addCommandArgument}`)}\\``,\n )\n\n return parts.join(' ')\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(', ')}`\n }\n header += ':'\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total,\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join('\\n\\n')}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[],\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n item.type ? `**Type:** ${item.type}` : '',\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : '',\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(', ')}`\n : '',\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(', ')}`\n : '',\n ]\n return parts.filter(Boolean).join('\\n')\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string,\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push('```tsx')\n parts.push(file.content)\n parts.push('```')\n }\n })\n }\n\n return parts.filter(Boolean).join('\\n')\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? 's' : ''\n } matching \"${query}\":\\n`\n\n return header + sections.join('\\n\\n---\\n\\n')\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js'\nimport dedent from 'dedent'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { getRegistryItems, searchRegistries } from '@/src/registry'\nimport { RegistryError } from '@/src/registry/errors'\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxShadcnVue,\n} from './utils'\n\nexport const server = new Server(\n {\n name: 'frontic-ui',\n version: '1.0.0',\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n },\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'get_project_registries',\n description:\n 'Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: 'list_items_in_registries',\n description:\n 'List items from registries (requires components.json - use init_project if missing)',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@shadcn\\', \\'@acme\\'])',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'search_items_in_registries',\n description:\n 'Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@shadcn\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query string for fuzzy matching against item names and descriptions',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'view_items_in_registries',\n description:\n 'View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of item names with registry prefix (e.g., [\\'@shadcn/button\\', \\'@shadcn/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_item_examples_from_registries',\n description:\n 'Find usage examples and demos with their complete code. Search for patterns like \\'accordion-demo\\', \\'button example\\', \\'card-demo\\', etc. Returns full implementation code with dependencies.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@shadcn\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query for examples (e.g., \\'accordion-demo\\', \\'button demo\\', \\'card example\\', \\'tooltip-demo\\', \\'example-booking-form\\', \\'example-hero\\'). Common patterns: \\'{item-name}-demo\\', \\'{item-name} example\\', \\'example {item-name}\\'',\n ),\n }),\n ),\n },\n {\n name: 'get_add_command_for_items',\n description:\n 'Get the @frontic/ui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of items to get the add command for prefixed with the registry name (e.g., [\\'@shadcn/button\\', \\'@shadcn/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_audit_checklist',\n description:\n 'After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error('No tool arguments provided.')\n }\n\n switch (request.params.name) {\n case 'get_project_registries': {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map(registry => `- ${registry}`)\n .join('\\n')}\n\n You can view the items in a registry by running:\n \\`${await npxShadcnVue('view @name-of-registry')}\\`\n\n For example: \\`${await npxShadcnVue(\n 'view @shadcn',\n )}\\` or \\`${await npxShadcnVue(\n 'view @shadcn @acme',\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case 'search_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n ', ',\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'list_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found in registries ${args.registries.join(\n ', ',\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'view_items_in_registries': {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found for: ${args.items.join(', ')}\n\n Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Item Details:\n\n ${formattedItems.join('\\n\\n---\\n\\n')}`,\n },\n ],\n }\n }\n\n case 'get_item_examples_from_registries': {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map(item => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: 'text',\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case 'get_add_command_for_items': {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: 'text',\n text: await npxShadcnVue(`add ${args.items.join(' ')}`),\n },\n ],\n }\n }\n\n case 'get_audit_checklist': {\n return {\n content: [\n {\n type: 'text',\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n }\n catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`Invalid input parameters:\n ${error.errors\n .map(e => `- ${e.path.join('.')}: ${e.message}`)\n .join('\\n')}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\nšŸ’” ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import "../index-H1YMti1k.js";
2
+ import { a as getRegistry, f as resolveRegistryItems, i as getRegistriesIndex, l as getRegistryItems, m as Config } from "../api-5jmG88HV.js";
3
+
4
+ //#region src/registry/errors.d.ts
5
+ declare const RegistryErrorCode: {
6
+ readonly NETWORK_ERROR: "NETWORK_ERROR";
7
+ readonly NOT_FOUND: "NOT_FOUND";
8
+ readonly UNAUTHORIZED: "UNAUTHORIZED";
9
+ readonly FORBIDDEN: "FORBIDDEN";
10
+ readonly FETCH_ERROR: "FETCH_ERROR";
11
+ readonly NOT_CONFIGURED: "NOT_CONFIGURED";
12
+ readonly INVALID_CONFIG: "INVALID_CONFIG";
13
+ readonly MISSING_ENV_VARS: "MISSING_ENV_VARS";
14
+ readonly LOCAL_FILE_ERROR: "LOCAL_FILE_ERROR";
15
+ readonly PARSE_ERROR: "PARSE_ERROR";
16
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
17
+ readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
18
+ };
19
+ type RegistryErrorCode = (typeof RegistryErrorCode)[keyof typeof RegistryErrorCode];
20
+ declare class RegistryError extends Error {
21
+ readonly code: RegistryErrorCode;
22
+ readonly statusCode?: number;
23
+ readonly context?: Record<string, unknown>;
24
+ readonly suggestion?: string;
25
+ readonly timestamp: Date;
26
+ readonly cause?: unknown;
27
+ constructor(message: string, options?: {
28
+ code?: RegistryErrorCode;
29
+ statusCode?: number;
30
+ cause?: unknown;
31
+ context?: Record<string, unknown>;
32
+ suggestion?: string;
33
+ });
34
+ toJSON(): {
35
+ name: string;
36
+ message: string;
37
+ code: RegistryErrorCode;
38
+ statusCode: number;
39
+ context: Record<string, unknown>;
40
+ suggestion: string;
41
+ timestamp: Date;
42
+ stack: string;
43
+ };
44
+ }
45
+ declare class RegistryNotFoundError extends RegistryError {
46
+ readonly url: string;
47
+ constructor(url: string, cause?: unknown);
48
+ }
49
+ declare class RegistryUnauthorizedError extends RegistryError {
50
+ readonly url: string;
51
+ constructor(url: string, cause?: unknown);
52
+ }
53
+ declare class RegistryForbiddenError extends RegistryError {
54
+ readonly url: string;
55
+ constructor(url: string, cause?: unknown);
56
+ }
57
+ declare class RegistryFetchError extends RegistryError {
58
+ readonly url: string;
59
+ readonly responseBody?: string;
60
+ constructor(url: string, statusCode?: number, responseBody?: string, cause?: unknown);
61
+ }
62
+ declare class RegistryNotConfiguredError extends RegistryError {
63
+ readonly registryName: string | null;
64
+ constructor(registryName: string | null);
65
+ }
66
+ declare class RegistryLocalFileError extends RegistryError {
67
+ readonly filePath: string;
68
+ constructor(filePath: string, cause?: unknown);
69
+ }
70
+ declare class RegistryParseError extends RegistryError {
71
+ readonly item: string;
72
+ readonly parseError: unknown;
73
+ constructor(item: string, parseError: unknown);
74
+ }
75
+ declare class RegistryMissingEnvironmentVariablesError extends RegistryError {
76
+ readonly registryName: string;
77
+ readonly missingVars: string[];
78
+ constructor(registryName: string, missingVars: string[]);
79
+ }
80
+ declare class RegistryInvalidNamespaceError extends RegistryError {
81
+ readonly name: string;
82
+ constructor(name: string);
83
+ }
84
+ declare class RegistriesIndexParseError extends RegistryError {
85
+ readonly parseError: unknown;
86
+ constructor(parseError: unknown);
87
+ }
88
+ //#endregion
89
+ //#region src/registry/search.d.ts
90
+ declare function searchRegistries(registries: string[], options?: {
91
+ query?: string;
92
+ limit?: number;
93
+ offset?: number;
94
+ config?: Partial<Config>;
95
+ useCache?: boolean;
96
+ }): Promise<{
97
+ items?: {
98
+ name?: string;
99
+ type?: string;
100
+ description?: string;
101
+ registry?: string;
102
+ addCommandArgument?: string;
103
+ }[];
104
+ pagination?: {
105
+ total?: number;
106
+ offset?: number;
107
+ limit?: number;
108
+ hasMore?: boolean;
109
+ };
110
+ }>;
111
+ //#endregion
112
+ export { RegistriesIndexParseError, RegistryError, RegistryFetchError, RegistryForbiddenError, RegistryInvalidNamespaceError, RegistryLocalFileError, RegistryMissingEnvironmentVariablesError, RegistryNotConfiguredError, RegistryNotFoundError, RegistryParseError, RegistryUnauthorizedError, getRegistriesIndex, getRegistry, getRegistryItems, resolveRegistryItems, searchRegistries };
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/registry/errors.ts","../../src/registry/search.ts"],"sourcesContent":[],"mappings":";;;;cAIa;;;;EAAA,SAAA,SAAA,EAsBH,WAAA;EAEE,SAAA,WAAiB,EAAA,aACjB;EAEC,SAAA,cAAc,EAAA,gBAAA;EACH,SAAA,cAAA,EAAA,gBAAA;EAEI,SAAA,gBAAA,EAAA,kBAAA;EAEC,SAAA,gBAAA,EAAA,kBAAA;EAMhB,SAAA,WAAA,EAAA,aAAA;EAGG,SAAA,gBAAA,EAAA,kBAAA;;;KAjBJ,iBAAA,WACA,gCAAgC;AAET,cAAtB,aAAA,SAAsB,KAAA,CAAA;EAAK,SAAA,IAAA,EAChB,iBADgB;EA8C3B,SAAA,UAAA,CAAA,EAAA,MAAsB;EAgBtB,SAAA,OAAA,CAAA,EA3De,MA2Df,CAAA,MAA0B,EAAA,OAAQ,CAAA;EAgBlC,SAAA,UAAA,CAAA,EAAA,MAAuB;EAgBvB,SAAA,SAAA,EAzFgB,IAyFG;EAwCnB,SAAA,KAAA,CAAA,EAAA,OAAA;EAqBA,WAAA,CAAA,OAAA,EAAA,MAAuB,EAAA,QAAQ,EAAA;IAY/B,IAAA,CAAA,EA5JA,iBA4JmB;IAyBnB,UAAA,CAAA,EAAA,MAAA;IAmBA,KAAA,CAAA,EAAA,OAAA;IAyDA,OAAA,CAAA,EA9PG,MA8PH,CAAA,MAAA,EAA0B,OAAA,CAAA;;;;ICnSjB,IAAA,EAAA,MAAA;IAMD,OAAA,EAAA,MAAA;IAAR,IAAA,mBAAA;IAEV,UAAA,EAAA,MAAA;IAAA,OAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;cD6DU,qBAAA,SAA8B,aAAA;;;;cAgB9B,yBAAA,SAAkC,aAAA;;;;cAgBlC,sBAAA,SAA+B,aAAA;;;;cAgB/B,kBAAA,SAA2B,aAAA;;;;;cAwC3B,0BAAA,SAAmC,aAAA;;;;cAqBnC,sBAAA,SAA+B,aAAA;;;;cAY/B,kBAAA,SAA2B,aAAA;;;;;cAyB3B,wCAAA,SAAiD,aAAA;;;;;cAmBjD,6BAAA,SAAsC,aAAA;;;;cAyDtC,yBAAA,SAAkC,aAAA;;;;;;iBCnSzB,gBAAA,8BDwBE;;;EA5BX,MAAA,CAAA,EAAA,MAAA;EAwBD,MAAA,CAAA,ECdC,ODcD,CCdS,MDcQ,CAAA;EAGhB,QAAA,CAAA,EAAA,OAAc;CACH,CAAA,EChBrB,ODgBqB,CAAA;EAEI,KAAA,CAAA,EAAA;IAEC,IAAA,CAAA,EAAA,MAAA;IAMhB,IAAA,CAAA,EAAA,MAAA;IAGG,WAAA,CAAA,EAAA,MAAA;;;;EAdmB,UAAA,CAAA,EAAA;IAAK,KAAA,CAAA,EAAA,MAAA;IA8C3B,MAAA,CAAA,EAAA,MAAA;IAgBA,KAAA,CAAA,EAAA,MAAA;IAgBA,OAAA,CAAA,EAAA,OAAA;EAgBA,CAAA;AAwCb,CAAA,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { $ as RegistryLocalFileError, J as RegistriesIndexParseError, Q as RegistryInvalidNamespaceError, X as RegistryFetchError, Y as RegistryError, Z as RegistryForbiddenError, a as getRegistriesIndex, et as RegistryMissingEnvironmentVariablesError, it as RegistryUnauthorizedError, nt as RegistryNotFoundError, o as getRegistry, p as resolveRegistryItems, rt as RegistryParseError, t as searchRegistries, tt as RegistryNotConfiguredError, u as getRegistryItems } from "../registry-CSfiKyuv.js";
2
+ import "../schema-DgHN-d0T.js";
3
+
4
+ export { RegistriesIndexParseError, RegistryError, RegistryFetchError, RegistryForbiddenError, RegistryInvalidNamespaceError, RegistryLocalFileError, RegistryMissingEnvironmentVariablesError, RegistryNotConfiguredError, RegistryNotFoundError, RegistryParseError, RegistryUnauthorizedError, getRegistriesIndex, getRegistry, getRegistryItems, resolveRegistryItems, searchRegistries };