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
Sales Skills
Purchase Skills
Inventory Skills
| Skill | Description | Category |
|---|
create_item | Create new item in inventory | inventory |
stock_entry | Record stock movements | inventory |
Project Skills
Financial Skills
Utility Skills
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
- Create a JSON file in
definitions/
- Define triggers, tools, input schema, and workflow
- 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