misungtr is a self-hosted AI workspace: local inference, private workspace memory, SearXNG search, MCP tools, and Docker-first deployment.
Architecture • Deploy • GitHub Sidebar • Security • Threat Model • Roadmap • Contributing
🇺🇸 English | 🇻🇳 Vietnamese coming soon
Early Beta: Under active development. Expect rough edges, strange sparks, and unfinished corners.
Local-first, upfront: misungtr is designed to run on your own hardware with your own data. The default stack uses local Ollama inference, optional llama.cpp, self-hosted SearXNG, local workspace notes, and MCP servers that are scoped to project data. No telemetry is added by the app.
The recommended install path is Docker Compose. It gives you the full stack: web UI, FastAPI backend, Ollama, SearXNG, optional llama.cpp, and optional MCP servers.
Windows, macOS, or Linux with Docker:
docker compose up --buildPull a local Ollama model:
docker compose exec ollama ollama pull llama3.1:8bOpen:
- Web UI: http://localhost:5173
- API docs: http://localhost:8000/docs
- SearXNG: http://localhost:8080
- Ollama: http://localhost:11434
Production mode serves the web UI through Nginx on port 80 and proxies /api to the backend.
docker compose -f docker-compose.yml -f docker-compose.prod.yml up --build -dWindows helper:
.\scripts\deploy.ps1
.\scripts\healthcheck.ps1Linux/macOS helper:
./scripts/deploy.shWindows:
python -m venv .venv
.\.venv\Scripts\python -m pip install -r backend\requirements-dev.txt
cd apps\web
npm install
cd ..\..
.\launch-windows.ps1Manual backend and web:
.\scripts\dev-backend.ps1
.\scripts\dev-web.ps1misungtr is a self-hosted AI workspace built to feel like a local, private alternative to polished hosted chat products. It is not trying to be sterile. It is built to be useful, inspectable, moddable, and a little more alive.
-
Simple, UI-first & local: a React workspace gives you chat, SearXNG-powered search, and local notes on the first screen. The UI talks to a FastAPI backend and keeps the provider layer swappable.
-
Ollama + llama.cpp inference: the backend ships with provider adapters for Ollama and OpenAI-compatible llama.cpp servers. Pick the default with
AI_DEFAULT_PROVIDER, or pass a provider per request. -
Local workspace memory: notes are stored inside the configured workspace root. File access is path-scoped so workspace tools cannot escape into arbitrary folders.
-
SearXNG web search: search goes through your own SearXNG container by default. The API exposes
/api/search, and the MCP search server exposes the same capability as a tool. -
MCP servers included:
mcp_servers/workspace_server.pyprovides local file tools, andmcp_servers/web_search_server.pyprovides web search through SearXNG. -
Docker-first deploy: the default Compose stack is for development; the production override adds Nginx, restart policies, backend healthchecks, and production API proxying.
-
E2E-tested workspace flow: Playwright tests cover the visible shell, chat flow, search flow, and note saving with mocked API responses.
Browser UI
|
| HTTP
v
FastAPI backend
|-- routes/chat.py chat completion endpoint
|-- routes/search.py SearXNG-backed web search endpoint
|-- routes/workspace.py local note storage endpoint
|
| services
|-- inference.py Ollama and llama.cpp providers
|-- search.py SearXNG client
|-- workspace.py safe local file access
|
+--> Ollama local model runtime
+--> llama.cpp optional GGUF runtime profile
+--> SearXNG self-hosted metasearch
MCP servers
|-- workspace_server.py list/read/write workspace files
|-- web_search_server.py SearXNG search tool
Deeper docs: Architecture · Deploy · Security · Threat Model.
misungtr starts with a small local workspace: chat, search, and notes. The next step is turning those notes and files into durable memory: Markdown chunks, local embeddings, SQLite persistence, and retrieval that can feed the model without sending private data to hosted services.
The project is intentionally shaped so the memory layer can grow without rewriting the whole app:
- API routes stay thin.
- Service adapters own provider-specific behavior.
- MCP servers expose local tools separately from HTTP routes.
- Docker profiles let optional services grow around the core.
High-level comparison. Products evolve, so verify against each vendor.
| Hosted Chat Apps | Terminal Agents | misungtr | |
|---|---|---|---|
| Self-hosted | 🚫 Usually no | ✅ Docker stack | |
| Local inference | ✅ Often | ✅ Ollama + llama.cpp | |
| Web UI | ✅ Polished | 🚫 Usually no | ✅ Workspace UI |
| Private search | 🚫 Hosted | ✅ SearXNG | |
| MCP tools | ✅ Often | ✅ Included | |
| Workspace files | ✅ Local | ✅ Path-scoped local notes | |
| Deploy story | 🚫 Vendor-owned | ✅ Compose + production override | |
| E2E tests | Unknown | ✅ Playwright |
New contributor? Start with CONTRIBUTING.md. The short path is:
- Install Git, Docker, Python 3.12+, Node.js 22+, npm, and ripgrep.
- Clone the repo, install backend deps with
pip install -r backend/requirements-dev.txt, and install web deps withnpm installinsideapps/web. - Use
.\launch-windows.ps1,docker compose up --build, or the focused scripts inscripts/. - Run checks before opening a PR.
.\.venv\Scripts\python -m compileall backend mcp_servers app.py
.\.venv\Scripts\pytest
cd apps\web
npm run build
npm run test:e2eIf Windows has little free space on C:, install Playwright browsers into the repo drive:
New-Item -ItemType Directory -Force -Path .playwright,.tmp
$env:PLAYWRIGHT_BROWSERS_PATH="D:\My gene\.playwright"
$env:TEMP="D:\My gene\.tmp"
$env:TMP="D:\My gene\.tmp"
cd apps\web
npx playwright install chromium
npm run test:e2e- Streaming chat responses.
- SQLite conversation persistence.
- Local memory tree and Obsidian-compatible Markdown vault.
- RAG over workspace files.
- Tool-calling orchestration across search and notes.
- Desktop companion launcher.
- Local authentication for non-loopback deployments.
- Backup and restore flows for workspace data.
misungtr is designed for trusted local networks first. Do not expose it directly to the public internet without authentication, TLS, rate limiting, and network controls.
Read:
If misungtr helps you build a local-first AI workspace, star the repo and make the project easier to find.
Contributors help turn misungtr from a useful local stack into a real open workspace.
