5.1 KiB
OpenAI-Compatible Integration for MCP Gateway
This guide shows how to add OpenAI-compatible endpoints to your MCP Gateway so Open-UI and other OpenAI clients can use your MCP tools.
Quick Setup (2 steps)
Step 1: Import the OpenAI routes in gateway-proxy/gateway_proxy.py
At the top of the file, add:
from openai_routes import chat_completions, list_models
Step 2: Add the routes to your Starlette app
In the app = Starlette(routes=[...]) section, add these routes before the closing bracket:
# OpenAI-compatible endpoints
Route("/v1/models", list_models, methods=["GET"]),
Route("/v1/chat/completions", chat_completions, methods=["POST"]),
So your routes section should look like:
app = Starlette(
routes=[
# Well-known discovery (Claude tries both with and without /mcp suffix)
Route("/.well-known/oauth-protected-resource", well_known_protected_resource, methods=["GET"]),
Route("/.well-known/oauth-protected-resource/mcp", well_known_protected_resource, methods=["GET"]),
Route("/.well-known/oauth-authorization-server", well_known_oauth_authorization_server, methods=["GET"]),
Route("/.well-known/oauth-authorization-server/mcp", well_known_oauth_authorization_server, methods=["GET"]),
Route("/.well-known/openid-configuration", well_known_oauth_authorization_server, methods=["GET"]),
# OAuth endpoints at /oauth/* (spec-standard)
Route("/oauth/register", oauth_register, methods=["POST"]),
Route("/oauth/authorize", oauth_authorize, methods=["GET", "POST"]),
Route("/oauth/token", oauth_token, methods=["POST"]),
# OAuth endpoints at root (Claude may construct these from base URL)
Route("/register", oauth_register, methods=["POST"]),
Route("/authorize", oauth_authorize, methods=["GET", "POST"]),
Route("/token", oauth_token, methods=["POST"]),
# MCP endpoint (OAuth-protected)
Route("/mcp", handle_mcp, methods=["GET", "HEAD", "POST", "DELETE"]),
# OpenAI-compatible endpoints
Route("/v1/models", list_models, methods=["GET"]),
Route("/v1/chat/completions", chat_completions, methods=["POST"]),
# Monitoring
Route("/health", health, methods=["GET"]),
Route("/status", status, methods=["GET"]),
],
lifespan=lifespan,
)
Configuration
Update the route handler to pass required parameters. In gateway_proxy.py, modify the route definitions:
from functools import partial
# Near the top where other routes are defined:
chat_completions_handler = partial(
chat_completions,
mcp_gateway_url="http://localhost:4444/mcp",
access_tokens=ACCESS_TOKENS
)
list_models_handler = partial(
list_models,
gateway_config={"backends": BACKENDS}
)
Then update the routes:
Route("/v1/models", list_models_handler, methods=["GET"]),
Route("/v1/chat/completions", chat_completions_handler, methods=["POST"]),
Using with Open-UI
Once integrated and running:
- Gateway URL:
https://mcp.wilddragon.net(or your gateway URL) - API Base URL in Open-UI:
https://mcp.wilddragon.net/v1 - Model:
mcp-gateway - Bearer Token: Use your generated token
In Open-UI Admin Panel:
- Go to Admin → Settings → Connections
- Scroll to "Direct Connections"
- Add new direct connection:
- API Base URL:
https://mcp.wilddragon.net/v1 - API Key: Your bearer token
- API Base URL:
API Endpoints
GET /v1/models
List available models. Returns the MCP Gateway as a model option.
Example:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://mcp.wilddragon.net/v1/models
POST /v1/chat/completions
OpenAI-compatible chat completions endpoint.
Example:
curl -X POST \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "mcp-gateway",
"messages": [
{"role": "user", "content": "What tools are available?"}
]
}' \
https://mcp.wilddragon.net/v1/chat/completions
What's Currently Supported
✅ Available tools listing - Shows all available MCP tools ✅ Bearer token authentication - Uses your existing OAuth tokens ✅ Streaming responses - OpenAI-compatible streaming format ✅ Standard OpenAI request/response format
Next Steps (Optional Enhancements)
- Tool Calling: Implement actual tool execution via MCP
- System Prompts: Add custom system prompts for tool use
- Session Management: Preserve MCP session state across requests
- Error Handling: More detailed error messages for tool failures
Troubleshooting
"Unauthorized" error: Make sure your bearer token is valid. Check that it's in ACCESS_TOKENS on the gateway.
"No user message found": Ensure the request includes at least one message with role "user".
Tools not showing: Check that your MCP backends are initialized and responding to tools/list requests.
Files
gateway-proxy/openai_routes.py- OpenAI-compatible route handlersopenai_adapter.py- Adapter class (optional, for more advanced usage)