fix(mcp): mcp_client refactor, claude_mma_exec update
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user