mcp-servers/QUICK_OPENUI_FIX.txt

114 lines
2.9 KiB
Text
Raw Normal View History

2026-03-31 15:33:25 -04:00
QUICK IMPLEMENTATION GUIDE
============================
ISSUE: OpenUI cannot discover any tools from MCP Gateway
ROOT CAUSE:
1. Missing /v1/tools endpoint
2. Tool schemas have complex JSON that OpenUI doesn't support
3. Need schema normalization layer
STEP 1: Add the Fixed Routes Handler
====================================
The file openai_routes_fixed.py is ready to use.
It's already in: gateway-proxy/openai_routes_fixed.py
STEP 2: Update gateway_proxy.py
================================
Find line ~27 (near other imports) and add:
from .openai_routes_fixed import convert_mcp_tool_to_openai, list_models, tools, chat_completions
Then find the routes list (around line 795) and add these routes BEFORE the closing bracket:
# OpenAI-compatible API endpoints (for Open-UI)
Route("/v1/models", list_models, methods=["GET"]),
Route("/v1/tools", lambda r: tools(r, TOOL_DEFINITIONS), methods=["GET"]),
Route("/v1/chat/completions", lambda r: chat_completions(r, TOOL_DEFINITIONS), methods=["POST"]),
STEP 3: Restart Gateway
========================
docker-compose restart gateway-proxy
STEP 4: Verify
==============
Check that tools load:
curl http://localhost:8000/v1/tools | jq '.data | length'
Should return a number like 45 (total number of tools)
STEP 5: Test in OpenUI
=======================
1. Open OpenUI
2. Add new model endpoint: http://mcp.wilddragon.net:8000
3. Select model "mcp-gateway"
4. Search for tools - they should now appear!
KEY CHANGES EXPLAINED:
=======================
_simplify_schema():
- Converts type arrays ["string", "null"] → "string"
- Flattens anyOf/oneOf to single schema
- Removes unsupported JSON schema keywords
- Makes schemas OpenAI-compatible
convert_mcp_tool_to_openai():
- Takes MCP tool definition
- Converts inputSchema to OpenAI parameters format
- Wraps in function schema structure
/v1/tools endpoint:
- Returns all tools in OpenAI format
- Called by OpenUI for tool discovery
- Lists all backends' tools (ERPNext, Wave, TrueNAS, Home Assistant)
TESTING RESPONSES:
===================
Good /v1/tools response looks like:
{
"object": "list",
"data": [
{
"type": "function",
"function": {
"name": "erpnext_get_document",
"description": "Retrieve a single document",
"parameters": {
"type": "object",
"properties": {
"doctype": {"type": "string", "description": "..."},
"name": {"type": "string", "description": "..."}
},
"required": ["doctype", "name"]
}
}
},
...more tools...
]
}
If you see truncated tool names or "string not found" errors,
the schema conversion isn't working - check imports and routes.
FILES READY TO USE:
====================
✅ gateway-proxy/openai_routes_fixed.py (ready - no changes needed)
✅ OPENUI_SCHEMA_FIX.md (detailed explanation)
⏳ gateway-proxy/gateway_proxy.py (needs 2 edits: import + routes)