Skip to main content
Glama
README.md
# ERPNext MCP Server

Model Context Protocol (MCP) server for ERPNext/Frappe REST API

This is a TypeScript-based MCP server that lets AI assistants interact with an ERPNext/Frappe instance via MCP tools and resources.

## Features

### Resources
- Read any ERPNext document via `erpnext://{doctype}/{name}`
- List available DocTypes via `erpnext://DocTypes`

### Tools
- `get_doctypes` - Get a list of all available DocTypes
- `get_doctype_fields` - Get a best-effort field list for a DocType (derived from a sample record)
- `get_documents` - Get a list of documents for a specific doctype
- `create_document` - Create a new document in ERPNext
- `update_document` - Update an existing document in ERPNext
- `run_report` - Run an ERPNext report

## Configuration

The server requires the following environment variables:
- `ERPNEXT_URL` - The base URL of your ERPNext instance
- `ERPNEXT_API_KEY` - API key for authentication
- `ERPNEXT_API_SECRET` - API secret for authentication

Note: This server currently expects API token auth. Username/password auth is not implemented.

## Development

Install dependencies:
```bash
npm install
```

Build the server:
```bash
npm run build
```

For development with auto-rebuild:
```bash
npm run watch
```

## Installation

To use with Claude Desktop, add the server config:

On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "erpnext": {
      "command": "node",
      "args": ["/path/to/erpnext-mcp-server/build/index.js"],
      "env": {
        "ERPNEXT_URL": "http://your-erpnext-instance.com",
        "ERPNEXT_API_KEY": "your-api-key",
        "ERPNEXT_API_SECRET": "your-api-secret"
      }
    }
  }
}
```

To use with Claude in VSCode, add the server config to:

On MacOS: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
On Windows: `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`

### Debugging

Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector), which is available as a package script:

```bash
npm run inspector
```

The Inspector will provide a URL to access debugging tools in your browser.

## Usage Examples

### Get Customer List
```
<use_mcp_tool>
<server_name>erpnext</server_name>
<tool_name>get_documents</tool_name>
<arguments>
{
  "doctype": "Customer"
}
</arguments>
</use_mcp_tool>
```

### Get Customer Details
```
<access_mcp_resource>
<server_name>erpnext</server_name>
<uri>erpnext://Customer/CUSTOMER001</uri>
</access_mcp_resource>
```

### Create New Item
```
<use_mcp_tool>
<server_name>erpnext</server_name>
<tool_name>create_document</tool_name>
<arguments>
{
  "doctype": "Item",
  "data": {
    "item_code": "ITEM001",
    "item_name": "Test Item",
    "item_group": "Products",
    "stock_uom": "Nos"
  }
}
</arguments>
</use_mcp_tool>
```

### Get Item Fields
```
<use_mcp_tool>
<server_name>erpnext</server_name>
<tool_name>get_doctype_fields</tool_name>
<arguments>
{
  "doctype": "Item"
}
</arguments>
</use_mcp_tool>

TDQS

B3.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create_document and update_document handle document lifecycle operations, get_doctypes and get_doctype_fields provide metadata, get_documents retrieves document lists, and run_report executes reports. The descriptions reinforce these distinct roles, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as create_document, get_doctypes, and update_document. This predictability makes the tool set easy to navigate and understand, with no deviations in naming style.

Tool Count5/5

With 6 tools, the server is well-scoped for ERPNext operations, covering core document management, metadata access, and reporting. Each tool serves a specific function without redundancy, making the count appropriate for the domain's typical needs.

Completeness4/5

The tool set provides strong coverage for document CRUD (create, get, update) and metadata access, with run_report adding reporting functionality. A minor gap exists in document deletion, which could limit full lifecycle management, but agents can likely work around this omission.

Maintenance

ActivityInactive
ResponsivenessNo issues