mcpmate 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +191 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/export.d.ts +5 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +117 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/install.d.ts +4 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +120 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +62 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/openclaw.d.ts +6 -0
- package/dist/commands/openclaw.d.ts.map +1 -0
- package/dist/commands/openclaw.js +163 -0
- package/dist/commands/openclaw.js.map +1 -0
- package/dist/commands/search.d.ts +4 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +88 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/template.d.ts +5 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +122 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/toggle.d.ts +3 -0
- package/dist/commands/toggle.d.ts.map +1 -0
- package/dist/commands/toggle.js +53 -0
- package/dist/commands/toggle.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +48 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/package.json +56 -0
- package/src/cli.ts +191 -0
- package/src/commands/export.ts +127 -0
- package/src/commands/install.ts +139 -0
- package/src/commands/list.ts +75 -0
- package/src/commands/openclaw.ts +186 -0
- package/src/commands/search.ts +99 -0
- package/src/commands/template.ts +135 -0
- package/src/commands/toggle.ts +58 -0
- package/src/commands/uninstall.ts +51 -0
- package/tsconfig.json +19 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Clawton
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# MCP Mate
|
|
2
|
+
|
|
3
|
+
> The ultimate MCP server manager for OpenClaw and Chinese developers
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/mcpmate)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## 简介
|
|
9
|
+
|
|
10
|
+
MCP Mate 是专为 **OpenClaw** 和中文开发者打造的 MCP (Model Context Protocol) 服务器管理工具。
|
|
11
|
+
|
|
12
|
+
**核心特性:**
|
|
13
|
+
- 🔍 搜索和发现 MCP Servers
|
|
14
|
+
- 📦 一键安装和配置
|
|
15
|
+
- 🎯 场景模板(电商、内容创作、小程序开发)
|
|
16
|
+
- 📤 导出配置到 Claude/Cursor/**OpenClaw**
|
|
17
|
+
- 🔧 **OpenClaw 深度集成**
|
|
18
|
+
- 🇨🇳 国内 CDN 加速
|
|
19
|
+
- 🤖 飞书/钉钉机器人支持(即将推出)
|
|
20
|
+
|
|
21
|
+
## 安装
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g mcpmate
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 快速开始
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# 搜索 MCP Servers
|
|
31
|
+
mcpmate search postgres
|
|
32
|
+
|
|
33
|
+
# 安装 Server
|
|
34
|
+
mcpmate install @modelcontextprotocol/server-postgres
|
|
35
|
+
|
|
36
|
+
# 查看已安装的 Servers
|
|
37
|
+
mcpmate list
|
|
38
|
+
|
|
39
|
+
# 使用场景模板
|
|
40
|
+
mcpmate template list
|
|
41
|
+
mcpmate template use ecommerce-analytics
|
|
42
|
+
|
|
43
|
+
# 导出配置到 OpenClaw
|
|
44
|
+
mcpmate export --format openclaw
|
|
45
|
+
mcpmate openclaw sync
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 命令详解
|
|
49
|
+
|
|
50
|
+
### `mcpmate search <query>`
|
|
51
|
+
搜索 MCP Registry 中的 Servers。
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
mcpmate search postgres
|
|
55
|
+
mcpmate search git --category version-control
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### `mcpmate install <server>`
|
|
59
|
+
安装指定的 MCP Server。
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
mcpmate install @modelcontextprotocol/server-postgres
|
|
63
|
+
mcpmate install @modelcontextprotocol/server-github
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### `mcpmate list`
|
|
67
|
+
列出已安装的 Servers。
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
mcpmate list
|
|
71
|
+
mcpmate list --all # 包括已禁用的
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### `mcpmate template`
|
|
75
|
+
使用场景模板快速配置。
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# 查看可用模板
|
|
79
|
+
mcpmate template list
|
|
80
|
+
|
|
81
|
+
# 使用模板
|
|
82
|
+
mcpmate template use ecommerce-analytics
|
|
83
|
+
mcpmate template use content-creation
|
|
84
|
+
mcpmate template use wechat-miniprogram
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**可用模板:**
|
|
88
|
+
- `ecommerce-analytics` - 电商数据分析(PostgreSQL + Redis + 淘宝/京东 API)
|
|
89
|
+
- `content-creation` - 内容创作(小红书 + 抖音 API)
|
|
90
|
+
- `wechat-miniprogram` - 微信小程序开发
|
|
91
|
+
- `alipay-miniprogram` - 支付宝小程序开发
|
|
92
|
+
- `backend-api` - 后端 API 开发
|
|
93
|
+
|
|
94
|
+
### `mcpmate export`
|
|
95
|
+
导出 MCP 配置文件。
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
mcpmate export --format openclaw
|
|
99
|
+
mcpmate export --format claude
|
|
100
|
+
mcpmate export --format cursor
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## OpenClaw 集成
|
|
104
|
+
|
|
105
|
+
MCP Mate 与 OpenClaw 深度集成:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# 设置 OpenClaw 集成
|
|
109
|
+
mcpmate openclaw setup
|
|
110
|
+
|
|
111
|
+
# 同步配置到 OpenClaw
|
|
112
|
+
mcpmate openclaw sync
|
|
113
|
+
|
|
114
|
+
# 查看 OpenClaw 配置状态
|
|
115
|
+
mcpmate openclaw status
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 为什么选择 MCP Mate?
|
|
119
|
+
|
|
120
|
+
| 特性 | mcp-server-manager | mcp-use | MCP Mate |
|
|
121
|
+
|------|-------------------|---------|----------|
|
|
122
|
+
| OpenClaw 集成 | ❌ | ❌ | ✅ |
|
|
123
|
+
| 场景模板 | ❌ | ❌ | ✅ |
|
|
124
|
+
| 国内 CDN | ❌ | ❌ | ✅ |
|
|
125
|
+
| 飞书/钉钉 | ❌ | ❌ | 🚧 |
|
|
126
|
+
| 中文优化 | ⚠️ | ⚠️ | ✅ |
|
|
127
|
+
|
|
128
|
+
## 支持的 MCP Servers
|
|
129
|
+
|
|
130
|
+
- `@modelcontextprotocol/server-postgres` - PostgreSQL 数据库
|
|
131
|
+
- `@modelcontextprotocol/server-github` - GitHub API
|
|
132
|
+
- `@modelcontextprotocol/server-filesystem` - 本地文件系统
|
|
133
|
+
- `@modelcontextprotocol/server-puppeteer` - 浏览器自动化
|
|
134
|
+
- `@modelcontextprotocol/server-redis` - Redis 数据库
|
|
135
|
+
- `@modelcontextprotocol/server-slack` - Slack 集成
|
|
136
|
+
|
|
137
|
+
查看更多:[MCP Servers Registry](https://github.com/modelcontextprotocol/servers)
|
|
138
|
+
|
|
139
|
+
## 开发
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# 克隆仓库
|
|
143
|
+
git clone https://github.com/clawton/mcpmate.git
|
|
144
|
+
cd mcpmate
|
|
145
|
+
|
|
146
|
+
# 安装依赖
|
|
147
|
+
npm install
|
|
148
|
+
|
|
149
|
+
# 开发模式
|
|
150
|
+
npm run dev
|
|
151
|
+
|
|
152
|
+
# 构建
|
|
153
|
+
npm run build
|
|
154
|
+
|
|
155
|
+
# 测试
|
|
156
|
+
npm test
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 路线图
|
|
160
|
+
|
|
161
|
+
- [x] CLI 基础功能
|
|
162
|
+
- [x] OpenClaw 集成
|
|
163
|
+
- [x] 场景模板
|
|
164
|
+
- [ ] Web UI
|
|
165
|
+
- [ ] 飞书/钉钉机器人
|
|
166
|
+
- [ ] 国内 CDN 加速
|
|
167
|
+
- [ ] 团队协作
|
|
168
|
+
- [ ] 企业版
|
|
169
|
+
|
|
170
|
+
## 贡献
|
|
171
|
+
|
|
172
|
+
欢迎提交 Issue 和 PR!
|
|
173
|
+
|
|
174
|
+
## 许可证
|
|
175
|
+
|
|
176
|
+
MIT © Clawton
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const search_1 = require("./commands/search");
|
|
10
|
+
const install_1 = require("./commands/install");
|
|
11
|
+
const list_1 = require("./commands/list");
|
|
12
|
+
const uninstall_1 = require("./commands/uninstall");
|
|
13
|
+
const toggle_1 = require("./commands/toggle");
|
|
14
|
+
const export_1 = require("./commands/export");
|
|
15
|
+
const openclaw_1 = require("./commands/openclaw");
|
|
16
|
+
const template_1 = require("./commands/template");
|
|
17
|
+
const program = new commander_1.Command();
|
|
18
|
+
program
|
|
19
|
+
.name('mcpmate')
|
|
20
|
+
.alias('mcm')
|
|
21
|
+
.description('MCP Mate - The ultimate MCP server manager for OpenClaw and Chinese developers')
|
|
22
|
+
.version('0.1.0');
|
|
23
|
+
program
|
|
24
|
+
.command('search')
|
|
25
|
+
.description('Search for MCP servers in the registry')
|
|
26
|
+
.argument('<query>', 'Search query')
|
|
27
|
+
.option('-c, --category <category>', 'Filter by category')
|
|
28
|
+
.action(async (query, options) => {
|
|
29
|
+
try {
|
|
30
|
+
await (0, search_1.searchServers)(query, options);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
program
|
|
38
|
+
.command('install')
|
|
39
|
+
.description('Install an MCP server')
|
|
40
|
+
.argument('<server>', 'Server name or package')
|
|
41
|
+
.option('-g, --global', 'Install globally')
|
|
42
|
+
.action(async (server, options) => {
|
|
43
|
+
try {
|
|
44
|
+
await (0, install_1.installServer)(server, options);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
program
|
|
52
|
+
.command('list')
|
|
53
|
+
.alias('ls')
|
|
54
|
+
.description('List installed MCP servers')
|
|
55
|
+
.option('-a, --all', 'Show all servers including disabled')
|
|
56
|
+
.action(async (options) => {
|
|
57
|
+
try {
|
|
58
|
+
await (0, list_1.listServers)(options);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
program
|
|
66
|
+
.command('uninstall')
|
|
67
|
+
.alias('remove')
|
|
68
|
+
.description('Uninstall an MCP server')
|
|
69
|
+
.argument('<server>', 'Server name')
|
|
70
|
+
.action(async (server) => {
|
|
71
|
+
try {
|
|
72
|
+
await (0, uninstall_1.uninstallServer)(server);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
program
|
|
80
|
+
.command('enable')
|
|
81
|
+
.description('Enable an MCP server')
|
|
82
|
+
.argument('<server>', 'Server name')
|
|
83
|
+
.action(async (server) => {
|
|
84
|
+
try {
|
|
85
|
+
await (0, toggle_1.enableServer)(server);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
program
|
|
93
|
+
.command('disable')
|
|
94
|
+
.description('Disable an MCP server')
|
|
95
|
+
.argument('<server>', 'Server name')
|
|
96
|
+
.action(async (server) => {
|
|
97
|
+
try {
|
|
98
|
+
await (0, toggle_1.disableServer)(server);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
program
|
|
106
|
+
.command('export')
|
|
107
|
+
.description('Export MCP configuration')
|
|
108
|
+
.option('-f, --format <format>', 'Export format (claude|cursor|openclaw)', 'openclaw')
|
|
109
|
+
.option('-o, --output <path>', 'Output file path')
|
|
110
|
+
.action(async (options) => {
|
|
111
|
+
try {
|
|
112
|
+
await (0, export_1.exportConfig)(options);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// Template commands (场景模板)
|
|
120
|
+
const template = program
|
|
121
|
+
.command('template')
|
|
122
|
+
.alias('t')
|
|
123
|
+
.description('Scene templates for quick setup');
|
|
124
|
+
template
|
|
125
|
+
.command('list')
|
|
126
|
+
.description('List available templates')
|
|
127
|
+
.action(async () => {
|
|
128
|
+
try {
|
|
129
|
+
await template_1.templateCommand.list();
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
template
|
|
137
|
+
.command('use')
|
|
138
|
+
.description('Use a template')
|
|
139
|
+
.argument('<template>', 'Template name')
|
|
140
|
+
.action(async (templateName) => {
|
|
141
|
+
try {
|
|
142
|
+
await template_1.templateCommand.use(templateName);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
// OpenClaw integration commands
|
|
150
|
+
const openclaw = program
|
|
151
|
+
.command('openclaw')
|
|
152
|
+
.alias('oc')
|
|
153
|
+
.description('OpenClaw integration commands');
|
|
154
|
+
openclaw
|
|
155
|
+
.command('setup')
|
|
156
|
+
.description('Setup MCP servers for OpenClaw')
|
|
157
|
+
.action(async () => {
|
|
158
|
+
try {
|
|
159
|
+
await openclaw_1.openclawCommand.setup();
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
openclaw
|
|
167
|
+
.command('sync')
|
|
168
|
+
.description('Sync MCP configuration to OpenClaw')
|
|
169
|
+
.action(async () => {
|
|
170
|
+
try {
|
|
171
|
+
await openclaw_1.openclawCommand.sync();
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
openclaw
|
|
179
|
+
.command('status')
|
|
180
|
+
.description('Show OpenClaw MCP configuration status')
|
|
181
|
+
.action(async () => {
|
|
182
|
+
try {
|
|
183
|
+
await openclaw_1.openclawCommand.status();
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : error);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
program.parse();
|
|
191
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,gDAAmD;AACnD,0CAA8C;AAC9C,oDAAuD;AACvD,8CAAgE;AAChE,8CAAiD;AACjD,kDAAsD;AACtD,kDAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,KAAK,CAAC,KAAK,CAAC;KACZ,WAAW,CAAC,gFAAgF,CAAC;KAC7F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wCAAwC,CAAC;KACrD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;KACnC,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,IAAA,uBAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,uBAAuB,EAAE,wCAAwC,EAAE,UAAU,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,qBAAY,EAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAElD,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,0BAAe,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,gBAAgB,CAAC;KAC7B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,0BAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gCAAgC;AAChC,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,+BAA+B,CAAC,CAAC;AAEhD,QAAQ;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,0BAAe,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,0BAAe,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,0BAAe,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AA+DA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D/F"}
|
|
@@ -0,0 +1,117 @@
|
|
|
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.exportConfig = exportConfig;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const os_1 = __importDefault(require("os"));
|
|
11
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
12
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.mcpm');
|
|
13
|
+
const SERVERS_FILE = path_1.default.join(CONFIG_DIR, 'servers.json');
|
|
14
|
+
async function getInstalledServers() {
|
|
15
|
+
if (await fs_extra_1.default.pathExists(SERVERS_FILE)) {
|
|
16
|
+
return await fs_extra_1.default.readJson(SERVERS_FILE);
|
|
17
|
+
}
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
function generateClaudeConfig(servers) {
|
|
21
|
+
const mcpServers = {};
|
|
22
|
+
Object.values(servers)
|
|
23
|
+
.filter((s) => s.enabled)
|
|
24
|
+
.forEach((server) => {
|
|
25
|
+
mcpServers[server.name] = {
|
|
26
|
+
command: server.command,
|
|
27
|
+
args: server.args,
|
|
28
|
+
env: server.env
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
return { mcpServers };
|
|
32
|
+
}
|
|
33
|
+
function generateCursorConfig(servers) {
|
|
34
|
+
// Cursor uses a similar format to Claude
|
|
35
|
+
return generateClaudeConfig(servers);
|
|
36
|
+
}
|
|
37
|
+
function generateOpenClawConfig(servers) {
|
|
38
|
+
// OpenClaw specific format
|
|
39
|
+
const mcpServers = {};
|
|
40
|
+
Object.values(servers)
|
|
41
|
+
.filter((s) => s.enabled)
|
|
42
|
+
.forEach((server) => {
|
|
43
|
+
mcpServers[server.name] = {
|
|
44
|
+
command: server.command,
|
|
45
|
+
args: server.args,
|
|
46
|
+
env: server.env,
|
|
47
|
+
enabled: true
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
version: '1.0',
|
|
52
|
+
mcpServers,
|
|
53
|
+
metadata: {
|
|
54
|
+
exportedAt: new Date().toISOString(),
|
|
55
|
+
tool: 'mcp-server-manager',
|
|
56
|
+
version: '0.1.0'
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function exportConfig(options) {
|
|
61
|
+
const format = options.format || 'openclaw';
|
|
62
|
+
const servers = await getInstalledServers();
|
|
63
|
+
const enabledServers = Object.values(servers).filter((s) => s.enabled);
|
|
64
|
+
if (enabledServers.length === 0) {
|
|
65
|
+
console.log(chalk_1.default.yellow('⚠️ No enabled servers to export.'));
|
|
66
|
+
console.log(chalk_1.default.gray('Enable servers with:'), chalk_1.default.cyan('mcpm enable <server>'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(chalk_1.default.blue('📤 Exporting MCP configuration...'));
|
|
70
|
+
console.log(chalk_1.default.gray(`Format: ${format}`));
|
|
71
|
+
console.log(chalk_1.default.gray(`Servers: ${enabledServers.length}`));
|
|
72
|
+
console.log();
|
|
73
|
+
let config;
|
|
74
|
+
let ext;
|
|
75
|
+
switch (format) {
|
|
76
|
+
case 'claude':
|
|
77
|
+
config = generateClaudeConfig(servers);
|
|
78
|
+
ext = 'json';
|
|
79
|
+
break;
|
|
80
|
+
case 'cursor':
|
|
81
|
+
config = generateCursorConfig(servers);
|
|
82
|
+
ext = 'json';
|
|
83
|
+
break;
|
|
84
|
+
case 'openclaw':
|
|
85
|
+
default:
|
|
86
|
+
config = generateOpenClawConfig(servers);
|
|
87
|
+
ext = 'yaml';
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
const outputPath = options.output || `mcp-config.${ext}`;
|
|
91
|
+
if (ext === 'json') {
|
|
92
|
+
await fs_extra_1.default.writeJson(outputPath, config, { spaces: 2 });
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await fs_extra_1.default.writeFile(outputPath, yaml_1.default.stringify(config));
|
|
96
|
+
}
|
|
97
|
+
console.log(chalk_1.default.green('✅ Configuration exported successfully!'));
|
|
98
|
+
console.log(chalk_1.default.gray(`Output: ${path_1.default.resolve(outputPath)}`));
|
|
99
|
+
console.log();
|
|
100
|
+
console.log(chalk_1.default.blue('💡 Next steps:'));
|
|
101
|
+
switch (format) {
|
|
102
|
+
case 'claude':
|
|
103
|
+
console.log(chalk_1.default.gray(' 1. Copy the configuration to Claude Desktop settings'));
|
|
104
|
+
console.log(chalk_1.default.gray(' 2. Restart Claude Desktop'));
|
|
105
|
+
break;
|
|
106
|
+
case 'cursor':
|
|
107
|
+
console.log(chalk_1.default.gray(' 1. Copy the configuration to Cursor MCP settings'));
|
|
108
|
+
console.log(chalk_1.default.gray(' 2. Restart Cursor'));
|
|
109
|
+
break;
|
|
110
|
+
case 'openclaw':
|
|
111
|
+
default:
|
|
112
|
+
console.log(chalk_1.default.gray(' 1. Run:'), chalk_1.default.cyan('mcpm openclaw sync'));
|
|
113
|
+
console.log(chalk_1.default.gray(' 2. Or manually copy to OpenClaw MCP configuration'));
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AA6DA,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EpG"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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.installServer = installServer;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.mcpm');
|
|
13
|
+
const SERVERS_FILE = path_1.default.join(CONFIG_DIR, 'servers.json');
|
|
14
|
+
async function ensureConfigDir() {
|
|
15
|
+
await fs_extra_1.default.ensureDir(CONFIG_DIR);
|
|
16
|
+
}
|
|
17
|
+
async function getInstalledServers() {
|
|
18
|
+
await ensureConfigDir();
|
|
19
|
+
if (await fs_extra_1.default.pathExists(SERVERS_FILE)) {
|
|
20
|
+
return await fs_extra_1.default.readJson(SERVERS_FILE);
|
|
21
|
+
}
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
async function saveInstalledServers(servers) {
|
|
25
|
+
await ensureConfigDir();
|
|
26
|
+
await fs_extra_1.default.writeJson(SERVERS_FILE, servers, { spaces: 2 });
|
|
27
|
+
}
|
|
28
|
+
// Mock installation logic for MVP
|
|
29
|
+
const SERVER_TEMPLATES = {
|
|
30
|
+
'@modelcontextprotocol/server-postgres': {
|
|
31
|
+
command: 'docker',
|
|
32
|
+
args: ['run', '-i', '--rm', 'mcp/postgres'],
|
|
33
|
+
env: {
|
|
34
|
+
POSTGRES_HOST: 'localhost',
|
|
35
|
+
POSTGRES_PORT: '5432',
|
|
36
|
+
POSTGRES_DB: 'postgres',
|
|
37
|
+
POSTGRES_USER: 'postgres'
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
'@modelcontextprotocol/server-github': {
|
|
41
|
+
command: 'docker',
|
|
42
|
+
args: ['run', '-i', '--rm', 'mcp/github'],
|
|
43
|
+
env: {
|
|
44
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: ''
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
'@modelcontextprotocol/server-filesystem': {
|
|
48
|
+
command: 'docker',
|
|
49
|
+
args: ['run', '-i', '--rm', '-v', '${HOME}:/home/user', 'mcp/filesystem'],
|
|
50
|
+
env: {}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
async function installServer(serverName, options) {
|
|
54
|
+
console.log(chalk_1.default.blue('📦 Installing MCP server...'));
|
|
55
|
+
console.log(chalk_1.default.gray(`Server: ${serverName}`));
|
|
56
|
+
console.log();
|
|
57
|
+
const installedServers = await getInstalledServers();
|
|
58
|
+
// Check if already installed
|
|
59
|
+
if (installedServers[serverName]) {
|
|
60
|
+
console.log(chalk_1.default.yellow(`⚠️ Server "${serverName}" is already installed.`));
|
|
61
|
+
console.log(chalk_1.default.gray('Use "mcpm update" to update or "mcpm uninstall" to remove.'));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Get server template
|
|
65
|
+
const template = SERVER_TEMPLATES[serverName];
|
|
66
|
+
if (!template) {
|
|
67
|
+
console.log(chalk_1.default.yellow(`⚠️ Server "${serverName}" not found in registry.`));
|
|
68
|
+
console.log(chalk_1.default.gray('Searching for similar servers...'));
|
|
69
|
+
// TODO: Implement fuzzy search
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Interactive configuration
|
|
73
|
+
const config = {
|
|
74
|
+
name: serverName,
|
|
75
|
+
command: template.command || 'docker',
|
|
76
|
+
args: template.args || [],
|
|
77
|
+
env: {},
|
|
78
|
+
enabled: true,
|
|
79
|
+
installedAt: new Date().toISOString()
|
|
80
|
+
};
|
|
81
|
+
// Prompt for environment variables
|
|
82
|
+
if (template.env) {
|
|
83
|
+
console.log(chalk_1.default.blue('🔧 Configuration required:\n'));
|
|
84
|
+
for (const [key, defaultValue] of Object.entries(template.env)) {
|
|
85
|
+
const { value } = await inquirer_1.default.prompt([{
|
|
86
|
+
type: 'input',
|
|
87
|
+
name: 'value',
|
|
88
|
+
message: `${key}${defaultValue ? ` (default: ${defaultValue})` : ''}:`,
|
|
89
|
+
default: defaultValue || undefined
|
|
90
|
+
}]);
|
|
91
|
+
if (value) {
|
|
92
|
+
config.env = config.env || {};
|
|
93
|
+
config.env[key] = value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Confirm installation
|
|
98
|
+
const { confirm } = await inquirer_1.default.prompt([{
|
|
99
|
+
type: 'confirm',
|
|
100
|
+
name: 'confirm',
|
|
101
|
+
message: 'Install this server?',
|
|
102
|
+
default: true
|
|
103
|
+
}]);
|
|
104
|
+
if (!confirm) {
|
|
105
|
+
console.log(chalk_1.default.gray('Installation cancelled.'));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Save configuration
|
|
109
|
+
installedServers[serverName] = config;
|
|
110
|
+
await saveInstalledServers(installedServers);
|
|
111
|
+
console.log();
|
|
112
|
+
console.log(chalk_1.default.green('✅ Server installed successfully!'));
|
|
113
|
+
console.log(chalk_1.default.gray(`Configuration saved to: ${SERVERS_FILE}`));
|
|
114
|
+
console.log();
|
|
115
|
+
console.log(chalk_1.default.blue('💡 Next steps:'));
|
|
116
|
+
console.log(chalk_1.default.gray(' - Enable the server:'), chalk_1.default.cyan(`mcpm enable ${serverName}`));
|
|
117
|
+
console.log(chalk_1.default.gray(' - Export configuration:'), chalk_1.default.cyan('mcpm export'));
|
|
118
|
+
console.log(chalk_1.default.gray(' - View all servers:'), chalk_1.default.cyan('mcpm list'));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=install.js.map
|