🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Frappe MCP

by @ravana-indus

Pre-defined business workflows combining multiple MCP tools for CRM, sales, purchase, inventory, project, payments, and utility tasks in ERPNext.

Versionv1.0.0
Downloads1,185
Installs1
TERMINAL
clawhub install erpnext-frappe

πŸ“– About This Skill

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": "contact@acme.com" }, 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

    πŸ’‘ Examples

    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": "contact@acme.com" }, 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 |