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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +191 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/export.d.ts +5 -0
  8. package/dist/commands/export.d.ts.map +1 -0
  9. package/dist/commands/export.js +117 -0
  10. package/dist/commands/export.js.map +1 -0
  11. package/dist/commands/install.d.ts +4 -0
  12. package/dist/commands/install.d.ts.map +1 -0
  13. package/dist/commands/install.js +120 -0
  14. package/dist/commands/install.js.map +1 -0
  15. package/dist/commands/list.d.ts +4 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +62 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/openclaw.d.ts +6 -0
  20. package/dist/commands/openclaw.d.ts.map +1 -0
  21. package/dist/commands/openclaw.js +163 -0
  22. package/dist/commands/openclaw.js.map +1 -0
  23. package/dist/commands/search.d.ts +4 -0
  24. package/dist/commands/search.d.ts.map +1 -0
  25. package/dist/commands/search.js +88 -0
  26. package/dist/commands/search.js.map +1 -0
  27. package/dist/commands/template.d.ts +5 -0
  28. package/dist/commands/template.d.ts.map +1 -0
  29. package/dist/commands/template.js +122 -0
  30. package/dist/commands/template.js.map +1 -0
  31. package/dist/commands/toggle.d.ts +3 -0
  32. package/dist/commands/toggle.d.ts.map +1 -0
  33. package/dist/commands/toggle.js +53 -0
  34. package/dist/commands/toggle.js.map +1 -0
  35. package/dist/commands/uninstall.d.ts +2 -0
  36. package/dist/commands/uninstall.d.ts.map +1 -0
  37. package/dist/commands/uninstall.js +48 -0
  38. package/dist/commands/uninstall.js.map +1 -0
  39. package/package.json +56 -0
  40. package/src/cli.ts +191 -0
  41. package/src/commands/export.ts +127 -0
  42. package/src/commands/install.ts +139 -0
  43. package/src/commands/list.ts +75 -0
  44. package/src/commands/openclaw.ts +186 -0
  45. package/src/commands/search.ts +99 -0
  46. package/src/commands/template.ts +135 -0
  47. package/src/commands/toggle.ts +58 -0
  48. package/src/commands/uninstall.ts +51 -0
  49. 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
+ [![npm version](https://img.shields.io/npm/v/mcpmate.svg)](https://www.npmjs.com/package/mcpmate)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function exportConfig(options: {
2
+ format?: string;
3
+ output?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=export.d.ts.map
@@ -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,4 @@
1
+ export declare function installServer(serverName: string, options: {
2
+ global?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=install.d.ts.map
@@ -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