vivid-odoo
Provides read/write access to an Odoo CRM instance through the Odoo external API, including tools for searching, creating, updating, and managing CRM leads, stages, teams, partners, and communications, as well as workflow helpers for finding, merging, and processing leads and attaching documents.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vivid-odooFind duplicate leads for Vendo ID 4821 and merge them if safe."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vivid Odoo MCP server
Gives Claude direct read/write access to the Vivid Windows Odoo CRM over the Odoo external API, so the Vendo → CRM lead sync runs without a browser tab or the Chrome extension.
Built because the current sync drives Odoo through a logged-in browser tab: it stalls whenever the extension disconnects, it can't run unattended, and every PDF attachment round-trips a ~500 KB base64 blob through the conversation.
What it does differently
Browser route | This server | |
Needs Chrome extension connected | yes | no |
Runs on a schedule unattended | no | yes |
PDF attachment | base64 through the model context | fetched server-side, never touches the conversation |
Lead lookup | page loads, 6–10 s renders | one RPC call |
Credentials | none (rides your session) | Odoo API key, held server-side |
Related MCP server: MCP Server for Odoo
Tools
Guarded CRUD — odoo_search_read, odoo_read, odoo_write, odoo_create,
odoo_call
Workflow helpers — these encode the conventions that are easy to get wrong, so they don't have to be remembered at call time:
find_leads_by_vendo_id— matches on the join key, includes archived records, and flags each leadneeds_processing(active and inLeads). Archived leads come back with a warning, because a cancelled job is archived, not deleted.find_duplicate_leads— widens past the Vendo ID to name, email and street, then groups by street so separate jobs for one household are distinguishable from true duplicates.merge_leads— chunks around Odoo's five-record cap and folds the survivor forward. Verifies which record actually survived rather than assuming.set_lead_stage— resolves the stage by name and reports which automations fired.attach_vendo_document— fetches from Vendo storage and writes the binary, filename companion and source URL together.lookup_sales_team_for_canvasser,lookup_user,get_lead_historyodoo_ping— health check.
Guardrails
These are enforced in code, not left to caller discipline:
Model allowlist. Readable:
crm.lead,crm.stage,crm.tag,crm.team,hr.employee,res.users,res.partner,mail.message,mail.activity. Writable:crm.leadonly. This server can never edit an employee record or a user account.Method allowlist on
odoo_call— only the merge wizard. Nounlink.The
zipguard. A broken server action oncrm.leadevaluates ares.city.zipfield that doesn't exist, so any write touchingzipdies withValueError: Invalid field res.city.zip. The server refuses it with a message pointing atx_studio_zip_code. This is a real defect in your Odoo automation and is worth fixing at the source rather than routing around forever.Document host allowlist —
attach_vendo_documentonly fetches fromstorage.paradigmvendo.com, verifies a%PDFheader, and caps at 25 MB.Binaries stripped from results so a read never dumps a PDF into context.
Bearer auth — when
MCP_BEARER_TOKENis set, unauthenticated requests get a 401. The server logs a loud warning if you start it without one.
Setup
1. Generate an Odoo API key
In Odoo: avatar → Preferences → Account Security → New API Key.
Create it on a dedicated integration user, not a personal login — one whose CRM permissions are scoped to what the sync needs. Keys inherit the user's rights, so a key on an admin account is an admin key. The key is shown once.
ODOO_DB is usually the subdomain (myvivid); confirm at
https://myvivid.odoo.com/web/database/selector if unsure.
2. Configure
cp .env.example .env # then fill it in
openssl rand -hex 32 # value for MCP_BEARER_TOKENNever commit .env. Use your host's secret store in production.
3. Deploy
Anywhere that gives you a public HTTPS URL and can reach myvivid.odoo.com —
Fly.io, Railway, Render, Cloud Run, or your own box behind a TLS proxy.
docker build -t vivid-odoo-mcp .
docker run -p 8080:8080 --env-file .env vivid-odoo-mcpOr without Docker:
pip install -r requirements.txt
uvicorn server:app --host 0.0.0.0 --port 8080Verify before connecting:
curl -s -X POST https://your-host/mcp \
-H "Authorization: Bearer $MCP_BEARER_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}'You should get a handshake naming vivid-odoo. Without the header you should
get a 401 — check that too.
4. Connect it to Claude
claude.ai → Settings → Connectors → Add custom connector, MCP endpoint
https://your-host/mcp.
5. Point the skill at it
Once connected, vendo-crm-lead-sync should call these tools instead of running
odoo() in a browser tab. Vendo and Terros still need the browser — only the
Odoo half becomes headless. Worth updating the skill's "When the browser will
not cooperate" section accordingly: an Odoo outage is no longer a reason to
defer a run, but a Vendo or Terros outage still is.
A note on auth
Bearer-token auth is the minimum bar. If your host supports it, put the server behind OAuth or restrict inbound traffic by IP — a bearer token in a connector config is a long-lived credential granting write access to your CRM pipeline.
Rotate the Odoo API key from Odoo's Account Security page if it's ever exposed; revoking there kills the server's access immediately.
Testing status
Verified in the build environment: all 14 tools register, the 8 guardrail cases (model allowlist, write allowlist, zip guard, method allowlist, binary stripping, document host allowlist, empty-search rejection, normal write) behave correctly, and the full HTTP path works — 401 without a token, 401 with a wrong token, MCP handshake with the right one. End-to-end RPC (auth, uid caching, lead lookup, stage change) was exercised against a stub Odoo.
Not yet tested against the live instance. The build sandbox's egress policy
blocks myvivid.odoo.com, so the first real run needs odoo_ping against
production to confirm credentials, database name and field access.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Odoo ERP systems through XML-RPC communication. Provides access to Odoo models, records, methods, and data structures for comprehensive ERP integration.2MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language to search records, create entries, update data, and manage business operations. Supports secure authentication and configurable access controls for production environments.
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business records like customers, products, and invoices across any Odoo instance.1Mozilla Public 2.0
- AlicenseAqualityDmaintenanceConnects AI assistants to Odoo 19.0, enabling full CRUD operations and method calls on any Odoo model via API key or username/password authentication.9LGPL 3.0
Related MCP Connectors
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Zoho CRM MCP Pack — wraps the Zoho CRM API v6
Pipedrive MCP Pack — wraps the Pipedrive REST API v1
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/abipsha/vivid-odoo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server