diff --git a/src/core/prompts/__tests__/__snapshots__/add-custom-instructions/mcp-server-creation-disabled.snap b/src/core/prompts/__tests__/__snapshots__/add-custom-instructions/mcp-server-creation-disabled.snap index 632273dea02..b1fdcc2e32b 100644 --- a/src/core/prompts/__tests__/__snapshots__/add-custom-instructions/mcp-server-creation-disabled.snap +++ b/src/core/prompts/__tests__/__snapshots__/add-custom-instructions/mcp-server-creation-disabled.snap @@ -99,13 +99,12 @@ IMPORTANT: You MUST use this Efficient Reading Strategy: Description: Request to fetch instructions to perform a task Parameters: - task: (required) The task to get instructions for. This can take the following values: - create_mcp_server create_mode -Example: Requesting instructions to create an MCP Server +Example: Requesting instructions to create a Mode -create_mcp_server +create_mode ## search_files diff --git a/src/core/prompts/system.ts b/src/core/prompts/system.ts index cbe91903ee3..227e79679da 100644 --- a/src/core/prompts/system.ts +++ b/src/core/prompts/system.ts @@ -105,6 +105,7 @@ ${getToolDescriptionsForMode( experiments, partialReadsEnabled, settings, + enableMcpServerCreation, )} ${getToolUseGuidelinesSection(codeIndexManager)} diff --git a/src/core/prompts/tools/__tests__/fetch-instructions.spec.ts b/src/core/prompts/tools/__tests__/fetch-instructions.spec.ts new file mode 100644 index 00000000000..29e7f0fca26 --- /dev/null +++ b/src/core/prompts/tools/__tests__/fetch-instructions.spec.ts @@ -0,0 +1,53 @@ +import { describe, it, expect } from "vitest" +import { getFetchInstructionsDescription } from "../fetch-instructions" + +describe("getFetchInstructionsDescription", () => { + it("should include create_mcp_server when enableMcpServerCreation is true", () => { + const description = getFetchInstructionsDescription(true) + + expect(description).toContain("create_mcp_server") + expect(description).toContain("create_mode") + expect(description).toContain("Example: Requesting instructions to create an MCP Server") + expect(description).toContain("create_mcp_server") + }) + + it("should include create_mcp_server when enableMcpServerCreation is undefined (default behavior)", () => { + const description = getFetchInstructionsDescription() + + expect(description).toContain("create_mcp_server") + expect(description).toContain("create_mode") + expect(description).toContain("Example: Requesting instructions to create an MCP Server") + expect(description).toContain("create_mcp_server") + }) + + it("should exclude create_mcp_server when enableMcpServerCreation is false", () => { + const description = getFetchInstructionsDescription(false) + + expect(description).not.toContain("create_mcp_server") + expect(description).toContain("create_mode") + expect(description).toContain("Example: Requesting instructions to create a Mode") + expect(description).toContain("create_mode") + expect(description).not.toContain("Example: Requesting instructions to create an MCP Server") + }) + + it("should have the correct structure", () => { + const description = getFetchInstructionsDescription(true) + + expect(description).toContain("## fetch_instructions") + expect(description).toContain("Description: Request to fetch instructions to perform a task") + expect(description).toContain("Parameters:") + expect(description).toContain("- task: (required) The task to get instructions for.") + expect(description).toContain("") + expect(description).toContain("") + }) + + it("should handle null value consistently (treat as default/undefined)", () => { + const description = getFetchInstructionsDescription(null as any) + + // Should behave the same as undefined (default to true) + expect(description).toContain("create_mcp_server") + expect(description).toContain("create_mode") + expect(description).toContain("Example: Requesting instructions to create an MCP Server") + expect(description).toContain("create_mcp_server") + }) +}) diff --git a/src/core/prompts/tools/fetch-instructions.ts b/src/core/prompts/tools/fetch-instructions.ts index eca231c5620..dd9cbb80da9 100644 --- a/src/core/prompts/tools/fetch-instructions.ts +++ b/src/core/prompts/tools/fetch-instructions.ts @@ -1,14 +1,33 @@ -export function getFetchInstructionsDescription(): string { - return `## fetch_instructions -Description: Request to fetch instructions to perform a task -Parameters: -- task: (required) The task to get instructions for. This can take the following values: - create_mcp_server - create_mode +/** + * Generates the fetch_instructions tool description. + * @param enableMcpServerCreation - Whether to include MCP server creation task. + * Defaults to true when undefined. + */ +export function getFetchInstructionsDescription(enableMcpServerCreation?: boolean): string { + const tasks = + enableMcpServerCreation !== false + ? ` create_mcp_server + create_mode` + : ` create_mode` -Example: Requesting instructions to create an MCP Server + const example = + enableMcpServerCreation !== false + ? `Example: Requesting instructions to create an MCP Server create_mcp_server ` + : `Example: Requesting instructions to create a Mode + + +create_mode +` + + return `## fetch_instructions +Description: Request to fetch instructions to perform a task +Parameters: +- task: (required) The task to get instructions for. This can take the following values: +${tasks} + +${example}` } diff --git a/src/core/prompts/tools/index.ts b/src/core/prompts/tools/index.ts index 9f4af7f312c..0c88bd94b1f 100644 --- a/src/core/prompts/tools/index.ts +++ b/src/core/prompts/tools/index.ts @@ -29,7 +29,7 @@ import { CodeIndexManager } from "../../../services/code-index/manager" const toolDescriptionMap: Record string | undefined> = { execute_command: (args) => getExecuteCommandDescription(args), read_file: (args) => getReadFileDescription(args), - fetch_instructions: () => getFetchInstructionsDescription(), + fetch_instructions: (args) => getFetchInstructionsDescription(args.settings?.enableMcpServerCreation), write_to_file: (args) => getWriteToFileDescription(args), search_files: (args) => getSearchFilesDescription(args), list_files: (args) => getListFilesDescription(args), @@ -61,6 +61,7 @@ export function getToolDescriptionsForMode( experiments?: Record, partialReadsEnabled?: boolean, settings?: Record, + enableMcpServerCreation?: boolean, ): string { const config = getModeConfig(mode, customModes) const args: ToolArgs = { @@ -70,7 +71,10 @@ export function getToolDescriptionsForMode( browserViewportSize, mcpHub, partialReadsEnabled, - settings, + settings: { + ...settings, + enableMcpServerCreation, + }, experiments, }