Open WebUI + OpenSearch MCP (Single Repo)
This repository starts everything with one Docker Compose command:
- OpenSearch:
http://localhost:9200 - OpenSearch Dashboards:
http://localhost:5601 - MCP Server:
http://localhost:3001/mcp - Open WebUI:
http://localhost:3002
Security Notes (Important)
- This stack is for local development/testing.
- OpenSearch security plugins are disabled in
docker-compose.yml. - Do not expose these ports directly to the public internet.
- Never commit a real
.envfile with secrets.
1. Setup
copy .env.example .env
Edit .env and set:
WEBUI_SECRET_KEYto a long random value (required)OPENAI_API_KEY(optional)
2. Start All Services
docker compose up -d --build
Check status:
docker compose ps
3. Configure MCP Tool Server in Open WebUI
- Open
http://localhost:3002and sign in as admin. - Go to
Admin Panel->Settings->Tools(orTool Servers, depending on Open WebUI version). - Add a new tool server with:
- Type:
MCP - Name:
OpenSearch MCP - ID:
opensearch_mcp - URL:
http://opensearch-mcp:3001/mcp - Auth:
None
- Type:
- Save the server and run connection check/sync if the button is available.
- Confirm tools are visible (for example
cluster_health,list_indices,search_indices).
If your environment cannot resolve Docker service names from Open WebUI, use:
http://host.docker.internal:3001/mcp
4. Attach MCP Tools to One Model (Example: GPT-4o mini)
- In Open WebUI, ensure your OpenAI provider is configured with your API key.
- Open
Modelsand selectgpt-4o-mini(or create a custom model entry mapped togpt-4o-mini). - Enable model capabilities for tools/function calling.
- In the model tool settings, allow/select only the
opensearch_mcptool server. - Save the model configuration.
- Start a new chat and pick
gpt-4o-mini. - In chat tool controls, ensure tools are enabled and
opensearch_mcpis active.
Note: exact menu labels differ slightly by Open WebUI version, but the flow is always: Tool Server setup -> Model tool enablement -> Enable tools in chat.
5. Verify
Use the configured model (gpt-4o-mini) and send:
Use MCP tools only.
Call cluster_health and return cluster_name, status, number_of_nodes, active_primary_shards.
Do not answer from memory.
Expected behavior:
- The assistant performs a tool call to
cluster_health. - The response includes live cluster fields from OpenSearch.
6. Stop
docker compose down
To remove volumes too:
docker compose down -v