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.
"""
# Handle aliases
path = tool_input.get("path", tool_input.get("file_path", tool_input.get("dir_path", "")))
if tool_name == "read_file":
return read_file(tool_input.get("path", ""))
return read_file(path)
if tool_name == "list_directory":
return list_directory(tool_input.get("path", ""))
return list_directory(path)
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":
return get_file_summary(tool_input.get("path", ""))
return get_file_summary(path)
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":
return py_get_code_outline(tool_input.get("path", ""))
return py_get_code_outline(path)
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":
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":
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":
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":
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":
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":
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":
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":
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":
return get_git_diff(
tool_input.get("path", ""),
path,
tool_input.get("base_rev", "HEAD"),
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":
return get_ui_performance()
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":
return py_get_imports(tool_input.get("path", ""))
return py_get_imports(path)
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":
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":
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":
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}'"
# ------------------------------------------------------------------ tool schema helpers
# 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,
text=True,
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
result = process.stdout if process.stdout else f"Error: {process.stderr}"