FastAPI's `detail` field is a plain string for handler-raised errors, but
an array of {loc, msg, type} objects for its own automatic 422 request
validation errors. new Error(detail) silently stringified that array into
"[object Object]", hiding the actual validation failure from the user
(e.g. when adding an Odoo connection). Normalizes both shapes into one
readable message, and also guards against non-JSON error responses.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
OdooMCP Cloud — Frontend
Vite + React + TypeScript dashboard for the multi-tenant Odoo MCP server.
Stack
- Vite 5 + React 18 + TypeScript
- react-router-dom v6 for client-side routing
- Tailwind CSS
- recharts for analytics charts
Development
npm install
npm run dev # http://localhost:3000
Requires the backend (Multi-Tenant-ODOO-MCP) running and .env pointing VITE_API_URL at it.
Build
npm run build # type-checks then builds to dist/
npm run preview # serve the production build locally
Structure
src/pages/— route components (landing, auth,dashboard/,admin/)src/components/landing/— marketing page sectionssrc/lib/api.ts— typed API client + localStorage session helperssrc/App.tsx— route tree
Description
Languages
TypeScript
98.9%
CSS
0.4%
JavaScript
0.4%
HTML
0.3%