lazy-mcp 1.1.4 → 1.2.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/README.md +241 -24
- package/dist/cli.js +67 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +142 -0
- package/dist/config.js.map +1 -0
- package/dist/multi-proxy.d.ts +11 -0
- package/dist/multi-proxy.d.ts.map +1 -0
- package/dist/multi-proxy.js +63 -0
- package/dist/multi-proxy.js.map +1 -0
- package/dist/server-manager.d.ts +14 -0
- package/dist/server-manager.d.ts.map +1 -0
- package/dist/server-manager.js +264 -0
- package/dist/server-manager.js.map +1 -0
- package/dist/server.d.ts +9 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +278 -95
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -1,53 +1,218 @@
|
|
|
1
|
-
# Lazy MCP Proxy
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
# Lazy MCP Proxy
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
A proxy tool that converts normal MCP servers to use a lazy-loading pattern, dramatically reducing initial context usage by 90%+ and enabling support for hundreds of commands.
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
<!-- TOC_START -->
|
|
10
|
+
- [Table of Contents](#table-of-contents)
|
|
11
|
+
- [Features](#features)
|
|
12
|
+
- [Modes](#modes)
|
|
13
|
+
- [Single-Server Mode (Legacy)](#single-server-mode-legacy)
|
|
14
|
+
- [Multi-Server Mode (NEW!)](#multi-server-mode-new)
|
|
15
|
+
- [Installation](#installation)
|
|
16
|
+
- [Usage](#usage)
|
|
17
|
+
- [Multi-Server Mode (Recommended)](#multi-server-mode-recommended)
|
|
18
|
+
- [Single-Server Mode (Legacy)](#single-server-mode-legacy)
|
|
19
|
+
- [Local MCP Servers](#local-mcp-servers)
|
|
20
|
+
- [Remote MCP Servers](#remote-mcp-servers)
|
|
21
|
+
- [Claude Desktop / OpenCode Integration](#claude-desktop--opencode-integration)
|
|
22
|
+
- [Multi-Server Mode (Recommended)](#multi-server-mode-recommended)
|
|
23
|
+
- [Single-Server Mode (Legacy)](#single-server-mode-legacy)
|
|
24
|
+
- [Example](#example)
|
|
25
|
+
- [Development](#development)
|
|
26
|
+
- [Publishing New Versions](#publishing-new-versions)
|
|
27
|
+
- [For Maintainers](#for-maintainers)
|
|
28
|
+
- [Configuration Reference](#configuration-reference)
|
|
29
|
+
- [Server Configuration Fields](#server-configuration-fields)
|
|
30
|
+
- [Command Format](#command-format)
|
|
31
|
+
- [Environment Variables](#environment-variables)
|
|
32
|
+
- [Benefits](#benefits)
|
|
33
|
+
<!-- TOC_END -->
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- **Single-Server Mode**: Wrap one MCP server with 3 meta-tools (legacy mode)
|
|
38
|
+
- **Multi-Server Mode**: Aggregate multiple MCP servers with on-demand discovery (NEW!)
|
|
39
|
+
- **Lazy Loading**: Only discover tools when needed, not upfront
|
|
40
|
+
- **Batch Discovery**: Discover multiple servers in one call
|
|
41
|
+
- **90%+ Context Reduction**: From ~16K to ~1.5K tokens initially
|
|
42
|
+
|
|
43
|
+
## Modes
|
|
44
|
+
|
|
45
|
+
### Single-Server Mode (Legacy)
|
|
46
|
+
|
|
47
|
+
Wraps one MCP server and exposes three meta-tools:
|
|
8
48
|
|
|
9
49
|
- `list_commands` - Returns command names and brief descriptions
|
|
10
50
|
- `describe_commands` - Accepts `command_names: Array[String]`, returns full schemas
|
|
11
51
|
- `invoke_command` - Executes commands with `command_name: String, parameters: Object`
|
|
12
52
|
|
|
53
|
+
### Multi-Server Mode (NEW!)
|
|
54
|
+
|
|
55
|
+
Aggregates multiple MCP servers and exposes four meta-tools:
|
|
56
|
+
|
|
57
|
+
- `list_servers` - Lists all configured MCP servers
|
|
58
|
+
- `list_commands` - Discovers tools from specific server(s), supports batch discovery
|
|
59
|
+
- `describe_commands` - Gets detailed schemas from a server
|
|
60
|
+
- `invoke_command` - Executes commands from a specific server
|
|
61
|
+
|
|
13
62
|
## Installation
|
|
14
63
|
|
|
64
|
+
**Recommended:** Use with npx to always get the latest version:
|
|
65
|
+
|
|
15
66
|
```bash
|
|
16
|
-
|
|
67
|
+
npx lazy-mcp@latest <server-command-or-url>
|
|
17
68
|
```
|
|
18
69
|
|
|
19
|
-
Or
|
|
70
|
+
Or install globally (locks to specific version):
|
|
20
71
|
|
|
21
72
|
```bash
|
|
22
|
-
|
|
73
|
+
npm install -g lazy-mcp
|
|
23
74
|
```
|
|
24
75
|
|
|
25
76
|
## Usage
|
|
26
77
|
|
|
27
|
-
###
|
|
78
|
+
### Multi-Server Mode (Recommended)
|
|
79
|
+
|
|
80
|
+
Create a configuration file at `~/.config/lazy-mcp/servers.json`:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"mode": "multi-server",
|
|
85
|
+
"servers": [
|
|
86
|
+
{
|
|
87
|
+
"name": "chrome-devtools",
|
|
88
|
+
"description": "Chrome DevTools automation",
|
|
89
|
+
"type": "local",
|
|
90
|
+
"command": ["npx", "-y", "chrome-devtools-mcp@latest"]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "gitlab",
|
|
94
|
+
"description": "GitLab API integration",
|
|
95
|
+
"type": "local",
|
|
96
|
+
"command": [
|
|
97
|
+
"npx",
|
|
98
|
+
"mcp-remote@latest",
|
|
99
|
+
"https://gitlab.com/api/v4/mcp",
|
|
100
|
+
"--static-oauth-client-metadata",
|
|
101
|
+
"{\"scope\": \"mcp\"}"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "my-remote-server",
|
|
106
|
+
"description": "Custom remote MCP server",
|
|
107
|
+
"type": "remote",
|
|
108
|
+
"url": "https://api.example.com/mcp",
|
|
109
|
+
"headers": {
|
|
110
|
+
"Authorization": "Bearer ${API_TOKEN}"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then run:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Using npx (recommended - always latest version)
|
|
121
|
+
npx lazy-mcp@latest --config ~/.config/lazy-mcp/servers.json
|
|
122
|
+
|
|
123
|
+
# Or via environment variable
|
|
124
|
+
LAZY_MCP_CONFIG=~/.config/lazy-mcp/servers.json npx lazy-mcp@latest
|
|
125
|
+
|
|
126
|
+
# Or if installed globally
|
|
127
|
+
lazy-mcp --config ~/.config/lazy-mcp/servers.json
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Single-Server Mode (Legacy)
|
|
131
|
+
|
|
132
|
+
#### Local MCP Servers
|
|
28
133
|
|
|
29
134
|
```bash
|
|
30
135
|
# Run a Python MCP server
|
|
31
|
-
lazy-mcp python my_server.py
|
|
136
|
+
npx lazy-mcp@latest python my_server.py
|
|
32
137
|
|
|
33
138
|
# Run a Node.js server with arguments
|
|
34
|
-
lazy-mcp node server.js --port 8080
|
|
139
|
+
npx lazy-mcp@latest node server.js --port 8080
|
|
35
140
|
|
|
36
141
|
# Run complex commands (use quotes)
|
|
37
|
-
lazy-mcp "uvicorn server:app --host 0.0.0.0 --port 3000"
|
|
142
|
+
npx lazy-mcp@latest "uvicorn server:app --host 0.0.0.0 --port 3000"
|
|
38
143
|
```
|
|
39
144
|
|
|
40
|
-
|
|
145
|
+
#### Remote MCP Servers
|
|
41
146
|
|
|
42
147
|
```bash
|
|
43
148
|
# Connect to a remote HTTP MCP server
|
|
44
|
-
lazy-mcp http://localhost:3000/mcp
|
|
149
|
+
npx lazy-mcp@latest http://localhost:3000/mcp
|
|
45
150
|
|
|
46
151
|
# With authentication headers
|
|
47
|
-
lazy-mcp https://api.example.com/mcp --header "Authorization=Bearer token123"
|
|
152
|
+
npx lazy-mcp@latest https://api.example.com/mcp --header "Authorization=Bearer token123"
|
|
48
153
|
|
|
49
154
|
# Multiple headers
|
|
50
|
-
lazy-mcp https://api.example.com/mcp --header "X-API-Key=abc123" --header "User-Agent=my-app/1.0"
|
|
155
|
+
npx lazy-mcp@latest https://api.example.com/mcp --header "X-API-Key=abc123" --header "User-Agent=my-app/1.0"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Claude Desktop / OpenCode Integration
|
|
159
|
+
|
|
160
|
+
### Multi-Server Mode (Recommended)
|
|
161
|
+
|
|
162
|
+
Replace multiple MCP server entries with one aggregated proxy:
|
|
163
|
+
|
|
164
|
+
**Before** (5 separate MCP servers):
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"mcp": {
|
|
168
|
+
"chrome-devtools": { "command": ["npx", "lazy-mcp@latest", "npx", "-y", "chrome-devtools-mcp@latest"] },
|
|
169
|
+
"gitlab": { "command": ["npx", "lazy-mcp@latest", "npx", "mcp-remote@latest", "https://..."] },
|
|
170
|
+
"grepai": { "command": ["npx", "lazy-mcp@latest", "grepai", "mcp-serve"] },
|
|
171
|
+
"context7": { "command": ["npx", "-y", "@upstash/context7-mcp"] },
|
|
172
|
+
"perplexity": { "command": ["npx", "-y", "@perplexity-ai/mcp-server"] }
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**After** (Consolidated into 1 multi-server proxy):
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"mcp": {
|
|
181
|
+
"lazy-mcp": {
|
|
182
|
+
"type": "local",
|
|
183
|
+
"command": ["npx", "lazy-mcp@latest", "--config", "~/.config/lazy-mcp/servers.json"],
|
|
184
|
+
"enabled": true
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Where `~/.config/lazy-mcp/servers.json` contains all 5 servers:
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"mode": "multi-server",
|
|
194
|
+
"servers": [
|
|
195
|
+
{ "name": "chrome-devtools", "description": "Chrome DevTools automation", "type": "local", "command": ["npx", "-y", "chrome-devtools-mcp@latest"] },
|
|
196
|
+
{ "name": "gitlab", "description": "GitLab API integration", "type": "local", "command": ["npx", "mcp-remote@latest", "https://..."] },
|
|
197
|
+
{ "name": "grepai", "description": "Search codebase", "type": "local", "command": ["grepai", "mcp-serve"] },
|
|
198
|
+
{ "name": "context7", "description": "Library documentation", "type": "local", "command": ["npx", "-y", "@upstash/context7-mcp"] },
|
|
199
|
+
{ "name": "perplexity", "description": "Web search", "type": "local", "command": ["npx", "-y", "@perplexity-ai/mcp-server"] }
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Result**: ~90% context reduction (from ~16K to ~1.5K tokens initially)
|
|
205
|
+
|
|
206
|
+
### Single-Server Mode (Legacy)
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"mcp": {
|
|
211
|
+
"gitlab": {
|
|
212
|
+
"command": ["npx", "lazy-mcp@latest", "npx", "mcp-remote", "https://gitlab.com/api/v4/mcp"]
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
51
216
|
```
|
|
52
217
|
|
|
53
218
|
## Example
|
|
@@ -58,7 +223,7 @@ python my_server.py
|
|
|
58
223
|
# Exposes: tool1, tool2, tool3, ..., tool100 (uses 100x context tokens)
|
|
59
224
|
|
|
60
225
|
# Through lazy proxy - local
|
|
61
|
-
lazy-mcp python my_server.py
|
|
226
|
+
npx lazy-mcp@latest python my_server.py
|
|
62
227
|
# Exposes: list_commands, describe_commands, invoke_command (uses 3x context tokens)
|
|
63
228
|
|
|
64
229
|
# Original remote server
|
|
@@ -66,7 +231,7 @@ curl http://localhost:3000/mcp -d '{"method":"tools/list"}'
|
|
|
66
231
|
# Returns: tool1, tool2, tool3, ..., tool100 (uses 100x context when loaded)
|
|
67
232
|
|
|
68
233
|
# Through lazy proxy - remote
|
|
69
|
-
lazy-mcp http://localhost:3000/mcp
|
|
234
|
+
npx lazy-mcp@latest http://localhost:3000/mcp
|
|
70
235
|
# Exposes: list_commands, describe_commands, invoke_command (uses 3x context tokens)
|
|
71
236
|
```
|
|
72
237
|
|
|
@@ -118,10 +283,62 @@ npm run dev -- http://localhost:3000/mcp
|
|
|
118
283
|
git push --tags
|
|
119
284
|
```
|
|
120
285
|
|
|
286
|
+
## Configuration Reference
|
|
287
|
+
|
|
288
|
+
### Server Configuration Fields
|
|
289
|
+
|
|
290
|
+
| Field | Type | Required | Description |
|
|
291
|
+
|-------|------|----------|-------------|
|
|
292
|
+
| `name` | string | ✅ | Unique server identifier |
|
|
293
|
+
| `description` | string | ✅ | Human-readable description |
|
|
294
|
+
| `type` | "local" \| "remote" | ✅ | Server connection type |
|
|
295
|
+
| `command` | string[] \| string | For local | Command to execute (array format recommended) |
|
|
296
|
+
| `args` | string[] | Optional | Arguments (only if command is string) |
|
|
297
|
+
| `url` | string | For remote | HTTP/HTTPS URL |
|
|
298
|
+
| `headers` | object | Optional | HTTP headers for remote servers |
|
|
299
|
+
| `env` | object | Optional | Environment variables (supports `${VAR}` expansion) |
|
|
300
|
+
| `enabled` | boolean | Optional | Enable/disable server (default: true) |
|
|
301
|
+
|
|
302
|
+
### Command Format
|
|
303
|
+
|
|
304
|
+
**Recommended** (OpenCode-compatible):
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"command": ["npx", "-y", "my-mcp-server", "--port", "3000"]
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Legacy** (still supported):
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"command": "npx",
|
|
315
|
+
"args": ["-y", "my-mcp-server", "--port", "3000"]
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Environment Variables
|
|
320
|
+
|
|
321
|
+
Use `${VAR_NAME}` to reference environment variables:
|
|
322
|
+
|
|
323
|
+
```json
|
|
324
|
+
{
|
|
325
|
+
"env": {
|
|
326
|
+
"API_KEY": "${MY_API_KEY}",
|
|
327
|
+
"DEBUG": "true"
|
|
328
|
+
},
|
|
329
|
+
"headers": {
|
|
330
|
+
"Authorization": "Bearer ${AUTH_TOKEN}"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
121
335
|
## Benefits
|
|
122
336
|
|
|
123
|
-
- **
|
|
124
|
-
- **Progressive tool discovery** -
|
|
337
|
+
- **90%+ context reduction** - From ~16K to ~1.5K tokens initially
|
|
338
|
+
- **Progressive tool discovery** - Only load schemas when needed
|
|
339
|
+
- **Multi-server aggregation** - Manage multiple MCP servers in one config
|
|
340
|
+
- **Batch discovery** - Discover multiple servers efficiently
|
|
125
341
|
- **Scales to hundreds** of commands without context bloat
|
|
126
|
-
- **
|
|
127
|
-
- **
|
|
342
|
+
- **Flexible configuration** - Enable/disable servers on demand
|
|
343
|
+
- **Environment variable support** - Secure credential management
|
|
344
|
+
- **Both local and remote** - Support for subprocess and HTTP servers
|
package/dist/cli.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const server_1 = require("./server");
|
|
6
|
+
const config_1 = require("./config");
|
|
7
|
+
const server_manager_1 = require("./server-manager");
|
|
6
8
|
class RemoteMCPServer {
|
|
7
9
|
constructor(serverUrl, headers = {}) {
|
|
8
10
|
this.connected = false;
|
|
@@ -132,18 +134,35 @@ class LocalMCPServer {
|
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
}
|
|
137
|
+
function detectMode(args) {
|
|
138
|
+
// Check for --config flag
|
|
139
|
+
if (args.includes('--config')) {
|
|
140
|
+
return 'multi';
|
|
141
|
+
}
|
|
142
|
+
// Check for LAZY_MCP_CONFIG env var
|
|
143
|
+
if (process.env.LAZY_MCP_CONFIG) {
|
|
144
|
+
return 'multi';
|
|
145
|
+
}
|
|
146
|
+
// Default: single-server mode
|
|
147
|
+
return 'single';
|
|
148
|
+
}
|
|
135
149
|
function parseArgs(args) {
|
|
136
150
|
if (args.length === 0) {
|
|
137
151
|
console.error('Usage: lazy-mcp <server-command-or-url> [args...] [--header key=value]...');
|
|
152
|
+
console.error(' lazy-mcp --config <config-file>');
|
|
138
153
|
console.error('');
|
|
139
|
-
console.error('
|
|
154
|
+
console.error('Single-server mode (local MCP servers):');
|
|
140
155
|
console.error(' lazy-mcp python my_server.py');
|
|
141
156
|
console.error(' lazy-mcp node server.js --port 8080');
|
|
142
157
|
console.error(' lazy-mcp "uvicorn server:app --port 3000"');
|
|
143
158
|
console.error('');
|
|
144
|
-
console.error('
|
|
159
|
+
console.error('Single-server mode (remote MCP servers):');
|
|
145
160
|
console.error(' lazy-mcp http://localhost:3000/mcp');
|
|
146
161
|
console.error(' lazy-mcp https://api.example.com/mcp --header "Authorization=Bearer token123"');
|
|
162
|
+
console.error('');
|
|
163
|
+
console.error('Multi-server mode:');
|
|
164
|
+
console.error(' lazy-mcp --config ~/.config/lazy-mcp/servers.json');
|
|
165
|
+
console.error(' LAZY_MCP_CONFIG=~/.config/lazy-mcp/servers.json lazy-mcp');
|
|
147
166
|
process.exit(1);
|
|
148
167
|
}
|
|
149
168
|
const firstArg = args[0];
|
|
@@ -182,6 +201,52 @@ function parseArgs(args) {
|
|
|
182
201
|
}
|
|
183
202
|
async function main() {
|
|
184
203
|
const args = process.argv.slice(2);
|
|
204
|
+
const mode = detectMode(args);
|
|
205
|
+
if (mode === 'multi') {
|
|
206
|
+
await runMultiServerMode(args);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
await runSingleServerMode(args);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async function runMultiServerMode(args) {
|
|
213
|
+
// Get config path from --config flag or environment variable
|
|
214
|
+
let configPath;
|
|
215
|
+
const configIndex = args.indexOf('--config');
|
|
216
|
+
if (configIndex !== -1 && configIndex + 1 < args.length) {
|
|
217
|
+
configPath = args[configIndex + 1];
|
|
218
|
+
}
|
|
219
|
+
else if (process.env.LAZY_MCP_CONFIG) {
|
|
220
|
+
configPath = process.env.LAZY_MCP_CONFIG;
|
|
221
|
+
}
|
|
222
|
+
if (!configPath) {
|
|
223
|
+
console.error('Error: Config file path is required for multi-server mode');
|
|
224
|
+
console.error('Use: lazy-mcp --config <config-file>');
|
|
225
|
+
console.error('Or set: LAZY_MCP_CONFIG=<config-file>');
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const config = config_1.ConfigLoader.load(configPath);
|
|
230
|
+
const serverManager = new server_manager_1.ServerManager(config.servers);
|
|
231
|
+
const lazyServer = new server_1.LazyMCPServer(undefined, serverManager);
|
|
232
|
+
const cleanup = async () => {
|
|
233
|
+
console.error('\nShutting down...');
|
|
234
|
+
await serverManager.closeAll();
|
|
235
|
+
process.exit(0);
|
|
236
|
+
};
|
|
237
|
+
process.on('SIGINT', cleanup);
|
|
238
|
+
process.on('SIGTERM', cleanup);
|
|
239
|
+
const enabledServers = config.servers.filter(s => s.enabled !== false);
|
|
240
|
+
console.error(`Starting lazy MCP multi-server proxy with ${enabledServers.length} servers`);
|
|
241
|
+
console.error(`Servers: ${enabledServers.map(s => s.name).join(', ')}`);
|
|
242
|
+
await lazyServer.run();
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
console.error('Error starting multi-server mode:', error);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
async function runSingleServerMode(args) {
|
|
185
250
|
const parsed = parseArgs(args);
|
|
186
251
|
let originalServer;
|
|
187
252
|
let description;
|
|
@@ -202,7 +267,6 @@ async function main() {
|
|
|
202
267
|
description = `local server: ${parsed.command} ${(parsed.commandArgs || []).join(' ')}`.trim();
|
|
203
268
|
}
|
|
204
269
|
const lazyServer = new server_1.LazyMCPServer(originalServer);
|
|
205
|
-
// Handle cleanup on exit
|
|
206
270
|
const cleanup = async () => {
|
|
207
271
|
console.error('\nShutting down...');
|
|
208
272
|
await originalServer.close();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MultiServerConfig } from './types';
|
|
2
|
+
export declare class ConfigLoader {
|
|
3
|
+
static load(configPath: string): MultiServerConfig;
|
|
4
|
+
private static resolvePath;
|
|
5
|
+
private static validate;
|
|
6
|
+
private static validateServer;
|
|
7
|
+
static expandEnvVars(value: string): string;
|
|
8
|
+
static processEnv(env: Record<string, string>): Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,SAAS,CAAC;AAE1D,qBAAa,YAAY;IACvB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB;IAmBlD,OAAO,CAAC,MAAM,CAAC,WAAW;IAO1B,OAAO,CAAC,MAAM,CAAC,QAAQ;IAoBvB,OAAO,CAAC,MAAM,CAAC,cAAc;IAyD7B,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAM3C,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAOvE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ConfigLoader = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
class ConfigLoader {
|
|
41
|
+
static load(configPath) {
|
|
42
|
+
const resolvedPath = this.resolvePath(configPath);
|
|
43
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
44
|
+
throw new Error(`Config file not found: ${resolvedPath}`);
|
|
45
|
+
}
|
|
46
|
+
const content = fs.readFileSync(resolvedPath, 'utf-8');
|
|
47
|
+
let config;
|
|
48
|
+
try {
|
|
49
|
+
config = JSON.parse(content);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new Error(`Invalid JSON in config file: ${error}`);
|
|
53
|
+
}
|
|
54
|
+
return this.validate(config);
|
|
55
|
+
}
|
|
56
|
+
static resolvePath(configPath) {
|
|
57
|
+
if (configPath.startsWith('~/')) {
|
|
58
|
+
return path.join(os.homedir(), configPath.slice(2));
|
|
59
|
+
}
|
|
60
|
+
return path.resolve(configPath);
|
|
61
|
+
}
|
|
62
|
+
static validate(config) {
|
|
63
|
+
if (config.mode !== 'multi-server') {
|
|
64
|
+
throw new Error('Config must have mode: "multi-server"');
|
|
65
|
+
}
|
|
66
|
+
if (!Array.isArray(config.servers)) {
|
|
67
|
+
throw new Error('Config must have a "servers" array');
|
|
68
|
+
}
|
|
69
|
+
if (config.servers.length === 0) {
|
|
70
|
+
throw new Error('Config must have at least one server');
|
|
71
|
+
}
|
|
72
|
+
config.servers.forEach((server, index) => {
|
|
73
|
+
this.validateServer(server, index);
|
|
74
|
+
});
|
|
75
|
+
return config;
|
|
76
|
+
}
|
|
77
|
+
static validateServer(server, index) {
|
|
78
|
+
const prefix = `Server ${index}`;
|
|
79
|
+
if (!server.name || typeof server.name !== 'string') {
|
|
80
|
+
throw new Error(`${prefix}: "name" is required and must be a string`);
|
|
81
|
+
}
|
|
82
|
+
if (!server.description || typeof server.description !== 'string') {
|
|
83
|
+
throw new Error(`${prefix} (${server.name}): "description" is required and must be a string`);
|
|
84
|
+
}
|
|
85
|
+
if (!server.type || !['local', 'remote'].includes(server.type)) {
|
|
86
|
+
throw new Error(`${prefix} (${server.name}): "type" must be "local" or "remote"`);
|
|
87
|
+
}
|
|
88
|
+
if (server.type === 'local') {
|
|
89
|
+
if (!server.command) {
|
|
90
|
+
throw new Error(`${prefix} (${server.name}): local servers require "command"`);
|
|
91
|
+
}
|
|
92
|
+
// Support both formats:
|
|
93
|
+
// 1. OpenCode format: command: ["npx", "-y", "package"]
|
|
94
|
+
// 2. Legacy format: command: "npx", args: ["-y", "package"]
|
|
95
|
+
if (Array.isArray(server.command)) {
|
|
96
|
+
if (server.command.length === 0) {
|
|
97
|
+
throw new Error(`${prefix} (${server.name}): "command" array cannot be empty`);
|
|
98
|
+
}
|
|
99
|
+
if (!server.command.every((arg) => typeof arg === 'string')) {
|
|
100
|
+
throw new Error(`${prefix} (${server.name}): "command" array must contain only strings`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (typeof server.command === 'string') {
|
|
104
|
+
if (server.args && !Array.isArray(server.args)) {
|
|
105
|
+
throw new Error(`${prefix} (${server.name}): "args" must be an array`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new Error(`${prefix} (${server.name}): "command" must be a string or array`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (server.type === 'remote') {
|
|
113
|
+
if (!server.url || typeof server.url !== 'string') {
|
|
114
|
+
throw new Error(`${prefix} (${server.name}): remote servers require "url" as a string`);
|
|
115
|
+
}
|
|
116
|
+
if (!server.url.startsWith('http://') && !server.url.startsWith('https://') &&
|
|
117
|
+
!server.url.startsWith('ws://') && !server.url.startsWith('wss://')) {
|
|
118
|
+
throw new Error(`${prefix} (${server.name}): "url" must start with http://, https://, ws://, or wss://`);
|
|
119
|
+
}
|
|
120
|
+
if (server.headers && typeof server.headers !== 'object') {
|
|
121
|
+
throw new Error(`${prefix} (${server.name}): "headers" must be an object`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (server.env && typeof server.env !== 'object') {
|
|
125
|
+
throw new Error(`${prefix} (${server.name}): "env" must be an object`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
static expandEnvVars(value) {
|
|
129
|
+
return value.replace(/\$\{([^}]+)\}/g, (match, varName) => {
|
|
130
|
+
return process.env[varName] || match;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
static processEnv(env) {
|
|
134
|
+
const processed = {};
|
|
135
|
+
for (const [key, value] of Object.entries(env)) {
|
|
136
|
+
processed[key] = this.expandEnvVars(value);
|
|
137
|
+
}
|
|
138
|
+
return processed;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.ConfigLoader = ConfigLoader;
|
|
142
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CommandInfo, CommandSchema, MultiServerProxy, ServerInfo } from './types';
|
|
2
|
+
import { ServerManager } from './server-manager';
|
|
3
|
+
export declare class MultiServerProxyImpl implements MultiServerProxy {
|
|
4
|
+
private serverManager;
|
|
5
|
+
constructor(serverManager: ServerManager);
|
|
6
|
+
listServers(filter?: string): Promise<ServerInfo[]>;
|
|
7
|
+
listCommands(server?: string, servers?: string[]): Promise<CommandInfo[] | Record<string, CommandInfo[]>>;
|
|
8
|
+
describeCommands(server: string, commandNames: string[]): Promise<CommandSchema[]>;
|
|
9
|
+
invokeCommand(server: string, commandName: string, parameters: Record<string, any>): Promise<any>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=multi-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-proxy.d.ts","sourceRoot":"","sources":["../src/multi-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIlC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAInD,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IA4BzG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBlF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAQxG"}
|