mcp-config-manager 1.0.8 → 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 +27 -7
- 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/src/clients.js +9 -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
|
|
@@ -151,19 +152,21 @@ This tool supports auto-detection of any client that follows the Model Context P
|
|
|
151
152
|
- **Claude Desktop**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
152
153
|
- **Claude Code**: `~/.claude.json` (global settings and MCP servers)
|
|
153
154
|
- **Cline**: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
|
|
155
|
+
- **Codex**: `~/.codex/config.toml` (TOML with `[mcp_servers.<name>]` tables)
|
|
154
156
|
- **Cursor**: `.cursor/mcp.json` (project-specific) or `~/.cursor/mcp.json` (global)
|
|
155
157
|
- **Factory Bridge**: `~/Library/Application Support/Factory Bridge/mcp.json`
|
|
156
158
|
- **Gemini**: `~/.gemini/settings.json`
|
|
159
|
+
- **Google AntiGravity**: `~/.gemini/antigravity/mcp_config.json`
|
|
157
160
|
- **Roo Code**: `~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`
|
|
158
161
|
- **VS Code**: `.vscode/mcp.json`
|
|
159
162
|
- **Windsurf**: `~/.codeium/windsurf/mcp_config.json` or `~/AppData/Roaming/WindSurf/mcp_settings.json` (Windows)
|
|
160
|
-
- **Codex**: `~/.codex/config.toml` (TOML with `[mcp_servers.<name>]` tables)
|
|
161
163
|
|
|
162
164
|
*Note: Paths may vary based on your operating system. The tool will attempt to find the correct path automatically.*
|
|
163
165
|
|
|
164
166
|
## Configuration Format
|
|
165
167
|
|
|
166
|
-
|
|
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.):
|
|
167
170
|
```json
|
|
168
171
|
{
|
|
169
172
|
"mcpServers": {
|
|
@@ -178,6 +181,23 @@ Standard MCP server configuration (JSON-based clients like Claude Desktop, Claud
|
|
|
178
181
|
}
|
|
179
182
|
```
|
|
180
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
|
+
|
|
181
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:
|
|
182
202
|
|
|
183
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
|
+
}
|
package/src/clients.js
CHANGED
|
@@ -118,5 +118,14 @@ export const CLIENTS = {
|
|
|
118
118
|
linux: path.join(os.homedir(), '.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json')
|
|
119
119
|
},
|
|
120
120
|
format: 'mcpServers'
|
|
121
|
+
},
|
|
122
|
+
'google-antigravity': {
|
|
123
|
+
name: 'Google AntiGravity',
|
|
124
|
+
configPaths: {
|
|
125
|
+
darwin: path.join(os.homedir(), '.gemini/antigravity/mcp_config.json'),
|
|
126
|
+
win32: path.join(os.homedir(), '.gemini/antigravity/mcp_config.json'),
|
|
127
|
+
linux: path.join(os.homedir(), '.gemini/antigravity/mcp_config.json')
|
|
128
|
+
},
|
|
129
|
+
format: 'mcpServers'
|
|
121
130
|
}
|
|
122
131
|
};
|