diff --git a/packages/cli/src/config/settings-validation.test.ts b/packages/cli/src/config/settings-validation.test.ts index 8d4cc641f54..908da8e01c0 100644 --- a/packages/cli/src/config/settings-validation.test.ts +++ b/packages/cli/src/config/settings-validation.test.ts @@ -219,6 +219,60 @@ describe('settings-validation', () => { } }); + it('should validate mcpServers with type field for all transport types', () => { + const validSettings = { + mcpServers: { + 'sse-server': { + url: 'https://example.com/sse', + type: 'sse', + headers: { 'X-API-Key': 'key' }, + }, + 'http-server': { + url: 'https://example.com/mcp', + type: 'http', + }, + 'stdio-server': { + command: '/usr/bin/mcp-server', + type: 'stdio', + }, + }, + }; + + const result = validateSettings(validSettings); + expect(result.success).toBe(true); + }); + + it('should reject invalid type values in mcpServers', () => { + const invalidSettings = { + mcpServers: { + 'bad-server': { + url: 'https://example.com/mcp', + type: 'invalid-type', + }, + }, + }; + + const result = validateSettings(invalidSettings); + expect(result.success).toBe(false); + }); + + it('should validate mcpServers without type field', () => { + const validSettings = { + mcpServers: { + 'stdio-server': { + command: '/usr/bin/mcp-server', + args: ['--port', '8080'], + }, + 'url-server': { + url: 'https://example.com/mcp', + }, + }, + }; + + const result = validateSettings(validSettings); + expect(result.success).toBe(true); + }); + it('should validate complex nested customThemes configuration', () => { const invalidSettings = { ui: { diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 4009e212d67..15f0df7f9d1 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -1704,7 +1704,8 @@ export const SETTINGS_SCHEMA_DEFINITIONS: Record< }, url: { type: 'string', - description: 'SSE transport URL.', + description: + 'URL for SSE or HTTP transport. Use with "type" field to specify transport type.', }, httpUrl: { type: 'string', @@ -1719,6 +1720,12 @@ export const SETTINGS_SCHEMA_DEFINITIONS: Record< type: 'string', description: 'TCP address for websocket transport.', }, + type: { + type: 'string', + description: + 'Transport type. Use "stdio" for local command, "sse" for Server-Sent Events, or "http" for Streamable HTTP.', + enum: ['stdio', 'sse', 'http'], + }, timeout: { type: 'number', description: 'Timeout in milliseconds for MCP requests.', diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index 6eb95354d60..220e93538c9 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -1599,7 +1599,7 @@ }, "url": { "type": "string", - "description": "SSE transport URL." + "description": "URL for SSE or HTTP transport. Use with \"type\" field to specify transport type." }, "httpUrl": { "type": "string", @@ -1616,6 +1616,11 @@ "type": "string", "description": "TCP address for websocket transport." }, + "type": { + "type": "string", + "description": "Transport type. Use \"stdio\" for local command, \"sse\" for Server-Sent Events, or \"http\" for Streamable HTTP.", + "enum": ["stdio", "sse", "http"] + }, "timeout": { "type": "number", "description": "Timeout in milliseconds for MCP requests."