{
  "data": {
    "a": {
      "slug": "odoo",
      "name": "Odoo External API",
      "vendor": "Odoo SA",
      "vendorUrl": "https://www.odoo.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Odoo is a business suite from Odoo SA in Belgium with accounting, invoicing, sales, stock and HR apps on one database. Outside software reaches it through the JSON-2 HTTP API with API keys and, from Odoo 20, an MCP server.",
      "url": "https://www.anchorterminal.com/tools/odoo",
      "markdownUrl": "https://www.anchorterminal.com/tools/odoo.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/odoo.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/odoo.json",
      "repo": "https://github.com/odoo/odoo",
      "license": "Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "api-key",
      "authNotes": "An API key created by a user under Preferences, Account Security, New API Key, sent as `Authorization: bearer \u003ckey\u003e`. The key acts with that user's access rights and record rules, is shown once and expires within three months at most. Self-serve once the database is on a plan that includes the external API (Custom on Odoo Online), with no app review. The MCP server takes a key created with the MCP scope. The deprecated XML-RPC and JSON-RPC services take the database name, user id and password or key in the call.",
      "pricing": "paid",
      "pricingNotes": "Odoo Online needs the Custom plan for the external API. On 8 October 2026 the pricing page, read from a UK address, showed Custom at £41 a user a month billed yearly or £52 billed monthly (£32 and £41 for the first 12 months), Standard at £22 or £28 without the external API, and One App Free at £0 for one app without it. A free trial needs no card. The Community edition is free to self-host under LGPLv3 and includes the JSON-2 API. We did not read US dollar prices, so the price table is empty.",
      "priceSummary": "Paid",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the external API docs, the MCP server docs or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 54912,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://www.odoo.com/documentation/20.0/developer/reference/external_api.html",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "open-source",
        "enterprise",
        "mcp",
        "status-page"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 55.9,
        "grade": "C",
        "agentReady": false,
        "rank": 647,
        "ranked": true,
        "rankOf": 954,
        "categoryRank": 8,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 73,
          "payments": 22,
          "reliability": 44,
          "schema": 51,
          "security": 61,
          "transparency": 93
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "One endpoint pattern reaches every model, with field selection, filters and paging, and keys that expire within three months. On Odoo Online the external API needs the Custom plan, there is no OpenAPI file, and the acceptable use policy asks for about one call a second with no parallel calls.",
        "bestFor": "An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.",
        "strengths": [
          "`/json/2/\u003cmodel\u003e/\u003cmethod\u003e` reaches every model the user can see, including `account.move` for invoices, bills and journal entries",
          "API keys are per user, shown once, expire within three months at most and can be generated and revoked through the API",
          "Odoo 20 adds an MCP server at `\u003cdatabase_url\u003e/mcp` that exposes five read-only tools by default, with write tools switched on one by one",
          "The Community edition is LGPLv3 and carries the same JSON-2 controller, so a self-hosted server answers the same calls at no charge",
          "The privacy policy of 24 September 2026 names subprocessors, hosting regions and retention periods"
        ],
        "weaknesses": [
          "On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it",
          "No OpenAPI file and no llms.txt. The per-database reference at `/doc` needs a login or a key, and its docs section reads \"Under construction\"",
          "The acceptable use policy puts API traffic at about one call a second with no parallel calls. No 429 or Retry-After handling was found in the docs",
          "No idempotency keys, and the JSON-2 docs say several calls cannot share one transaction",
          "status.odoo.com has no history page, and its only dated entry is a planned upgrade on 4 August 2026",
          "The full Accounting app and the MCP server are in the proprietary Enterprise edition. Community has Invoicing"
        ],
        "agentNotes": [
          "POST to `/json/2/\u003cmodel\u003e/\u003cmethod\u003e` with `Authorization: bearer \u003ckey\u003e` and named arguments in a JSON body. Add `X-Odoo-Database` when one host serves several databases",
          "Pass `fields` and `limit` on `search_read`. The default limit is every matching record",
          "Create invoices and bills on `account.move` with `move_type` set to `out_invoice` or `in_invoice`, then call `action_post`. A new move is a draft",
          "Keep to about one call a second with no parallel calls on Odoo Online, and batch records into one `create` call",
          "Ask the owner for a key on a dedicated bot user with the minimum access rights, and rotate it before its expiry date"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 55.9
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 73,
          "payments": 22,
          "reliability": 44,
          "schema": 51,
          "security": 61,
          "transparency": 87
        },
        "provenanceScore": 98
      },
      "connect": {
        "http": "curl https://$DATABASE.odoo.com/json/2/res.partner/search_read \\\n  -X POST \\\n  --oauth2-bearer $API_KEY \\\n  -H \"X-Odoo-Database: $DATABASE\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"domain\": [[\"is_company\", \"=\", true]], \"fields\": [\"name\"]}'",
        "claudeCode": "claude mcp add --transport stdio \u003cserver_name\u003e -- npx -y mcp-remote \u003cdatabase_url\u003e/mcp --header \"Authorization: Bearer \u003cAPI_KEY\u003e\"",
        "config": {
          "mcpServers": {
            "odoo": {
              "args": [
                "-y",
                "mcp-remote",
                "\u003cdatabase_url\u003e/mcp",
                "--header",
                "Authorization: Bearer \u003cAPI_KEY\u003e"
              ],
              "command": "npx"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/odoo"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Odoo SA",
        "domain": "odoo.com",
        "domainRegistered": "2001-01-25",
        "endpointOnVendorDomain": true,
        "terms": "https://www.odoo.com/documentation/20.0/legal/terms/enterprise.html",
        "privacy": "https://www.odoo.com/privacy",
        "statusPage": "https://status.odoo.com",
        "changelog": "https://www.odoo.com/odoo-20-release-notes",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The Odoo Enterprise Subscription Agreement (version 13, 24 September 2026) is between the customer and Odoo SA and its affiliates, under Belgian law, and covers the cloud platforms and self-hosting. The Acceptable Use Policy of 7 May 2025 is incorporated into it.",
          "The privacy policy (effective 24 September 2026) gives the postal contact as Odoo SA, Chaussée de Namur 40, Belgium, and privacy@odoo.com.",
          "www.odoo.com/.well-known/security.txt is PGP-signed and gives security@odoo.com, the disclosure policy and a hall of fame. It has no Expires field, which RFC 9116 requires.",
          "Odoo Online databases answer at \u003cname\u003e.odoo.com. A self-hosted server answers on the owner's own domain.",
          "status.odoo.com is a single page with component states and no history page. Its only dated entry on 8 October 2026 was the planned odoo.com upgrade of 4 August 2026.",
          "RDAP for odoo.com gives a registration date of 2001-01-25."
        ],
        "score": 98
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/odoo.json",
      "live": {
        "slug": "odoo",
        "vendorStatus": {
          "page": "https://status.odoo.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-10T11:53:15.353059714Z"
        },
        "githubStars": 54948,
        "securityTxt": {
          "url": "https://odoo.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-10-09T15:40:17.754646935Z"
        },
        "pages": [
          {
            "url": "https://www.odoo.com/odoo-20-release-notes",
            "kind": "changelog",
            "status": 0,
            "checkedAt": "2026-10-09T18:52:38.747527296Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://www.odoo.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:52:38.747542804Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "62e100447c2e"
          },
          {
            "url": "https://www.odoo.com/documentation/20.0/legal/terms/enterprise.html",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:52:36.675623437Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "54b423c6a157"
          }
        ],
        "updatedAt": "2026-10-10T11:53:15.353059714Z"
      }
    },
    "answer": "Odoo External API scores 55.9 (C) on agent readiness against rotki MCP server's 45.6 (E), and leads in 4 of 7 scored categories. rotki MCP server leads on reliability and schema \u0026 documentation.",
    "b": {
      "slug": "rotki-mcp",
      "name": "rotki MCP server",
      "vendor": "Rotki Solutions GmbH",
      "vendorUrl": "https://rotki.com",
      "kind": "platform",
      "category": "accounting",
      "summary": "Open-source, local-first portfolio tracking and accounting app for crypto. Its MCP server, for Premium Basic and higher, lets an AI assistant on the same machine query the user's events and balances with read-only SQL.",
      "url": "https://www.anchorterminal.com/tools/rotki-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/rotki-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/rotki-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/rotki-mcp.json",
      "repo": "https://github.com/rotki/rotki",
      "license": "AGPL-3.0",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "mixed",
      "authNotes": "Desktop. No credential. The MCP HTTP endpoint at http://127.0.0.1:4445/mcp takes no bearer token, because the desktop launcher forces ROTKI_SESSION_KEY empty outside Docker (https://github.com/rotki/rotki/blob/v1.44.1/crates/starling/src/main.rs). Host and Origin allowlists limit requests to 127.0.0.1:4445. Docker. POST /api/1/mcp/token issues a bearer token scoped to mcp that lasts at most seven days from login and is revoked on logout (https://github.com/rotki/rotki/blob/v1.44.1/docs/dev_changelog.rst; https://docs.rotki.com/usage-guides/mcp).",
      "pricing": "paid",
      "pricingNotes": "Premium Basic is €25 a month billed monthly, labelled Suggested, and Advanced is €45 a month billed monthly (https://rotki.com/products/, checked 10 October 2026). Yearly prices are not shown, only 'Save 2 months vs monthly'. The Starter plan and the Supporter plan have no MCP access, and the code excludes Free and Supporter from the tools (https://github.com/rotki/rotki/blob/v1.44.1/rotkehlchen/mcp/premium.py). No free trial was found.",
      "priceSummary": "Paid",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the products page or the source (checked 2026-10-10).",
        "endpoints": []
      },
      "toolCount": 8,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-10"
      },
      "docsUrl": "https://docs.rotki.com/usage-guides/mcp",
      "llmsTxt": "https://rotki.com/llms.txt",
      "capabilities": [
        "accounting.ledger"
      ],
      "tags": [
        "open-source",
        "self-hosted",
        "local-first",
        "desktop",
        "docker",
        "mcp",
        "read-only",
        "premium",
        "python",
        "llms-txt"
      ],
      "lastRelease": "2026-10-02",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.6,
        "grade": "E",
        "agentReady": false,
        "rank": 865,
        "ranked": true,
        "rankOf": 954,
        "categoryRank": 12,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 69,
          "maintenance": 35,
          "payments": 10,
          "reliability": 50,
          "schema": 76,
          "security": 20,
          "transparency": 48
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-10"
        },
        "negative": 0,
        "verdict": "A read-only MCP server in the rotki desktop app, for Premium Basic at €25 a month and above. Privacy modes mask addresses and account names, but amounts, dates, assets and counterparties reach the connected assistant in every mode. The desktop endpoint takes no token, and the feature shipped in v1.44.0 on 21 August 2026.",
        "bestFor": "A Premium user who wants an assistant to answer questions about their own history, balances and cost basis on their own machine.",
        "strengths": [
          "Read-only by construction. Eight tools and none of them writes, and query_sql accepts one SELECT or WITH statement against an in-memory copy of the loaded data",
          "The premium gate fails closed. Free and Supporter accounts get premium_required, and a backend that cannot be queried gets premium_check_failed",
          "Balanced mode, the default, masks addresses, transaction hashes, group and event identifiers and account names with a per-process seed, and redacts user notes",
          "AGPL-3.0 source for the MCP server, its tests in rotkehlchen/tests/mcp and the desktop launcher that starts it",
          "Typed JSON Schema inputs on every tool, generated from the Python signatures, plus a free info tool that reports whether an unlocked backend is connected"
        ],
        "weaknesses": [
          "The desktop endpoint at http://127.0.0.1:4445/mcp takes no token, because the session key is forced empty outside Docker, so any local process can call it while the server runs",
          "Amounts, USD values, timestamps, asset symbols, counterparties and venue names pass unmasked in every mode, as the in-app strict description says",
          "The privacy policy at rotki.com/privacy-policy does not mention the desktop app or the MCP, and the MCP usage event to sigil.rotki.com is on by default",
          "Two releases in the 90 days to 10 October 2026, and no rotki entry found in the official MCP registry search",
          "The feature is seven weeks old, and no injection guidance, per-call audit log or security disclosure policy was found"
        ],
        "agentNotes": [
          "Ask the person to start the server under Settings \u003e MCP in the desktop app, since it stays down until started, then connect to http://127.0.0.1:4445/mcp",
          "Call info first. It works without Premium and reports whether an unlocked backend is connected",
          "Call get_event_taxonomy before any aggregate over event_type, and sum on direction or event_group, since informational rows double count MEV and block rewards",
          "Call refresh_analytics_data before query_sql, and check source.completeness and unpriced_rows before reporting any total",
          "Check the privacy mode before answering from the data. Strict keeps amounts and dates, and raw sends addresses, hashes and notes verbatim"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.6
          }
        ],
        "editorialScores": {
          "ergonomics": 69,
          "maintenance": 35,
          "payments": 10,
          "reliability": 50,
          "schema": 76,
          "security": 20,
          "transparency": 55
        },
        "provenanceScore": 40
      },
      "connect": {
        "claudeCode": "claude mcp add --scope user --transport http rotki http://127.0.0.1:4445/mcp"
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/rotki-mcp"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Rotki Solutions GmbH",
        "domain": "rotki.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": false,
        "terms": "",
        "privacy": "https://rotki.com/privacy-policy",
        "statusPage": "",
        "changelog": "https://github.com/rotki/rotki/releases",
        "securityTxt": "unknown",
        "checked": "2026-10-10",
        "notes": [
          "The privacy policy names Rotki Solutions GmbH as operator of the website and the Premium API subscription. It states no retention period and no governing law, and does not mention the desktop app or the MCP server.",
          "The MCP server runs on the user's own machine, so no vendor endpoint is involved. The only vendor-side request is the optional usage event to sigil.rotki.com.",
          "rotki.com/.well-known/security.txt and rotki.com/security.txt both returned client errors to our reader, so securityTxt is recorded as unknown.",
          "status.rotki.com and the terms page could not be read by our reader, so statusPage and terms are null."
        ],
        "score": 40
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/rotki-mcp.json"
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "Platform",
        "name": "Kind"
      },
      {
        "a": "Odoo SA",
        "b": "Rotki Solutions GmbH",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement",
        "b": "AGPL-3.0",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "8",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-08",
        "b": "2026-10-02",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-24",
        "b": "",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "55k stars",
        "b": "none",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Odoo External API scores 55.9 (C) on agent readiness against rotki MCP server's 45.6 (E), and leads in 4 of 7 scored categories. rotki MCP server leads on reliability and schema \u0026 documentation.",
        "question": "Which is better for AI agents, Odoo External API or rotki MCP server?"
      },
      {
        "answer": "No hosted endpoint is listed for Odoo External API. No hosted endpoint is listed for rotki MCP server.",
        "question": "Can an agent call Odoo External API and rotki MCP server without installing anything?"
      },
      {
        "answer": "Yes. Odoo External API is open source (Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement). rotki MCP server is open source (AGPL-3.0).",
        "question": "Are Odoo External API and rotki MCP server open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 61 against 20",
          "Payments \u0026 pricing, 22 against 10",
          "Maintenance \u0026 community, 73 against 35",
          "Transparency \u0026 trust, 93 against 48"
        ],
        "also": null,
        "goodFor": "An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.",
        "slug": "odoo",
        "watchFor": "On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it"
      },
      {
        "aheadOn": [
          "Reliability, 50 against 44",
          "Schema \u0026 documentation, 76 against 51"
        ],
        "also": null,
        "goodFor": "A Premium user who wants an assistant to answer questions about their own history, balances and cost basis on their own machine.",
        "slug": "rotki-mcp",
        "watchFor": "The desktop endpoint at http://127.0.0.1:4445/mcp takes no token, because the session key is forced empty outside Docker, so any local process can call it while the server runs"
      }
    ],
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledgers"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.json",
        "title": "Apideck Accounting API + MCP vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-rotki-mcp.json",
        "title": "Apideck Accounting API + MCP vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-odoo.json",
        "title": "Codat vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/codat-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-rotki-mcp.json",
        "title": "Codat vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/codat-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-odoo.json",
        "title": "FreeAgent API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-rotki-mcp.json",
        "title": "FreeAgent API vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-odoo.json",
        "title": "FreshBooks API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-rotki-mcp.json",
        "title": "FreshBooks API vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.json",
        "title": "Merge Accounting API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-odoo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-rotki-mcp.json",
        "title": "Merge Accounting API vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-pennylane.json",
        "title": "Odoo External API vs Pennylane",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-pennylane"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.json",
        "title": "Odoo External API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-rutter.json",
        "title": "Odoo External API vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-xero.json",
        "title": "Odoo External API vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-zoho-books.json",
        "title": "Odoo External API vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-rotki-mcp.json",
        "title": "Pennylane vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp.json",
        "title": "QuickBooks Online API + MCP vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rotki-mcp-vs-rutter.json",
        "title": "rotki MCP server vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/rotki-mcp-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rotki-mcp-vs-xero.json",
        "title": "rotki MCP server vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/rotki-mcp-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rotki-mcp-vs-zoho-books.json",
        "title": "rotki MCP server vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/rotki-mcp-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo.json",
        "title": "Invoice Ninja API vs Odoo External API",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo"
      }
    ],
    "scores": [
      {
        "by": 6,
        "edge": "rotki-mcp",
        "key": "reliability",
        "name": "Reliability",
        "odoo": 44,
        "rotki-mcp": 50,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 25,
        "edge": "rotki-mcp",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "odoo": 51,
        "rotki-mcp": 76,
        "weight": 13
      },
      {
        "by": 2,
        "edge": "rotki-mcp",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "odoo": 67,
        "rotki-mcp": 69,
        "weight": 13
      },
      {
        "by": 41,
        "edge": "odoo",
        "key": "security",
        "name": "Security \u0026 auth",
        "odoo": 61,
        "rotki-mcp": 20,
        "weight": 14
      },
      {
        "by": 12,
        "edge": "odoo",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "odoo": 22,
        "rotki-mcp": 10,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 38,
        "edge": "odoo",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "odoo": 73,
        "rotki-mcp": 35,
        "weight": 7
      },
      {
        "by": 45,
        "edge": "odoo",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "odoo": 93,
        "rotki-mcp": 48,
        "weight": 7
      }
    ],
    "summary": "Odoo External API scores 55.9 (C) on agent readiness against rotki MCP server's 45.6 (E), and leads in 4 of 7 scored categories. rotki MCP server leads on reliability and schema \u0026 documentation. Both do accounting ledgers.",
    "verdicts": {
      "odoo": "One endpoint pattern reaches every model, with field selection, filters and paging, and keys that expire within three months. On Odoo Online the external API needs the Custom plan, there is no OpenAPI file, and the acceptable use policy asks for about one call a second with no parallel calls.",
      "rotki-mcp": "A read-only MCP server in the rotki desktop app, for Premium Basic at €25 a month and above. Privacy modes mask addresses and account names, but amounts, dates, assets and counterparties reach the connected assistant in every mode. The desktop endpoint takes no token, and the feature shipped in v1.44.0 on 21 August 2026."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp",
    "json": "https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp.md",
    "slim": "https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp.min.md"
  },
  "markdown": "Odoo External API scores 55.9 (C) on agent readiness against rotki MCP server's 45.6 (E), and leads in 4 of 7 scored categories. rotki MCP server leads on reliability and schema \u0026 documentation. Both do accounting ledgers.\n\n- Odoo External API: grade C, 55.9/100, rank #647 of 954. Markdown https://www.anchorterminal.com/tools/odoo.md · JSON https://www.anchorterminal.com/api/v1/tools/odoo.json\n- rotki MCP server: grade E, 45.6/100, rank #865 of 954. Markdown https://www.anchorterminal.com/tools/rotki-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/rotki-mcp.json\n- Best accounting and invoicing APIs for AI agents: https://www.anchorterminal.com/best/accounting/index.md\n- All 77 accounting comparisons: https://www.anchorterminal.com/compare/accounting/index.md\n\n## Which one, for what\n\n### Odoo External API (C)\n\nGood for: An agent working inside a company that already runs Odoo, where invoices, bills, journal entries, stock and sales sit in one database behind one endpoint pattern.\n\nAhead on:\n- Security \u0026 auth, 61 against 20\n- Payments \u0026 pricing, 22 against 10\n- Maintenance \u0026 community, 73 against 35\n- Transparency \u0026 trust, 93 against 48\n\nWatch for: On Odoo Online the external API is limited to the Custom plan. One App Free and Standard exclude it\n\n### rotki MCP server (E)\n\nGood for: A Premium user who wants an assistant to answer questions about their own history, balances and cost basis on their own machine.\n\nAhead on:\n- Reliability, 50 against 44\n- Schema \u0026 documentation, 76 against 51\n\nWatch for: The desktop endpoint at http://127.0.0.1:4445/mcp takes no token, because the session key is forced empty outside Docker, so any local process can call it while the server runs\n\n\n## Score by category\n\n| Category | Weight | Odoo External API | rotki MCP server | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 44 | 50 | rotki MCP server +6 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 51 | 76 | rotki MCP server +25 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 69 | rotki MCP server +2 |\n| Security \u0026 auth | 14% (17.5 this run) | 61 | 20 | Odoo External API +41 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 22 | 10 | Odoo External API +12 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 73 | 35 | Odoo External API +38 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 93 | 48 | Odoo External API +45 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **55.9 · C** | **45.6 · E** | |\n\n## Facts side by side\n\n| Fact | Odoo External API | rotki MCP server |\n| --- | --- | --- |\n| Kind | HTTP API | Platform |\n| Vendor | Odoo SA | Rotki Solutions GmbH |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | HTTP | HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Paid | Paid |\n| x402 | no | no |\n| Licence | Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement | AGPL-3.0 |\n| Tools exposed | none | 8 |\n| Read-only variant documented | yes | yes |\n| llms.txt | no | yes |\n| Last release | 2026-10-08 | 2026-10-02 |\n| Terms last updated | no date given | no document linked |\n| Privacy policy last updated | 2026-09-24 |  |\n| Customer content may train models | not found in the text |  |\n| Terms restrict automated access | not found in the text |  |\n| Terms restrict benchmarking | not found in the text |  |\n| Terms or service can change without notice | not found in the text |  |\n| Arbitration or class-action waiver | not found in the text |  |\n| Popularity | 55k stars | none |\n\n## Verdicts\n\n**Odoo External API.** One endpoint pattern reaches every model, with field selection, filters and paging, and keys that expire within three months. On Odoo Online the external API needs the Custom plan, there is no OpenAPI file, and the acceptable use policy asks for about one call a second with no parallel calls.\n\n**rotki MCP server.** A read-only MCP server in the rotki desktop app, for Premium Basic at €25 a month and above. Privacy modes mask addresses and account names, but amounts, dates, assets and counterparties reach the connected assistant in every mode. The desktop endpoint takes no token, and the feature shipped in v1.44.0 on 21 August 2026.\n\n## Before you call either\n\n### Odoo External API\n\n1. POST to `/json/2/\u003cmodel\u003e/\u003cmethod\u003e` with `Authorization: bearer \u003ckey\u003e` and named arguments in a JSON body. Add `X-Odoo-Database` when one host serves several databases\n2. Pass `fields` and `limit` on `search_read`. The default limit is every matching record\n3. Create invoices and bills on `account.move` with `move_type` set to `out_invoice` or `in_invoice`, then call `action_post`. A new move is a draft\n4. Keep to about one call a second with no parallel calls on Odoo Online, and batch records into one `create` call\n5. Ask the owner for a key on a dedicated bot user with the minimum access rights, and rotate it before its expiry date\n\n### rotki MCP server\n\n1. Ask the person to start the server under Settings \u003e MCP in the desktop app, since it stays down until started, then connect to http://127.0.0.1:4445/mcp\n2. Call info first. It works without Premium and reports whether an unlocked backend is connected\n3. Call get_event_taxonomy before any aggregate over event_type, and sum on direction or event_group, since informational rows double count MEV and block rewards\n4. Call refresh_analytics_data before query_sql, and check source.completeness and unpriced_rows before reporting any total\n5. Check the privacy mode before answering from the data. Strict keeps amounts and dates, and raw sends addresses, hashes and notes verbatim\n\n## Questions\n\n### Which is better for AI agents, Odoo External API or rotki MCP server?\n\nOdoo External API scores 55.9 (C) on agent readiness against rotki MCP server's 45.6 (E), and leads in 4 of 7 scored categories. rotki MCP server leads on reliability and schema \u0026 documentation.\n\n### Can an agent call Odoo External API and rotki MCP server without installing anything?\n\nNo hosted endpoint is listed for Odoo External API. No hosted endpoint is listed for rotki MCP server.\n\n### Are Odoo External API and rotki MCP server open source?\n\nYes. Odoo External API is open source (Community edition LGPL-3.0. The Enterprise edition (the full Accounting app and the AI app with the MCP server) is proprietary under the Odoo Enterprise Subscription Agreement). rotki MCP server is open source (AGPL-3.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp.json, and with the fewest tokens: https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"odoo\", \"b\": \"rotki-mcp\"}`. From a terminal: `anchor compare odoo rotki-mcp`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/odoo.json and https://www.anchorterminal.com/api/v1/tools/rotki-mcp.json\n\n## Other comparisons with Odoo External API or rotki MCP server\n\n- [Apideck Accounting API + MCP vs Odoo External API](https://www.anchorterminal.com/compare/apideck-accounting-vs-odoo.md)\n- [Apideck Accounting API + MCP vs rotki MCP server](https://www.anchorterminal.com/compare/apideck-accounting-vs-rotki-mcp.md)\n- [Codat vs Odoo External API](https://www.anchorterminal.com/compare/codat-vs-odoo.md)\n- [Codat vs rotki MCP server](https://www.anchorterminal.com/compare/codat-vs-rotki-mcp.md)\n- [FreeAgent API vs Odoo External API](https://www.anchorterminal.com/compare/freeagent-vs-odoo.md)\n- [FreeAgent API vs rotki MCP server](https://www.anchorterminal.com/compare/freeagent-vs-rotki-mcp.md)\n- [FreshBooks API vs Odoo External API](https://www.anchorterminal.com/compare/freshbooks-vs-odoo.md)\n- [FreshBooks API vs rotki MCP server](https://www.anchorterminal.com/compare/freshbooks-vs-rotki-mcp.md)\n- [Merge Accounting API vs Odoo External API](https://www.anchorterminal.com/compare/merge-accounting-vs-odoo.md)\n- [Merge Accounting API vs rotki MCP server](https://www.anchorterminal.com/compare/merge-accounting-vs-rotki-mcp.md)\n- [Odoo External API vs Pennylane](https://www.anchorterminal.com/compare/odoo-vs-pennylane.md)\n- [Odoo External API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.md)\n- [Odoo External API vs Rutter Accounting API](https://www.anchorterminal.com/compare/odoo-vs-rutter.md)\n- [Odoo External API vs Xero API + MCP](https://www.anchorterminal.com/compare/odoo-vs-xero.md)\n- [Odoo External API vs Zoho Books](https://www.anchorterminal.com/compare/odoo-vs-zoho-books.md)\n- [Pennylane vs rotki MCP server](https://www.anchorterminal.com/compare/pennylane-vs-rotki-mcp.md)\n- [QuickBooks Online API + MCP vs rotki MCP server](https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp.md)\n- [rotki MCP server vs Rutter Accounting API](https://www.anchorterminal.com/compare/rotki-mcp-vs-rutter.md)\n- [rotki MCP server vs Xero API + MCP](https://www.anchorterminal.com/compare/rotki-mcp-vs-xero.md)\n- [rotki MCP server vs Zoho Books](https://www.anchorterminal.com/compare/rotki-mcp-vs-zoho-books.md)\n- [Invoice Ninja API vs Odoo External API](https://www.anchorterminal.com/compare/invoice-ninja-vs-odoo.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Odoo External API vs rotki MCP server",
        "url": ""
      }
    ],
    "description": "Odoo External scores 55.9 (C) to rotki's 45.6 (E) for accounting ledgers. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Odoo External API C 55.9",
      "rotki MCP server E 45.6",
      "scores"
    ],
    "h1": "Odoo External API vs rotki MCP server",
    "image": "https://www.anchorterminal.com/assets/og/compare-odoo-vs-rotki-mcp.png",
    "path": "/compare/odoo-vs-rotki-mcp",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Odoo External vs rotki for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-10",
    "url": "https://www.anchorterminal.com/compare/odoo-vs-rotki-mcp"
  },
  "tokens": {
    "markdown": 2550,
    "slim": 680
  },
  "version": 1
}
