An AI-powered voice assistant for Odoo technical support with screen sharing capabilities and MCP (Model Context Protocol) integration.
- Voice Interaction: Natural voice conversations using LiveKit and OpenAI Realtime API
- Odoo Integration: Direct access to Odoo instance via XML-RPC
- MCP Support: Model Context Protocol for standardized AI tool interactions
- Screen Sharing: Visual troubleshooting capabilities
- Railway Ready: Optimized for easy deployment on Railway
- No Video Avatar: Lightweight voice-only interface
The agent can help with:
- Module installation, updates, and management
- User account creation and password resets
- Database queries and operations
- Error diagnosis and log analysis
- Configuration and troubleshooting
- Best practices and guidance
technical-support-agent/
├── backend/
│ ├── agent/ # LiveKit voice agent
│ ├── api/ # FastAPI server
│ └── mcp/ # MCP server for Odoo
├── frontend/ # Next.js UI
└── docs/ # Documentation
- Python 3.11+
- Node.js 20+
- pnpm (recommended) or npm
- LiveKit server (cloud or self-hosted)
- OpenAI API key
- Odoo instance (accessible via XML-RPC)
git clone <your-repo-url>
cd technical-support-agentcp .env.example .envEdit .env with your credentials:
# LiveKit Configuration
LIVEKIT_URL=wss://your-livekit-server.livekit.cloud
LIVEKIT_API_KEY=your-api-key
LIVEKIT_API_SECRET=your-api-secret
# OpenAI Configuration
OPENAI_API_KEY=your-openai-api-key
# Odoo Configuration
ODOO_HOST=your-odoo-instance.com
ODOO_PORT=8069
ODOO_DB=your-database-name
ODOO_USERNAME=admin
ODOO_PASSWORD=your-admin-passworddocker-compose up --buildThe services will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
Backend:
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Start API server
python -m uvicorn api.main:app --reload --port 8000
# In another terminal, start the agent
python -m agent.agentFrontend:
cd frontend
pnpm install
pnpm dev- Install Railway CLI:
npm i -g @railway/cli- Login and initialize:
railway login
railway init- Create two services (backend and frontend):
Backend:
railway up --service backendFrontend:
cd frontend
railway up --service frontend- Set environment variables in Railway dashboard for each service
-
Create a new project in Railway
-
Add services:
-
Backend Service:
- Root directory:
/backend - Build command:
pip install -r requirements.txt - Start command:
uvicorn api.main:app --host 0.0.0.0 --port $PORT
- Root directory:
-
Agent Service:
- Root directory:
/backend - Build command:
pip install -r requirements.txt - Start command:
python -m agent.agent
- Root directory:
-
Frontend Service:
- Root directory:
/frontend - Build command:
pnpm install && pnpm build - Start command:
pnpm start
- Root directory:
-
-
Configure environment variables in each service
-
Deploy!
The MCP server provides standardized tools for Odoo operations:
cd backend
python -m mcp.serverAvailable MCP tools:
list_modules: List all Odoo modulesget_module_info: Get module detailslist_users: List all usersget_user_details: Get user informationsearch_records: Search any Odoo modelget_database_info: Get database infoget_company_info: Get company detailscheck_module_dependencies: Check module dependencies
| Variable | Description | Required |
|---|---|---|
LIVEKIT_URL |
LiveKit server WebSocket URL | Yes |
LIVEKIT_API_KEY |
LiveKit API key | Yes |
LIVEKIT_API_SECRET |
LiveKit API secret | Yes |
OPENAI_API_KEY |
OpenAI API key | Yes |
ODOO_HOST |
Odoo instance host | Yes |
ODOO_PORT |
Odoo instance port | Yes |
ODOO_DB |
Odoo database name | Yes |
ODOO_USERNAME |
Odoo admin username | Yes |
ODOO_PASSWORD |
Odoo admin password | Yes |
ODOO_LOG_FILE |
Path to Odoo log file | No |
PORT |
API server port | No (default: 8000) |
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_API_URL |
Backend API URL | Yes |
NEXT_PUBLIC_LIVEKIT_URL |
LiveKit server URL | Yes |
- Add the tool method in
backend/agent/tools.py:
@llm.ai_callable(description="Your tool description")
async def your_tool(
self,
param: Annotated[str, llm.TypeInfo(description="Parameter description")]
) -> str:
# Your implementation
pass- Register it in
backend/agent/agent.py:
tools=[
# ... existing tools
self.tools.your_tool,
]- Implement the method in
backend/mcp/odoo_tools.py - Register it in
backend/mcp/server.pyin thelist_tools()function - Handle the call in
call_tool()function
- Verify LiveKit credentials are correct
- Check that Odoo instance is accessible
- Ensure firewall allows WebSocket connections
- Check browser microphone permissions
- Verify OpenAI API key is valid
- Check LiveKit server status
- Verify Odoo credentials
- Check network connectivity to Odoo instance
- Ensure Odoo XML-RPC is enabled
- Never commit
.envfile with credentials - Use Railway secrets for production credentials
- Implement rate limiting for API endpoints
- Use HTTPS/WSS in production
- Restrict Odoo user permissions to minimum required
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
For issues and questions, please open an issue on GitHub.