---
title: "ERPNext (Frappe) MCP server for AI agents - actionlake"
description: "Give Claude 720 ERPNext (Frappe) actions through one MCP server: client, sales order. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/erpnext-frappe
updated: 2026-10-23
---

Connectors · Accounting & finance

# ERPNext (Frappe) MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to ERPNext (Frappe) and the rest of your systems. It gives your agent 720 ERPNext (Frappe) actions (320 reads, 263 writes and 137 that wait for a confirmation) and holds the ERPNext (Frappe) credential itself, so the agent never does. It paces ERPNext (Frappe)'s limits and records every call.

[Connect ERPNext (Frappe) free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "erpnext.sales_invoice.list",
  intent: "check which ERPNext (Frappe) account is connected"
}
# List Sales Invoice records · read · 1 upstream call
```

- 720 actions in one signed file
- 320 read look, never change
- 263 write create and update
- 137 wait for a yes destructive, confirmed first

Set up

## Connect ERPNext (Frappe) in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect ERPNext (Frappe).
   API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `api_key` API Key of the ERPNext user actionlake acts as (User > Settings > API Access > Generate Keys)
   - `api_secret` API Secret shown once when the keys are generated
   - `host` Where your ERPNext (Frappe) lives: your host
   ```
   account { op: "connections.requirements", service: "erpnext" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "erpnext.sales_invoice.list" }
   # list sales invoice records · read · 1 upstream call
   check { action: "erpnext.sales_invoice.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

ERPNext (Frappe) at a glance

**Sign-in**

API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`api_key` `api_secret`

**Setup fields**

`host`

**Limits we pace to**

300 calls a minute, per connection

**API covered**

Frappe REST API v1 (/api/resource, /api/method) with v2 extras; ERPNext/Frappe version-15, at your ERPNext (Frappe) instance's API base URL, which you enter when connecting

**Built from**

ERPNext (Frappe)'s documentation, read 23 October 2026[docs.frappe.io](https://docs.frappe.io/framework/user/en/api/rest) [GitHub](https://github.com/frappe/erpnext/tree/version-15) [GitHub](https://github.com/frappe/frappe/tree/version-15)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

320 of 320 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

29, so ask can line ERPNext (Frappe) up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in ERPNext (Frappe).

720 actions in 116 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **320** read look, never change
- **263** write create and update
- **137** destructive wait for a confirmation

1. ### Client
   20
   10 read · 8 write · 2 destructive
   List documents (frappe.client.get_list) · Count documents · Attach a file to a document · Insert a document
2. ### Sales order
   17
   9 read · 6 write · 2 destructive
   List Sales Order records · Create a Sales Order · Get a Sales Order · Update a Sales Order
3. ### Delivery note
   13
   7 read · 4 write · 2 destructive
   Create a Delivery Note · List Delivery Note records · Get a Delivery Note · Draft an Installation Note from a Delivery Note
4. ### Material request
   13
   7 read · 4 write · 2 destructive
   Create a Material Request · List Material Request records · Get a Material Request · Draft a Pick List from a Material Request
5. ### Payment entry
   11
   6 read · 2 write · 3 destructive
   List Payment Entry records · Create a Payment Entry · Get a Payment Entry · Update a Payment Entry
6. ### Purchase order
   11
   4 read · 5 write · 2 destructive
   List Purchase Order records · Create a Purchase Order · Get a Purchase Order · Update a Purchase Order
7. ### Purchase receipt
   11
   5 read · 4 write · 2 destructive
   Create a Purchase Receipt · List Purchase Receipt records · Get a Purchase Receipt · Draft a Purchase Invoice from a Purchase Receipt
8. ### Sales invoice
   11
   6 read · 3 write · 2 destructive
   List Sales Invoice records · Create a Sales Invoice · Get a Sales Invoice · Update a Sales Invoice

**108 more areas · 613 actions**

- Document **10**
- Supplier quotation **10**
- Work order **10**
- Bom **9**
- Job card **9**
- Journal entry **9**
- Lead **9**
- Opportunity **9**
- Purchase invoice **9**
- Quotation **9**
- Request for quotation **9**
- Asset **8**
- Issue **8**
- Payment request **8**
- Pick list **8**
- POS invoice **8**
- Quality inspection **8**
- Stock entry **8**
- Stock reconciliation **8**
- Timesheet **8**
- User **8**
- Workflow **8**
- Asset movement **7**
- Bank transaction **7**
- Budget **7**
- Comment **7**
- Customer **7**
- Dunning **7**
- Production plan **7**
- Prospect **7**
- Shipment **7**
- Task **7**
- Address **6**
- Batch **6**
- Communication **6**
- Contact **6**
- Currency **6**
- Email template **6**
- Employee **6**
- Event **6**
- Item **6**
- Note **6**
- Project **6**
- Report **6**
- Warranty claim **6**
- Account **5**
- Accounting dimension **5**
- Activity type **5**
- Asset category **5**
- Bank **5**
- Bank account **5**
- Branch **5**
- Brand **5**
- Campaign **5**
- Company **5**
- Cost center **5**
- Currency exchange **5**
- Custom field **5**
- Customer group **5**
- Department **5**
- Designation **5**
- File **5**
- Fiscal year **5**
- Holiday list **5**
- Issue type **5**
- Item group **5**
- Item price **5**
- Item tax template **5**
- Location **5**
- Mode of payment **5**
- Operation **5**
- Payment terms template **5**
- Price list **5**
- Pricing rule **5**
- Print format **5**
- Product bundle **5**
- Purchase taxes and charges template **5**
- Role **5**
- Sales partner **5**
- Sales person **5**
- Sales taxes and charges template **5**
- Serial no **5**
- Subscription **5**
- Supplier **5**
- Supplier group **5**
- Tax category **5**
- Territory **5**
- Todo **5**
- Uom **5**
- Warehouse **5**
- Webhook **5**
- Workstation **5**
- Accounts **4**
- Doctype **4**
- Form **4**
- Tag **4**
- Assignment **3**
- Error log **3**
- Stock **3**
- Activity log **2**
- Bin **2**
- GL entry **2**
- Search **2**
- Stock ledger entry **2**
- Version **2**
- Auth **1**
- Method **1**
- System **1**

Top actions

## The ERPNext (Frappe) API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 145 of ERPNext (Frappe)'s 145 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `erpnext.sales_invoice.list` List Sales Invoice records | List Sales Invoice records with fields, filters and sort. | read | `finance.invoice.list` 101 connectors |
| `erpnext.payment_entry.list` List Payment Entry records | List Payment Entry records with fields, filters and sort. | read | `finance.payment.list` 75 connectors |
| `erpnext.quotation.list` List Quotation records | List Quotation records with fields, filters and sort. | read | `finance.quote.list` 52 connectors |
| `erpnext.purchase_order.list` List Purchase Order records | List Purchase Order records with fields, filters and sort. | read | `finance.purchase_order.list` 45 connectors |
| `erpnext.contact.list` List Contact records | List Contact records with fields, filters and sort. | read | `crm.contact.list` 177 connectors |
| `erpnext.customer.list` List Customer records | List Customer records with fields, filters and sort. | read | `crm.company.list` 162 connectors |
| `erpnext.account.list` List Account records | List Account records with fields, filters and sort. | read | `finance.ledger_account.list` 36 connectors |
| `erpnext.bank_account.list` List Bank Account records | List Bank Account records with fields, filters and sort. | read | `finance.bank_account.list` 35 connectors |
| `erpnext.sales_invoice.create` Create a Sales Invoice | Create a Sales Invoice document. | write | `finance.invoice.create` 74 connectors |
| `erpnext.payment_entry.create` Create a Payment Entry | Create a Payment Entry document. | write | `finance.payment.create` 67 connectors |
| `erpnext.quotation.create` Create a Quotation | Create a Quotation document. | write | `finance.quote.create` 52 connectors |
| `erpnext.sales_invoice.delete` Delete a Sales Invoice | Delete a Sales Invoice by name. | destructive | `finance.invoice.delete` 56 connectors |

Try it

## Prompts to paste into Claude.

Each one names the ERPNext (Frappe) actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which ERPNext (Frappe) invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `erpnext.sales_invoice.list`
2. Write write
   Create a Sales Invoice in ERPNext (Frappe). Show me exactly what you will send before you save it.
   calls `erpnext.sales_invoice.create`
3. Across systems read
   For each customer, how many invoices are in ERPNext (Frappe) and how many tickets in ConnectWise PSA?
   calls `erpnext.sales_invoice.list` `connectwise_manage.tickets.list`

Across your systems

## ERPNext (Frappe), joined to the rest of your business.

One `ask` fetches from ERPNext (Frappe) and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- For each customer, how many invoices are in ERPNext (Frappe) and how many tickets in ConnectWise PSA?
  `erpnext.sales_invoice.list` + `connectwise_manage.tickets.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- For each customer, how many invoices are in ERPNext (Frappe) and how many tickets in HubSpot CRM?
  `erpnext.sales_invoice.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `identity.user` **517** `crm.company` **227** `crm.contact` **192** `work.project` **116** `commerce.product` **109** `identity.role` **107** `work.task` **105** `finance.invoice` **91**

ask

```
ask {
  intent: "for each customer, how many invoices are in ERPNext (Frappe) and how many tickets in ConnectWise PSA",
  steps: [
    { action: "erpnext.sales_invoice.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "inv",
        right: "tix",
        on: "crm.company",
        group_by: "inv.company_name",
        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for ERPNext (Frappe)

## Destructive actions wait for a yes.

137 ERPNext (Frappe) actions are destructive. The first 10:

- Delete a Sales Invoice `erpnext.sales_invoice.delete`
- Delete a Payment Entry `erpnext.payment_entry.delete`
- Delete a Contact `erpnext.contact.delete`
- Delete a Quotation `erpnext.quotation.delete`
- Delete a Customer `erpnext.customer.delete`
- Delete a Purchase Order `erpnext.purchase_order.delete`
- Delete an Account `erpnext.account.delete`
- Delete a Purchase Invoice `erpnext.purchase_invoice.delete`
- Delete a Journal Entry `erpnext.journal_entry.delete`
- Delete a User `erpnext.user.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do erpnext.sales_invoice.delete confirm_policy: **human**

Delete a Sales Invoice?

**intent:** the user asked me to delete a Sales Invoice

run suspended · waiting for a named person · key _erpnext-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "erpnext-agent",
  allowed_actions: ["erpnext.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "erpnext.sales_invoice.delete", approver: "lead@example.com" },
    { match: "erpnext.payment_entry.delete", approver: "lead@example.com" },
    { match: "erpnext.contact.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to ERPNext (Frappe) only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What ERPNext (Frappe) costs on actionlake.

Every ERPNext (Frappe) action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call ERPNext (Frappe) refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 720 ERPNext (Frappe) actions
- 720 actions page each page of a long list is one call
- 320 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every ERPNext (Frappe) action.

720 actions by area: the id your agent calls, what it does, and its effect.

**Client 20**

- `erpnext.client.attach_file` Attach a file to a document write
- `erpnext.client.get_count` Count documents read
- `erpnext.client.get_list` List documents (frappe.client.get_list) read
- `erpnext.client.insert` Insert a document write
- `erpnext.client.bulk_update` Bulk update documents write
- `erpnext.client.cancel` Cancel a document (frappe.client.cancel) destructive
- and 14 more in this area

**Sales order 17**

- `erpnext.sales_order.create` Create a Sales Order write
- `erpnext.sales_order.get` Get a Sales Order read
- `erpnext.sales_order.list` List Sales Order records read
- `erpnext.sales_order.update` Update a Sales Order write
- `erpnext.sales_order.cancel` Cancel a Sales Order destructive
- `erpnext.sales_order.close_many` Close or re-open sales orders write
- and 11 more in this area

**Delivery note 13**

- `erpnext.delivery_note.create` Create a Delivery Note write
- `erpnext.delivery_note.get` Get a Delivery Note read
- `erpnext.delivery_note.list` List Delivery Note records read
- `erpnext.delivery_note.map_installation_note` Draft an Installation Note from a Delivery Note read
- `erpnext.delivery_note.cancel` Cancel a Delivery Note destructive
- `erpnext.delivery_note.delete` Delete a Delivery Note destructive
- and 7 more in this area

**Material request 13**

- `erpnext.material_request.create` Create a Material Request write
- `erpnext.material_request.get` Get a Material Request read
- `erpnext.material_request.list` List Material Request records read
- `erpnext.material_request.map_pick_list` Draft a Pick List from a Material Request read
- `erpnext.material_request.cancel` Cancel a Material Request destructive
- `erpnext.material_request.delete` Delete a Material Request destructive
- and 7 more in this area

**Payment entry 11**

- `erpnext.payment_entry.create` Create a Payment Entry write
- `erpnext.payment_entry.get` Get a Payment Entry read
- `erpnext.payment_entry.list` List Payment Entry records read
- `erpnext.payment_entry.update` Update a Payment Entry write
- `erpnext.payment_entry.cancel` Cancel a Payment Entry destructive
- `erpnext.payment_entry.delete` Delete a Payment Entry destructive
- and 5 more in this area

**Purchase order 11**

- `erpnext.purchase_order.create` Create a Purchase Order write
- `erpnext.purchase_order.get` Get a Purchase Order read
- `erpnext.purchase_order.list` List Purchase Order records read
- `erpnext.purchase_order.update` Update a Purchase Order write
- `erpnext.purchase_order.cancel` Cancel a Purchase Order destructive
- `erpnext.purchase_order.close_many` Close or re-open purchase orders write
- and 5 more in this area

**Purchase receipt 11**

- `erpnext.purchase_receipt.create` Create a Purchase Receipt write
- `erpnext.purchase_receipt.get` Get a Purchase Receipt read
- `erpnext.purchase_receipt.list` List Purchase Receipt records read
- `erpnext.purchase_receipt.map_purchase_invoice` Draft a Purchase Invoice from a Purchase Receipt read
- `erpnext.purchase_receipt.cancel` Cancel a Purchase Receipt destructive
- `erpnext.purchase_receipt.delete` Delete a Purchase Receipt destructive
- and 5 more in this area

**Sales invoice 11**

- `erpnext.sales_invoice.create` Create a Sales Invoice write
- `erpnext.sales_invoice.get` Get a Sales Invoice read
- `erpnext.sales_invoice.list` List Sales Invoice records read
- `erpnext.sales_invoice.update` Update a Sales Invoice write
- `erpnext.sales_invoice.cancel` Cancel a Sales Invoice destructive
- `erpnext.sales_invoice.delete` Delete a Sales Invoice destructive
- and 5 more in this area

**Document 10**

- `erpnext.document.create` Create a document of any DocType write
- `erpnext.document.get` Get a document of any DocType read
- `erpnext.document.list` List documents of any DocType read
- `erpnext.document.update` Update a document of any DocType write
- `erpnext.document.cancel` Cancel a document of any DocType destructive
- `erpnext.document.copy` Get a copy of a document (API v2) read
- and 4 more in this area

**Supplier quotation 10**

- `erpnext.supplier_quotation.create` Create a Supplier Quotation write
- `erpnext.supplier_quotation.get` Get a Supplier Quotation read
- `erpnext.supplier_quotation.list` List Supplier Quotation records read
- `erpnext.supplier_quotation.map_purchase_invoice` Draft a Purchase Invoice from a Supplier Quotation read
- `erpnext.supplier_quotation.cancel` Cancel a Supplier Quotation destructive
- `erpnext.supplier_quotation.delete` Delete a Supplier Quotation destructive
- and 4 more in this area

**Work order 10**

- `erpnext.work_order.close` Close a work order write
- `erpnext.work_order.create` Create a Work Order write
- `erpnext.work_order.get` Get a Work Order read
- `erpnext.work_order.list` List Work Order records read
- `erpnext.work_order.cancel` Cancel a Work Order destructive
- `erpnext.work_order.delete` Delete a Work Order destructive
- and 4 more in this area

**Bom 9**

- `erpnext.bom.create` Create a BOM write
- `erpnext.bom.get` Get a BOM read
- `erpnext.bom.items` List BOM materials read
- `erpnext.bom.list` List BOM records read
- `erpnext.bom.cancel` Cancel a BOM destructive
- `erpnext.bom.delete` Delete a BOM destructive
- and 3 more in this area

**Job card 9**

- `erpnext.job_card.create` Create a Job Card write
- `erpnext.job_card.get` Get a Job Card read
- `erpnext.job_card.list` List Job Card records read
- `erpnext.job_card.map_material_request` Draft a Material Request from a Job Card read
- `erpnext.job_card.cancel` Cancel a Job Card destructive
- `erpnext.job_card.delete` Delete a Job Card destructive
- and 3 more in this area

**Journal entry 9**

- `erpnext.journal_entry.create` Create a Journal Entry write
- `erpnext.journal_entry.get` Get a Journal Entry read
- `erpnext.journal_entry.list` List Journal Entry records read
- `erpnext.journal_entry.update` Update a Journal Entry write
- `erpnext.journal_entry.cancel` Cancel a Journal Entry destructive
- `erpnext.journal_entry.default_bank_cash_account` Get the default bank or cash account read
- and 3 more in this area

**Lead 9**

- `erpnext.lead.create` Create a Lead write
- `erpnext.lead.get` Get a Lead read
- `erpnext.lead.list` List Lead records read
- `erpnext.lead.update` Update a Lead write
- `erpnext.lead.add_to_prospect` Add a lead to a prospect write
- `erpnext.lead.delete` Delete a Lead destructive
- and 3 more in this area

**Opportunity 9**

- `erpnext.opportunity.create` Create an Opportunity write
- `erpnext.opportunity.get` Get an Opportunity read
- `erpnext.opportunity.list` List Opportunity records read
- `erpnext.opportunity.update` Update an Opportunity write
- `erpnext.opportunity.delete` Delete an Opportunity destructive
- `erpnext.opportunity.map_customer` Draft a Customer from an Opportunity read
- and 3 more in this area

**Purchase invoice 9**

- `erpnext.purchase_invoice.create` Create a Purchase Invoice write
- `erpnext.purchase_invoice.get` Get a Purchase Invoice read
- `erpnext.purchase_invoice.list` List Purchase Invoice records read
- `erpnext.purchase_invoice.update` Update a Purchase Invoice write
- `erpnext.purchase_invoice.cancel` Cancel a Purchase Invoice destructive
- `erpnext.purchase_invoice.delete` Delete a Purchase Invoice destructive
- and 3 more in this area

**Quotation 9**

- `erpnext.quotation.create` Create a Quotation write
- `erpnext.quotation.get` Get a Quotation read
- `erpnext.quotation.list` List Quotation records read
- `erpnext.quotation.update` Update a Quotation write
- `erpnext.quotation.cancel` Cancel a Quotation destructive
- `erpnext.quotation.delete` Delete a Quotation destructive
- and 3 more in this area

**Request for quotation 9**

- `erpnext.request_for_quotation.create` Create a Request for Quotation write
- `erpnext.request_for_quotation.get` Get a Request for Quotation read
- `erpnext.request_for_quotation.list` List Request for Quotation records read
- `erpnext.request_for_quotation.map_supplier_quotation_from_rfq` Draft a Supplier Quotation from a Request for Quotation read
- `erpnext.request_for_quotation.cancel` Cancel a Request for Quotation destructive
- `erpnext.request_for_quotation.delete` Delete a Request for Quotation destructive
- and 3 more in this area

**Asset 8**

- `erpnext.asset.create` Create an Asset write
- `erpnext.asset.get` Get an Asset read
- `erpnext.asset.list` List Asset records read
- `erpnext.asset.update` Update an Asset write
- `erpnext.asset.cancel` Cancel an Asset destructive
- `erpnext.asset.delete` Delete an Asset destructive
- and 2 more in this area

**Issue 8**

- `erpnext.issue.create` Create an Issue write
- `erpnext.issue.get` Get an Issue read
- `erpnext.issue.list` List Issue records read
- `erpnext.issue.update` Update an Issue write
- `erpnext.issue.delete` Delete an Issue destructive
- `erpnext.issue.map_task` Draft a Task from an Issue read
- and 2 more in this area

**Payment request 8**

- `erpnext.payment_request.create` Create a Payment Request write
- `erpnext.payment_request.get` Get a Payment Request read
- `erpnext.payment_request.list` List Payment Request records read
- `erpnext.payment_request.make` Create a payment request write
- `erpnext.payment_request.cancel` Cancel a Payment Request destructive
- `erpnext.payment_request.delete` Delete a Payment Request destructive
- and 2 more in this area

**Pick list 8**

- `erpnext.pick_list.create` Create a Pick List write
- `erpnext.pick_list.get` Get a Pick List read
- `erpnext.pick_list.list` List Pick List records read
- `erpnext.pick_list.map_delivery_note` Draft a Delivery Note from a Pick List read
- `erpnext.pick_list.cancel` Cancel a Pick List destructive
- `erpnext.pick_list.delete` Delete a Pick List destructive
- and 2 more in this area

**POS invoice 8**

- `erpnext.pos_invoice.create` Create a POS Invoice write
- `erpnext.pos_invoice.get` Get a POS Invoice read
- `erpnext.pos_invoice.list` List POS Invoice records read
- `erpnext.pos_invoice.map_sales_return` Draft a POS Invoice (return) from a POS Invoice read
- `erpnext.pos_invoice.cancel` Cancel a POS Invoice destructive
- `erpnext.pos_invoice.delete` Delete a POS Invoice destructive
- and 2 more in this area

**Quality inspection 8**

- `erpnext.quality_inspection.create` Create a Quality Inspection write
- `erpnext.quality_inspection.get` Get a Quality Inspection read
- `erpnext.quality_inspection.list` List Quality Inspection records read
- `erpnext.quality_inspection.map_copy` Draft a Quality Inspection from a Quality Inspection read
- `erpnext.quality_inspection.cancel` Cancel a Quality Inspection destructive
- `erpnext.quality_inspection.delete` Delete a Quality Inspection destructive
- and 2 more in this area

**Stock entry 8**

- `erpnext.stock_entry.create` Create a Stock Entry write
- `erpnext.stock_entry.get` Get a Stock Entry read
- `erpnext.stock_entry.list` List Stock Entry records read
- `erpnext.stock_entry.map_stock_in_entry` Draft a Stock Entry (in-transit receipt) from a Stock Entry read
- `erpnext.stock_entry.cancel` Cancel a Stock Entry destructive
- `erpnext.stock_entry.delete` Delete a Stock Entry destructive
- and 2 more in this area

**Stock reconciliation 8**

- `erpnext.stock_reconciliation.create` Create a Stock Reconciliation write
- `erpnext.stock_reconciliation.get` Get a Stock Reconciliation read
- `erpnext.stock_reconciliation.items` Get items for a stock count read
- `erpnext.stock_reconciliation.list` List Stock Reconciliation records read
- `erpnext.stock_reconciliation.cancel` Cancel a Stock Reconciliation destructive
- `erpnext.stock_reconciliation.delete` Delete a Stock Reconciliation destructive
- and 2 more in this area

**Timesheet 8**

- `erpnext.timesheet.create` Create a Timesheet write
- `erpnext.timesheet.get` Get a Timesheet read
- `erpnext.timesheet.list` List Timesheet records read
- `erpnext.timesheet.update` Update a Timesheet write
- `erpnext.timesheet.cancel` Cancel a Timesheet destructive
- `erpnext.timesheet.delete` Delete a Timesheet destructive
- and 2 more in this area

**User 8**

- `erpnext.user.create` Create a User write
- `erpnext.user.get` Get a User read
- `erpnext.user.list` List User records read
- `erpnext.user.update` Update a User write
- `erpnext.user.all_roles` List all roles read
- `erpnext.user.current_roles` List the API user's roles read
- and 2 more in this area

**Workflow 8**

- `erpnext.workflow.apply` Apply a workflow action write
- `erpnext.workflow.bulk_approve` Apply a workflow action in bulk write
- `erpnext.workflow.create` Create a Workflow write
- `erpnext.workflow.list` List Workflow records read
- `erpnext.workflow.delete` Delete a Workflow destructive
- `erpnext.workflow.get` Get a Workflow read
- and 2 more in this area

Asset movement **7** Bank transaction **7** Budget **7** Comment **7** Customer **7** Dunning **7** Production plan **7** Prospect **7** Shipment **7** Task **7** Address **6** Batch **6** Communication **6** Contact **6** Currency **6** Email template **6** Employee **6** Event **6** Item **6** Note **6** Project **6** Report **6** Warranty claim **6** Account **5** Accounting dimension **5** Activity type **5** Asset category **5** Bank **5** Bank account **5** Branch **5** Brand **5** Campaign **5** Company **5** Cost center **5** Currency exchange **5** Custom field **5** Customer group **5** Department **5** Designation **5** File **5** Fiscal year **5** Holiday list **5** Issue type **5** Item group **5** Item price **5** Item tax template **5** Location **5** Mode of payment **5** Operation **5** Payment terms template **5** Price list **5** Pricing rule **5** Print format **5** Product bundle **5** Purchase taxes and charges template **5** Role **5** Sales partner **5** Sales person **5** Sales taxes and charges template **5** Serial no **5** Subscription **5** Supplier **5** Supplier group **5** Tax category **5** Territory **5** Todo **5** Uom **5** Warehouse **5** Webhook **5** Workstation **5** Accounts **4** Doctype **4** Form **4** Tag **4** Assignment **3** Error log **3** Stock **3** Activity log **2** Bin **2** GL entry **2** Search **2** Stock ledger entry **2** Version **2** Auth **1** Method **1** System **1**

This index shows a sample of each area. All 720 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The ERPNext (Frappe) MCP server, answered.

**Is there an ERPNext (Frappe) MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 720 ERPNext (Frappe) actions across client, sales order, delivery note and material request, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by ERPNext (Frappe).

**What do I need to connect ERPNext (Frappe)?**

API Key of the ERPNext user actionlake acts as (User > Settings > API Access > Generate Keys) and API Secret shown once when the keys are generated. Plus your host. The free call account { op: "connections.requirements", service: "erpnext" } lists exactly what to paste.

**Can an AI agent delete or change things in ERPNext (Frappe)?**

Only if its key allows it, and only with an explicit confirmation. 137 ERPNext (Frappe) actions are destructive, including delete a Sales Invoice, delete a Payment Entry and delete a Contact. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my ERPNext (Frappe) API limit?**

actionlake paces every call to the limits in the ERPNext (Frappe) service file: 300 calls a minute per connection. Repeated reads are answered from cache (320 ERPNext (Frappe) actions can be), which never reaches ERPNext (Frappe).

**What does an ERPNext (Frappe) action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (720 ERPNext (Frappe) actions page). Cache hits, searches, dry runs and calls ERPNext (Frappe) refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which ERPNext (Frappe) API does it cover?**

The Frappe REST API v1 (/api/resource, /api/method) with v2 extras; ERPNext/Frappe version-15 at your ERPNext (Frappe) instance's API base URL, which you enter when connecting. It is built from ERPNext (Frappe)'s documentation as read on 23 October 2026. 720 actions in 116 areas, each one in the signed service file (version 1.0.0).

**Can I combine ERPNext (Frappe) with my other systems?**

Yes. ask joins ERPNext (Frappe) to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. ERPNext (Frappe) maps crm.company, which 227 other connectors also map.

**Does actionlake keep my ERPNext (Frappe) data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your ERPNext (Frappe) credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like ERPNext (Frappe)

Shares the most action names with

- [Unified.to 109](https://actionlake.com/connectors/unified-to)
- [Holded 79](https://actionlake.com/connectors/holded)
- [Exact Online 74](https://actionlake.com/connectors/exact-online)
- [ServiceTitan 65](https://actionlake.com/connectors/servicetitan)
- [Sage Intacct 64](https://actionlake.com/connectors/sage-intacct)
- [Epicor Kinetic 60](https://actionlake.com/connectors/epicor-kinetic)

Joins with, on shared entities

- [HaloPSA 15](https://actionlake.com/connectors/halopsa)
- [Microsoft Dynamics 365 13](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Zoho CRM 13](https://actionlake.com/connectors/zoho-crm)
- [ScalePad 12](https://actionlake.com/connectors/scalepad)
- [Salesforce Sales Cloud 10](https://actionlake.com/connectors/salesforce-sales-cloud)
- [Insightly CRM 10](https://actionlake.com/connectors/insightly-crm)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by ERPNext (Frappe); the name is the vendor's own. Counts are from the ERPNext (Frappe) service file, version 1.0.0.

## Give your agent ERPNext (Frappe) today.

[Connect ERPNext (Frappe) free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/erpnext-frappe
More: https://actionlake.com/llms.txt
