|
7 | 7 | import 'dotenv/config' |
8 | 8 |
|
9 | 9 | import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' |
| 10 | +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' |
10 | 11 |
|
11 | 12 | import { intro } from './cli/intro.js' |
12 | 13 | import packageJson from '../package.json' with { type: 'json' } |
13 | 14 |
|
14 | 15 | import { registerPrompts } from '#prompts/index' |
15 | 16 | import { registerResources } from '#resources/index' |
16 | 17 | import { registerTools } from '#tools/index' |
17 | | -import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' |
18 | | -import { HttpTransport } from '#transports/http' |
19 | | -import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' |
20 | | - |
21 | | -const server = new McpServer({ |
22 | | - name: 'Vuetify', |
23 | | - version: packageJson.version, |
24 | | - capabilities: { |
25 | | - resources: { |
26 | | - description: 'No resources required for Vuetify assistance.', |
27 | | - }, |
28 | | - tools: { |
29 | | - description: 'Tools to help with Vuetify component properties, layouts, and documentation.', |
30 | | - }, |
31 | | - prompts: { |
32 | | - description: 'Prompts to assist with Vuetify component usage and best practices.', |
33 | | - }, |
34 | | - }, |
35 | | -}) |
36 | | - |
37 | | -await registerResources(server) |
38 | | -await registerPrompts(server) |
39 | | -await registerTools(server) |
| 18 | +import { startHttpServer } from '#transports/http' |
40 | 19 |
|
41 | 20 | function parseArgs () { |
42 | 21 | const args = process.argv.slice(2) |
43 | 22 | let transport = 'stdio' |
44 | 23 | let port = 3000 |
45 | 24 | let host = 'localhost' |
46 | 25 | let path = '/mcp' |
47 | | - let stateless = false |
48 | 26 |
|
49 | 27 | for (let i = 0; i < args.length; i++) { |
50 | 28 | const arg = args[i] |
51 | 29 | if (arg === '--transport' && i + 1 < args.length) { |
52 | 30 | transport = args[++i] |
53 | | - } |
54 | | - else if (arg === '--port' && i + 1 < args.length) { |
55 | | - port = parseInt(args[++i], 10) |
56 | | - } |
57 | | - else if (arg === '--host' && i + 1 < args.length) { |
| 31 | + } else if (arg === '--port' && i + 1 < args.length) { |
| 32 | + port = Number.parseInt(args[++i], 10) |
| 33 | + } else if (arg === '--host' && i + 1 < args.length) { |
58 | 34 | host = args[++i] |
59 | | - } |
60 | | - else if (arg === '--path' && i + 1 < args.length) { |
| 35 | + } else if (arg === '--path' && i + 1 < args.length) { |
61 | 36 | path = args[++i] |
62 | 37 | } |
63 | | - else if (arg === '--stateless') { |
64 | | - stateless = true |
65 | | - } |
66 | 38 | } |
67 | 39 |
|
68 | | - return { transport, port, host, path, stateless } |
| 40 | + return { transport, port, host, path } |
69 | 41 | } |
70 | 42 |
|
71 | | -function createTransport (options: ReturnType<typeof parseArgs>): Transport { |
| 43 | +async function main () { |
| 44 | + const options = parseArgs() |
| 45 | + |
72 | 46 | if (options.transport === 'http') { |
73 | | - return new HttpTransport({ |
| 47 | + // HTTP transport handles its own server creation per-request |
| 48 | + await startHttpServer({ |
74 | 49 | port: options.port, |
75 | 50 | host: options.host, |
76 | 51 | path: options.path, |
77 | | - stateless: options.stateless, |
78 | 52 | }) |
79 | | - } |
80 | | - return new StdioServerTransport() |
81 | | -} |
| 53 | + } else { |
| 54 | + // Stdio transport - single server instance |
| 55 | + intro() |
82 | 56 |
|
83 | | -async function main () { |
84 | | - const options = parseArgs() |
| 57 | + const server = new McpServer({ |
| 58 | + name: 'Vuetify', |
| 59 | + version: packageJson.version, |
| 60 | + capabilities: { |
| 61 | + resources: { |
| 62 | + description: 'No resources required for Vuetify assistance.', |
| 63 | + }, |
| 64 | + tools: { |
| 65 | + description: 'Tools to help with Vuetify component properties, layouts, and documentation.', |
| 66 | + }, |
| 67 | + prompts: { |
| 68 | + description: 'Prompts to assist with Vuetify component usage and best practices.', |
| 69 | + }, |
| 70 | + }, |
| 71 | + }) |
85 | 72 |
|
86 | | - if (options.transport === 'stdio') { |
87 | | - intro() |
88 | | - } |
| 73 | + await registerResources(server) |
| 74 | + await registerPrompts(server) |
| 75 | + await registerTools(server) |
89 | 76 |
|
90 | | - const transport = createTransport(options) |
91 | | - await server.connect(transport) |
| 77 | + const transport = new StdioServerTransport() |
| 78 | + await server.connect(transport) |
| 79 | + } |
92 | 80 | } |
93 | 81 |
|
94 | 82 | main().catch(error => { |
|
0 commit comments