On Page Navigation

Free ERPNext MCP Server For Records Workflows Builder Pages

MountDev is an open source ERPNext MCP server that hands your AI assistant 24 tools for working inside Frappe. Read and write any DocType, submit and cancel documents, move leads through to invoices, and manage Frappe Builder pages, all from an ordinary conversation. It runs on your own infrastructure against your own API keys, so ERPNext permissions still decide what it can touch. There is no license fee.

Cascadia engineer writing WordPress code across dual monitors.

Built for real Frappe work

What makes this ERPNext MCP server different

Plenty of integrations wrap a handful of endpoints and call it coverage. This one takes the opposite approach. Eight of its tools are generic and work against any DocType in your install, including the custom ones you built last week. The rest handle workflows that generic reads and writes cannot express cleanly, like submitting a document or converting a quotation. Six things follow from that design.

How it compares

This connector vs a typical ERPNext integration

Most ERPNext integrations expose a fixed set of endpoints someone decided were important, hosted on infrastructure you do not control. This one inverts both choices. The rows below cover the decisions that tend to matter once an integration meets a real install.

Any doctype vs a fixed endpoint list

Hardcoded integrations cover the doctypes someone anticipated. The generic tools here accept any doctype name, so your custom modules are reachable the moment you create them, with no waiting on a connector release.

Self-hosted vs a vendor middleman

You run this next to your own site and your data never leaves your infrastructure. Hosted integrations put a third party between your assistant and your ledger, which is a compliance conversation you may prefer not to have.

ERPNext permissions vs a second access layer

Access is decided entirely by the role profile of the API user you generate keys against. Integrations that manage their own permission model give you a second thing to audit, and two separate places for a mistake to hide.

Readable source vs a closed binary

Every line is on GitHub, including the error mapping and the transport layer. Closed integrations ask you to trust a feature list with something that can create and cancel financial documents on your behalf.

Builder aware vs generic REST only

Publishing a Builder page correctly means promoting draft blocks, not setting a flag. A generic REST wrapper will happily set the flag and ship stale content, because it has no idea what Builder expects.

Free forever vs seat based pricing

There is no license, no seat count, and no usage meter to reconcile at renewal. Commercial connectors tend to price per user or per call, which quietly penalizes exactly the automation you installed them to do.

Who this is for

Who gets the most out of this

This is a developer tool, and it assumes you already run Frappe or ERPNext somewhere. You do not need a large team to get value from it. One person maintaining a busy install often saves more time than a group that only touches the desk occasionally.

Getting started

Three steps to a working connector

Three steps, and only the first takes any real time. Clone the project and install its dependencies, add your ERPNext URL and API keys, then point your assistant at it. After that the tools are simply there when you want them.

1

Clone the project and install it

Pull the repository from GitHub and run uv sync to install dependencies. You will need Python 3.12 or newer and the uv package manager on whichever machine hosts it. Copy the example environment file to create your own, which is where every setting lives from that point forward. Nothing else needs installing.

2

Add your ERPNext URL and keys

Generate an API key and secret in ERPNext under Administrator, then API Access, then Generate Keys. Put them in your environment file alongside your site URL. Generate them against a user whose role profile matches the reach you actually want, because ERPNext permissions are the only thing deciding what the connector can see or change.

3

Point your assistant at it

For a single machine, add a stdio entry to your Claude Desktop config and it will launch the connector for you. For anything shared, start it in HTTP mode and put it behind the MCP Router with an auth token set. Either way the same 24 tools appear, and you can start asking for work straight away.

What it costs to run

Pricing

Open Source

Free Forever

Free
/no license, no seat cost
Self-hosted, source on GitHub

DETAILS

The connector is free to download and run, with all 24 tools available from the start. There is no paid tier, no seat count, and nothing metered. You supply the machine it runs on and the ERPNext API keys it uses. If you would rather we set it up and maintain it for you, that is a separate managed service.

Testimonials

Here's what others had to say

All 24 tools

Every tool, grouped by what it touches

This is the icon that represents WordPress updates.Cascadia Web Services logo

List DocTypes

Pull the full list of DocType names in your instance, optionally narrowed to one module, so an assistant can discover what your site actually contains before it changes anything.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Get DocType Schema

Return every field definition for a DocType, including field type, required flag, and allowed values, so records get created with the right fields on the first attempt.
This is the icon that represents WordPress updates.Cascadia Web Services logo

List Records

Search any DocType with filters, field selection, sorting, and a result limit. The full Frappe operator set is supported, including like, in, and is set.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Get Record

Fetch a single document by name and return every field on it. This is the fastest way to inspect one record without pulling an entire list.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Create Record

Create a new document in any DocType from a plain field and value payload, then get the assigned primary key back in the response for immediate reuse.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Update Record

Change only the fields you name on an existing document. Anything you leave out stays exactly as it was, so partial updates never clear data by accident.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Delete Record

Permanently remove a document by DocType and name. The deletion is governed by the same ERPNext permissions your API user already carries.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Run Method

Call any whitelisted Frappe or ERPNext method directly. This covers the operations that do not map cleanly onto ordinary record reads and writes.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Submit Document

Move a draft to submitted, setting docstatus to 1 and applying its financial and stock effects exactly the way the desk interface would.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Cancel Document

Cancel a submitted document, setting docstatus to 2 and reversing its impact, without leaving a half reversed record behind in your ledger.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Convert Lead to Customer

Turn a qualified Lead into a Customer record in a single call, keeping the linked contact and address data intact rather than rebuilding it by hand.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Create Opportunity from Lead

Spin an Opportunity out of an existing Lead so the deal enters your pipeline with its source already attributed and nothing retyped.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Create Quotation from Lead

Prepare or create a Quotation straight from a Lead, removing the manual re-entry step that normally sits between interest and a priced document.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Quotation to Sales Order

Convert a submitted Quotation into a Sales Order, carrying line items and pricing across intact so nothing is transcribed a second time.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Quotation to Sales Invoice

Convert a submitted Quotation directly into a Sales Invoice for the cases where the work does not need an intermediate sales order at all.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Mark Quotation Lost

Close out a Quotation as Lost with a reason and an optional competitor, so your win rate reporting stays honest instead of quietly inflating.
This is the icon that represents WordPress updates.Cascadia Web Services logo

List Builder Pages

List every Frappe Builder page, filtered by published status or by project folder, with route and title returned for each one.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Get Builder Page

Return a page's full document including the block JSON, route, title, and meta description. This is where any serious content audit begins.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Publish Builder Page

Promote a page's draft blocks to live and set it published, using Builder's own publish path rather than flipping a flag and shipping stale content.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Unpublish Builder Page

Take a page offline by clearing its published state, leaving all of the content intact so you can bring it back later without rebuilding.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Duplicate Builder Page

Copy an existing page into a new unpublished draft. This is how you start a new page without hand authoring any block structure.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Get Builder Page HTML

Return the rendered HTML of a published page, which is what you want when you need to read exactly what a visitor sees rather than the block tree.
This is the icon that represents WordPress updates.Cascadia Web Services logo

Generate Page from Prompt

Build or update a page through Builder's own AI generator from a text description, using whichever model you configured in Builder Settings.
This is the icon that represents WordPress updates.Cascadia Web Services logo

List Builder Components

List the reusable saved block groups in your Builder install, so a generated page can reference the components you already maintain.

Questions we get asked about this connector

Frequently asked questions
What is the MountDev Frappe MCP connector?
It is a free, open source MCP server that connects an AI assistant to your ERPNext or Frappe instance. It exposes 24 tools covering generic record operations on any DocType, document submit and cancel, CRM and selling workflows, and Frappe Builder page management. You run it yourself against your own site, and it authenticates outbound using an ERPNext API key and secret that you generate.
Is the connector really free?
Yes. There is no license fee, no seat cost, and no paid tier waiting behind a feature wall. The source lives on GitHub and you are free to run it, read it, and modify it. The only costs involved are your own hosting and whatever you already pay for ERPNext and your AI assistant. We build and maintain it because we use it daily across our own client work.
What do I need to run it?
You need Python 3.12 or newer, the uv package manager, and a running ERPNext instance with an API key and secret. That is the whole list. If you plan to run it in HTTP mode behind a router you will also want a way to serve it over HTTPS, and Docker if you prefer the container path rather than running the process directly.
How do I generate an ERPNext API key?
In your ERPNext desk, go to Administrator, then API Access, then Generate Keys. That produces the key and secret pair you place in the connector's environment file as ERPNEXT_API_KEY and ERPNEXT_API_SECRET. Generate the keys against a user whose permissions match what you actually want the connector to reach, because that user's role permissions decide what it can read and write.
How many tools does the connector expose?
Twenty four, in five groups. Eight generic CRUD tools work against any DocType. Two handle document lifecycle through submit and cancel. Three cover CRM workflows around leads. Three cover selling workflows around quotations. Eight handle Frappe Builder, including listing, publishing, duplicating, and generating pages. Because the CRUD tools are generic, the practical reach is far wider than twenty four named operations.
Can I connect it directly to Claude Desktop?
Yes. Run it in stdio mode and add an entry to your Claude Desktop config file pointing at the project directory, with your ERPNext URL, key, and secret supplied as environment variables. On Windows that config sits in the Claude application data folder, and on macOS it lives under Application Support. No router or intermediate service is required for that setup.
What is the difference between stdio and HTTP mode?
Stdio mode runs the connector as a local subprocess that Claude Desktop launches and talks to directly, which suits a single machine. HTTP mode runs it as a long lived service on a port, which is what you want when it sits behind the MCP Router or serves more than one client. You pick the mode with a command line flag or the TRANSPORT setting.
Do I need the MCP Router to use it?
No. The connector is designed to run as a downstream server behind the MountDev MCP Router, but it works standalone against Claude Desktop with no router involved. The router becomes useful when you want one endpoint fronting several connectors, shared authentication, and central configuration. For a single ERPNext site and a single user, running standalone is simpler and fully supported.
How do I secure a publicly reachable connector?
Set CONNECTOR_AUTH_TOKEN to a random secret and store the same value in the router's Auth Token field. The router then sends it as a bearer token on every connection, and the connector rejects anything arriving without it. Generate the token with a secrets library rather than inventing one by hand. For localhost development you can leave it blank, and on a private network it is optional hardening.
What controls what the connector can read and write?
ERPNext's own permission system. The connector authenticates outbound with the API key and secret you supply, so it inherits exactly the roles and permissions of that user and nothing more. If you want to limit its reach, create a dedicated API user with a narrow role profile and generate keys against that account. The connector does not add a second permission layer of its own.
Can it work with a local instance using a self-signed certificate?
Yes. Set ERPNEXT_VERIFY_SSL to false and the connector will skip certificate verification, which is what you want for local development against a site running on something like erpnext.localhost. Leave it set to true for any real deployment. Turning verification off on a production connection would expose your API key and secret to anyone able to intercept that traffic.
Does it support Frappe Builder?
Yes, with eight dedicated tools. You can list pages filtered by published status or project folder, fetch a page including its block JSON, publish a draft to live, take a page offline, duplicate an existing page, read rendered HTML, list reusable components, and generate a page from a text prompt through Builder's own AI generator.
How do filters work when searching records?
Filters are passed as a list of conditions, each written as doctype, fieldname, operator, and value. The supported operators cover equality and inequality, the numeric comparisons, like and not like for partial matches, in and not in for sets, and is set and is not set for presence checks. You can combine several conditions in a single query.
Can I run it with Docker?
Yes, and that is the recommended path for production. A compose file ships with the project, and your environment file is the single source of truth for configuration. Bring it up with docker compose and it listens in HTTP mode. Set your auth token in the environment file rather than passing it on the command line, so it is not left sitting in shell history.
How do I test it without a live ERPNext instance?
The project ships unit tests that run fully mocked, covering the ERPNext client and the transport layer, so you can verify a checkout without any server running at all. The wider suite does need a live instance to exercise the CRUD, Builder, CRM, and selling tools against real records. There is also an interactive tool explorer for poking at individual tools by hand.
​Contact

Ask Us Anything

We’d love to hear from you!