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 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**: Easy setup for remote MCP servers with just a name and URL
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**: Dedicated "Add Remote MCP" button for easy setup
134
- - Simply provide server name and remote URL
135
- - Automatically generates `npx mcp-remote [URL]` configuration
136
- - Perfect for connecting to hosted MCP services
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
- Standard MCP server configuration (JSON-based clients like Claude Desktop, Claude Code, Cursor, VS Code, etc.):
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-config-manager",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Simple CLI and web UI to manage MCP configs across multiple AI clients",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
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 will create a configuration using npx mcp-remote with your specified URL.</small>
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=2"></script>
318
- <script type="module" src="js/api.js?v=2"></script>
319
- <script type="module" src="js/modals.js?v=2"></script>
320
- <script type="module" src="js/clientView.js?v=2"></script>
321
- <script type="module" src="js/kanbanView.js?v=2"></script>
322
- <script type="module" src="js/serverView.js?v=2"></script>
323
- <script type="module" src="js/main.js?v=2"></script>
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>
@@ -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}
@@ -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)`;
@@ -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
- command: "npx",
796
- args: ["mcp-remote", serverUrl]
802
+ type: transportType,
803
+ url: serverUrl
797
804
  };
798
805
 
799
806
  try {
@@ -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
  };