Initial commit: MCP Hub Community Edition v3.0.0
Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
226
plugins/woocommerce/plugin.py
Normal file
226
plugins/woocommerce/plugin.py
Normal file
@@ -0,0 +1,226 @@
|
||||
"""
|
||||
WooCommerce Plugin - E-commerce Management
|
||||
|
||||
Split from WordPress Core in Phase D.1.
|
||||
Provides 28 tools for WooCommerce store management.
|
||||
|
||||
Uses shared WordPress handlers for implementation.
|
||||
"""
|
||||
|
||||
from typing import Any
|
||||
|
||||
from plugins.base import BasePlugin
|
||||
from plugins.wordpress.client import WordPressClient
|
||||
from plugins.wordpress.handlers import (
|
||||
CouponsHandler,
|
||||
CustomersHandler,
|
||||
OrdersHandler,
|
||||
ProductsHandler,
|
||||
ReportsHandler,
|
||||
get_coupons_specs,
|
||||
get_customers_specs,
|
||||
get_orders_specs,
|
||||
get_products_specs,
|
||||
get_reports_specs,
|
||||
)
|
||||
|
||||
class WooCommercePlugin(BasePlugin):
|
||||
"""
|
||||
WooCommerce E-commerce Plugin.
|
||||
|
||||
Provides comprehensive WooCommerce management capabilities:
|
||||
- Products (12 tools): CRUD, categories, tags, attributes, variations
|
||||
- Orders (5 tools): list, get, create, update_status, delete
|
||||
- Customers (4 tools): list, get, create, update
|
||||
- Coupons (4 tools): list, create, update, delete
|
||||
- Reports (3 tools): sales, top_sellers, customer_report
|
||||
|
||||
Total: 28 tools
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_plugin_name() -> str:
|
||||
"""Return plugin type identifier"""
|
||||
return "woocommerce"
|
||||
|
||||
@staticmethod
|
||||
def get_required_config_keys() -> list[str]:
|
||||
"""Return required configuration keys"""
|
||||
return ["url", "username", "app_password"]
|
||||
|
||||
def __init__(self, config: dict[str, Any], project_id: str | None = None):
|
||||
"""
|
||||
Initialize WooCommerce plugin with handlers.
|
||||
|
||||
Args:
|
||||
config: Configuration dictionary containing:
|
||||
- url: WordPress site URL
|
||||
- username: WordPress username
|
||||
- app_password: WordPress application password
|
||||
project_id: Optional project ID (auto-generated if not provided)
|
||||
"""
|
||||
super().__init__(config, project_id=project_id)
|
||||
|
||||
# Create WordPress API client (WooCommerce uses WordPress REST API)
|
||||
self.client = WordPressClient(
|
||||
site_url=config["url"], username=config["username"], app_password=config["app_password"]
|
||||
)
|
||||
|
||||
# Initialize WooCommerce handlers
|
||||
self.products = ProductsHandler(self.client)
|
||||
self.orders = OrdersHandler(self.client)
|
||||
self.customers = CustomersHandler(self.client)
|
||||
self.coupons = CouponsHandler(self.client)
|
||||
self.reports = ReportsHandler(self.client)
|
||||
|
||||
@staticmethod
|
||||
def get_tool_specifications() -> list[dict[str, Any]]:
|
||||
"""
|
||||
Return all tool specifications for ToolGenerator.
|
||||
|
||||
This method is called by ToolGenerator to create unified tools
|
||||
with site parameter routing.
|
||||
|
||||
Returns:
|
||||
List of tool specification dictionaries (28 tools)
|
||||
"""
|
||||
specs = []
|
||||
|
||||
# Products (12 tools)
|
||||
specs.extend(get_products_specs())
|
||||
|
||||
# Orders (5 tools)
|
||||
specs.extend(get_orders_specs())
|
||||
|
||||
# Customers (4 tools)
|
||||
specs.extend(get_customers_specs())
|
||||
|
||||
# Coupons (4 tools)
|
||||
specs.extend(get_coupons_specs())
|
||||
|
||||
# Reports (3 tools)
|
||||
specs.extend(get_reports_specs())
|
||||
|
||||
return specs
|
||||
|
||||
async def health_check(self) -> dict[str, Any]:
|
||||
"""
|
||||
Check WooCommerce availability and health.
|
||||
|
||||
Returns:
|
||||
Dict with health status and WooCommerce version
|
||||
"""
|
||||
try:
|
||||
wc_status = await self.client.check_woocommerce()
|
||||
if wc_status.get("available"):
|
||||
return {
|
||||
"healthy": True,
|
||||
"message": "WooCommerce is available",
|
||||
"version": wc_status.get("version", "unknown"),
|
||||
"plugin_type": "woocommerce",
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"healthy": False,
|
||||
"message": "WooCommerce is not available on this site",
|
||||
"plugin_type": "woocommerce",
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"healthy": False,
|
||||
"message": f"Health check failed: {str(e)}",
|
||||
"plugin_type": "woocommerce",
|
||||
}
|
||||
|
||||
# ========================================
|
||||
# Method Delegation to Handlers
|
||||
# ========================================
|
||||
|
||||
# === Products ===
|
||||
async def list_products(self, **kwargs):
|
||||
return await self.products.list_products(**kwargs)
|
||||
|
||||
async def get_product(self, **kwargs):
|
||||
return await self.products.get_product(**kwargs)
|
||||
|
||||
async def create_product(self, **kwargs):
|
||||
return await self.products.create_product(**kwargs)
|
||||
|
||||
async def update_product(self, **kwargs):
|
||||
return await self.products.update_product(**kwargs)
|
||||
|
||||
async def delete_product(self, **kwargs):
|
||||
return await self.products.delete_product(**kwargs)
|
||||
|
||||
async def list_product_categories(self, **kwargs):
|
||||
return await self.products.list_product_categories(**kwargs)
|
||||
|
||||
async def create_product_category(self, **kwargs):
|
||||
return await self.products.create_product_category(**kwargs)
|
||||
|
||||
async def list_product_tags(self, **kwargs):
|
||||
return await self.products.list_product_tags(**kwargs)
|
||||
|
||||
async def list_product_attributes(self, **kwargs):
|
||||
return await self.products.list_product_attributes(**kwargs)
|
||||
|
||||
async def create_product_attribute(self, **kwargs):
|
||||
return await self.products.create_product_attribute(**kwargs)
|
||||
|
||||
async def list_product_variations(self, **kwargs):
|
||||
return await self.products.list_product_variations(**kwargs)
|
||||
|
||||
async def create_product_variation(self, **kwargs):
|
||||
return await self.products.create_product_variation(**kwargs)
|
||||
|
||||
# === Orders ===
|
||||
async def list_orders(self, **kwargs):
|
||||
return await self.orders.list_orders(**kwargs)
|
||||
|
||||
async def get_order(self, **kwargs):
|
||||
return await self.orders.get_order(**kwargs)
|
||||
|
||||
async def create_order(self, **kwargs):
|
||||
return await self.orders.create_order(**kwargs)
|
||||
|
||||
async def update_order_status(self, **kwargs):
|
||||
return await self.orders.update_order_status(**kwargs)
|
||||
|
||||
async def delete_order(self, **kwargs):
|
||||
return await self.orders.delete_order(**kwargs)
|
||||
|
||||
# === Customers ===
|
||||
async def list_customers(self, **kwargs):
|
||||
return await self.customers.list_customers(**kwargs)
|
||||
|
||||
async def get_customer(self, **kwargs):
|
||||
return await self.customers.get_customer(**kwargs)
|
||||
|
||||
async def create_customer(self, **kwargs):
|
||||
return await self.customers.create_customer(**kwargs)
|
||||
|
||||
async def update_customer(self, **kwargs):
|
||||
return await self.customers.update_customer(**kwargs)
|
||||
|
||||
# === Coupons ===
|
||||
async def list_coupons(self, **kwargs):
|
||||
return await self.coupons.list_coupons(**kwargs)
|
||||
|
||||
async def create_coupon(self, **kwargs):
|
||||
return await self.coupons.create_coupon(**kwargs)
|
||||
|
||||
async def update_coupon(self, **kwargs):
|
||||
return await self.coupons.update_coupon(**kwargs)
|
||||
|
||||
async def delete_coupon(self, **kwargs):
|
||||
return await self.coupons.delete_coupon(**kwargs)
|
||||
|
||||
# === Reports ===
|
||||
async def get_sales_report(self, **kwargs):
|
||||
return await self.reports.get_sales_report(**kwargs)
|
||||
|
||||
async def get_top_sellers(self, **kwargs):
|
||||
return await self.reports.get_top_sellers(**kwargs)
|
||||
|
||||
async def get_customer_report(self, **kwargs):
|
||||
return await self.reports.get_customer_report(**kwargs)
|
||||
Reference in New Issue
Block a user