Human-In-the-Loop MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Human-In-the-Loop MCP ServerAsk the user to pick a framework from React, Vue, Angular."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Human-In-the-Loop MCP Server
A powerful Model Context Protocol (MCP) Server that enables AI assistants like Claude to interact with humans through intuitive GUI dialogs. This server bridges the gap between automated AI processes and human decision-making by providing real-time user input tools, choices, confirmations, and feedback mechanisms.

🚀 Features
💬 Interactive Dialog Tools
Text Input: Get text, numbers, or other data from users with validation
Multiple Choice: Present options for single or multiple selections
Multi-line Input: Collect longer text content, code, or detailed descriptions
Confirmation Dialogs: Ask for yes/no decisions before proceeding with actions
Information Messages: Display notifications, status updates, and results
Health Check: Monitor server status and GUI availability
🎨 Modern Cross-Platform GUI
Windows: Modern Windows 11-style interface with beautiful styling, hover effects, and enhanced visual design
macOS: Native macOS experience with SF Pro Display fonts and proper window management
Linux: Ubuntu-compatible GUI with modern styling and system fonts
⚡ Advanced Features
Non-blocking Operation: All dialogs run in separate threads to prevent blocking
Timeout Protection: Configurable 5-minute timeouts prevent hanging operations
Platform Detection: Automatic optimization for each operating system
Modern UI Design: Beautiful interface with smooth animations and hover effects
Error Handling: Comprehensive error reporting and graceful recovery
Keyboard Navigation: Full keyboard shortcuts support (Enter/Escape)
📦 Installation & Setup
Quick Install with uvx (Recommended)
The easiest way to use this MCP server is with uvx:
# Install and run directly
uvx hitl-mcp-server
# Or use the underscore version
uvx hitl_mcp_serverManual Installation
Install from PyPI:
pip install hitl-mcp-serverRun the server:
hitl-mcp-server # or hitl_mcp_server
Development Installation
Clone the repository:
git clone https://github.com/GongRzhe/Human-In-the-Loop-MCP-Server.git cd Human-In-the-Loop-MCP-ServerInstall in development mode:
pip install -e .
🔧 Claude Desktop Configuration
To use this server with Claude Desktop, add the following configuration to your claude_desktop_config.json:
Using uvx (Recommended)
{
"mcpServers": {
"human-in-the-loop": {
"command": "uvx",
"args": ["hitl-mcp-server"]
}
}
}Using pip installation
{
"mcpServers": {
"human-in-the-loop": {
"command": "hitl-mcp-server",
"args": []
}
}
}Configuration File Locations
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Important Note for macOS Users
Note: You may need to allow Python to control your computer in System Preferences > Security & Privacy > Accessibility for the GUI dialogs to work properly.
After updating the configuration, restart Claude Desktop for the changes to take effect.
🛠️ Available Tools
1. get_user_input
Get single-line text, numbers, or other data from users.
Parameters:
title(str): Dialog window titleprompt(str): Question/prompt textdefault_value(str): Pre-filled value (optional)input_type(str): "text", "integer", or "float" (default: "text")
Example Usage:
result = await get_user_input(
title="Project Setup",
prompt="Enter your project name:",
default_value="my-project",
input_type="text"
)2. get_user_choice
Present multiple options for user selection.
Parameters:
title(str): Dialog window titleprompt(str): Question/prompt textchoices(List[str]): Available optionsallow_multiple(bool): Allow multiple selections (default: false)
Example Usage:
result = await get_user_choice(
title="Framework Selection",
prompt="Choose your preferred framework:",
choices=["React", "Vue", "Angular", "Svelte"],
allow_multiple=False
)3. get_multiline_input
Collect longer text content, code, or detailed descriptions.
Parameters:
title(str): Dialog window titleprompt(str): Question/prompt textdefault_value(str): Pre-filled text (optional)
Example Usage:
result = await get_multiline_input(
title="Code Review",
prompt="Please provide your detailed feedback:",
default_value=""
)4. show_confirmation_dialog
Ask for yes/no confirmation before proceeding.
Parameters:
title(str): Dialog window titlemessage(str): Confirmation message
Example Usage:
result = await show_confirmation_dialog(
title="Delete Confirmation",
message="Are you sure you want to delete these 5 files? This action cannot be undone."
)5. show_info_message
Display information, notifications, or status updates.
Parameters:
title(str): Dialog window titlemessage(str): Information message
Example Usage:
result = await show_info_message(
title="Process Complete",
message="Successfully processed 1,247 records in 2.3 seconds!"
)6. health_check
Check server status and GUI availability.
Example Usage:
status = await health_check()
# Returns detailed platform and functionality information📋 Response Format
All tools return structured JSON responses:
{
"success": true,
"user_input": "User's response text",
"cancelled": false,
"platform": "windows",
"input_type": "text"
}Common Response Fields:
success(bool): Whether the operation completed successfullycancelled(bool): Whether the user cancelled the dialogplatform(str): Operating system platformerror(str): Error message if operation failed
Tool-Specific Fields:
get_user_input:
user_input,input_typeget_user_choice:
selected_choice,selected_choices,allow_multipleget_multiline_input:
user_input,character_count,line_countshow_confirmation_dialog:
confirmed,responseshow_info_message:
acknowledged
🧠 Best Practices for AI Integration
When to Use Human-in-the-Loop Tools
Ambiguous Requirements - When user instructions are unclear
Decision Points - When you need user preference between valid alternatives
Creative Input - For subjective choices like design or content style
Sensitive Operations - Before executing potentially destructive actions
Missing Information - When you need specific details not provided
Quality Feedback - To get user validation on intermediate results
Example Integration Patterns
File Operations
# Get target directory
location = await get_user_input(
title="Backup Location",
prompt="Enter backup directory path:",
default_value="~/backups"
)
# Choose backup type
backup_type = await get_user_choice(
title="Backup Options",
prompt="Select backup type:",
choices=["Full Backup", "Incremental", "Differential"]
)
# Confirm before proceeding
confirmed = await show_confirmation_dialog(
title="Confirm Backup",
message=f"Create {backup_type['selected_choice']} backup to {location['user_input']}?"
)
if confirmed['confirmed']:
# Perform backup
await show_info_message("Success", "Backup completed successfully!")Content Creation
# Get content requirements
requirements = await get_multiline_input(
title="Content Requirements",
prompt="Describe your content requirements in detail:"
)
# Choose tone and style
tone = await get_user_choice(
title="Content Style",
prompt="Select desired tone:",
choices=["Professional", "Casual", "Friendly", "Technical"]
)
# Generate and show results
# ... content generation logic ...
await show_info_message("Content Ready", "Your content has been generated successfully!")🔍 Troubleshooting
Common Issues
GUI Not Appearing
Verify you're running in a desktop environment (not headless server)
Check if tkinter is installed:
python -c "import tkinter"Run health check:
health_check()tool to diagnose issues
Permission Errors (macOS)
Grant accessibility permissions in System Preferences > Security & Privacy > Accessibility
Allow Python to control your computer
Restart terminal after granting permissions
Import Errors
Ensure package is installed:
pip install hitl-mcp-serverCheck Python version compatibility (>=3.8 required)
Verify virtual environment activation if using one
Claude Desktop Integration Issues
Check configuration file syntax and location
Restart Claude Desktop after configuration changes
Verify uvx is installed:
pip install uvxTest server manually:
uvx hitl-mcp-server
Dialog Timeout
Default timeout is 5 minutes (300 seconds)
Dialogs will return with cancelled=true if user doesn't respond
Ensure user is present when dialogs are triggered
Debug Mode
Enable detailed logging by running the server with environment variable:
HITL_DEBUG=1 uvx hitl-mcp-server🏗️ Development
Project Structure
Human-In-the-Loop-MCP-Server/
├── human_loop_server.py # Main server implementation
├── pyproject.toml # Package configuration
├── README.md # Documentation
├── LICENSE # MIT License
├── .gitignore # Git ignore rules
└── demo.gif # Demo animationContributing
Fork the repository
Create a feature branch:
git checkout -b feature-nameMake your changes with proper testing
Follow code style guidelines (Black, Ruff)
Add type hints and docstrings
Submit a pull request with detailed description
Code Quality
Formatting: Black (line length: 88)
Linting: Ruff with comprehensive rule set
Type Checking: MyPy with strict configuration
Testing: Pytest for unit and integration tests
🌍 Platform Support
Windows
Windows 10/11 with modern UI styling
Enhanced visual design with hover effects
Segoe UI and Consolas font integration
Full keyboard navigation support
macOS
Native macOS experience
SF Pro Display system fonts
Proper window management and focus
Accessibility permission handling
Linux
Ubuntu/Debian compatible
Modern styling with system fonts
Cross-distribution GUI support
Minimal dependency requirements
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Acknowledgments
Built with FastMCP framework
Uses Pydantic for data validation
Cross-platform GUI powered by tkinter
Inspired by the need for human-AI collaboration
🔗 Links
PyPI Package: https://pypi.org/project/hitl-mcp-server/
Repository: https://github.com/GongRzhe/Human-In-the-Loop-MCP-Server
Issues: Report bugs or request features
MCP Protocol: Learn about Model Context Protocol
📊 Usage Statistics
Cross-Platform: Windows, macOS, Linux
Python Support: 3.8, 3.9, 3.10, 3.11, 3.12+
GUI Framework: tkinter (built-in with Python)
Thread Safety: Full concurrent operation support
Response Time: < 100ms dialog initialization
Memory Usage: < 50MB typical operation
Made with ❤️ for the AI community - Bridging humans and AI through intuitive interaction
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/animalnots/Human-In-the-Loop-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server