fix: improve gemini mcp add option handling for arrays (#11575)

This commit is contained in:
Jack Wotherspoon
2025-10-21 15:35:01 -04:00
committed by GitHub
parent 3443946087
commit 62dc9683bd
3 changed files with 26 additions and 6 deletions
+3 -3
View File
@@ -930,7 +930,7 @@ This is the default transport for running local servers.
gemini mcp add <name> <command> [args...] gemini mcp add <name> <command> [args...]
# Example: Adding a local server # Example: Adding a local server
gemini mcp add my-stdio-server -e API_KEY=123 /path/to/server arg1 arg2 arg3 gemini mcp add -e API_KEY=123 my-stdio-server /path/to/server arg1 arg2 arg3
# Example: Adding a local python server # Example: Adding a local python server
gemini mcp add python-server python server.py --port 8080 gemini mcp add python-server python server.py --port 8080
@@ -948,7 +948,7 @@ gemini mcp add --transport http <name> <url>
gemini mcp add --transport http http-server https://api.example.com/mcp/ gemini mcp add --transport http http-server https://api.example.com/mcp/
# Example: Adding an HTTP server with an authentication header # Example: Adding an HTTP server with an authentication header
gemini mcp add --transport http secure-http https://api.example.com/mcp/ --header "Authorization: Bearer abc123" gemini mcp add --transport http --header "Authorization: Bearer abc123" secure-http https://api.example.com/mcp/
``` ```
#### Adding an SSE server #### Adding an SSE server
@@ -963,7 +963,7 @@ gemini mcp add --transport sse <name> <url>
gemini mcp add --transport sse sse-server https://api.example.com/sse/ gemini mcp add --transport sse sse-server https://api.example.com/sse/
# Example: Adding an SSE server with an authentication header # Example: Adding an SSE server with an authentication header
gemini mcp add --transport sse secure-sse https://api.example.com/sse/ --header "Authorization: Bearer abc123" gemini mcp add --transport sse --header "Authorization: Bearer abc123" secure-sse https://api.example.com/sse/
``` ```
### Listing Servers (`gemini mcp list`) ### Listing Servers (`gemini mcp list`)
+21 -3
View File
@@ -56,7 +56,7 @@ describe('mcp add command', () => {
it('should add a stdio server to project settings', async () => { it('should add a stdio server to project settings', async () => {
await parser.parseAsync( await parser.parseAsync(
'add my-server /path/to/server arg1 arg2 -e FOO=bar', 'add -e FOO=bar my-server /path/to/server arg1 arg2',
); );
expect(mockSetValue).toHaveBeenCalledWith( expect(mockSetValue).toHaveBeenCalledWith(
@@ -72,9 +72,27 @@ describe('mcp add command', () => {
); );
}); });
it('should handle multiple env vars before positional args', async () => {
await parser.parseAsync(
'add -e FOO=bar -e BAZ=qux my-server /path/to/server',
);
expect(mockSetValue).toHaveBeenCalledWith(
SettingScope.Workspace,
'mcpServers',
{
'my-server': {
command: '/path/to/server',
args: [],
env: { FOO: 'bar', BAZ: 'qux' },
},
},
);
});
it('should add an sse server to user settings', async () => { it('should add an sse server to user settings', async () => {
await parser.parseAsync( await parser.parseAsync(
'add --transport sse sse-server https://example.com/sse-endpoint --scope user -H "X-API-Key: your-key"', 'add --transport sse --scope user -H "X-API-Key: your-key" sse-server https://example.com/sse-endpoint',
); );
expect(mockSetValue).toHaveBeenCalledWith(SettingScope.User, 'mcpServers', { expect(mockSetValue).toHaveBeenCalledWith(SettingScope.User, 'mcpServers', {
@@ -87,7 +105,7 @@ describe('mcp add command', () => {
it('should add an http server to project settings', async () => { it('should add an http server to project settings', async () => {
await parser.parseAsync( await parser.parseAsync(
'add --transport http http-server https://example.com/mcp -H "Authorization: Bearer your-token"', 'add --transport http -H "Authorization: Bearer your-token" http-server https://example.com/mcp',
); );
expect(mockSetValue).toHaveBeenCalledWith( expect(mockSetValue).toHaveBeenCalledWith(
+2
View File
@@ -173,6 +173,7 @@ export const addCommand: CommandModule = {
describe: 'Set environment variables (e.g. -e KEY=value)', describe: 'Set environment variables (e.g. -e KEY=value)',
type: 'array', type: 'array',
string: true, string: true,
nargs: 1,
}) })
.option('header', { .option('header', {
alias: 'H', alias: 'H',
@@ -180,6 +181,7 @@ export const addCommand: CommandModule = {
'Set HTTP headers for SSE and HTTP transports (e.g. -H "X-Api-Key: abc123" -H "Authorization: Bearer abc123")', 'Set HTTP headers for SSE and HTTP transports (e.g. -H "X-Api-Key: abc123" -H "Authorization: Bearer abc123")',
type: 'array', type: 'array',
string: true, string: true,
nargs: 1,
}) })
.option('timeout', { .option('timeout', {
describe: 'Set connection timeout in milliseconds', describe: 'Set connection timeout in milliseconds',