Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.erpipe-org/mcp-odoo

PYPI · ODOO-MCP

Odoo MCP: gated writes, multi-instance. Free hosted: ERPipe (mcp.erpipe.com)

Available components

−20 this week 64 Trust /100

Last scanned (19 hours ago)

Scores higher than 61% of PyPI servers

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 99 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability77
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 2615 tokens (~62/item across 42 items; 41 tools + 1 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management67
  • Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage80
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 32% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
What we tested

Checks we ran (15)

  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Checks we could not complete (1)

These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.

  • Malware scan in Supply Chain SecurityMalware scan not yet available for this package.

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 4 Nov 26 −5
    • Stability: pass → 0.63 functional
  • 29 Oct 26 +1
    • Stability: 0.97 → pass security
  • 28 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 24 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 23 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 22 Oct 26 +1
    • Stability: 0.97 → pass security
  • 21 Oct 26 −1
    • Stability: pass → 0.97 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/odoo-mcp@1.3.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi
Reason No attestation published

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend Known build tool setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 32 packages
Packages resolved 32
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 41 exposed · ~2,582 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
accounting_health_across_instances ~95

AR/AP aging fanned out across instances — the partner-network sweep

NameTypeReqDescription
as_of––Optional ISO date used as the aging reference date.
directionstring–Aging direction: 'receivable' or 'payable'.
instances––Optional instance selector; defaults to all eligible instances.
top_partnersinteger–Maximum top partners to include in each aging report; capped at 100.
NameTypeReqDescription
as_of–––
combined_buckets–––
combined_total_outstanding–––
direction–––
elapsed_ms–––
error––Sanitized error message when success is false.
errors–––
instance_count–––
instances_queried–––
results–––
skipped_opt_out–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
unknown_instances–––

No examples provided.

accounting_health_summary ~26

Open receivable/payable item counts and draft invoice backlog

NameTypeReqDescription
instance–––
NameTypeReqDescription
draft_invoices–––
error––Sanitized error message when success is false.
open_payable_items–––
open_receivable_items–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

aggregate_across_instances ~53

Read-only aggregate fanned out across instances with combined grand totals

NameTypeReqDescription
domain–––
group_byarrayyes–
instances–––
measures–––
modelstringyes–
NameTypeReqDescription
combined_count–––
combined_measures–––
elapsed_ms–––
error––Sanitized error message when success is false.
errors–––
instance_count–––
instances_queried–––
model–––
results–––
skipped_opt_out–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
unknown_instances–––

No examples provided.

aggregate_records ~94

Aggregate Odoo records server-side using Postgres groupby/sum/count. Uses formatted_read_group on Odoo 19+ and read_group on earlier versions.

NameTypeReqDescription
domain–––
group_byarrayyes–
instance–––
lazyboolean––
limit–––
measures–––
modelstringyes–
offsetinteger––
order–––
NameTypeReqDescription
error––Sanitized error message when success is false.
fallback_reason–––
group_by–––
major_version–––
measures–––
method––formatted_read_group (19+) or read_group.
model–––
row_count–––
rows––Aggregated group rows.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

analyze_upgrade_log ~56

Classify Odoo install/update log errors into a migration worklist (no_action / needs_review / needs_script) with fix suggestions

NameTypeReqDescription
log_textstringyes–
source_version–––
target_version–––
NameTypeReqDescription
resultobjectyes–

No examples provided.

build_domain ~39

Build a validated Odoo domain from structured conditions

NameTypeReqDescription
conditionsarrayyes–
fields_metadata–––
logical_operatorstring––
NameTypeReqDescription
conditions––Normalized field/operator/value conditions.
domain––Validated Odoo domain expression.
error––Sanitized error message when success is false.
issues––Validation errors and warnings.
metadata_used–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

business_pack_report ~82

Report expected modules, models, and safe discovery calls for a business pack

NameTypeReqDescription
instance––Optional configured Odoo instance name; uses the default if omitted.
packstringyesBusiness pack to report, such as sales, crm, inventory, accounting, or hr.
use_live_metadataboolean–Whether to inspect live models and installed modules.
NameTypeReqDescription
resultobjectyes–

No examples provided.

cancel_async_task ~25

Cancel a pending or running background task

NameTypeReqDescription
task_idstringyes–
NameTypeReqDescription
created_at–––
error––Sanitized error message when success is false.
finished_at–––
name–––
note–––
result–––
started_at–––
status–––
successbooleanyesFalse when the call failed; see error.
task_id–––
tool––Reporting tool name.

No examples provided.

chatter_post ~109

Post a chatter message on a mail.thread record. Default mode requires an approval token returned from a preview call; set MCP_CHATTER_DIRECT=1 to bypass and post immediately.

NameTypeReqDescription
approval–––
attachment_ids–––
bodystringyes–
confirmboolean––
instance–––
message_typestring––
modelstringyes–
partner_ids–––
record_idintegeryes–
subtype_xmlid–––
NameTypeReqDescription
resultobjectyes–

No examples provided.

data_quality_report ~65

Run read-only data-quality checks on one Odoo model: duplicates, missing required values, orphaned references, format anomalies

NameTypeReqDescription
checks–––
instance–––
key_fields–––
modelstringyes–
sample_limitinteger––
NameTypeReqDescription
checks_run–––
error––Sanitized error message when success is false.
instance–––
model–––
results–––
sample_limit–––
skipped_restricted_fields–––
successbooleanyesFalse when the call failed; see error.
summary–––
tool––Reporting tool name.

No examples provided.

diagnose_access ~153

Diagnose ACL and record-rule visibility for an Odoo model

NameTypeReqDescription
domain––Optional Odoo domain used for the visibility check.
expected_count––Optional expected visible record count for comparison.
include_rulesboolean–Whether to include matching record-rule metadata.
instance––Optional configured Odoo instance name; uses the default if omitted.
limitinteger–Maximum metadata rows to inspect; capped at 500.
modelstringyesTechnical Odoo model name to inspect.
observed_error––Optional error text or structured error to classify.
operationstring–Access operation to diagnose, such as read or write.
record_ids––Optional record IDs to check directly.
NameTypeReqDescription
resultobjectyes–

No examples provided.

diagnose_odoo_call ~168

Diagnose an Odoo model call without executing it

NameTypeReqDescription
args––Optional positional call arguments.
include_debugboolean–Whether to include additional diagnostic details.
kwargs––Optional keyword call arguments.
metadata––Optional model or method metadata used by the diagnosis.
methodstringyesOdoo model method name to diagnose.
modelstringyesTechnical Odoo model name to diagnose.
observed_error––Optional error text or structured error to classify.
target_version––Optional target Odoo version for compatibility checks.
transportstring–Transport to assess, such as 'auto', 'xmlrpc', or 'json2'.
use_live_metadataboolean–Whether to request live metadata; this preview tool does not fetch it.
NameTypeReqDescription
resultobjectyes–

No examples provided.

execute_approved_write ~34

Execute a previously previewed and confirmed standard write

NameTypeReqDescription
approvalobjectyes–
confirmboolean––
NameTypeReqDescription
resultobjectyes–

No examples provided.

execute_method ~94

Execute a custom method on an Odoo model

NameTypeReqDescription
args––Optional positional method arguments.
instance––Optional configured Odoo instance name; uses the default if omitted.
kwargs––Optional keyword method arguments.
methodstringyesOdoo model method to call; direct create, write, and unlink are blocked.
modelstringyesTechnical Odoo model name, for example 'res.partner'.
NameTypeReqDescription
resultobjectyes–

No examples provided.

fit_gap_report ~61

Classify Odoo requirements into fit/gap implementation buckets

NameTypeReqDescription
available_fields–––
available_models–––
business_context–––
installed_modules–––
requirementsarrayyes–
use_live_metadataboolean––
NameTypeReqDescription
resultobjectyes–

No examples provided.

generate_json2_payload ~65

Build a JSON-2 request preview without network access

NameTypeReqDescription
args–––
base_url–––
database–––
include_database_headerboolean––
kwargs–––
methodstringyes–
modelstringyes–
NameTypeReqDescription
resultobjectyes–

No examples provided.

get_async_task ~26

Poll a background task's status and result

NameTypeReqDescription
task_idstringyes–
NameTypeReqDescription
created_at–––
error––Sanitized error message when success is false.
finished_at–––
name–––
note–––
result–––
started_at–––
status–––
successbooleanyesFalse when the call failed; see error.
task_id–––
tool––Reporting tool name.

No examples provided.

get_model_fields ~50

Get field metadata for a specific Odoo model

NameTypeReqDescription
field_names–––
instance–––
max_fieldsinteger––
modelstringyes–
relevance–––
NameTypeReqDescription
count–––
error––Sanitized error message when success is false.
ranking––Relevance scores when relevance="top".
relevance_applied–––
restricted_fields––Fields marked restricted by the field ACL.
result––Mapping of field name to fields_get metadata.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

get_odoo_profile ~70

Read a bounded profile of the connected Odoo environment

NameTypeReqDescription
include_modulesboolean–Whether to include installed-module metadata.
instance––Optional configured Odoo instance name; uses the default if omitted.
module_limitinteger–Maximum installed modules to include; capped at 500.
NameTypeReqDescription
error––Sanitized error message when success is false.
metadata_used–––
profile––Server, user-context, transport, and module metadata.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

health_check ~19

Report this MCP server's non-secret runtime safety posture

Input schema present but exposes no named parameters.

NameTypeReqDescription
error––Sanitized error message when success is false.
plugins––Opt-in plugin load state and tool filtering.
rate_limits–––
runtime––Non-secret runtime security posture.
server––Server name, instructions, surface counts.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

index_knowledge ~60

Fetch a bounded slice of records and build a local BM25 knowledge index

NameTypeReqDescription
domain–––
fields–––
instance–––
limitinteger––
modelstringyes–
replaceboolean––
NameTypeReqDescription
documents_in_index–––
error––Sanitized error message when success is false.
fetched–––
indexed–––
indexed_fields––Explicit field list or 'smart selection'.
instance–––
max_documents–––
model–––
redacted_fields–––
skipped_over_budget–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

inspect_model_relationships ~63

Inspect model relationships and required field metadata

NameTypeReqDescription
fields_metadata–––
include_computedboolean––
include_readonlyboolean––
instance–––
modelstringyes–
use_live_metadataboolean––
NameTypeReqDescription
resultobjectyes–

No examples provided.

knowledge_stats ~17

Report local knowledge index sizes and document budget

Input schema present but exposes no named parameters.

NameTypeReqDescription
error––Sanitized error message when success is false.
indexes–––
max_documents–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
total_documents–––

No examples provided.

list_async_tasks ~16

List recent background tasks newest-first

Input schema present but exposes no named parameters.

NameTypeReqDescription
error––Sanitized error message when success is false.
successbooleanyesFalse when the call failed; see error.
tasks–––
tool––Reporting tool name.

No examples provided.

list_instances ~17

List configured Odoo instance names without credentials

Input schema present but exposes no named parameters.

NameTypeReqDescription
default––Name of the default instance.
error––Sanitized error message when success is false.
instance_count–––
instances––Instance entries (never credentials).
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

list_models ~34

List Odoo models with optional name filtering

NameTypeReqDescription
instance–––
limitinteger––
query–––
NameTypeReqDescription
count–––
error––Sanitized error message when success is false.
result–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

lookup_model_history ~41

Look up Odoo model rename/removal history by old or new model name (e.g. account.invoice -> account.move)

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
resultobjectyes–

No examples provided.

preview_write ~60

Preview create, write, or unlink without executing it

NameTypeReqDescription
context–––
instance–––
modelstringyes–
operationstringyes–
record_ids–––
values–––
values_list–––
NameTypeReqDescription
resultobjectyes–

No examples provided.

read_attachment ~44

Read an ir.attachment's metadata and size-capped base64 content

NameTypeReqDescription
attachment_idintegeryes–
include_databoolean––
instance–––
NameTypeReqDescription
attachment––ir.attachment metadata row.
data_base64––Base64 content when under the size cap.
data_included–––
error––Sanitized error message when success is false.
max_bytes–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
warnings–––

No examples provided.

read_record ~44

Read a single Odoo record by model and ID

NameTypeReqDescription
fields–––
instance–––
modelstringyes–
record_idintegeryes–
NameTypeReqDescription
error––Sanitized error message when success is false.
fields_used–––
redacted_fields–––
result––The record (field-ACL redacted).
smart_fields_applied–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

receivable_payable_aging ~107

Aged receivable/payable report bucketed by days overdue

NameTypeReqDescription
as_of––Optional ISO date used as the aging reference date.
directionstring–Aging direction: 'receivable' or 'payable'.
instance––Optional configured Odoo instance name; uses the default if omitted.
limitinteger–Maximum open-item lines to inspect.
top_partnersinteger–Maximum top partners to include; capped at 100.
NameTypeReqDescription
as_of–––
buckets–––
direction–––
error––Sanitized error message when success is false.
line_count–––
partner_count–––
partners–––
skipped_lines–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
total_outstanding–––
truncated–––

No examples provided.

scan_addons_source ~44

Scan local Odoo addon source without importing addon code

NameTypeReqDescription
addons_paths–––
max_file_bytesinteger––
max_filesinteger––
NameTypeReqDescription
resultobjectyes–

No examples provided.

schema_catalog ~110

Build and cache a bounded Odoo model schema catalog

NameTypeReqDescription
include_fieldsboolean–Whether to include field metadata for each model.
instance––Optional configured Odoo instance name; uses the default if omitted.
limitinteger–Maximum catalog models to return; capped at 500.
models––Optional technical model names to include in the catalog.
query––Optional text used to filter catalog models.
refreshboolean–Whether to bypass and refresh the cached catalog.
NameTypeReqDescription
count–––
error––Sanitized error message when success is false.
metadata_used–––
result––Model entries; fields included when requested.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

search_across_instances ~57

Read-only search fanned out across configured Odoo instances, merged and attributed

NameTypeReqDescription
domain–––
fields–––
instances–––
limit_per_instanceinteger––
modelstringyes–
NameTypeReqDescription
elapsed_ms–––
error––Sanitized error message when success is false.
errors–––
instance_count–––
instances_queried–––
merged–––
merged_count–––
model–––
results–––
skipped_opt_out–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.
unknown_instances–––

No examples provided.

search_employee ~33

Search for employees by name

NameTypeReqDescription
instance–––
limitinteger––
namestringyes–
NameTypeReqDescription
error––Error message, if any
result––List of employee search results
successbooleanyesIndicates if the search was successful

No examples provided.

search_holidays ~77

Search for holidays within a date range

NameTypeReqDescription
employee_id––Optional employee ID used to filter holidays.
end_datestringyesEnd date in YYYY-MM-DD format.
instance––Optional configured Odoo instance name; uses the default if omitted.
start_datestringyesStart date in YYYY-MM-DD format.
NameTypeReqDescription
error––Error message, if any
result––List of holidays found
successbooleanyesIndicates if the search was successful

No examples provided.

search_knowledge ~47

Relevance-ranked local BM25 search over previously indexed records

NameTypeReqDescription
instance–––
limitinteger––
modelstringyes–
querystringyes–
NameTypeReqDescription
error––Sanitized error message when success is false.
instance–––
model–––
query–––
results––BM25-ranked snippets from the local index.
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

search_records ~78

Search Odoo records with read-only search_read; optional free-text `query` matches across name/ref/email-like fields

NameTypeReqDescription
domain–––
fields–––
instance–––
limitinteger––
modelstringyes–
offsetinteger––
order–––
query–––
NameTypeReqDescription
count–––
error––Sanitized error message when success is false.
fields_used–––
query_fields_used––Fields matched by the free-text query shortcut.
redacted_fields–––
result––Matched records (field-ACL redacted).
smart_fields_applied–––
successbooleanyesFalse when the call failed; see error.
tool––Reporting tool name.

No examples provided.

submit_async_task ~38

Run an allowlisted long-running read operation in the background

NameTypeReqDescription
instance–––
operationstringyes–
params–––
NameTypeReqDescription
created_at–––
error––Sanitized error message when success is false.
finished_at–––
name–––
note–––
result–––
started_at–––
status–––
successbooleanyesFalse when the call failed; see error.
task_id–––
tool––Reporting tool name.

No examples provided.

upgrade_risk_report ~136

Report Odoo upgrade and JSON-2 migration risks

NameTypeReqDescription
include_debugboolean–Whether to include additional diagnostic details.
methods––Optional model method metadata to assess for compatibility.
modules––Optional module metadata to assess for upgrade risks.
observed_errors––Optional observed upgrade or migration errors to classify.
source_findings––Optional source-code findings to include in the risk report.
source_version––Optional current Odoo version.
target_version––Optional target Odoo version.
use_live_metadataboolean–Whether to request live metadata; this preview tool does not fetch it.
NameTypeReqDescription
resultobjectyes–

No examples provided.

validate_write ~75

Validate a standard write payload against optional fields_get metadata

NameTypeReqDescription
context–––
fields_metadata–––
instance–––
modelstringyes–
operationstringyes–
record_ids–––
use_live_metadataboolean––
values–––
values_list–––
NameTypeReqDescription
resultobjectyes–

No examples provided.

Install

How do I install the io.github.erpipe-org/mcp-odoo server?

io.github.erpipe-org/mcp-odoo runs locally as a PyPI package, launched with uvx odoo-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · odoo-mcp

# add to Claude Code
claude mcp add erpipe-org-mcp-odoo -- uvx odoo-mcp
Common questions

What is the io.github.erpipe-org/mcp-odoo server?

io.github.erpipe-org/mcp-odoo is listed in the public MCP registry as io.github.erpipe-org/mcp-odoo. Odoo MCP: gated writes, multi-instance. Free hosted: ERPipe (mcp.erpipe.com). This page covers its PyPI package (odoo-mcp).

Is the io.github.erpipe-org/mcp-odoo server safe to use?

io.github.erpipe-org/mcp-odoo scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.erpipe-org/mcp-odoo server expose?

io.github.erpipe-org/mcp-odoo exposes 41 tools: data_quality_report, diagnose_odoo_call, generate_json2_payload, inspect_model_relationships, diagnose_access, and 36 more. Their descriptions and schemas cost roughly 2,582 tokens of context every time the server is loaded.

Is the io.github.erpipe-org/mcp-odoo server still maintained?

io.github.erpipe-org/mcp-odoo is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.erpipe-org/mcp-odoo server under?

io.github.erpipe-org/mcp-odoo declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the io.github.erpipe-org/mcp-odoo server?

VerifyMCP ran 15 checks on io.github.erpipe-org/mcp-odoo, covering Known CVEs, Install scripts, Dependency health, Source repository and 11 more. One item could not be completed, a gap on our side rather than a finding about io.github.erpipe-org/mcp-odoo: Malware scan. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.