fix(mcp): mcp_client refactor, claude_mma_exec update

This commit is contained in:
2026-03-02 10:15:32 -05:00
parent 89e82f1134
commit 1df088845d
2 changed files with 26 additions and 23 deletions

View File

@@ -807,39 +807,41 @@ def dispatch(tool_name: str, tool_input: dict[str, Any]) -> str:
""" """
Dispatch an MCP tool call by name. Returns the result as a string. Dispatch an MCP tool call by name. Returns the result as a string.
""" """
# Handle aliases
path = tool_input.get("path", tool_input.get("file_path", tool_input.get("dir_path", "")))
if tool_name == "read_file": if tool_name == "read_file":
return read_file(tool_input.get("path", "")) return read_file(path)
if tool_name == "list_directory": if tool_name == "list_directory":
return list_directory(tool_input.get("path", "")) return list_directory(path)
if tool_name == "search_files": if tool_name == "search_files":
return search_files(tool_input.get("path", ""), tool_input.get("pattern", "*")) return search_files(path, tool_input.get("pattern", "*"))
if tool_name == "get_file_summary": if tool_name == "get_file_summary":
return get_file_summary(tool_input.get("path", "")) return get_file_summary(path)
if tool_name == "py_get_skeleton": if tool_name == "py_get_skeleton":
return py_get_skeleton(tool_input.get("path", "")) return py_get_skeleton(path)
if tool_name == "py_get_code_outline": if tool_name == "py_get_code_outline":
return py_get_code_outline(tool_input.get("path", "")) return py_get_code_outline(path)
if tool_name == "py_get_definition": if tool_name == "py_get_definition":
return py_get_definition(tool_input.get("path", ""), tool_input.get("name", "")) return py_get_definition(path, tool_input.get("name", ""))
if tool_name == "py_update_definition": if tool_name == "py_update_definition":
return py_update_definition(tool_input.get("path", ""), tool_input.get("name", ""), tool_input.get("new_content", "")) return py_update_definition(path, tool_input.get("name", ""), tool_input.get("new_content", ""))
if tool_name == "py_get_signature": if tool_name == "py_get_signature":
return py_get_signature(tool_input.get("path", ""), tool_input.get("name", "")) return py_get_signature(path, tool_input.get("name", ""))
if tool_name == "py_set_signature": if tool_name == "py_set_signature":
return py_set_signature(tool_input.get("path", ""), tool_input.get("name", ""), tool_input.get("new_signature", "")) return py_set_signature(path, tool_input.get("name", ""), tool_input.get("new_signature", ""))
if tool_name == "py_get_class_summary": if tool_name == "py_get_class_summary":
return py_get_class_summary(tool_input.get("path", ""), tool_input.get("name", "")) return py_get_class_summary(path, tool_input.get("name", ""))
if tool_name == "py_get_var_declaration": if tool_name == "py_get_var_declaration":
return py_get_var_declaration(tool_input.get("path", ""), tool_input.get("name", "")) return py_get_var_declaration(path, tool_input.get("name", ""))
if tool_name == "py_set_var_declaration": if tool_name == "py_set_var_declaration":
return py_set_var_declaration(tool_input.get("path", ""), tool_input.get("name", ""), tool_input.get("new_declaration", "")) return py_set_var_declaration(path, tool_input.get("name", ""), tool_input.get("new_declaration", ""))
if tool_name == "get_file_slice": if tool_name == "get_file_slice":
return get_file_slice(tool_input.get("path", ""), tool_input.get("start_line", 1), tool_input.get("end_line", 1)) return get_file_slice(path, tool_input.get("start_line", 1), tool_input.get("end_line", 1))
if tool_name == "set_file_slice": if tool_name == "set_file_slice":
return set_file_slice(tool_input.get("path", ""), tool_input.get("start_line", 1), tool_input.get("end_line", 1), tool_input.get("new_content", "")) return set_file_slice(path, tool_input.get("start_line", 1), tool_input.get("end_line", 1), tool_input.get("new_content", ""))
if tool_name == "get_git_diff": if tool_name == "get_git_diff":
return get_git_diff( return get_git_diff(
tool_input.get("path", ""), path,
tool_input.get("base_rev", "HEAD"), tool_input.get("base_rev", "HEAD"),
tool_input.get("head_rev", "") tool_input.get("head_rev", "")
) )
@@ -850,17 +852,17 @@ def dispatch(tool_name: str, tool_input: dict[str, Any]) -> str:
if tool_name == "get_ui_performance": if tool_name == "get_ui_performance":
return get_ui_performance() return get_ui_performance()
if tool_name == "py_find_usages": if tool_name == "py_find_usages":
return py_find_usages(tool_input.get("path", ""), tool_input.get("name", "")) return py_find_usages(path, tool_input.get("name", ""))
if tool_name == "py_get_imports": if tool_name == "py_get_imports":
return py_get_imports(tool_input.get("path", "")) return py_get_imports(path)
if tool_name == "py_check_syntax": if tool_name == "py_check_syntax":
return py_check_syntax(tool_input.get("path", "")) return py_check_syntax(path)
if tool_name == "py_get_hierarchy": if tool_name == "py_get_hierarchy":
return py_get_hierarchy(tool_input.get("path", ""), tool_input.get("class_name", "")) return py_get_hierarchy(path, tool_input.get("class_name", ""))
if tool_name == "py_get_docstring": if tool_name == "py_get_docstring":
return py_get_docstring(tool_input.get("path", ""), tool_input.get("name", "")) return py_get_docstring(path, tool_input.get("name", ""))
if tool_name == "get_tree": if tool_name == "get_tree":
return get_tree(tool_input.get("path", ""), tool_input.get("max_depth", 2)) return get_tree(path, tool_input.get("max_depth", 2))
return f"ERROR: unknown MCP tool '{tool_name}'" return f"ERROR: unknown MCP tool '{tool_name}'"
# ------------------------------------------------------------------ tool schema helpers # ------------------------------------------------------------------ tool schema helpers
# These are imported by ai_client.py to build provider-specific declarations. # These are imported by ai_client.py to build provider-specific declarations.

View File

@@ -204,7 +204,8 @@ def execute_agent(role: str, prompt: str, docs: list[str]) -> str:
capture_output=True, capture_output=True,
text=True, text=True,
encoding='utf-8', encoding='utf-8',
env=env env=env,
creationflags=subprocess.CREATE_NO_WINDOW if hasattr(subprocess, 'CREATE_NO_WINDOW') else 0,
) )
# claude --print outputs plain text — no JSON parsing needed # claude --print outputs plain text — no JSON parsing needed
result = process.stdout if process.stdout else f"Error: {process.stderr}" result = process.stdout if process.stdout else f"Error: {process.stderr}"