fix: prevent MCP server creation when setting is disabled (#6613)

* fix: prevent MCP server creation when setting is disabled

- Modified getFetchInstructionsDescription to conditionally include create_mcp_server task
- Updated getToolDescriptionsForMode to pass enableMcpServerCreation parameter
- Added tests to verify the conditional behavior
- Updated snapshot test to reflect the new expected behavior

Fixes #6607

* fix: address review comments - add JSDoc, null test, and clarify default behavior

---------

Co-authored-by: Roo Code <roomote@roocode.com>
This commit is contained in:
roomote[bot] 2025-08-04 19:29:38 -07:00 committed by GitHub
parent 4a9222b50e
commit 8a35b64b9b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 89 additions and 13 deletions

View file

@ -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
<fetch_instructions>
<task>create_mcp_server</task>
<task>create_mode</task>
</fetch_instructions>
## search_files

View file

@ -105,6 +105,7 @@ ${getToolDescriptionsForMode(
experiments,
partialReadsEnabled,
settings,
enableMcpServerCreation,
)}
${getToolUseGuidelinesSection(codeIndexManager)}

View file

@ -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("<task>create_mcp_server</task>")
})
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("<task>create_mcp_server</task>")
})
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("<task>create_mode</task>")
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("<fetch_instructions>")
expect(description).toContain("</fetch_instructions>")
})
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("<task>create_mcp_server</task>")
})
})

View file

@ -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
<fetch_instructions>
<task>create_mcp_server</task>
</fetch_instructions>`
: `Example: Requesting instructions to create a Mode
<fetch_instructions>
<task>create_mode</task>
</fetch_instructions>`
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}`
}

View file

@ -29,7 +29,7 @@ import { CodeIndexManager } from "../../../services/code-index/manager"
const toolDescriptionMap: Record<string, (args: ToolArgs) => 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<string, boolean>,
partialReadsEnabled?: boolean,
settings?: Record<string, any>,
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,
}