loading…
Search for a command to run...
loading…
Connects Claude AI to any development project (Django, Next.js, Laravel, etc.) with 15+ universal tools for shell, file, git, logs, Docker, tests, and more.
Connects Claude AI to any development project (Django, Next.js, Laravel, etc.) with 15+ universal tools for shell, file, git, logs, Docker, tests, and more.
A universal Model Context Protocol (MCP) server that gives Claude AI full access to your development environment — across any framework, any project, from anywhere.
Connect Claude (via claude.ai web or Claude Code CLI) to your local machine and let it read files, run commands, manage Git, control browsers, switch between projects, and remember context across sessions.
git clone <repo-url> universal-mcp
cd universal-mcp
python setup_wizard.py
The wizard will guide you through (step by step):
requirements.txt)Setup creates ~/.universal-dev-mcp/config.json — you never need to run it again unless you add a new project.
python main.py start
Server starts on http://localhost:8080. You will see:
Local URL: http://localhost:8080/mcp
Remote URL: https://your-tunnel-url.ts.net/mcp
Run this in a separate terminal and keep it open:
| Provider | Command |
|---|---|
| Tailscale | sudo tailscale funnel 8080 |
| Ngrok | ngrok http --domain=your-domain.ngrok-free.app 8080 |
| Cloudflare | cloudflared tunnel run my-mcp |
Note: claude.ai web only accepts HTTPS public URLs.
localhostwill be rejected. The tunnel must be running before you add the URL to claude.ai.
Claude.ai web:
claude.ai → Settings → Integrationshttps://your-tunnel-url/mcpClaude Code CLI (local only):
claude mcp add universal-mcp http://localhost:8080/mcp
Every tool call requires an OTP token. On first use:
verify_session tool with an empty code — this sends an OTPverify_session again with the 6-digit codeuniversal-mcp/
│
├── main.py # CLI entry point — start, setup commands
├── server.py # MCP server core — 40+ tool definitions and dispatch
├── auth.py # OTP authentication and session management
├── config.py # Config file handling (~/.universal-dev-mcp/)
├── tunnel.py # Public URL tunnel management (CF, Tailscale, Ngrok)
├── setup_wizard.py # Interactive one-time setup wizard
├── requirements.txt # Python dependencies
├── .mcp-config.example.json # Per-project config template
│
├── core/ # Universal tool implementations
│ ├── project_detector.py # Framework auto-detection via file signatures
│ ├── project_context.py # Config loader + framework switch detection
│ ├── memory_manager.py # SQLite memory (4 types: project, decision, debug, semantic)
│ ├── agent_planner.py # Structured plan generator for Claude
│ ├── browser_automation.py # Playwright browser automation
│ ├── desktop_control.py # Desktop GUI automation (PyAutoGUI + xdotool)
│ ├── shell_executor.py # Sandboxed shell command runner
│ ├── file_manager.py # Safe project-jailed file operations
│ ├── git_ops.py # Git status, log, diff, commit, push
│ ├── env_manager.py # .env reading with secret masking
│ ├── log_reader.py # Log file tailing and grep
│ ├── docker_ops.py # Docker container management
│ ├── test_runner.py # Auto-detect and run tests
│ ├── package_manager.py # pip / npm / composer install
│ └── port_manager.py # Port availability check
│
└── plugins/ # Framework-specific tool extensions
├── __init__.py # Plugin loader — maps names to modules
├── shared.py # Shared helpers (run_command, collect_files)
├── frappe/ # Frappe/ERPNext tools (9 files)
├── vue/ # Vue.js tools
├── flutter/ # Flutter mobile tools
├── react/ # React tools
├── django/ # Django tools
├── nextjs/ # Next.js tools
├── laravel/ # Laravel PHP tools
├── generic/ # Fallback tools (always loaded)
└── ... # 22+ more frameworks
Everything is stored in ~/.universal-dev-mcp/:
| File | Purpose |
|---|---|
config.json |
Global settings (tunnel, email, plugins, projects) |
mcp-config.json |
Default framework config overrides |
memory.db |
SQLite database for Claude's persistent memory |
Create .mcp-config.json in your project root for project-specific settings:
{
"framework": "django",
"language": "python",
"db": "postgresql",
"env_file": ".env",
"django": {
"run_command": "python manage.py runserver",
"test_command": "pytest"
}
}
See .mcp-config.example.json for all options. For Frappe multi-bench config, see plugins/frappe/README.md.
| Tool | What it does |
|---|---|
verify_session |
OTP login — must call first |
switch_project |
Switch to a registered project by name |
list_projects |
List all registered projects with active marker |
register_project |
Add a new project to registry at runtime |
project_context |
Load current project framework and config |
confirm_framework |
Save framework to .mcp-config.json |
shell_run |
Run any terminal command in project directory |
file_read |
Read a file (50KB limit) |
file_write |
Create or overwrite a file |
file_list |
List directory contents |
file_search |
Search text across project files |
git_status |
Git status / log / diff / branch |
git_commit |
Stage all + commit (optional push) |
env_read |
Read .env file (secrets masked) |
log_tail |
Tail or grep log files |
port_check |
Check which ports are listening |
docker_ps |
List Docker containers |
docker_logs |
View container logs |
test_run |
Auto-detect and run tests (pytest/jest/phpunit) |
package_install |
Install package (pip/npm/composer auto-detected) |
generate_plan |
Generate a structured action plan |
memory_save/get/list |
Simple key-value memory per project |
project_memory_* |
User-scoped project notes |
decision_memory_* |
Store and search past decisions |
debug_memory_* |
Track errors and resolutions |
semantic_memory_* |
Tagged knowledge snippets |
browser_launch |
Start Playwright browser |
browser_navigate |
Open URL |
browser_click |
Click element by selector |
browser_type |
Type text into input |
browser_screenshot |
Capture browser screenshot |
desktop_screenshot |
Capture desktop screen |
desktop_open_app |
Open an application |
desktop_click |
Click at screen coordinates |
desktop_type |
Type text on desktop |
| Framework | Added Tools |
|---|---|
| Frappe | frappe_api_call, frappe_execute, frappe_bench_start, frappe_bench_migrate, frappe_bench_restart, frappe_bench_backup, frappe_bench_build, frappe_list_sites, frappe_get_logs, frappe_create_doctype |
| Vue | vue_build, vue_test, vue_lint, vue_list_views |
| Flutter | flutter_pub_get, flutter_test, flutter_analyze, flutter_build_apk, flutter_list_screens |
| Django | django_migrate, django_makemigrations, django_shell, django_check, django_collectstatic |
| React | react_build, react_test, react_list_components |
| Generic | generic_run_dev, generic_readme |
Register projects during setup wizard, or at runtime:
User: "ab Vue par kaam karo"
AI calls: switch_project(name="vue")
User: "frappe mein kaam karo"
AI calls: switch_project(name="frappe")
User: "konse projects hain?"
AI calls: list_projects()
Add a new project without re-running wizard:
AI calls: register_project(name="myapi", project_path="/workspace/my-fastapi-app")
Create plugins/yourframework/ directory with __init__.py and yourframework_ops.py
In yourframework_ops.py:
import subprocess
def your_tool(project_path: str, some_arg: str = "") -> str:
result = subprocess.run(
["your-cli", some_arg], cwd=project_path,
capture_output=True, text=True, timeout=60
)
return result.stdout or result.stderr
TOOLS = {
"your_tool": {"fn": your_tool, "description": "What this tool does"},
}
plugins/__init__.py PLUGIN_MAP:"yourframework": "plugins.yourframework",
setup_wizard.py ALL_PLUGINS list"Couldn't reach the MCP server" in claude.ai
python main.py start/mcp: https://your-url.ts.net/mcplocalhost URLs are always rejected by claude.ai webOTP not received by email
smtp_password in ~/.universal-dev-mcp/config.jsonBench not running / Frappe site not accessible
docker psdocker update --restart=unless-stopped <container-name>docker exec <container> bash -lc "nohup bench start > /tmp/bench.log 2>&1 &"Framework not detected correctly
project_context tool — Claude will scan and suggestconfirm_framework(framework="vue") to save .mcp-config.jsonPlugin tools not showing up
active_plugins in ~/.universal-dev-mcp/config.jsonpython setup_wizard.pySession expired
verify_session again to renewshell_run blocks dangerous commands (rm -rf /, mkfs, dd, reboot, etc.).env secrets are automatically masked in env_read output"require_auth": false in global config only on fully trusted local networksMIT
Выполни в терминале:
claude mcp add universal-dev-mcp -- npx Да, Universal Dev MCP бесплатный — установка в один клик через Unyly без оплаты.
Нет, Universal Dev работает без API-ключей и переменных окружения.
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Открой Universal Dev на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.