agent: Namespace MCP server tools (#30600)
This fixes an issue where requests were failing when MCP servers were registering tools with the same name. We now prefix the tool names with the context server name, in the UI we still show the name that the MCP server gives us Release Notes: - agent: Fix an error were requests would fail if two MCP servers were using an identical tool name
This commit is contained in:
@@ -637,7 +637,7 @@ impl AgentConfiguration {
|
||||
.hover(|style| style.bg(cx.theme().colors().element_hover))
|
||||
.rounded_sm()
|
||||
.child(
|
||||
Label::new(tool.name())
|
||||
Label::new(tool.ui_name())
|
||||
.buffer_font(cx)
|
||||
.size(LabelSize::Small),
|
||||
)
|
||||
|
||||
@@ -117,7 +117,7 @@ impl ToolPickerDelegate {
|
||||
ToolSource::Native => {
|
||||
if mode == ToolPickerMode::BuiltinTools {
|
||||
items.extend(tools.into_iter().map(|tool| PickerItem::Tool {
|
||||
name: tool.name().into(),
|
||||
name: tool.ui_name().into(),
|
||||
server_id: None,
|
||||
}));
|
||||
}
|
||||
@@ -129,7 +129,7 @@ impl ToolPickerDelegate {
|
||||
server_id: server_id.clone(),
|
||||
});
|
||||
items.extend(tools.into_iter().map(|tool| PickerItem::Tool {
|
||||
name: tool.name().into(),
|
||||
name: tool.ui_name().into(),
|
||||
server_id: Some(server_id.clone()),
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -30,6 +30,10 @@ impl ContextServerTool {
|
||||
|
||||
impl Tool for ContextServerTool {
|
||||
fn name(&self) -> String {
|
||||
format!("{}-{}", self.server_id, self.tool.name)
|
||||
}
|
||||
|
||||
fn ui_name(&self) -> String {
|
||||
self.tool.name.clone()
|
||||
}
|
||||
|
||||
|
||||
@@ -203,6 +203,11 @@ pub trait Tool: 'static + Send + Sync {
|
||||
/// Returns the name of the tool.
|
||||
fn name(&self) -> String;
|
||||
|
||||
/// Returns the name to be displayed in the UI for this tool.
|
||||
fn ui_name(&self) -> String {
|
||||
self.name()
|
||||
}
|
||||
|
||||
/// Returns the description of the tool.
|
||||
fn description(&self) -> String;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user