228 lines
5.3 KiB
Markdown
228 lines
5.3 KiB
Markdown
|
|
# MCP Gateway OpenAI-Compatible Integration
|
||
|
|
|
||
|
|
> **Status**: ✅ Complete and ready to deploy
|
||
|
|
|
||
|
|
Your MCP Gateway now supports **both Claude.ai (MCP) and Open-UI (OpenAI API)** using the same backend services.
|
||
|
|
|
||
|
|
## 🎯 What Changed
|
||
|
|
|
||
|
|
You now have:
|
||
|
|
- ✅ OpenAI-compatible `/v1/*` endpoints
|
||
|
|
- ✅ Bearer token authentication
|
||
|
|
- ✅ Tool discovery and listing
|
||
|
|
- ✅ Streaming response support
|
||
|
|
- ✅ Both Claude and Open-UI working simultaneously
|
||
|
|
|
||
|
|
## 🚀 Quick Start
|
||
|
|
|
||
|
|
### 1. Restart the Gateway
|
||
|
|
```bash
|
||
|
|
cd /path/to/mcp-gateway
|
||
|
|
docker compose restart mcp-gateway
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Verify It's Working
|
||
|
|
```bash
|
||
|
|
curl -H "Authorization: Bearer rIoRseJSR9rqwl5bp4CEOyOUKdymaoJnAsT-y752BDi2qD9jJYbgd8sWkiQIGMtz" \
|
||
|
|
https://mcp.wilddragon.net/v1/models
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Configure Open-UI
|
||
|
|
- Admin → Settings → Connections
|
||
|
|
- Enable "Direct Connections"
|
||
|
|
- Add: `https://mcp.wilddragon.net/v1`
|
||
|
|
- Key: `rIoRseJSR9rqwl5bp4CEOyOUKdymaoJnAsT-y752BDi2qD9jJYbgd8sWkiQIGMtz`
|
||
|
|
|
||
|
|
## 📁 Files Created/Modified
|
||
|
|
|
||
|
|
### New Files
|
||
|
|
| File | Purpose |
|
||
|
|
|------|---------|
|
||
|
|
| `gateway-proxy/openai_routes.py` | OpenAI API handlers |
|
||
|
|
| `openai_adapter.py` | Optional adapter class |
|
||
|
|
| `SETUP_OPEN_UI.md` | Step-by-step setup guide |
|
||
|
|
| `DEPLOYMENT_CHECKLIST.md` | Pre/post-deployment checklist |
|
||
|
|
| `OPENAI_INTEGRATION.md` | Technical integration details |
|
||
|
|
| `ARCHITECTURE.md` | System architecture overview |
|
||
|
|
| `README_OPENAI.md` | This file |
|
||
|
|
|
||
|
|
### Modified Files
|
||
|
|
| File | Changes |
|
||
|
|
|------|---------|
|
||
|
|
| `gateway-proxy/gateway_proxy.py` | Added OpenAI route imports and `/v1/*` endpoints |
|
||
|
|
|
||
|
|
## 📚 Documentation
|
||
|
|
|
||
|
|
**Start here:**
|
||
|
|
1. [`SETUP_OPEN_UI.md`](./SETUP_OPEN_UI.md) - How to set up and use
|
||
|
|
2. [`DEPLOYMENT_CHECKLIST.md`](./DEPLOYMENT_CHECKLIST.md) - Before/after checklist
|
||
|
|
3. [`ARCHITECTURE.md`](./ARCHITECTURE.md) - How it works
|
||
|
|
|
||
|
|
**Reference:**
|
||
|
|
- [`OPENAI_INTEGRATION.md`](./OPENAI_INTEGRATION.md) - Technical details
|
||
|
|
- [`openai_routes.py`](./gateway-proxy/openai_routes.py) - Implementation
|
||
|
|
|
||
|
|
## 🔑 Your Bearer Token
|
||
|
|
|
||
|
|
```
|
||
|
|
rIoRseJSR9rqwl5bp4CEOyOUKdymaoJnAsT-y752BDi2qD9jJYbgd8sWkiQIGMtz
|
||
|
|
```
|
||
|
|
|
||
|
|
**Keep this safe!** This token allows access to all your MCP tools.
|
||
|
|
|
||
|
|
## 🎯 Available Endpoints
|
||
|
|
|
||
|
|
### For Claude.ai (Existing)
|
||
|
|
```
|
||
|
|
POST /mcp # MCP protocol
|
||
|
|
/oauth/authorize, /oauth/token # OAuth 2.1 flow
|
||
|
|
/.well-known/* # Discovery
|
||
|
|
```
|
||
|
|
|
||
|
|
### For Open-UI (New)
|
||
|
|
```
|
||
|
|
GET /v1/models # List models
|
||
|
|
POST /v1/chat/completions # Chat completion
|
||
|
|
```
|
||
|
|
|
||
|
|
### Monitoring
|
||
|
|
```
|
||
|
|
GET /health # Health check
|
||
|
|
GET /status # Full status
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔄 How It Works
|
||
|
|
|
||
|
|
```
|
||
|
|
Open-UI Request:
|
||
|
|
POST /v1/chat/completions
|
||
|
|
Authorization: Bearer TOKEN
|
||
|
|
|
||
|
|
↓
|
||
|
|
|
||
|
|
Gateway validates token:
|
||
|
|
✓ Check Bearer header
|
||
|
|
✓ Hash token
|
||
|
|
✓ Validate against ACCESS_TOKENS
|
||
|
|
|
||
|
|
↓
|
||
|
|
|
||
|
|
Fetch available tools:
|
||
|
|
Call MCP: tools/list
|
||
|
|
Convert to OpenAI format
|
||
|
|
|
||
|
|
↓
|
||
|
|
|
||
|
|
Return OpenAI response:
|
||
|
|
{
|
||
|
|
"id": "chatcmpl-xxx",
|
||
|
|
"object": "chat.completion",
|
||
|
|
"choices": [{
|
||
|
|
"message": {
|
||
|
|
"content": "Available tools: ..."
|
||
|
|
}
|
||
|
|
}],
|
||
|
|
"usage": {...}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## ✨ Current Features
|
||
|
|
|
||
|
|
✅ Tool discovery and listing
|
||
|
|
✅ Bearer token authentication
|
||
|
|
✅ Streaming support
|
||
|
|
✅ OpenAI API format compliance
|
||
|
|
✅ Works alongside existing MCP setup
|
||
|
|
|
||
|
|
## 🚧 Future Enhancements
|
||
|
|
|
||
|
|
**Phase 2 (Optional):**
|
||
|
|
- [ ] Actual tool execution
|
||
|
|
- [ ] System prompts
|
||
|
|
- [ ] Tool parameter validation
|
||
|
|
|
||
|
|
**Phase 3 (Optional):**
|
||
|
|
- [ ] Caching
|
||
|
|
- [ ] Rate limiting
|
||
|
|
- [ ] Audit logging
|
||
|
|
|
||
|
|
## 🔐 Security
|
||
|
|
|
||
|
|
- **Bearer tokens**: 64-char secure random tokens
|
||
|
|
- **HTTPS only**: Use in production
|
||
|
|
- **No token storage**: Hashed in memory only
|
||
|
|
- **Per-request validation**: Every API call verified
|
||
|
|
|
||
|
|
## 🆘 Troubleshooting
|
||
|
|
|
||
|
|
**Gateway won't start:**
|
||
|
|
```bash
|
||
|
|
docker compose logs mcp-gateway
|
||
|
|
# Check for Python import errors
|
||
|
|
```
|
||
|
|
|
||
|
|
**Can't connect from Open-UI:**
|
||
|
|
```bash
|
||
|
|
# Test the endpoint
|
||
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
||
|
|
https://mcp.wilddragon.net/v1/models
|
||
|
|
```
|
||
|
|
|
||
|
|
**Unauthorized errors:**
|
||
|
|
- Check token is correct
|
||
|
|
- Verify Authorization header format
|
||
|
|
- Ensure token is in ACCESS_TOKENS
|
||
|
|
|
||
|
|
## 📊 Architecture
|
||
|
|
|
||
|
|
Your system now runs:
|
||
|
|
|
||
|
|
```
|
||
|
|
Claude.ai ──┐ ┌──── Open-UI
|
||
|
|
│ OAuth │ Bearer Token
|
||
|
|
▼ ▼
|
||
|
|
MCP Gateway (/mcp, /v1/*)
|
||
|
|
│
|
||
|
|
┌───────┼───────┬──────────┐
|
||
|
|
▼ ▼ ▼ ▼
|
||
|
|
ERPNext Wave TrueNAS Home Assistant
|
||
|
|
```
|
||
|
|
|
||
|
|
Both clients use the same backend services!
|
||
|
|
|
||
|
|
## 📞 Support
|
||
|
|
|
||
|
|
### If Something's Broken
|
||
|
|
|
||
|
|
1. **Check logs**: `docker compose logs mcp-gateway`
|
||
|
|
2. **Test endpoint**: `curl https://mcp.wilddragon.net/v1/models`
|
||
|
|
3. **Verify token**: Is it correct? Is it in ACCESS_TOKENS?
|
||
|
|
4. **Restart**: `docker compose restart mcp-gateway`
|
||
|
|
|
||
|
|
### For Advanced Setup
|
||
|
|
|
||
|
|
See [`OPENAI_INTEGRATION.md`](./OPENAI_INTEGRATION.md) for:
|
||
|
|
- Custom configuration
|
||
|
|
- Token management
|
||
|
|
- System prompts
|
||
|
|
- Tool execution setup
|
||
|
|
|
||
|
|
## 🎉 You're All Set!
|
||
|
|
|
||
|
|
Your MCP Gateway is now:
|
||
|
|
- ✅ Running with Claude.ai support (MCP protocol)
|
||
|
|
- ✅ Running with Open-UI support (OpenAI API)
|
||
|
|
- ✅ Connected to all your backend services
|
||
|
|
- ✅ Ready for production use
|
||
|
|
|
||
|
|
**Next steps:**
|
||
|
|
1. Restart the gateway
|
||
|
|
2. Configure Open-UI
|
||
|
|
3. Start using your tools!
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Questions?** Check the documentation files above or review the implementation in `gateway-proxy/openai_routes.py`.
|
||
|
|
|
||
|
|
Happy automating! 🚀
|