Fix MCP resolution for split flat names

This commit is contained in:
Sayan Sisodiya
2026-04-11 18:59:20 -07:00
parent dd29229c01
commit 64815da52c
2 changed files with 24 additions and 8 deletions

View File

@@ -1200,15 +1200,18 @@ impl McpConnectionManager {
pub async fn resolve_tool_info(&self, tool_name: &ToolName) -> Option<ToolInfo> {
let all_tools = self.list_all_tools().await;
if tool_name.namespace.is_some() {
let tools_by_name = all_tools
.into_values()
.map(|tool| (tool.callable_tool_name(), tool))
.collect::<HashMap<_, _>>();
tools_by_name.get(tool_name).cloned()
} else {
all_tools.get(&tool_name.name).cloned()
let tools_by_name = all_tools
.into_values()
.map(|tool| (tool.callable_tool_name(), tool))
.collect::<HashMap<_, _>>();
if let Some(tool) = tools_by_name.get(tool_name) {
return Some(tool.clone());
}
tools_by_name
.into_iter()
.find_map(|(name, tool)| (name.display() == tool_name.name).then_some(tool))
}
pub async fn notify_sandbox_state_change(&self, sandbox_state: &SandboxState) -> Result<()> {

View File

@@ -674,6 +674,10 @@ async fn resolve_tool_info_accepts_plain_and_namespaced_tool_names() {
.resolve_tool_info(&ToolName::namespaced("mcp__rmcp__", "echo"))
.await
.expect("split MCP tool namespace and name should resolve");
let split_with_flat_name = manager
.resolve_tool_info(&ToolName::namespaced("mcp__rmcp__", "mcp__rmcp__echo"))
.await
.expect("split namespace with flat qualified MCP tool name should resolve");
let expected = ("rmcp", "mcp__rmcp__", "echo", "echo");
assert_eq!(
@@ -694,6 +698,15 @@ async fn resolve_tool_info_accepts_plain_and_namespaced_tool_names() {
),
expected
);
assert_eq!(
(
split_with_flat_name.server_name.as_str(),
split_with_flat_name.callable_namespace.as_str(),
split_with_flat_name.callable_name.as_str(),
split_with_flat_name.tool.name.as_ref(),
),
expected
);
}
#[tokio::test]