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

View File

@@ -930,7 +930,7 @@ This is the default transport for running local servers.
gemini mcp add <name> <command> [args...]
# 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
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/
# 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
@@ -963,7 +963,7 @@ gemini mcp add --transport sse <name> <url>
gemini mcp add --transport sse sse-server https://api.example.com/sse/
# 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`)

View File

@@ -56,7 +56,7 @@ describe('mcp add command', () => {
it('should add a stdio server to project settings', async () => {
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(
@@ -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 () => {
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', {
@@ -87,7 +105,7 @@ describe('mcp add command', () => {
it('should add an http server to project settings', async () => {
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(

View File

@@ -173,6 +173,7 @@ export const addCommand: CommandModule = {
describe: 'Set environment variables (e.g. -e KEY=value)',
type: 'array',
string: true,
nargs: 1,
})
.option('header', {
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")',
type: 'array',
string: true,
nargs: 1,
})
.option('timeout', {
describe: 'Set connection timeout in milliseconds',