interactive_feedback
Submit a project directory and short summary to request interactive feedback from a human, enabling human-in-the-loop review during AI-assisted development.
Instructions
Request interactive feedback for a given project directory and summary
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_directory | Yes | Full path to the project directory | |
| summary | Yes | Short, one-line summary of the changes |
Implementation Reference
- server.py:64-70 (handler)The tool handler function for interactive_feedback, registered as an MCP tool via @mcp.tool() decorator. Takes project_directory and summary parameters, returns launch_feedback_ui result.
@mcp.tool() def interactive_feedback( project_directory: Annotated[str, Field(description="Full path to the project directory")], summary: Annotated[str, Field(description="Short, one-line summary of the changes")], ) -> Dict[str, str]: """Request interactive feedback for a given project directory and summary""" return launch_feedback_ui(first_line(project_directory), first_line(summary)) - server.py:64-64 (registration)Registration of interactive_feedback as an MCP tool using the @mcp.tool() decorator from FastMCP.
@mcp.tool() - server.py:65-68 (schema)Schema definition with Pydantic Field annotations describing the tool's input parameters (project_directory and summary) and return type (Dict[str, str]).
def interactive_feedback( project_directory: Annotated[str, Field(description="Full path to the project directory")], summary: Annotated[str, Field(description="Short, one-line summary of the changes")], ) -> Dict[str, str]: - server.py:18-58 (helper)Helper function that launches feedback_ui.py as a subprocess, passing project_directory and summary as arguments, and reads the result from a temp JSON file.
def launch_feedback_ui(project_directory: str, summary: str) -> dict[str, str]: # Create a temporary file for the feedback result with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as tmp: output_file = tmp.name try: # Get the path to feedback_ui.py relative to this script script_dir = os.path.dirname(os.path.abspath(__file__)) feedback_ui_path = os.path.join(script_dir, "feedback_ui.py") # Run feedback_ui.py as a separate process # NOTE: There appears to be a bug in uv, so we need # to pass a bunch of special flags to make this work args = [ sys.executable, "-u", feedback_ui_path, "--project-directory", project_directory, "--prompt", summary, "--output-file", output_file ] result = subprocess.run( args, check=False, shell=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL, close_fds=True ) if result.returncode != 0: raise Exception(f"Failed to launch feedback UI: {result.returncode}") # Read the result from the temporary file with open(output_file, 'r') as f: result = json.load(f) os.unlink(output_file) return result except Exception as e: if os.path.exists(output_file): os.unlink(output_file) - feedback_ui.py:580-580 (helper)The interactive_feedback field is populated from the UI's text input (feedback_text.toPlainText()) and returned as part of FeedbackResult. The string 'interactive_feedback' is used as a key in the FeedbackResult TypedDict.
print(f"\nFeedback received:\n{result['interactive_feedback']}")