mcp-config-manager 1.0.9 → 1.0.10
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 +25 -6
- package/package.json +1 -1
- package/public/index.html +15 -8
- package/public/js/clientView.js +11 -0
- package/public/js/kanbanView.js +5 -0
- package/public/js/modals.js +10 -3
- package/public/js/serverView.js +11 -0
- package/public/style.css +26 -0
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Simple CLI and web UI tool to manage Model Context Protocol (MCP) configurations
|
|
|
10
10
|
- **Multi-client support**: Manage configs for a growing list of clients, including Claude, VS Code, Cursor, Windsurf, Gemini, and more. The tool can detect any client that follows the MCP specification.
|
|
11
11
|
- **Simple CLI**: Command-line interface for quick operations
|
|
12
12
|
- **Web UI**: Clean web interface with List and Kanban views
|
|
13
|
-
- **Remote MCP Support**:
|
|
13
|
+
- **Remote MCP Support**: Native HTTP and SSE transport support for remote MCP servers
|
|
14
14
|
- **Kanban Board**: Drag-and-drop servers between clients
|
|
15
15
|
- **JSON Editor**: Edit server configs as raw JSON or using forms
|
|
16
16
|
- **Bulk Operations**: Copy servers to multiple clients at once
|
|
@@ -130,10 +130,11 @@ The web UI provides:
|
|
|
130
130
|
- **Server View**: Consolidated view of all servers across clients
|
|
131
131
|
- Shows which clients each server is configured for
|
|
132
132
|
- Bulk operations to add servers to multiple clients
|
|
133
|
-
- **Remote MCP Support**:
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
-
|
|
133
|
+
- **Remote MCP Support**: Native transport type support for remote MCP servers
|
|
134
|
+
- Choose between HTTP (Streamable HTTP) or SSE (Server-Sent Events) transport
|
|
135
|
+
- Simply provide server name, transport type, and remote URL
|
|
136
|
+
- Generates native `type`/`url` configuration (no proxy required)
|
|
137
|
+
- Visual transport type badges (HTTP, SSE, STDIO) in server cards
|
|
137
138
|
- **JSON Editor**: Toggle between form and raw JSON editing
|
|
138
139
|
- **Multi-select Copy**: Copy servers to multiple clients at once
|
|
139
140
|
- **Clipboard Support**: Quick copy server configs with one click
|
|
@@ -164,7 +165,8 @@ This tool supports auto-detection of any client that follows the Model Context P
|
|
|
164
165
|
|
|
165
166
|
## Configuration Format
|
|
166
167
|
|
|
167
|
-
|
|
168
|
+
### Local MCP Servers (stdio transport)
|
|
169
|
+
Standard MCP server configuration for local processes (JSON-based clients like Claude Desktop, Claude Code, Cursor, VS Code, etc.):
|
|
168
170
|
```json
|
|
169
171
|
{
|
|
170
172
|
"mcpServers": {
|
|
@@ -179,6 +181,23 @@ Standard MCP server configuration (JSON-based clients like Claude Desktop, Claud
|
|
|
179
181
|
}
|
|
180
182
|
```
|
|
181
183
|
|
|
184
|
+
### Remote MCP Servers (HTTP/SSE transport)
|
|
185
|
+
Native remote server configuration using HTTP (Streamable HTTP) or SSE (Server-Sent Events) transport:
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
"mcpServers": {
|
|
189
|
+
"remote-server": {
|
|
190
|
+
"type": "http",
|
|
191
|
+
"url": "https://example.com/mcp"
|
|
192
|
+
},
|
|
193
|
+
"sse-server": {
|
|
194
|
+
"type": "sse",
|
|
195
|
+
"url": "https://example.com/sse"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
182
201
|
Codex uses a TOML configuration file at `~/.codex/config.toml`, where MCP servers are defined under the `[mcp_servers.<server-name>]` tables. For example:
|
|
183
202
|
|
|
184
203
|
```toml
|
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -241,12 +241,19 @@
|
|
|
241
241
|
<label for="remoteServerName">Server Name:</label>
|
|
242
242
|
<input type="text" id="remoteServerName" name="remoteServerName" placeholder="e.g., my-remote-server" required>
|
|
243
243
|
</div>
|
|
244
|
+
<div class="form-group">
|
|
245
|
+
<label for="remoteServerTransport">Transport Type:</label>
|
|
246
|
+
<select id="remoteServerTransport" name="remoteServerTransport">
|
|
247
|
+
<option value="http">HTTP (Streamable HTTP)</option>
|
|
248
|
+
<option value="sse">SSE (Server-Sent Events)</option>
|
|
249
|
+
</select>
|
|
250
|
+
</div>
|
|
244
251
|
<div class="form-group">
|
|
245
252
|
<label for="remoteServerUrl">Remote URL:</label>
|
|
246
253
|
<input type="url" id="remoteServerUrl" name="remoteServerUrl" placeholder="https://example.com/mcp" required>
|
|
247
254
|
</div>
|
|
248
255
|
<div class="form-group">
|
|
249
|
-
<small>This
|
|
256
|
+
<small>This creates a native remote MCP server configuration. HTTP is the modern streamable transport, SSE is for legacy server-sent events endpoints.</small>
|
|
250
257
|
</div>
|
|
251
258
|
<div class="modal-actions">
|
|
252
259
|
<button type="submit" class="btn btn-primary">Add Remote Server</button>
|
|
@@ -314,12 +321,12 @@
|
|
|
314
321
|
</div>
|
|
315
322
|
</div>
|
|
316
323
|
|
|
317
|
-
<script type="module" src="js/utils.js?v=
|
|
318
|
-
<script type="module" src="js/api.js?v=
|
|
319
|
-
<script type="module" src="js/modals.js?v=
|
|
320
|
-
<script type="module" src="js/clientView.js?v=
|
|
321
|
-
<script type="module" src="js/kanbanView.js?v=
|
|
322
|
-
<script type="module" src="js/serverView.js?v=
|
|
323
|
-
<script type="module" src="js/main.js?v=
|
|
324
|
+
<script type="module" src="js/utils.js?v=3"></script>
|
|
325
|
+
<script type="module" src="js/api.js?v=3"></script>
|
|
326
|
+
<script type="module" src="js/modals.js?v=3"></script>
|
|
327
|
+
<script type="module" src="js/clientView.js?v=3"></script>
|
|
328
|
+
<script type="module" src="js/kanbanView.js?v=3"></script>
|
|
329
|
+
<script type="module" src="js/serverView.js?v=3"></script>
|
|
330
|
+
<script type="module" src="js/main.js?v=3"></script>
|
|
324
331
|
</body>
|
|
325
332
|
</html>
|
package/public/js/clientView.js
CHANGED
|
@@ -126,6 +126,16 @@ function renderServerList(servers) {
|
|
|
126
126
|
envHtml += '</div>';
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
// Build transport info for remote servers (type/url)
|
|
130
|
+
let transportHtml = '';
|
|
131
|
+
if (server.type) {
|
|
132
|
+
const transportType = server.type.toUpperCase();
|
|
133
|
+
transportHtml = `<div class="detail-row"><strong>Type:</strong> <span class="transport-badge transport-${server.type}">${transportType}</span></div>`;
|
|
134
|
+
if (server.url) {
|
|
135
|
+
transportHtml += `<div class="detail-row"><strong>URL:</strong> ${server.url}</div>`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
129
139
|
card.innerHTML = `
|
|
130
140
|
<div class="server-header">
|
|
131
141
|
<input type="checkbox" class="server-checkbox" data-server="${name}">
|
|
@@ -137,6 +147,7 @@ function renderServerList(servers) {
|
|
|
137
147
|
</div>
|
|
138
148
|
</div>
|
|
139
149
|
<div class="server-details">
|
|
150
|
+
${transportHtml}
|
|
140
151
|
${server.command ? `<div class="detail-row"><strong>Command:</strong> ${server.command}</div>` : ''}
|
|
141
152
|
${server.args ? `<div class="detail-row"><strong>Args:</strong> ${server.args.join(' ')}</div>` : ''}
|
|
142
153
|
${envHtml}
|
package/public/js/kanbanView.js
CHANGED
|
@@ -127,6 +127,11 @@ function createKanbanCard(clientId, serverName, server) {
|
|
|
127
127
|
card.style.backgroundColor = getServerColor(serverName);
|
|
128
128
|
|
|
129
129
|
let details = '';
|
|
130
|
+
// Show transport type for remote servers
|
|
131
|
+
if (server.type) {
|
|
132
|
+
details += `type: ${server.type.toUpperCase()}\n`;
|
|
133
|
+
if (server.url) details += `url: ${server.url}\n`;
|
|
134
|
+
}
|
|
130
135
|
if (server.command) details += `cmd: ${server.command}\n`;
|
|
131
136
|
if (server.args) details += `args: ${server.args.join(' ')}\n`;
|
|
132
137
|
if (server.env) details += `env: ${Object.keys(server.env).length} var(s)`;
|
package/public/js/modals.js
CHANGED
|
@@ -769,6 +769,12 @@ export function showRemoteServerModal(loadClientServers, renderKanbanBoard, clie
|
|
|
769
769
|
document.getElementById('remoteServerName').value = '';
|
|
770
770
|
document.getElementById('remoteServerUrl').value = '';
|
|
771
771
|
|
|
772
|
+
// Set default transport type if selector exists
|
|
773
|
+
const transportSelect = document.getElementById('remoteServerTransport');
|
|
774
|
+
if (transportSelect) {
|
|
775
|
+
transportSelect.value = 'http';
|
|
776
|
+
}
|
|
777
|
+
|
|
772
778
|
modal.style.display = 'flex';
|
|
773
779
|
document.getElementById('remoteServerName').focus();
|
|
774
780
|
|
|
@@ -784,16 +790,17 @@ export function showRemoteServerModal(loadClientServers, renderKanbanBoard, clie
|
|
|
784
790
|
|
|
785
791
|
const serverName = document.getElementById('remoteServerName').value.trim();
|
|
786
792
|
const serverUrl = document.getElementById('remoteServerUrl').value.trim();
|
|
793
|
+
const transportType = document.getElementById('remoteServerTransport')?.value || 'http';
|
|
787
794
|
|
|
788
795
|
if (!serverName || !serverUrl) {
|
|
789
796
|
alert('Please provide both server name and URL.');
|
|
790
797
|
return;
|
|
791
798
|
}
|
|
792
799
|
|
|
793
|
-
// Create the configuration for remote MCP server
|
|
800
|
+
// Create the configuration for remote MCP server using native type/url format
|
|
794
801
|
const serverConfig = {
|
|
795
|
-
|
|
796
|
-
|
|
802
|
+
type: transportType,
|
|
803
|
+
url: serverUrl
|
|
797
804
|
};
|
|
798
805
|
|
|
799
806
|
try {
|
package/public/js/serverView.js
CHANGED
|
@@ -45,6 +45,16 @@ export async function renderAllServers() {
|
|
|
45
45
|
envHtml += '</div>';
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
// Build transport info for remote servers (type/url)
|
|
49
|
+
let transportHtml = '';
|
|
50
|
+
if (serverData.config && serverData.config.type) {
|
|
51
|
+
const transportType = serverData.config.type.toUpperCase();
|
|
52
|
+
transportHtml = `<div class="detail-row"><strong>Type:</strong> <span class="transport-badge transport-${serverData.config.type}">${transportType}</span></div>`;
|
|
53
|
+
if (serverData.config.url) {
|
|
54
|
+
transportHtml += `<div class="detail-row"><strong>URL:</strong> ${serverData.config.url}</div>`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
48
58
|
card.innerHTML = `
|
|
49
59
|
<div class="server-header-all">
|
|
50
60
|
<span class="server-name-all">${serverName}</span>
|
|
@@ -58,6 +68,7 @@ export async function renderAllServers() {
|
|
|
58
68
|
</div>
|
|
59
69
|
</div>
|
|
60
70
|
<div class="server-details-all">
|
|
71
|
+
${transportHtml}
|
|
61
72
|
${serverData.config && serverData.config.command ? `<div class="detail-row"><strong>Command:</strong> ${serverData.config.command}</div>` : ''}
|
|
62
73
|
${serverData.config && serverData.config.args ? `<div class="detail-row"><strong>Args:</strong> ${serverData.config.args.join(' ')}</div>` : ''}
|
|
63
74
|
${envHtml}
|
package/public/style.css
CHANGED
|
@@ -638,3 +638,29 @@ header p {
|
|
|
638
638
|
border: 1px solid #e0e0e0;
|
|
639
639
|
font-family: 'Courier New', monospace;
|
|
640
640
|
}
|
|
641
|
+
|
|
642
|
+
/* Transport type badges for remote servers */
|
|
643
|
+
.transport-badge {
|
|
644
|
+
display: inline-block;
|
|
645
|
+
padding: 2px 8px;
|
|
646
|
+
border-radius: 4px;
|
|
647
|
+
font-size: 11px;
|
|
648
|
+
font-weight: 600;
|
|
649
|
+
text-transform: uppercase;
|
|
650
|
+
letter-spacing: 0.5px;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
.transport-http {
|
|
654
|
+
background: #3498db;
|
|
655
|
+
color: white;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.transport-sse {
|
|
659
|
+
background: #9b59b6;
|
|
660
|
+
color: white;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
.transport-stdio {
|
|
664
|
+
background: #27ae60;
|
|
665
|
+
color: white;
|
|
666
|
+
}
|