# Dolibarr MCP Server Dolibarr MCP delivers a Model Context Protocol (MCP) interface for the Dolibarr ERP/CRM. The project mirrors the project structure of [`prestashop-mcp`](https://github.com/latinogino/prestashop-mcp): an async API client, a production-ready STDIO server, and focused documentation. **Design Note:** While sharing the same architecture, this server implements **specialized search tools** (e.g., `search_products_by_ref`, `resolve_product_ref`) instead of a single unified `get_` tool. This design choice ensures efficient server-side filtering via Dolibarr's SQL API, preventing the agent from accidentally loading thousands of records and exceeding context limits. Claude Desktop and other MCP-aware tools can use the server to manage customers, products, invoices, orders, and contacts in a Dolibarr instance. Consult the bundled [documentation index](docs/README.md) for deep dives into configuration, API coverage, and contributor workflows. ## ✨ Features - **Full ERP coverage** – CRUD tools for users, customers, products, invoices, orders, contacts, projects, and raw API access. - **Advanced Search** – Server-side filtering for products, customers, and projects to minimize token usage and costs. - **Async/await HTTP client** – Efficient Dolibarr API wrapper with structured error handling. - **Ready for MCP hosts** – STDIO transport compatible with Claude Desktop out of the box. - **Shared workflow with prestashop-mcp** – Identical developer ergonomics and documentation structure across both repositories. ## ✅ Prerequisites - Python 3.8 or newer. - Access to a Dolibarr installation with the REST API enabled and a personal API token. ## 📦 Installation ### Linux / macOS ```bash git clone https://github.com/latinogino/dolibarr-mcp.git cd dolibarr-mcp python3 -m venv venv_dolibarr source venv_dolibarr/bin/activate pip install -e . # Optional development extras pip install -e '.[dev]' ``` While the virtual environment is active record the Python executable path with `which python`. Claude Desktop must launch the MCP server using this interpreter. ### Windows (PowerShell) ```powershell git clone https://github.com/latinogino/dolibarr-mcp.git Set-Location dolibarr-mcp py -3 -m venv venv_dolibarr ./venv_dolibarr/Scripts/Activate.ps1 pip install -e . # Optional development extras (escape brackets in PowerShell) pip install -e .`[dev`] ``` Run `Get-Command python` (or `Get-Command python.exe`) while the environment is activated and note the absolute path. Claude Desktop should use this interpreter inside the virtual environment, for example `C:\\path\\to\\dolibarr-mcp\\venv_dolibarr\\Scripts\\python.exe`. ### Docker (optional) ```bash docker compose up -d # or docker build -t dolibarr-mcp . docker run -d \ -e DOLIBARR_URL=https://your-dolibarr.example.com/api/index.php \ -e DOLIBARR_API_KEY=YOUR_API_KEY \ dolibarr-mcp ``` ## ⚙️ Configuration ### Environment variables The server reads configuration from the environment or a `.env` file. Both `DOLIBARR_URL` and `DOLIBARR_SHOP_URL` are accepted for the base API address. | Variable | Description | | --- | --- | | `DOLIBARR_URL` / `DOLIBARR_SHOP_URL` | Base Dolibarr API endpoint, e.g. `https://example.com/api/index.php`. Trailing slashes are handled automatically. | | `DOLIBARR_API_KEY` | Personal Dolibarr API token. | | `LOG_LEVEL` | Optional logging verbosity (`INFO`, `DEBUG`, `WARNING`, …). | | `MCP_TRANSPORT` | Transport to use: `stdio` (default) or `http` for streamable HTTP. | | `MCP_HTTP_HOST` | Host/interface to bind when using HTTP transport (default `0.0.0.0`). | | `MCP_HTTP_PORT` | Port to bind when using HTTP transport (default `8080`). | Example `.env`: ```env DOLIBARR_URL=https://your-dolibarr.example.com/api/index.php DOLIBARR_API_KEY=YOUR_API_KEY LOG_LEVEL=INFO ``` ### Claude Desktop configuration Add the following block to `claude_desktop_config.json`, replacing the paths and credentials with your own values: ```json { "mcpServers": { "dolibarr": { "command": "C:\\path\\to\\dolibarr-mcp\\venv_dolibarr\\Scripts\\python.exe", "args": ["-m", "dolibarr_mcp.dolibarr_mcp_server"], "cwd": "C:\\path\\to\\dolibarr-mcp", "env": { "DOLIBARR_SHOP_URL": "https://your-dolibarr.example.com", "DOLIBARR_API_KEY": "YOUR_API_KEY" } } } } ``` Restart Claude Desktop after saving the configuration. The MCP server reads the same environment variables when launched from Linux or macOS hosts. ## ▶️ Usage ### Start the MCP server The server communicates over STDIO by default, so run it in the foreground from the virtual environment: ```bash python -m dolibarr_mcp.dolibarr_mcp_server ``` Logs are written to stderr to avoid interfering with the MCP protocol. Keep the process running while Claude Desktop is active. ### HTTP streaming mode (for Open WebUI or remote MCP clients) Enable the HTTP transport by setting `MCP_TRANSPORT=http` (and optionally `MCP_HTTP_HOST` / `MCP_HTTP_PORT`). This keeps the server running without STDIO and exposes the Streamable HTTP transport compatible with Open WebUI: ```bash MCP_TRANSPORT=http MCP_HTTP_PORT=8080 python -m dolibarr_mcp.dolibarr_mcp_server ``` Then point Open WebUI’s MCP configuration at `http://:8080/`. The MCP protocol headers (including `mcp-protocol-version`) are handled automatically by Open WebUI’s MCP client. ### Test the Dolibarr credentials Use the standalone connectivity check before wiring the server into an MCP host: ```bash python -m dolibarr_mcp.test_connection --url https://your-dolibarr.example.com/api/index.php --api-key YOUR_API_KEY ``` When the environment variables are already set, omit the overrides and run `python -m dolibarr_mcp.test_connection`. ## 🧪 Development - Run the test-suite with `pytest` (see [`docs/development.md`](docs/development.md) for coverage options and Docker helpers). - Editable installs rely on the `src/` layout and expose the `dolibarr-mcp` console entry point for backwards compatibility. - The repository structure, tooling, and docs intentionally mirror [`prestashop-mcp`](https://github.com/latinogino/prestashop-mcp) to keep the companion projects aligned. ## 📄 License Released under the [MIT License](LICENSE).