{
  "markdown": "# Odoo MCP Server\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server for **Odoo**. Connect Claude (or any MCP client) to **your own** Odoo ERP and query, report on, and optionally modify your data in natural language.\n\nWorks with any Odoo model. **Safe by default: read-only** unless you explicitly enable writes. Your credentials stay on your machine — nothing is stored or sent anywhere except your own Odoo instance.\n\n## Features\n\n- 🔍 **Generic access to any model** — search, read, count, introspect fields, list models\n- 📊 **Ready-made business tools** — overdue invoices, sales summary, low-stock products, top customers\n- 🔒 **Read-only by default** — create/update/delete only when you opt in (`ODOO_ENABLE_WRITES=true`)\n- 🔑 **Your data, your machine** — configured entirely through environment variables\n\n## Install\n\nAdd this to your MCP client config (e.g. Claude Desktop or Claude Code):\n\n```json\n{\n  \"mcpServers\": {\n    \"odoo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"odoo-mcp-connector\"],\n      \"env\": {\n        \"ODOO_URL\": \"https://your-company.odoo.com\",\n        \"ODOO_DB\": \"your-database\",\n        \"ODOO_USERNAME\": \"you@example.com\",\n        \"ODOO_API_KEY\": \"your-odoo-api-key\"\n      }\n    }\n  }\n}\n```\n\n### Getting an Odoo API key\n\nIn Odoo: **Settings → Users → (your user) → Account Security → New API Key**. Paste the generated key into `ODOO_API_KEY`. (A password also works, but an API key is safer and revocable.)\n\n### Enabling writes\n\nRead-only is the default. To let the model create, update, or delete records, add:\n\n```json\n\"ODOO_ENABLE_WRITES\": \"true\"\n```\n\n> ⚠️ Odoo holds real business data. Enable writes only when you accept that the model can create, modify, or delete records — always within your Odoo user's own permissions.\n\n## Tools\n\n### Always available (read-only)\n\n| Tool | Purpose |\n|---|---|\n| `odoo_search_read` | Search + read records from any model |\n| `odoo_read` | Read records by ID |\n| `odoo_count` | Count records matching a domain |\n| `odoo_fields` | Introspect a model's fields (name, type, label) |\n| `odoo_list_models` | List available models |\n| `odoo_overdue_invoices` | Unpaid customer invoices past their due date |\n| `odoo_sales_summary` | Revenue + order count over a date range |\n| `odoo_low_stock` | Products at/below a quantity threshold |\n| `odoo_top_customers` | Top customers by invoiced revenue |\n\n### Only when `ODOO_ENABLE_WRITES=true`\n\n| Tool | Purpose |\n|---|---|\n| `odoo_create` | Create a record |\n| `odoo_write` | Update records by ID |\n| `odoo_unlink` | Delete records by ID (irreversible) |\n| `odoo_call` | Call an arbitrary model method |\n\n## Configuration reference\n\n| Variable | Required | Default | Description |\n|---|---|---|---|\n| `ODOO_URL` | yes | — | Your Odoo base URL |\n| `ODOO_DB` | yes | — | Database name |\n| `ODOO_USERNAME` | yes | — | Login (email) |\n| `ODOO_API_KEY` | yes | — | API key (or password) |\n| `ODOO_ENABLE_WRITES` | no | `false` | Set `\"true\"` to allow writes |\n| `ODOO_TIMEOUT_MS` | no | `30000` | Per-request timeout (ms) |\n\n## Development\n\n```bash\nnpm install\nnpm test       # vitest — fully mocked, no live Odoo needed\nnpm run build\n```\n\n## License\n\nMIT © Falak Sarhan Saade\n",
  "bytes": 3209,
  "sha": "3b1b632dad6330bf29fbf8d88d99c69cb4e8c26430519392f27e21d2090d8734",
  "repo_slug": "management-cmyk/odoo-mcp-connector",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_management_cmyk_odoo_mcp_conne_41ffeaab/readme"
}