MCP toolset: in-model built-ins (e.g. google_search) can be shadowed by a server tool; a server tool named set_model_response aborts the run
I maintainer di solito rispondono entro 1 giorno
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
Same two defects as the Go port, reproduced locally against adk-java (4ee155b2, core). No live service was contacted.
- In-model built-in tools do not occupy their name, so a server-provided tool can shadow them.
GoogleSearchTool(andGoogleMapsTool,UrlContextTool,VertexAiSearchTool,BuiltInCodeExecutionTool) overrideprocessLlmRequestto append only toconfig.Tools, never callingappendTools. So the duplicate-name guard inLlmRequest.Builder.appendToolsnever sees them, and a callable MCP tool advertisinggoogle_searchis accepted and wins dispatch —Functions.handleFunctionCallsresolves by name from a map where the MCP tool overwrote the built-in. - A server-provided tool named
set_model_responseaborts the whole run on an agent with an output schema (IllegalArgumentException: Duplicate tool name: set_model_response). Availability, not silent displacement — but a malicious/untrusted MCP server can deny service.
Evidence
- MCP tools take the server's name, unfiltered by default —
tools/mcp/McpToolset.java:260-279;tools/BaseToolset.java:60-64(if (toolFilter == null) return true;); name sourcetools/mcp/AbstractMcpTool.java:52-56. - Callable-vs-callable is fail-closed —
models/LlmRequest.java:204-222(appendTools, throwing merger); all tools enter viatools/BaseTool.java:187-193. set_model_responseis in the guarded class —flows/llmflows/OutputSchema.java:60-65;SetModelResponseTool.java:33-45(extendsBaseTool, does not overrideprocessLlmRequest). Processor order:SingleFlow.java:27-36,BaseLlmFlow.java:103-104.- Built-ins bypass the guard —
tools/GoogleSearchTool.java:45-76(override that appendsTool.builder().googleSearch(...)only); same inGoogleMapsTool.java:65,UrlContextTool.java:46,VertexAiSearchTool.java:60,BuiltInCodeExecutionTool.java:44. - Dispatch by name —
BaseLlmFlow.java:765-766;Functions.java:295(tools.get(functionCall.name().get())).
Local reproduction
[probe] registered tool map keys: [google_search]
[probe] config.Tool googleSearch=true functionDeclarations=[]
[probe] config.Tool googleSearch=false functionDeclarations=[google_search]
[probe] google_search: NO ERROR. dispatch map maps google_search -> FakeMcpTool
[probe] set_model_response: REJECTED -> Duplicate tool name: set_model_response
Suggested fix
Preferred (availability-first): reject the server-provided tool via a reserved-name check in AbstractMcpTool's constructor or in McpToolset.getTools / McpAsyncToolset.getTools, covering set_model_response, transfer_to_agent, google_search, google_maps, url_context, vertex_ai_search, code_execution, load_artifacts.
Alternative: make the in-model tools call appendTools so the existing duplicate guard applies (note: google_search would then need a clean-failing runAsync).
Same class as the Go port (google/adk-go#1605) and a separately-triaged adk-js report.
- Lingua principale
- Java
- Stelle
- 1.7k
- Fork
- 431
- Merge medio
- 2g 20h
- PR unite (30g)
- 42
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di google/adk-java
-
[spring-ai] ToolConverter silently drops enum and items from tool parameter schemasForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
google/adk-java#1609 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
google/adk-java#1608 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[spring-ai] Bridge drops reasoning_content (thinking) — surface it as partial events and/or persist itForse già presa @hemasekhar-p l’ha presa oggi. Apertaneeds review
google/adk-java#1616 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
needs review
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
google/adk-java#1598 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
BaseLlmFlow nests each step inside the previous one and overflows the stack after a few hundred LLM callsForse già presa @hemasekhar-p l’ha presa 8 giorni fa. Apertaneeds review
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
google/adk-java#1564 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di google/adk-java
Issue simili
-
[destination-snowflake] Custom domains rejected unlike source connectionsForse già presa @kuza55 l’ha presa oggi. Apertaautoteam community connectors/destination/snowflake team/use
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
area-dashboard
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
component/operate kind/feature-request
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
Forge coverage prompts carry text the agent cannot act onForse già presa @graalvmbot l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
oracle/graalvm-reachability-metadata#10572 ·
I maintainer di solito rispondono entro 1 giorno
-
Bundled migration plansAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
IBM/sample-app-mod#55 ·