fix(frontend): MCP tool name rendering (#8623)

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
Xingyao Wang 2025-05-22 21:46:40 +08:00 committed by GitHub
parent 66f33bfa96
commit 2906a9023f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 36 additions and 33 deletions

View File

@ -35,6 +35,7 @@ export const getEventContent = (
path: hasPathProperty(event.args) && event.args.path,
command:
hasCommandProperty(event.args) && trimText(event.args.command, 80),
mcp_tool_name: event.action === "call_tool_mcp" && event.args.name,
}}
components={{
path: <PathComponent />,
@ -54,6 +55,7 @@ export const getEventContent = (
command:
hasCommandProperty(event.extras) &&
trimText(event.extras.command, 80),
mcp_tool_name: event.observation === "mcp" && event.extras.name,
}}
components={{
path: <PathComponent />,

View File

@ -6608,20 +6608,20 @@
"uk": "Виконання команди Python"
},
"ACTION_MESSAGE$CALL_TOOL_MCP": {
"en": "Calling MCP Tool: {{action.payload.args.name}}",
"zh-CN": "调用 MCP 工具: {{action.payload.args.name}}",
"zh-TW": "呼叫 MCP 工具: {{action.payload.args.name}}",
"ko-KR": "MCP 도구 호출: {{action.payload.args.name}}",
"ja": "MCP ツール呼び出し: {{action.payload.args.name}}",
"no": "Kaller MCP-verktøy: {{action.payload.args.name}}",
"ar": "استدعاء أداة MCP: {{action.payload.args.name}}",
"de": "Ruft MCP-Tool auf: {{action.payload.args.name}}",
"fr": "Appel de l'outil MCP: {{action.payload.args.name}}",
"it": "Chiamata allo strumento MCP: {{action.payload.args.name}}",
"pt": "Chamando ferramenta MCP: {{action.payload.args.name}}",
"es": "Llamando a la herramienta MCP: {{action.payload.args.name}}",
"tr": "MCP Aracı çağrılıyor: {{action.payload.args.name}}",
"uk": "Викликаю інструмент MCP: {{action.payload.args.name}}"
"en": "Calling MCP Tool: {{mcp_tool_name}}",
"zh-CN": "调用 MCP 工具: {{mcp_tool_name}}",
"zh-TW": "呼叫 MCP 工具: {{mcp_tool_name}}",
"ko-KR": "MCP 도구 호출: {{mcp_tool_name}}",
"ja": "MCP ツール呼び出し: {{mcp_tool_name}}",
"no": "Kaller MCP-verktøy: {{mcp_tool_name}}",
"ar": "استدعاء أداة MCP: {{mcp_tool_name}}",
"de": "Ruft MCP-Tool auf: {{mcp_tool_name}}",
"fr": "Appel de l'outil MCP: {{mcp_tool_name}}",
"it": "Chiamata allo strumento MCP: {{mcp_tool_name}}",
"pt": "Chamando ferramenta MCP: {{mcp_tool_name}}",
"es": "Llamando a la herramienta MCP: {{mcp_tool_name}}",
"tr": "MCP Aracı çağrılıyor: {{mcp_tool_name}}",
"uk": "Викликаю інструмент MCP: {{mcp_tool_name}}"
},
"ACTION_MESSAGE$READ": {
"en": "Reading <path>{{path}}</path>",
@ -6832,20 +6832,20 @@
"uk": "Перегляд завершено"
},
"OBSERVATION_MESSAGE$MCP": {
"en": "MCP Tool Result: {{action.payload.args.name}}",
"zh-CN": "MCP 工具结果: {{action.payload.args.name}}",
"zh-TW": "MCP 工具結果: {{action.payload.args.name}}",
"ko-KR": "MCP 도구 결과: {{action.payload.args.name}}",
"ja": "MCP ツール結果: {{action.payload.args.name}}",
"no": "MCP verktøyresultat: {{action.payload.args.name}}",
"ar": "نتيجة أداة MCP: {{action.payload.args.name}}",
"de": "MCP-Tool-Ergebnis: {{action.payload.args.name}}",
"fr": "Résultat de l'outil MCP: {{action.payload.args.name}}",
"it": "Risultato dello strumento MCP: {{action.payload.args.name}}",
"pt": "Resultado da ferramenta MCP: {{action.payload.args.name}}",
"es": "Resultado de la herramienta MCP: {{action.payload.args.name}}",
"tr": "MCP Aracı Sonucu: {{action.payload.args.name}}",
"uk": "Результат інструменту MCP: {{action.payload.args.name}}"
"en": "MCP Tool Result: {{mcp_tool_name}}",
"zh-CN": "MCP 工具结果: {{mcp_tool_name}}",
"zh-TW": "MCP 工具結果: {{mcp_tool_name}}",
"ko-KR": "MCP 도구 결과: {{mcp_tool_name}}",
"ja": "MCP ツール結果: {{mcp_tool_name}}",
"no": "MCP verktøyresultat: {{mcp_tool_name}}",
"ar": "نتيجة أداة MCP: {{mcp_tool_name}}",
"de": "MCP-Tool-Ergebnis: {{mcp_tool_name}}",
"fr": "Résultat de l'outil MCP: {{mcp_tool_name}}",
"it": "Risultato dello strumento MCP: {{mcp_tool_name}}",
"pt": "Resultado da ferramenta MCP: {{mcp_tool_name}}",
"es": "Resultado de la herramienta MCP: {{mcp_tool_name}}",
"tr": "MCP Aracı Sonucu: {{mcp_tool_name}}",
"uk": "Результат інструменту MCP: {{mcp_tool_name}}"
},
"OBSERVATION_MESSAGE$RECALL": {
"en": "Microagent ready",

View File

@ -134,16 +134,14 @@ export interface RecallObservation extends OpenHandsObservationEvent<"recall"> {
export interface MCPObservation extends OpenHandsObservationEvent<"mcp"> {
source: "agent";
extras: {
// Add any specific fields for MCP observations
name: string;
};
}
export interface UserRejectedObservation
extends OpenHandsObservationEvent<"user_rejected"> {
source: "agent";
extras: {
// Add any specific fields for MCP observations
};
extras: Record<string, unknown>;
}
export type OpenHandsObservation =

View File

@ -9,6 +9,7 @@ class MCPObservation(Observation):
"""This data class represents the result of a MCP Server operation."""
observation: str = ObservationType.MCP
name: str = '' # The name of the MCP tool that was called
@property
def message(self) -> str:

View File

@ -150,7 +150,9 @@ async def call_tool_mcp(mcp_clients: list[MCPClient], action: MCPAction) -> Obse
response = await matching_client.call_tool(action.name, action.arguments)
logger.debug(f'MCP response: {response}')
return MCPObservation(content=json.dumps(response.model_dump(mode='json')))
return MCPObservation(
content=json.dumps(response.model_dump(mode='json')), name=action.name
)
async def add_mcp_tools_to_agent(