SkillHub

erpnext-frappe

v1.0.0

ERPNext预定义业务工作流,整合多MCP工具,覆盖CRM、销售、采购、库存、项目、支付及通用任务。

Sourced from ClawHub, Authored by Pathurjan Wijeyasekara

Installation

Please help me install the skill `erpnext-frappe` from SkillHub official store. npx skills add Ravana-indus/erpnext-frappe

Business Claw Skills

High-level business workflows that combine multiple MCP tools into reusable, executable skills for ERPNext.

Overview

Skills are pre-defined workflows stored as JSON files in definitions/. Each skill defines: - Triggers: Natural language patterns that activate the skill - Tools: MCP tools to execute in sequence - Input Schema: Required and optional parameters - Workflow Steps: Ordered execution plan with variable substitution - Guardrails: Validation rules for safe execution - Output Template: Formatted response message

Available Skills

CRM Skills

Skill Description Category
create_customer Create a new customer with contact and address crm
create_lead Register a new lead crm
create_supplier Add a new supplier crm

Sales Skills

Skill Description Category
create_sales_order Create a sales order sales
create_quotation Create a quotation sales
create_invoice Generate sales invoice sales
complete_sales_workflow Full Quotation → SO → Invoice → Payment sales

Purchase Skills

Skill Description Category
create_purchase_order Create a purchase order purchase

Inventory Skills

Skill Description Category
create_item Create new item in inventory inventory
stock_entry Record stock movements inventory

Project Skills

Skill Description Category
create_project Create a new project project

Financial Skills

Skill Description Category
process_payment Record payment entry payments

Utility Skills

Skill Description Category
search_records Search across DocTypes utility
bulk_operation Bulk create/update/delete utility
generic_task Flexible multi-step workflow utility

Usage

Loading Skills

from bc_skills import get_available_skills, load_skill

# List all available skills
skills = get_available_skills()
print(skills)  # ['create_customer', 'create_sales_order', ...]

# Load a specific skill
skill = load_skill("create_customer")

Executing Skills

from bc_skills.loader import execute_skill

result = execute_skill(
    name="create_customer",
    context={
        "customer_name": "ACME Corp",
        "customer_type": "Company",
        "customer_group": "Commercial",
        "email": "[email protected]"
    },
    user="Administrator"
)

print(result)

Trigger Examples

Skills respond to natural language triggers:

Trigger Phrase Skill
"create customer" create_customer
"add customer" create_customer
"new customer" create_customer
"complete sales workflow" complete_sales_workflow
"full sales process" complete_sales_workflow
"process order to payment" complete_sales_workflow
"create sales order" create_sales_order
"generate invoice" create_invoice

Skill Definition Schema

{
  "name": "skill_name",
  "version": "1.0.0",
  "description": "What the skill does",
  "author": "Business Claw Team",
  "category": "crm|sales|purchase|inventory|project|payments|utility",

  "triggers": [
    "trigger phrase 1",
    "trigger phrase 2"
  ],

  "tools": [
    {
      "name": "tool_name",
      "description": "What it does",
      "required": true
    }
  ],

  "input_schema": {
    "type": "object",
    "properties": {
      "param_name": {
        "type": "string",
        "description": "Parameter description",
        "enum": ["option1", "option2"]
      }
    },
    "required": ["required_param"]
  },

  "workflow": {
    "steps": [
      {
        "step": "step_name",
        "tool": "tool_to_call",
        "arguments": {
          "doctype": "DocType",
          "data": {
            "field": "${variable}"
          }
        }
      }
    ]
  },

  "guardrails": {
    "rule_name": true
  },

  "output_template": "Formatted output {{variable}}"
}

Variable Substitution

Workflow steps support ${variable} substitution from execution context:

{
  "step": "create_order",
  "tool": "create_document",
  "arguments": {
    "doctype": "Sales Order",
    "data": {
      "customer": "${customer_id}",
      "items": "${items}"
    }
  }
}

Creating Custom Skills

  1. Create a JSON file in definitions/
  2. Define triggers, tools, input schema, and workflow
  3. Use the SkillLoader to load and execute

Example custom skill structure:

{
  "name": "my_custom_skill",
  "version": "1.0.0",
  "description": "My custom workflow",
  "category": "utility",
  "triggers": ["my trigger"],
  "tools": [
    {"name": "get_doctype_meta", "required": true},
    {"name": "create_document", "required": true}
  ],
  "input_schema": {
    "type": "object",
    "properties": {
      "param1": {"type": "string"}
    },
    "required": ["param1"]
  },
  "workflow": {
    "steps": [
      {
        "step": "step1",
        "tool": "get_doctype_meta",
        "arguments": {"doctype": "Item"}
      }
    ]
  },
  "output_template": "Result: {{result}}"
}

Architecture

  • loader.py - SkillLoader class manages skill loading and execution
  • definitions/ - JSON files containing skill definitions
  • Skills use the ToolRouter to execute MCP tools in sequence
  • Guardrails provide validation before skill execution

Requirements

  • Frappe/ERPNext environment
  • bc_mcp module for tool routing
  • JSON or YAML skill definitions

License

MIT