Metadata-Version: 2.4
Name: frappe-mcp-server
Version: 1.2.0
Summary: MCP server for Frappe Framework — interact with Frappe sites via Claude, Copilot, and other MCP clients
License: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: mcp<2.0.0,>=1.0.0
Requires-Dist: httpx<1.0.0,>=0.27.0
Dynamic: license-file

# Frappe MCP Server

[![PyPI](https://img.shields.io/pypi/v/frappe-mcp-server.svg?logo=pypi&logoColor=white)](https://pypi.org/project/frappe-mcp-server/)
[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg?logo=python&logoColor=white)](https://pypi.org/project/frappe-mcp-server/)
[![Docker Hub](https://img.shields.io/docker/v/muthanii/frappe-mcp?sort=semver&logo=docker&logoColor=white&label=docker%20hub)](https://hub.docker.com/r/muthanii/frappe-mcp)
[![Docker pulls](https://img.shields.io/docker/pulls/muthanii/frappe-mcp.svg?logo=docker&logoColor=white)](https://hub.docker.com/r/muthanii/frappe-mcp)
[![GHCR](https://img.shields.io/badge/ghcr.io-frappe--mcp-181717?logo=github&logoColor=white)](https://github.com/muthanii/frappe_mcp/pkgs/container/frappe-mcp)
[![MCP Registry](https://img.shields.io/badge/MCP%20registry-io.github.muthanii%2Ffrappe__mcp-6E56CF)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.muthanii/frappe_mcp)
[![License](https://img.shields.io/github/license/muthanii/frappe_mcp.svg)](LICENSE)

[![frappe_mcp MCP server](https://glama.ai/mcp/servers/muthanii/frappe_mcp/badges/score.svg)](https://glama.ai/mcp/servers/muthanii/frappe_mcp)

```
mcp-name: io.github.muthanii/frappe_mcp
```

A **Model Context Protocol (MCP) server** for [Frappe Framework](https://frappeframework.com).
Connect Claude Desktop, VS Code Copilot, and other MCP clients to any Frappe/ERPNext site
via its REST API.

## Where to get it

| Distribution | Reference | Page |
|---|---|---|
| **PyPI** | `frappe-mcp-server` | [pypi.org/project/frappe-mcp-server](https://pypi.org/project/frappe-mcp-server/) |
| **Docker Hub** | `muthanii/frappe-mcp` | [hub.docker.com/r/muthanii/frappe-mcp](https://hub.docker.com/r/muthanii/frappe-mcp) |
| **GitHub Container Registry** | `ghcr.io/muthanii/frappe-mcp` | [ghcr package](https://github.com/muthanii/frappe_mcp/pkgs/container/frappe-mcp) |
| **MCP Registry** | `io.github.muthanii/frappe_mcp` | [registry API](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.muthanii/frappe_mcp) |
| **Glama** | — | [glama.ai/mcp/servers/muthanii/frappe_mcp](https://glama.ai/mcp/servers/muthanii/frappe_mcp) |
| **Source** | — | [github.com/muthanii/frappe_mcp](https://github.com/muthanii/frappe_mcp) |

## Features

- **Document CRUD** — get, create, update, delete Frappe doctypes
- **Search** — full-text and filtered document search
- **Remote method calls** — invoke any server-side Python method
- **Authentication** — API key + secret (token-based auth)
- **Docker-first** — single `docker run` command, no Python install needed

## Quick start

**With `uvx` (no install):**

```bash
FRAPPE_URL=https://your-site.com \
FRAPPE_API_KEY=your-api-key \
FRAPPE_API_SECRET=your-api-secret \
  uvx frappe-mcp-server
```

**With `pip`:**

```bash
pip install frappe-mcp-server
frappe-mcp-server
```

**With Docker (Docker Hub):**

```bash
docker run -i --rm \
  -e FRAPPE_URL=https://your-site.com \
  -e FRAPPE_API_KEY=your-api-key \
  -e FRAPPE_API_SECRET=your-api-secret \
  muthanii/frappe-mcp
```

**With Docker (GHCR):**

```bash
docker run -i --rm \
  -e FRAPPE_URL=https://your-site.com \
  -e FRAPPE_API_KEY=your-api-key \
  -e FRAPPE_API_SECRET=your-api-secret \
  ghcr.io/muthanii/frappe-mcp
```

## Available tools

Every tool ships MCP [tool annotations](https://modelcontextprotocol.io/specification/server/tools) and a declared `outputSchema`, so a client can tell read tools from destructive ones before calling them.

| Tool | Description | Access | Destructive | Idempotent |
|------|-------------|--------|-------------|------------|
| `frappe_ping` | Check connectivity and credentials | read-only | no | yes |
| `frappe_get_doc` | Retrieve a single document by doctype + name | read-only | no | yes |
| `frappe_search_docs` | Search/list documents with filters | read-only | no | yes |
| `frappe_create_doc` | Create a new document | write | no | no |
| `frappe_update_doc` | Update an existing document | write | yes | yes |
| `frappe_delete_doc` | Delete a document — irreversible | write | yes | no |
| `frappe_run_method` | Call a whitelisted server-side method | write | yes | no |

`frappe_run_method` is marked destructive because its effect is determined entirely by the method you name.

## Configuration

| Environment variable | Required | Description |
|----------------------|----------|-------------|
| `FRAPPE_URL` | Yes | Base URL of your Frappe site (e.g. `https://erp.example.com`) |
| `FRAPPE_API_KEY` | Yes | Frappe API key |
| `FRAPPE_API_SECRET` | Yes | Frappe API secret |
| `FRAPPE_VERIFY_SSL` | No | Set to `false` to skip TLS verification (default: `true`) |
| `FRAPPE_TIMEOUT` | No | Request timeout in seconds (default: `30`) |

## MCP client config

Add this to your `claude_desktop_config.json` or Copilot config.

**Via `uvx`:**

```json
{
  "mcpServers": {
    "frappe": {
      "command": "uvx",
      "args": ["frappe-mcp-server"],
      "env": {
        "FRAPPE_URL": "https://your-site.com",
        "FRAPPE_API_KEY": "your-api-key",
        "FRAPPE_API_SECRET": "your-api-secret"
      }
    }
  }
}
```

**Via Docker:**

```json
{
  "mcpServers": {
    "frappe": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "FRAPPE_URL",
        "-e", "FRAPPE_API_KEY",
        "-e", "FRAPPE_API_SECRET",
        "muthanii/frappe-mcp"
      ],
      "env": {
        "FRAPPE_URL": "https://your-site.com",
        "FRAPPE_API_KEY": "your-api-key",
        "FRAPPE_API_SECRET": "your-api-secret"
      }
    }
  }
}
```

## Local development

```bash
pip install -e .
frappe-mcp
```

## License

MIT — see [LICENSE](LICENSE).

---

[![frappe_mcp MCP server](https://glama.ai/mcp/servers/muthanii/frappe_mcp/badges/card.svg)](https://glama.ai/mcp/servers/muthanii/frappe_mcp)
