# Hosted MCP tool catalog (ERPipe)

Last updated: 2026-08-18
Canonical: https://erpipe.com/tools
Source: hosted MCP `tools/list` / worker `ALL_TOOLS` as of 2026-08-18
MCP endpoint: https://mcp.erpipe.com/mcp

## Answer first

The ERPipe hosted workspace exposes **43** named MCP tools. That count is the live `tools/list` surface (`ALL_TOOLS`), not a marketing round number. Product site: [https://erpipe.com/](https://erpipe.com/). Agents connect at `https://mcp.erpipe.com/mcp`.

The open-source self-host example ships **28** tools (27 core phase tools + `ping`). The extra **15** tools exist only on the hosted control plane: instance lifecycle, multi-instance fan-out, HITL poll, per-user memory, named verbs, and the Odoo event pull queue.

Writes stay off until an owner enables them. Listing a write tool here does not mean ChatGPT can mutate Odoo after Connect.

## How to read this list

| Surface | Count | Where it runs |
| --- | --- | --- |
| Core phase tools | 27 | OSS `@erpipe/core` and hosted |
| `ping` | 1 | OSS self-host example and hosted |
| Hosted-only extras | 15 | Hosted ERPipe only |
| **Hosted total** | **43** | `https://mcp.erpipe.com/mcp` after OAuth |

Odoo-bound tools take an explicit instance key. `list_instances` is how an agent discovers keys. Lifecycle tools need OAuth scope `erpipe:write`. Field policy, model allowlists, and write mode stay on the dashboard — they are not extra MCP tools.

This page is the public compatibility data for “what can the hosted gateway actually call?” Dated 2026-08-18. If the runtime list changes, this page and the count on the site must change together.

## Hosted vs a module on the Odoo database

| Kind | Installs where | Who operates OAuth | Typical list |
| --- | --- | --- | --- |
| ERPipe hosted catalog | Cloudflare control plane | ERPipe workspace OAuth | 43 tools below |
| OSS self-host example | Your Worker | You | 28 tools (27 + `ping`) |
| Odoo App Store MCP module | Inside the Odoo DB | You, per client | Vendor-defined; not this list |
| Python stdio server (for example ivnvxd) | Your process | You | That repo’s tools |

Do not treat an App Store module’s tool names as ERPipe’s. Cite this page when you need the hosted names.

## Health

| Tool | Surface | What it does |
| --- | --- | --- |
| `ping` | core | Lightweight liveness and agent identity. |

## Agent memory (hosted)

| Tool | Surface | What it does |
| --- | --- | --- |
| `remember_episode` | hosted-only | After a verified reusable fix, save a short lesson with source event ids. Never raw Odoo, credentials, trivia, or one-off lookups. |
| `recall_memory` | hosted-only | Look up similar past cases when the problem looks repeatable. Untrusted; verify live records. |
| `forget_memory` | hosted-only | Drop one saved memory after the owner asks, or confirms it is wrong. |

## Instance lifecycle (hosted)

Require `erpipe:write`. Governance toggles (`writes_enabled`, field policy, named verbs) stay dashboard-only.

| Tool | Surface | What it does |
| --- | --- | --- |
| `create_instance` | hosted-only | Create an Odoo instance after HTTPS preflight and an auth probe. |
| `update_instance` | hosted-only | Change label or pause/resume (`enabled`). |
| `rotate_instance_credentials` | hosted-only | Rotate stored Odoo credentials. |
| `delete_instance` | hosted-only | Delete the instance and encrypted secrets. |

## Multi-instance (hosted)

Read-only fleet tools. There are **no** cross-instance write tools.

| Tool | Surface | What it does |
| --- | --- | --- |
| `list_instances` | hosted-only | List workspace Odoo instances and status. |
| `search_across_instances` | hosted-only | Fan-out search (read-only). Same empty-filter reject and per-instance cap as `search_records`. |
| `aggregate_across_instances` | hosted-only | Fan-out aggregates with per-instance attribution. |
| `accounting_health_across_instances` | hosted-only | Receivables-style health across instances. |

## Phase 1 — read / health (core)

| Tool | Surface | What it does |
| --- | --- | --- |
| `search_records` | core | Query or domain search. Omit `fields`. Default limit 10, max 50. Empty query+domain is rejected. |
| `model_facts` | core | Model intent snapshot before inventing fields. |
| `read_record` | core | Read records by id. |
| `build_domain` | core | Build an Odoo domain from structured input. |
| `list_models` | core | List models the connected Odoo user can see. |
| `get_model_fields` | core | Field metadata for one model. |
| `health_check` | core | Connection and surface sanity check. |

## Phase 2 — diagnose / smart read (core)

| Tool | Surface | What it does |
| --- | --- | --- |
| `aggregate_records` | core | Aggregations over a domain. |
| `search_employee` | core | HR employee search helpers. |
| `search_holidays` | core | Leave / holiday search helpers. |
| `get_odoo_profile` | core | Instance profile snapshot (includes installed modules by default). |
| `get_current_context` | core | Timezone, active company, and allowed companies only. |
| `schema_catalog` | core | Schema browsing helpers. |
| `diagnose_odoo_call` | core | Diagnose a failed model call. |
| `diagnose_access` | core | Access / ACL diagnosis. |
| `inspect_model_relationships` | core | Relational graph for a model. |
| `read_attachment` | core | Read an `ir.attachment` payload (bounded). |

## Phase 3 — gated writes (core)

Prefer preview → validate → execute. On hosted product, connection writes default OFF.

| Tool | Surface | What it does |
| --- | --- | --- |
| `preview_write` | core | Preview create/write/unlink and mint an approval token. Does not change Odoo. |
| `validate_write` | core | Validate values against field policy and allowlists. |
| `execute_approved_write` | core | Execute only with a valid approval token. May return pending while HITL waits. |
| `chatter_post` | core | Post a chatter message (separate gate). |
| `execute_method` | core | Non-CRUD method only. Not search/read and not create/write/unlink. |

When `execute_approved_write` returns a pending approval, that is a short wait, not a chat-ending failure. Poll `get_write_approval_status` every 5–10 seconds for about 30–45 seconds, then leave it in Approvals.

## Named verbs (hosted)

| Tool | Surface | What it does |
| --- | --- | --- |
| `execute_named_verb` | hosted-only | Run a dashboard-named `execute_method` alias. Reuses the method allowlist. Not HITL. Server actions are forbidden. |

## HITL approval (hosted)

| Tool | Surface | What it does |
| --- | --- | --- |
| `get_write_approval_status` | hosted-only | Poll a write approval by `approval_request_id` while waiting for owner Approve. |

## Phase 4 — reports (core)

| Tool | Surface | What it does |
| --- | --- | --- |
| `generate_json2_payload` | core | Build JSON-2 style payloads. |
| `upgrade_risk_report` | core | Upgrade risk analysis report. |
| `fit_gap_report` | core | Fit/gap workshop report. |
| `business_pack_report` | core | Business pack summary report. |
| `render_report` | core | Render a report payload (for example a bounded PDF). |

## Odoo webhook queue (hosted)

Ingress is `POST /hooks/{slug}` with the connection webhook secret. Events do not auto-wake an agent.

| Tool | Surface | What it does |
| --- | --- | --- |
| `list_odoo_events` | hosted-only | List inbound signed webhook events for a connection. |
| `ack_odoo_event` | hosted-only | Acknowledge a handled inbound event. |

## Also on the hosted MCP server (not extra tools)

- **7** guided prompts (`CLOUD_V1_PROMPTS`)
- **5** MCP resource templates (`CLOUD_V1_RESOURCES`)

Those are not counted in the 43. The 43 number is tools only.

## FAQ

- **Is 43 a guess?** No. It is `ALL_TOOLS.length` on the hosted worker as of 2026-08-18, the same list `tools/list` returns after OAuth.
- **Does OSS self-host include all 43?** No. The self-host example is 28 tools (27 phase + `ping`). The other 15 are hosted-only.
- **If a write tool is listed, can ChatGPT post an invoice?** Not until an owner enables writes on that connection. Create/write/unlink can still wait in the approval inbox.
- **Is this the Odoo App Store MCP module?** No. This catalog is the hosted gateway outside Odoo. App Store modules install on the database and publish their own tool lists.
- **Where do agents connect?** `https://mcp.erpipe.com/mcp`. The product explanation lives at [https://erpipe.com/](https://erpipe.com/).
- **How do I attach two databases?** Add each instance in the workspace. Tools take an explicit instance key from `list_instances`.

## Related

- HTML: https://erpipe.com/tools
- What is an Odoo MCP server: https://erpipe.com/guides/what-is-odoo-mcp
- Connect ChatGPT: https://erpipe.com/guides/connect-chatgpt-to-odoo
- Human approval: https://erpipe.com/guides/human-approval-odoo-ai-writes
- Compatibility: https://erpipe.com/compatibility
- OSS mirror: https://github.com/erpipe-org/erpipe/blob/main/docs/tools.md
