@mcp-use/cli 2.1.3 → 2.1.5
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 +340 -41
- package/dist/index.js +21 -25
- package/dist/index.mjs +22 -26
- package/package.json +10 -12
- package/dist/build.js +0 -173
- package/dist/build.js.map +0 -1
- package/dist/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,104 +1,403 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center" style="margin: 0 auto; max-width: 80%;">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/mcp-use/mcp-use-ts/main/packages/mcp-use/static/logo_white.svg">
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/mcp-use/mcp-use-ts/main/packages/mcp-use/static/logo_black.svg">
|
|
5
|
+
<img alt="mcp use logo" src="https://raw.githubusercontent.com/mcp-use/mcp-use-ts/main/packages/mcp-use/static/logo_white.svg" width="80%" style="margin: 20px auto;">
|
|
6
|
+
</picture>
|
|
7
|
+
</div>
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
<h1 align="center">MCP-Use CLI</h1>
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/@mcp-use/cli" alt="NPM Downloads">
|
|
13
|
+
<img src="https://img.shields.io/npm/dw/@mcp-use/cli.svg"/></a>
|
|
14
|
+
<a href="https://www.npmjs.com/package/@mcp-use/cli" alt="NPM Version">
|
|
15
|
+
<img src="https://img.shields.io/npm/v/@mcp-use/cli.svg"/></a>
|
|
16
|
+
<a href="https://github.com/mcp-use/mcp-use-ts/blob/main/LICENSE" alt="License">
|
|
17
|
+
<img src="https://img.shields.io/github/license/mcp-use/mcp-use-ts" /></a>
|
|
18
|
+
<a href="https://github.com/mcp-use/mcp-use-ts/stargazers" alt="GitHub stars">
|
|
19
|
+
<img src="https://img.shields.io/github/stars/mcp-use/mcp-use-ts?style=social" /></a>
|
|
20
|
+
<a href="https://discord.gg/XkNkSkMz3V" alt="Discord">
|
|
21
|
+
<img src="https://dcbadge.limes.pink/api/server/XkNkSkMz3V?style=flat" /></a>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
🛠️ **MCP-Use CLI** is a powerful build and development tool for creating MCP (Model Context Protocol) applications with integrated UI widgets. It enables developers to build MCP servers with custom React components that can be served alongside their MCP tools, providing rich visual interfaces for AI interactions.
|
|
25
|
+
|
|
26
|
+
## 📦 Related Packages
|
|
27
|
+
|
|
28
|
+
| Package | Description | Version |
|
|
29
|
+
|---------|-------------|---------|
|
|
30
|
+
| [mcp-use](https://github.com/mcp-use/mcp-use-ts/tree/main/packages/mcp-use) | Core MCP framework | [](https://www.npmjs.com/package/mcp-use) |
|
|
31
|
+
| [@mcp-use/inspector](https://github.com/mcp-use/mcp-use-ts/tree/main/packages/inspector) | Web-based MCP inspector | [](https://www.npmjs.com/package/@mcp-use/inspector) |
|
|
32
|
+
| [create-mcp-use-app](https://github.com/mcp-use/mcp-use-ts/tree/main/packages/create-mcp-use-app) | Create MCP apps | [](https://www.npmjs.com/package/create-mcp-use-app) |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ✨ Key Features
|
|
37
|
+
|
|
38
|
+
| Feature | Description |
|
|
39
|
+
|---------|-------------|
|
|
40
|
+
| **🚀 Auto Inspector** | Automatically opens the MCP Inspector in your browser when development server starts |
|
|
41
|
+
| **♻️ Hot Reload** | Development mode with automatic reloading for both server code and UI widgets |
|
|
42
|
+
| **🎨 Widget Builder** | Compiles React components into standalone HTML pages with all dependencies bundled |
|
|
43
|
+
| **📦 Production Ready** | Optimized production builds with hashed assets for caching |
|
|
44
|
+
| **🛠️ TypeScript First** | Full TypeScript support with watch mode compilation |
|
|
45
|
+
| **🖥️ Multi-Environment** | Separate commands for development, build, and production deployment |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 🚀 Installation
|
|
6
50
|
|
|
7
51
|
```bash
|
|
52
|
+
# Install globally
|
|
8
53
|
npm install -g @mcp-use/cli
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
54
|
+
|
|
55
|
+
# Or use with npx (no installation needed)
|
|
56
|
+
npx @mcp-use/cli dev
|
|
57
|
+
|
|
58
|
+
# Install as a project dependency
|
|
59
|
+
npm install --save-dev @mcp-use/cli
|
|
13
60
|
```
|
|
14
61
|
|
|
15
|
-
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 📖 Usage
|
|
16
65
|
|
|
17
66
|
### Development Mode
|
|
18
67
|
|
|
68
|
+
Start a development server with hot reload, automatic TypeScript compilation, and auto-opening inspector:
|
|
69
|
+
|
|
19
70
|
```bash
|
|
20
71
|
mcp-use dev [options]
|
|
21
72
|
```
|
|
22
73
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
74
|
+
**What happens in dev mode:**
|
|
75
|
+
1. TypeScript files are compiled in watch mode
|
|
76
|
+
2. UI widgets are built with hot reload
|
|
77
|
+
3. Server runs with auto-restart on changes (via tsx)
|
|
78
|
+
4. Inspector automatically opens in your browser at `http://localhost:3000/inspector`
|
|
79
|
+
5. MCP endpoint is available at `http://localhost:3000/mcp`
|
|
28
80
|
|
|
29
|
-
Options
|
|
81
|
+
**Options:**
|
|
30
82
|
- `-p, --path <path>` - Project directory (default: current directory)
|
|
31
83
|
- `--port <port>` - Server port (default: 3000)
|
|
32
|
-
- `--no-open` - Don't auto-open inspector
|
|
84
|
+
- `--no-open` - Don't auto-open inspector in browser
|
|
33
85
|
|
|
34
86
|
### Production Build
|
|
35
87
|
|
|
88
|
+
Build your MCP application for production deployment:
|
|
89
|
+
|
|
36
90
|
```bash
|
|
37
91
|
mcp-use build [options]
|
|
38
92
|
```
|
|
39
93
|
|
|
40
|
-
|
|
94
|
+
**What happens during build:**
|
|
95
|
+
1. TypeScript is compiled to JavaScript
|
|
96
|
+
2. All `.tsx` files in `resources/` are bundled as standalone HTML pages
|
|
97
|
+
3. Assets are hashed for optimal caching
|
|
98
|
+
4. Output is optimized and minified
|
|
41
99
|
|
|
42
|
-
Options
|
|
100
|
+
**Options:**
|
|
43
101
|
- `-p, --path <path>` - Project directory (default: current directory)
|
|
44
102
|
|
|
45
|
-
|
|
46
|
-
- Hashed bundle for caching
|
|
47
|
-
- Standalone HTML file
|
|
48
|
-
- All dependencies bundled
|
|
103
|
+
### Production Server
|
|
49
104
|
|
|
50
|
-
|
|
105
|
+
Start the production server from built files:
|
|
51
106
|
|
|
52
107
|
```bash
|
|
53
108
|
mcp-use start [options]
|
|
54
109
|
```
|
|
55
110
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Options:
|
|
111
|
+
**Options:**
|
|
59
112
|
- `-p, --path <path>` - Project directory (default: current directory)
|
|
60
113
|
- `--port <port>` - Server port (default: 3000)
|
|
61
114
|
|
|
62
|
-
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 💡 Examples
|
|
118
|
+
|
|
119
|
+
### Basic Development Workflow
|
|
63
120
|
|
|
64
121
|
```bash
|
|
122
|
+
# Create a new MCP app (using create-mcp-use-app)
|
|
123
|
+
npx create-mcp-use-app my-mcp-server
|
|
124
|
+
|
|
125
|
+
# Navigate to project
|
|
126
|
+
cd my-mcp-server
|
|
127
|
+
|
|
65
128
|
# Start development with auto-reload and inspector
|
|
66
129
|
mcp-use dev
|
|
67
130
|
|
|
68
|
-
#
|
|
69
|
-
|
|
131
|
+
# Browser automatically opens to http://localhost:3000/inspector
|
|
132
|
+
```
|
|
70
133
|
|
|
71
|
-
|
|
72
|
-
|
|
134
|
+
### Custom Port Configuration
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Development on port 8080
|
|
138
|
+
mcp-use dev --port 8080
|
|
73
139
|
|
|
74
|
-
#
|
|
140
|
+
# Production on port 8080
|
|
75
141
|
mcp-use build
|
|
142
|
+
mcp-use start --port 8080
|
|
143
|
+
```
|
|
76
144
|
|
|
77
|
-
|
|
78
|
-
mcp-use start
|
|
145
|
+
### Working with Different Project Structures
|
|
79
146
|
|
|
80
|
-
|
|
147
|
+
```bash
|
|
148
|
+
# Specify custom project path
|
|
81
149
|
mcp-use dev -p ./my-app
|
|
82
150
|
mcp-use build -p ./my-app
|
|
83
151
|
mcp-use start -p ./my-app
|
|
152
|
+
|
|
153
|
+
# Development without auto-opening browser
|
|
154
|
+
mcp-use dev --no-open
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### CI/CD Pipeline Example
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# In your CI/CD pipeline
|
|
161
|
+
npm install
|
|
162
|
+
npm run build # Uses mcp-use build
|
|
163
|
+
npm run start # Uses mcp-use start
|
|
164
|
+
|
|
165
|
+
# Or with PM2 for production
|
|
166
|
+
npm run build
|
|
167
|
+
pm2 start "mcp-use start" --name my-mcp-server
|
|
84
168
|
```
|
|
85
169
|
|
|
86
|
-
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 📁 Project Structure
|
|
173
|
+
|
|
174
|
+
The CLI expects the following project structure:
|
|
87
175
|
|
|
88
176
|
```
|
|
89
|
-
my-app/
|
|
90
|
-
├──
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
└──
|
|
177
|
+
my-mcp-app/
|
|
178
|
+
├── package.json
|
|
179
|
+
├── tsconfig.json
|
|
180
|
+
├── src/
|
|
181
|
+
│ └── index.ts # Your MCP server entry point
|
|
182
|
+
├── resources/ # UI widgets (React components)
|
|
183
|
+
│ ├── todo-list.tsx # Becomes /widgets/todo-list/index.html
|
|
184
|
+
│ └── dashboard.tsx # Becomes /widgets/dashboard/index.html
|
|
185
|
+
└── dist/ # Build output
|
|
186
|
+
├── index.js # Compiled server
|
|
94
187
|
└── resources/
|
|
95
188
|
└── mcp-use/
|
|
96
189
|
└── widgets/
|
|
97
190
|
├── todo-list/
|
|
98
191
|
│ ├── index.html
|
|
99
192
|
│ └── assets/
|
|
100
|
-
└──
|
|
193
|
+
│ └── index-[hash].js
|
|
194
|
+
└── dashboard/
|
|
101
195
|
├── index.html
|
|
102
196
|
└── assets/
|
|
197
|
+
└── index-[hash].js
|
|
103
198
|
```
|
|
104
199
|
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 🎨 Creating UI Widgets
|
|
203
|
+
|
|
204
|
+
UI widgets are React components that get compiled into standalone HTML pages. They can interact with your MCP server tools using the `useMcp` hook:
|
|
205
|
+
|
|
206
|
+
```tsx
|
|
207
|
+
// resources/task-manager.tsx
|
|
208
|
+
import React, { useState, useEffect } from 'react'
|
|
209
|
+
import { useMcp } from 'mcp-use/react'
|
|
210
|
+
|
|
211
|
+
export default function TaskManager() {
|
|
212
|
+
const { callTool, status, error } = useMcp()
|
|
213
|
+
const [tasks, setTasks] = useState([])
|
|
214
|
+
const [newTask, setNewTask] = useState('')
|
|
215
|
+
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
loadTasks()
|
|
218
|
+
}, [])
|
|
219
|
+
|
|
220
|
+
const loadTasks = async () => {
|
|
221
|
+
const result = await callTool('list_tasks')
|
|
222
|
+
setTasks(result.tasks)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const addTask = async () => {
|
|
226
|
+
if (!newTask.trim()) return
|
|
227
|
+
|
|
228
|
+
await callTool('create_task', {
|
|
229
|
+
title: newTask,
|
|
230
|
+
status: 'pending'
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
setNewTask('')
|
|
234
|
+
await loadTasks()
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (status === 'connecting') return <div>Connecting...</div>
|
|
238
|
+
if (error) return <div>Error: {error.message}</div>
|
|
239
|
+
|
|
240
|
+
return (
|
|
241
|
+
<div className="p-4">
|
|
242
|
+
<h1 className="text-2xl font-bold mb-4">Task Manager</h1>
|
|
243
|
+
|
|
244
|
+
<div className="flex gap-2 mb-4">
|
|
245
|
+
<input
|
|
246
|
+
type="text"
|
|
247
|
+
value={newTask}
|
|
248
|
+
onChange={(e) => setNewTask(e.target.value)}
|
|
249
|
+
placeholder="Add a new task..."
|
|
250
|
+
className="flex-1 p-2 border rounded"
|
|
251
|
+
/>
|
|
252
|
+
<button
|
|
253
|
+
onClick={addTask}
|
|
254
|
+
className="px-4 py-2 bg-blue-500 text-white rounded"
|
|
255
|
+
>
|
|
256
|
+
Add Task
|
|
257
|
+
</button>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<ul className="space-y-2">
|
|
261
|
+
{tasks.map(task => (
|
|
262
|
+
<li key={task.id} className="p-2 border rounded">
|
|
263
|
+
{task.title}
|
|
264
|
+
</li>
|
|
265
|
+
))}
|
|
266
|
+
</ul>
|
|
267
|
+
</div>
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
This widget will be available at `http://localhost:3000/widgets/task-manager` after building.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 🔧 Configuration
|
|
277
|
+
|
|
278
|
+
### TypeScript Configuration
|
|
279
|
+
|
|
280
|
+
Ensure your `tsconfig.json` includes:
|
|
281
|
+
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"compilerOptions": {
|
|
285
|
+
"target": "ES2020",
|
|
286
|
+
"module": "ESNext",
|
|
287
|
+
"jsx": "react-jsx",
|
|
288
|
+
"esModuleInterop": true,
|
|
289
|
+
"skipLibCheck": true,
|
|
290
|
+
"strict": true,
|
|
291
|
+
"outDir": "./dist",
|
|
292
|
+
"rootDir": "./src"
|
|
293
|
+
},
|
|
294
|
+
"include": ["src/**/*", "resources/**/*"]
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Package.json Scripts
|
|
299
|
+
|
|
300
|
+
Add these scripts for convenience:
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"scripts": {
|
|
305
|
+
"dev": "mcp-use dev",
|
|
306
|
+
"build": "mcp-use build",
|
|
307
|
+
"start": "mcp-use start",
|
|
308
|
+
"serve": "npm run build && npm run start"
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 🚀 Advanced Usage
|
|
316
|
+
|
|
317
|
+
### Environment Variables
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# Custom port via environment variable
|
|
321
|
+
PORT=8080 mcp-use dev
|
|
322
|
+
|
|
323
|
+
# Production build with custom output
|
|
324
|
+
BUILD_DIR=./build mcp-use build
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Docker Deployment
|
|
328
|
+
|
|
329
|
+
```dockerfile
|
|
330
|
+
# Dockerfile
|
|
331
|
+
FROM node:20-alpine
|
|
332
|
+
WORKDIR /app
|
|
333
|
+
COPY package*.json ./
|
|
334
|
+
RUN npm ci --production
|
|
335
|
+
COPY . .
|
|
336
|
+
RUN npm run build
|
|
337
|
+
EXPOSE 3000
|
|
338
|
+
CMD ["npm", "start"]
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Integration with Existing Express Apps
|
|
342
|
+
|
|
343
|
+
If you have an existing Express app, you can mount the built widgets:
|
|
344
|
+
|
|
345
|
+
```ts
|
|
346
|
+
import express from 'express'
|
|
347
|
+
import path from 'path'
|
|
348
|
+
|
|
349
|
+
const app = express()
|
|
350
|
+
|
|
351
|
+
// Serve MCP widgets
|
|
352
|
+
app.use('/widgets', express.static(
|
|
353
|
+
path.join(__dirname, '../dist/resources/mcp-use/widgets')
|
|
354
|
+
))
|
|
355
|
+
|
|
356
|
+
// Your other routes...
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 🐛 Troubleshooting
|
|
362
|
+
|
|
363
|
+
### Common Issues
|
|
364
|
+
|
|
365
|
+
**Port already in use:**
|
|
366
|
+
```bash
|
|
367
|
+
# Use a different port
|
|
368
|
+
mcp-use dev --port 3001
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**TypeScript compilation errors:**
|
|
372
|
+
```bash
|
|
373
|
+
# Check your tsconfig.json
|
|
374
|
+
# Ensure all dependencies are installed
|
|
375
|
+
npm install
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**Widgets not loading:**
|
|
379
|
+
- Ensure `.tsx` files are in the `resources/` directory
|
|
380
|
+
- Check that React dependencies are installed
|
|
381
|
+
- Verify the build output in `dist/resources/mcp-use/widgets/`
|
|
382
|
+
|
|
383
|
+
**Inspector not opening:**
|
|
384
|
+
```bash
|
|
385
|
+
# Manually open http://localhost:3000/inspector
|
|
386
|
+
# Or disable auto-open
|
|
387
|
+
mcp-use dev --no-open
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## 📚 Learn More
|
|
393
|
+
|
|
394
|
+
- [MCP-Use Documentation](https://github.com/mcp-use/mcp-use-ts)
|
|
395
|
+
- [Model Context Protocol](https://modelcontextprotocol.io)
|
|
396
|
+
- [Creating MCP Servers](https://github.com/mcp-use/mcp-use-ts/tree/main/packages/mcp-use#-mcp-server-framework)
|
|
397
|
+
- [MCP Inspector Guide](https://github.com/mcp-use/mcp-use-ts/tree/main/packages/inspector)
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## 📜 License
|
|
402
|
+
|
|
403
|
+
MIT © [MCP-Use](https://github.com/mcp-use)
|
package/dist/index.js
CHANGED
|
@@ -155,8 +155,8 @@ async function buildWidgets(projectPath, watch = false) {
|
|
|
155
155
|
},
|
|
156
156
|
plugins: [{
|
|
157
157
|
name: "html-writer",
|
|
158
|
-
setup(
|
|
159
|
-
|
|
158
|
+
setup(buildPlugin) {
|
|
159
|
+
buildPlugin.onEnd(async () => {
|
|
160
160
|
try {
|
|
161
161
|
const files = await import_node_fs.promises.readdir(import_node_path.default.join(pageOutDir, "assets"));
|
|
162
162
|
const mainJs = files.find((f) => f.startsWith(`${baseName}-`) && f.endsWith(".js"));
|
|
@@ -195,13 +195,17 @@ async function buildWidgets(projectPath, watch = false) {
|
|
|
195
195
|
// src/index.ts
|
|
196
196
|
var import_node_child_process = require("child_process");
|
|
197
197
|
var import_node_fs2 = require("fs");
|
|
198
|
+
var import_promises = require("fs/promises");
|
|
198
199
|
var import_node_path2 = __toESM(require("path"));
|
|
199
200
|
var import_open = __toESM(require("open"));
|
|
200
201
|
var program = new import_commander.Command();
|
|
201
|
-
|
|
202
|
+
var packageContent = (0, import_node_fs2.readFileSync)(import_node_path2.default.join(__dirname, "../package.json"), "utf-8");
|
|
203
|
+
var packageJson = JSON.parse(packageContent);
|
|
204
|
+
var packageVersion = packageJson.version || "unknown";
|
|
205
|
+
program.name("mcp-use").description("MCP CLI tool").version(packageVersion);
|
|
202
206
|
async function isPortAvailable(port) {
|
|
203
207
|
try {
|
|
204
|
-
|
|
208
|
+
await fetch(`http://localhost:${port}`);
|
|
205
209
|
return false;
|
|
206
210
|
} catch {
|
|
207
211
|
return true;
|
|
@@ -248,7 +252,8 @@ function runCommand(command, args, cwd) {
|
|
|
248
252
|
program.command("build").description("Build TypeScript and MCP UI widgets").option("-p, --path <path>", "Path to project directory", process.cwd()).action(async (options) => {
|
|
249
253
|
try {
|
|
250
254
|
const projectPath = import_node_path2.default.resolve(options.path);
|
|
251
|
-
console.log(
|
|
255
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
256
|
+
`);
|
|
252
257
|
console.log("Building TypeScript...");
|
|
253
258
|
await runCommand("npx", ["tsc"], projectPath);
|
|
254
259
|
console.log("\x1B[32m\u2713\x1B[0m TypeScript build complete!");
|
|
@@ -262,18 +267,19 @@ program.command("dev").description("Run development server with auto-reload and
|
|
|
262
267
|
try {
|
|
263
268
|
const projectPath = import_node_path2.default.resolve(options.path);
|
|
264
269
|
let port = parseInt(options.port, 10);
|
|
265
|
-
console.log(
|
|
270
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
271
|
+
`);
|
|
266
272
|
if (!await isPortAvailable(port)) {
|
|
267
273
|
console.log(`\x1B[33m\u26A0\uFE0F Port ${port} is already in use\x1B[0m`);
|
|
268
274
|
const availablePort = await findAvailablePort(port);
|
|
269
275
|
console.log(`\x1B[32m\u2713\x1B[0m Using port ${availablePort} instead`);
|
|
270
276
|
port = availablePort;
|
|
271
277
|
}
|
|
272
|
-
let serverFile = "
|
|
278
|
+
let serverFile = "index.ts";
|
|
273
279
|
try {
|
|
274
|
-
await
|
|
280
|
+
await (0, import_promises.access)(import_node_path2.default.join(projectPath, serverFile));
|
|
275
281
|
} catch {
|
|
276
|
-
serverFile = "src/
|
|
282
|
+
serverFile = "src/server.ts";
|
|
277
283
|
}
|
|
278
284
|
const processes = [];
|
|
279
285
|
const tscProc = (0, import_node_child_process.spawn)("npx", ["tsc", "--watch"], {
|
|
@@ -294,21 +300,10 @@ program.command("dev").description("Run development server with auto-reload and
|
|
|
294
300
|
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
295
301
|
const serverProc = (0, import_node_child_process.spawn)("npx", ["tsx", "watch", serverFile], {
|
|
296
302
|
cwd: projectPath,
|
|
297
|
-
stdio: "
|
|
303
|
+
stdio: "inherit",
|
|
298
304
|
shell: false,
|
|
299
305
|
env: { ...process.env, PORT: String(port) }
|
|
300
306
|
});
|
|
301
|
-
serverProc.stderr?.on("data", (data) => {
|
|
302
|
-
const output = data.toString();
|
|
303
|
-
if (output.includes("EADDRINUSE")) {
|
|
304
|
-
console.log(`\x1B[31m\u2717\x1B[0m Port ${port} is still in use. Please try a different port with --port`);
|
|
305
|
-
console.log(`\x1B[90mHint: Use --port 3001 or kill the process using port ${port}\x1B[0m`);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
serverProc.stdout?.on("data", (data) => {
|
|
310
|
-
process.stdout.write(data);
|
|
311
|
-
});
|
|
312
307
|
processes.push(serverProc);
|
|
313
308
|
if (options.open !== false) {
|
|
314
309
|
const startTime = Date.now();
|
|
@@ -345,12 +340,13 @@ program.command("start").description("Start production server").option("-p, --pa
|
|
|
345
340
|
try {
|
|
346
341
|
const projectPath = import_node_path2.default.resolve(options.path);
|
|
347
342
|
const port = parseInt(options.port, 10);
|
|
348
|
-
console.log(
|
|
349
|
-
|
|
343
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
344
|
+
`);
|
|
345
|
+
let serverFile = "dist/index.js";
|
|
350
346
|
try {
|
|
351
|
-
await
|
|
347
|
+
await (0, import_promises.access)(import_node_path2.default.join(projectPath, serverFile));
|
|
352
348
|
} catch {
|
|
353
|
-
serverFile = "dist/
|
|
349
|
+
serverFile = "dist/server.js";
|
|
354
350
|
}
|
|
355
351
|
console.log("Starting production server...");
|
|
356
352
|
const serverProc = (0, import_node_child_process.spawn)("node", [serverFile], {
|
package/dist/index.mjs
CHANGED
|
@@ -132,8 +132,8 @@ async function buildWidgets(projectPath, watch = false) {
|
|
|
132
132
|
},
|
|
133
133
|
plugins: [{
|
|
134
134
|
name: "html-writer",
|
|
135
|
-
setup(
|
|
136
|
-
|
|
135
|
+
setup(buildPlugin) {
|
|
136
|
+
buildPlugin.onEnd(async () => {
|
|
137
137
|
try {
|
|
138
138
|
const files = await fs.readdir(path.join(pageOutDir, "assets"));
|
|
139
139
|
const mainJs = files.find((f) => f.startsWith(`${baseName}-`) && f.endsWith(".js"));
|
|
@@ -171,14 +171,18 @@ async function buildWidgets(projectPath, watch = false) {
|
|
|
171
171
|
|
|
172
172
|
// src/index.ts
|
|
173
173
|
import { spawn } from "child_process";
|
|
174
|
-
import {
|
|
174
|
+
import { readFileSync } from "fs";
|
|
175
|
+
import { access } from "fs/promises";
|
|
175
176
|
import path2 from "path";
|
|
176
177
|
import open from "open";
|
|
177
178
|
var program = new Command();
|
|
178
|
-
|
|
179
|
+
var packageContent = readFileSync(path2.join(__dirname, "../package.json"), "utf-8");
|
|
180
|
+
var packageJson = JSON.parse(packageContent);
|
|
181
|
+
var packageVersion = packageJson.version || "unknown";
|
|
182
|
+
program.name("mcp-use").description("MCP CLI tool").version(packageVersion);
|
|
179
183
|
async function isPortAvailable(port) {
|
|
180
184
|
try {
|
|
181
|
-
|
|
185
|
+
await fetch(`http://localhost:${port}`);
|
|
182
186
|
return false;
|
|
183
187
|
} catch {
|
|
184
188
|
return true;
|
|
@@ -225,7 +229,8 @@ function runCommand(command, args, cwd) {
|
|
|
225
229
|
program.command("build").description("Build TypeScript and MCP UI widgets").option("-p, --path <path>", "Path to project directory", process.cwd()).action(async (options) => {
|
|
226
230
|
try {
|
|
227
231
|
const projectPath = path2.resolve(options.path);
|
|
228
|
-
console.log(
|
|
232
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
233
|
+
`);
|
|
229
234
|
console.log("Building TypeScript...");
|
|
230
235
|
await runCommand("npx", ["tsc"], projectPath);
|
|
231
236
|
console.log("\x1B[32m\u2713\x1B[0m TypeScript build complete!");
|
|
@@ -239,18 +244,19 @@ program.command("dev").description("Run development server with auto-reload and
|
|
|
239
244
|
try {
|
|
240
245
|
const projectPath = path2.resolve(options.path);
|
|
241
246
|
let port = parseInt(options.port, 10);
|
|
242
|
-
console.log(
|
|
247
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
248
|
+
`);
|
|
243
249
|
if (!await isPortAvailable(port)) {
|
|
244
250
|
console.log(`\x1B[33m\u26A0\uFE0F Port ${port} is already in use\x1B[0m`);
|
|
245
251
|
const availablePort = await findAvailablePort(port);
|
|
246
252
|
console.log(`\x1B[32m\u2713\x1B[0m Using port ${availablePort} instead`);
|
|
247
253
|
port = availablePort;
|
|
248
254
|
}
|
|
249
|
-
let serverFile = "
|
|
255
|
+
let serverFile = "index.ts";
|
|
250
256
|
try {
|
|
251
|
-
await
|
|
257
|
+
await access(path2.join(projectPath, serverFile));
|
|
252
258
|
} catch {
|
|
253
|
-
serverFile = "src/
|
|
259
|
+
serverFile = "src/server.ts";
|
|
254
260
|
}
|
|
255
261
|
const processes = [];
|
|
256
262
|
const tscProc = spawn("npx", ["tsc", "--watch"], {
|
|
@@ -271,21 +277,10 @@ program.command("dev").description("Run development server with auto-reload and
|
|
|
271
277
|
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
272
278
|
const serverProc = spawn("npx", ["tsx", "watch", serverFile], {
|
|
273
279
|
cwd: projectPath,
|
|
274
|
-
stdio: "
|
|
280
|
+
stdio: "inherit",
|
|
275
281
|
shell: false,
|
|
276
282
|
env: { ...process.env, PORT: String(port) }
|
|
277
283
|
});
|
|
278
|
-
serverProc.stderr?.on("data", (data) => {
|
|
279
|
-
const output = data.toString();
|
|
280
|
-
if (output.includes("EADDRINUSE")) {
|
|
281
|
-
console.log(`\x1B[31m\u2717\x1B[0m Port ${port} is still in use. Please try a different port with --port`);
|
|
282
|
-
console.log(`\x1B[90mHint: Use --port 3001 or kill the process using port ${port}\x1B[0m`);
|
|
283
|
-
process.exit(1);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
serverProc.stdout?.on("data", (data) => {
|
|
287
|
-
process.stdout.write(data);
|
|
288
|
-
});
|
|
289
284
|
processes.push(serverProc);
|
|
290
285
|
if (options.open !== false) {
|
|
291
286
|
const startTime = Date.now();
|
|
@@ -322,12 +317,13 @@ program.command("start").description("Start production server").option("-p, --pa
|
|
|
322
317
|
try {
|
|
323
318
|
const projectPath = path2.resolve(options.path);
|
|
324
319
|
const port = parseInt(options.port, 10);
|
|
325
|
-
console.log(
|
|
326
|
-
|
|
320
|
+
console.log(`\x1B[36m\x1B[1mmcp-use\x1B[0m \x1B[90mVersion: ${packageJson.version}\x1B[0m
|
|
321
|
+
`);
|
|
322
|
+
let serverFile = "dist/index.js";
|
|
327
323
|
try {
|
|
328
|
-
await
|
|
324
|
+
await access(path2.join(projectPath, serverFile));
|
|
329
325
|
} catch {
|
|
330
|
-
serverFile = "dist/
|
|
326
|
+
serverFile = "dist/server.js";
|
|
331
327
|
}
|
|
332
328
|
console.log("Starting production server...");
|
|
333
329
|
const serverProc = spawn("node", [serverFile], {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-use/cli",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
4
4
|
"description": "Build tool for MCP UI widgets - bundles React components into standalone HTML pages for Model Context Protocol servers",
|
|
5
5
|
"author": "mcp-use, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,26 +31,24 @@
|
|
|
31
31
|
"files": [
|
|
32
32
|
"dist"
|
|
33
33
|
],
|
|
34
|
-
"scripts": {
|
|
35
|
-
"build": "tsup src/index.ts --format cjs,esm && tsc --emitDeclarationOnly --declaration",
|
|
36
|
-
"dev": "tsc --watch",
|
|
37
|
-
"test": "vitest"
|
|
38
|
-
},
|
|
39
34
|
"dependencies": {
|
|
40
|
-
"mcp-use": "^0.3.0",
|
|
41
|
-
"@mcp-use/inspector": "^0.3.2",
|
|
42
35
|
"commander": "^11.0.0",
|
|
43
36
|
"esbuild": "^0.19.0",
|
|
44
37
|
"globby": "^14.0.0",
|
|
45
38
|
"open": "^10.0.0",
|
|
46
|
-
"tsx": "^4.0.0"
|
|
39
|
+
"tsx": "^4.0.0",
|
|
40
|
+
"@mcp-use/inspector": "0.3.5",
|
|
41
|
+
"mcp-use": "1.0.1"
|
|
47
42
|
},
|
|
48
43
|
"devDependencies": {
|
|
49
44
|
"@types/node": "^20.0.0",
|
|
50
|
-
"typescript": "^5.0.0"
|
|
51
|
-
"vitest": "^1.0.0"
|
|
45
|
+
"typescript": "^5.0.0"
|
|
52
46
|
},
|
|
53
47
|
"publishConfig": {
|
|
54
48
|
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsup src/index.ts --format cjs,esm && tsc --emitDeclarationOnly --declaration",
|
|
52
|
+
"dev": "tsc --watch"
|
|
55
53
|
}
|
|
56
|
-
}
|
|
54
|
+
}
|
package/dist/build.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.buildWidgets = buildWidgets;
|
|
7
|
-
const node_fs_1 = require("node:fs");
|
|
8
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const esbuild_1 = require("esbuild");
|
|
10
|
-
const globby_1 = require("globby");
|
|
11
|
-
const ROUTE_PREFIX = '/mcp-use/widgets';
|
|
12
|
-
const SRC_DIR = 'resources';
|
|
13
|
-
const OUT_DIR = 'dist/resources';
|
|
14
|
-
function toRoute(file) {
|
|
15
|
-
const rel = file.replace(new RegExp(`^${SRC_DIR}/`), '').replace(/\.tsx?$/, '');
|
|
16
|
-
return `${ROUTE_PREFIX}/${rel}`;
|
|
17
|
-
}
|
|
18
|
-
function outDirForRoute(route) {
|
|
19
|
-
return node_path_1.default.join(OUT_DIR, route.replace(/^\//, ''));
|
|
20
|
-
}
|
|
21
|
-
function htmlTemplate({ title, scriptPath }) {
|
|
22
|
-
return `<!doctype html>
|
|
23
|
-
<html lang="en">
|
|
24
|
-
<head>
|
|
25
|
-
<meta charset="UTF-8" />
|
|
26
|
-
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
27
|
-
<title>${title} Widget</title>
|
|
28
|
-
<style>
|
|
29
|
-
body {
|
|
30
|
-
margin: 0;
|
|
31
|
-
padding: 20px;
|
|
32
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
|
|
33
|
-
background: #f5f5f5;
|
|
34
|
-
}
|
|
35
|
-
#widget-root {
|
|
36
|
-
max-width: 1200px;
|
|
37
|
-
margin: 0 auto;
|
|
38
|
-
}
|
|
39
|
-
</style>
|
|
40
|
-
</head>
|
|
41
|
-
<body>
|
|
42
|
-
<div id="widget-root"></div>
|
|
43
|
-
<script type="module" src="${scriptPath}"></script>
|
|
44
|
-
</body>
|
|
45
|
-
</html>`;
|
|
46
|
-
}
|
|
47
|
-
async function buildWidget(entry, projectPath, minify = true) {
|
|
48
|
-
const relativePath = node_path_1.default.relative(projectPath, entry);
|
|
49
|
-
const route = toRoute(relativePath);
|
|
50
|
-
const pageOutDir = node_path_1.default.join(projectPath, outDirForRoute(route));
|
|
51
|
-
const baseName = node_path_1.default.parse(entry).name;
|
|
52
|
-
// Build JS/CSS chunks for this page
|
|
53
|
-
await (0, esbuild_1.build)({
|
|
54
|
-
entryPoints: [entry],
|
|
55
|
-
bundle: true,
|
|
56
|
-
splitting: true,
|
|
57
|
-
format: 'esm',
|
|
58
|
-
platform: 'browser',
|
|
59
|
-
target: 'es2018',
|
|
60
|
-
sourcemap: !minify,
|
|
61
|
-
minify,
|
|
62
|
-
outdir: node_path_1.default.join(pageOutDir, 'assets'),
|
|
63
|
-
logLevel: 'silent',
|
|
64
|
-
loader: {
|
|
65
|
-
'.svg': 'file',
|
|
66
|
-
'.png': 'file',
|
|
67
|
-
'.jpg': 'file',
|
|
68
|
-
'.jpeg': 'file',
|
|
69
|
-
'.gif': 'file',
|
|
70
|
-
'.css': 'css',
|
|
71
|
-
},
|
|
72
|
-
entryNames: `[name]-[hash]`,
|
|
73
|
-
chunkNames: `chunk-[hash]`,
|
|
74
|
-
assetNames: `asset-[hash]`,
|
|
75
|
-
define: {
|
|
76
|
-
'process.env.NODE_ENV': minify ? '"production"' : '"development"',
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
// Find the main entry file name
|
|
80
|
-
const files = await node_fs_1.promises.readdir(node_path_1.default.join(pageOutDir, 'assets'));
|
|
81
|
-
const mainJs = files.find(f => f.startsWith(`${baseName}-`) && f.endsWith('.js'));
|
|
82
|
-
if (!mainJs)
|
|
83
|
-
throw new Error(`Failed to locate entry JS for ${entry}`);
|
|
84
|
-
// Write an index.html that points to the entry
|
|
85
|
-
await node_fs_1.promises.mkdir(pageOutDir, { recursive: true });
|
|
86
|
-
await node_fs_1.promises.writeFile(node_path_1.default.join(pageOutDir, 'index.html'), htmlTemplate({
|
|
87
|
-
title: baseName,
|
|
88
|
-
scriptPath: `./assets/${mainJs}`,
|
|
89
|
-
}), 'utf8');
|
|
90
|
-
return { baseName, route };
|
|
91
|
-
}
|
|
92
|
-
async function buildWidgets(projectPath, watch = false) {
|
|
93
|
-
const srcDir = node_path_1.default.join(projectPath, SRC_DIR);
|
|
94
|
-
const outDir = node_path_1.default.join(projectPath, OUT_DIR);
|
|
95
|
-
// Clean dist
|
|
96
|
-
await node_fs_1.promises.rm(outDir, { recursive: true, force: true });
|
|
97
|
-
// Find all TSX entries
|
|
98
|
-
const entries = await (0, globby_1.globby)([`${srcDir}/**/*.tsx`]);
|
|
99
|
-
if (!watch) {
|
|
100
|
-
console.log(`Building ${entries.length} widget files...`);
|
|
101
|
-
}
|
|
102
|
-
if (watch) {
|
|
103
|
-
// Watch mode - create contexts for each entry but don't log individual watching messages
|
|
104
|
-
const contexts = [];
|
|
105
|
-
for (const entry of entries) {
|
|
106
|
-
const relativePath = node_path_1.default.relative(projectPath, entry);
|
|
107
|
-
const route = toRoute(relativePath);
|
|
108
|
-
const pageOutDir = node_path_1.default.join(projectPath, outDirForRoute(route));
|
|
109
|
-
const baseName = node_path_1.default.parse(entry).name;
|
|
110
|
-
const ctx = await (0, esbuild_1.context)({
|
|
111
|
-
entryPoints: [entry],
|
|
112
|
-
bundle: true,
|
|
113
|
-
splitting: true,
|
|
114
|
-
format: 'esm',
|
|
115
|
-
platform: 'browser',
|
|
116
|
-
target: 'es2018',
|
|
117
|
-
sourcemap: true,
|
|
118
|
-
minify: false,
|
|
119
|
-
outdir: node_path_1.default.join(pageOutDir, 'assets'),
|
|
120
|
-
logLevel: 'silent',
|
|
121
|
-
loader: {
|
|
122
|
-
'.svg': 'file',
|
|
123
|
-
'.png': 'file',
|
|
124
|
-
'.jpg': 'file',
|
|
125
|
-
'.jpeg': 'file',
|
|
126
|
-
'.gif': 'file',
|
|
127
|
-
'.css': 'css',
|
|
128
|
-
},
|
|
129
|
-
entryNames: `[name]-[hash]`,
|
|
130
|
-
chunkNames: `chunk-[hash]`,
|
|
131
|
-
assetNames: `asset-[hash]`,
|
|
132
|
-
define: {
|
|
133
|
-
'process.env.NODE_ENV': '"development"',
|
|
134
|
-
},
|
|
135
|
-
plugins: [{
|
|
136
|
-
name: 'html-writer',
|
|
137
|
-
setup(build) {
|
|
138
|
-
build.onEnd(async () => {
|
|
139
|
-
try {
|
|
140
|
-
const files = await node_fs_1.promises.readdir(node_path_1.default.join(pageOutDir, 'assets'));
|
|
141
|
-
const mainJs = files.find(f => f.startsWith(`${baseName}-`) && f.endsWith('.js'));
|
|
142
|
-
if (mainJs) {
|
|
143
|
-
await node_fs_1.promises.mkdir(pageOutDir, { recursive: true });
|
|
144
|
-
await node_fs_1.promises.writeFile(node_path_1.default.join(pageOutDir, 'index.html'), htmlTemplate({
|
|
145
|
-
title: baseName,
|
|
146
|
-
scriptPath: `./assets/${mainJs}`,
|
|
147
|
-
}), 'utf8');
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (err) {
|
|
151
|
-
console.error(`Error writing HTML for ${baseName}:`, err);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
},
|
|
155
|
-
}],
|
|
156
|
-
});
|
|
157
|
-
contexts.push(ctx);
|
|
158
|
-
}
|
|
159
|
-
// Start watching all contexts
|
|
160
|
-
for (const ctx of contexts) {
|
|
161
|
-
await ctx.watch();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
// Build once
|
|
166
|
-
for (const entry of entries) {
|
|
167
|
-
const { baseName, route } = await buildWidget(entry, projectPath);
|
|
168
|
-
console.log(`\x1b[32m✓\x1b[0m Built ${baseName} -> ${route}`);
|
|
169
|
-
}
|
|
170
|
-
console.log('Build complete!');
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=build.js.map
|
package/dist/build.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|