mirror of
https://github.com/openai/codex.git
synced 2026-09-09 15:58:47 +00:00
Fix MCP resolution for split flat names
This commit is contained in:
@@ -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<()> {
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user